From bedad1555fb105fb80e9e4f8ddfdae0ba95a9ca5 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 3 Sep 2024 17:24:24 -0400 Subject: [PATCH 01/61] Initial skeleton for miyagi-v2 --- docs/index.md | 10 +---- docs/wksp2/00-ai-studio/index.md | 14 ++++++ .../extend-copilot-ai-doc-intel.md | 1 + .../hands-on-ai-orchestration.md | 1 + docs/wksp2/01-semantic-kernel/pre-reqs.md | 26 +++++++++++ docs/wksp2/index.md | 5 +++ mkdocs.yml | 44 ++++--------------- 7 files changed, 57 insertions(+), 44 deletions(-) create mode 100644 docs/wksp2/00-ai-studio/index.md create mode 100644 docs/wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md create mode 100644 docs/wksp2/01-semantic-kernel/hands-on-ai-orchestration.md create mode 100644 docs/wksp2/01-semantic-kernel/pre-reqs.md create mode 100644 docs/wksp2/index.md diff --git a/docs/index.md b/docs/index.md index ad72384..fcbe7e8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -14,8 +14,7 @@ Inspired by Github Copilot's impact on developer productivity, this experiential In this comprehensive workshop, you will: - Utilize Azure AI Studio for reasoning engines, Prompt Flow for LLMOps, AI Search for semantic retrieval systems, and Semantic Kernel for orchestration. -- Work with [Miyagi](https://github.com/Azure-Samples/miyagi) codebase during the hands-on experiential workshop -- Explore advanced capabilities such as AutoGen and GraphRag +- Explore advanced capabilities such as AutoGen ## Topics for the Workshop @@ -25,18 +24,13 @@ In this comprehensive workshop, you will: Please sign up for [Azure OpenAI (AOAI)](https://aka.ms/oai/access) and complete the [Getting Started with AOAI module](https://learn.microsoft.com/en-us/training/modules/get-started-openai/) to get the most out of this workshop. 1. **Brief Overview of Gen AI Capabilities and Use Cases**: Explore the art of the possible with multi-agent and advanced retrieval systems using samples like [Miyagi](https://github.com/Azure-Samples/miyagi) and [Holmes](https://github.com/Azure-Samples/holmes). Engage in interactive demonstrations to envision potential applications with reasoning engines and semantic memory systems. -1. **Design Thinking Session (Optional)**: Participate in a collaborative brainstorming activity to identify your unique use cases, focusing on addressing user needs and alleviating pain points, ensuring the workshop is relevant to you. 1. **AI Studio and Prompt Flow**: Quickly get started with your own copilot, grounded by your proprietary data in AI Search using our AI Studio experience. Customize it with Prompt Flow and deploy it to a production endpoint, including LLMOps integration. -1. **AI Orchestration SDKs**: Enhance your custom copilot by integrating it with existing APIs and incorporating advanced orchestration and multi-turn LLM interactions using SDKs like Semantic Kernel and LangChain. -1. **Multi-Agent and Advanced Retrieval**: Further develop your solution by leveraging multi-agent capabilities for reliable outputs and complex inference tasks with AutoGen, Assistants API, and GraphRag. +1. **AI Orchestration SDKs**: Enhance your custom copilot by integrating it with existing APIs and incorporating advanced orchestration and multi-turn LLM interactions using SDKs like Semantic Kernel. 1. **Other Use Cases**: Explore AI Document Intelligence and Vision model capabilities for automating business workflows.

-[See full agenda](wksp/00-intro/agenda-and-outcomes.md){ .md-button } - - ### Disclaimer diff --git a/docs/wksp2/00-ai-studio/index.md b/docs/wksp2/00-ai-studio/index.md new file mode 100644 index 0000000..4947e2e --- /dev/null +++ b/docs/wksp2/00-ai-studio/index.md @@ -0,0 +1,14 @@ +# Build Custom Copilots using Azure AI Studio + +We will start with by building copilots using Azure AI Studio + +## Step-by Step guide for building a custom copilot using the chat playground in Azure AI Studio + +Follow this tutorial to build a custom copilot using AI Studio + +[Create a project and use the chat playground in Azure AI Studio](https://learn.microsoft.com/en-us/azure/ai-studio/quickstarts/get-started-playground){ .md-button } + + +## Step-by Step guide for building a custom copilot using the prompt flow SDK in Azure AI Studio + +[Build a custom chat app in Python using the prompt flow SDK](https://learn.microsoft.com/en-us/azure/ai-studio/quickstarts/get-started-code){ .md-button } diff --git a/docs/wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md b/docs/wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md new file mode 100644 index 0000000..6ca3747 --- /dev/null +++ b/docs/wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md @@ -0,0 +1 @@ +# Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model \ No newline at end of file diff --git a/docs/wksp2/01-semantic-kernel/hands-on-ai-orchestration.md b/docs/wksp2/01-semantic-kernel/hands-on-ai-orchestration.md new file mode 100644 index 0000000..fadadb8 --- /dev/null +++ b/docs/wksp2/01-semantic-kernel/hands-on-ai-orchestration.md @@ -0,0 +1 @@ +# Advanced AI Orchestration using Semantic Kernel (agents, plugins, planners) \ No newline at end of file diff --git a/docs/wksp2/01-semantic-kernel/pre-reqs.md b/docs/wksp2/01-semantic-kernel/pre-reqs.md new file mode 100644 index 0000000..16776da --- /dev/null +++ b/docs/wksp2/01-semantic-kernel/pre-reqs.md @@ -0,0 +1,26 @@ +# Prerequisites + +!!! note "Mandatory pre-requisite" + + Please signup for [Azure OpenAI (AOAI)](https://aka.ms/oai/access) and complete [Getting started with AOAI module](https://learn.microsoft.com/en-us/training/modules/get-started-openai/) + +Before attending the Intelligent App Development Workshop, please ensure you have the following prerequisites in place: + +1. **Basic programming knowledge**: Familiarity with at least one programming language (e.g., Python, JavaScript, Java, or C#) and basic understanding of software development concepts. +1. **Azure account**: A Microsoft Azure account with an active subscription. If you don't have one, sign up for a [free trial](https://azure.microsoft.com/en-us/free/). +1. 1. **Azure OpenAI**: Ability to provision an [Azure OpenAI](https://azure.microsoft.com/en-us/services/openai/) resource is required. +1. **Development environment**: A computer with your preferred development environment installed, such as Visual Studio Code, PyCharm, or another IDE that supports the programming language you'll be using in the workshop. +1. **Git**: Familiarity with Git and GitHub for version control. Ensure you have [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) installed on your computer. + +??? note "Optional" + The following prerequisites are optional but recommended to get the most out of the workshop: + + 1. **Azure CLI**: Install the [Azure Command-Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) to interact with Azure services and manage resources from the command line. + + 1. **Azure Functions Core Tools**: Install the [Azure Functions Core Tools](https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local?tabs=windows%2Ccsharp%2Cbash#v2) to create, test, and deploy Azure Functions from your local development environment. + + 1. **Docker**: Install [Docker Desktop](https://www.docker.com/products/docker-desktop) to build and run containerized applications. + + 1. **Cognitive Services SDKs**: Install the SDKs for the Azure Cognitive Services you'll be using in the workshop, such as the [Azure OpenAI SDK](https://pypi.org/project/azure-cognitiveservices-openai/), based on your programming language and the services used during the workshop. + +By ensuring you have completed these prerequisites, you'll be well-prepared to dive into the Intelligent App Development Workshop and make the most of the hands-on learning experience. diff --git a/docs/wksp2/index.md b/docs/wksp2/index.md new file mode 100644 index 0000000..75e1fbd --- /dev/null +++ b/docs/wksp2/index.md @@ -0,0 +1,5 @@ +# Introduction + +In this hands-on workshop, we will explore how to use Microsoft's Copilot Stack to develop your own AI-infused, enterprise-grade applications that improve productivity and create hyper-personalized product experiences. + +We will also highlight the emergent capabilities that are advantageous to adopt, as well as the limitations that can be mitigated through engineering, particularly in the areas of orchestration and retrieval. Additionally, we will showcase the capabilities within the Copilot Stack that enable you to achieve this. diff --git a/mkdocs.yml b/mkdocs.yml index cc8c956..6e64bd9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,41 +2,13 @@ site_name: Intelligent App Workshop for Microsoft Copilot Stack site_description: Complimentary workshop to Project Miyagi to demonstrate the potential of integrating SoTA foundation models in user experiences and backend workflows. Orchestrated by Semantic Kernel and built on Azure primitives. site_author: Govind Kamtamneni, Principal AI Engineer, Azure Global Black Belt, Microsoft nav: - - Home: index.md - - Intro: wksp/00-intro/index.md - - Agenda & Outcomes: wksp/00-intro/agenda-and-outcomes.md - - Miyagi Architecture Overview: wksp/00-intro/architecture-overview.md - - Sample Walkthroughs for inspiration: wksp/00-intro/samples-walk-through.md - - Semantic Kernel overview: wksp/00-intro/semantic-kernel-overview.md - - Pre-requisites: wksp/00-intro/pre-reqs.md - - Module 1 - Discovery and Ideation: - - wksp/01-design-thinking/index.md - - Design Thinking Canvas: wksp/01-design-thinking/design-thinking-canvas.md - - Optional discovery sessions: - - JTBD Worksheet: wksp/01-design-thinking/jobs-to-be-done.md - - HEART Framework: wksp/01-design-thinking/heart-framework.md - - Module 2 - Fork and Get Hands-on: wksp/02-fork-and-get-hands-on/index.md - - Module 3 - Inner-loop: wksp/03-inner-loop/index.md - - Module 4 - Basics of Semantic Kernel: wksp/04-Semantic-Kernel-Basics/index.md - - Module 5 - Use cases deep-dive with Miyagi and Reddog: - - wksp/05-use-cases/index.md - - Synthesis: wksp/05-use-cases/synthesis.md - - Generation: - - Overview: wksp/05-use-cases/generation.md - - Text: wksp/05-use-cases/generation.md - - Images: wksp/05-use-cases/generation.md - - Code: wksp/05-use-cases/generation.md - - Video: wksp/05-use-cases/generation.md - - Conversation: wksp/05-use-cases/synthesis.md - - Summarization: wksp/05-use-cases/synthesis.md - - Classification: wksp/05-use-cases/synthesis.md - - Translation: wksp/05-use-cases/synthesis.md - - Speech-to-text: wksp/05-use-cases/synthesis.md - - Semantic Search: wksp/05-use-cases/synthesis.md - - Anomaly Detection: wksp/05-use-cases/synthesis.md - - Agency and Planning: wksp/05-use-cases/synthesis.md - - QA on Domain Knowledge: wksp/05-use-cases/synthesis.md - - Plugins: wksp/05-use-cases/synthesis.md + - Home: wksp2/index.md + - Module 1 - Build Custom Copilots using Azure AI Studio: + - wksp2/00-ai-studio/index.md + - Module 2 - Build Custom Copilots using Semantic Kernel: + - Pre-requisites: wksp2/01-semantic-kernel/pre-reqs.md + - Advanced AI Orchestration using Semantic Kernel: wksp2/01-semantic-kernel/hands-on-ai-orchestration.md + - Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md - Post-workshop: - Feedback: wksp/other/feedback.md - Appendix: @@ -118,8 +90,8 @@ copyright: Copyright © 2023 Azure App Innovation GBB, Microsoft plugins: - git-revision-date - search - - table-reader - macros + - table-reader - glightbox - open-in-new-tab - mkdocs-video From 8c6e0ea8bdab9a1e5055defb94a905deb1aaa546 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 16 Sep 2024 14:16:01 -0400 Subject: [PATCH 02/61] Refactored "AI Orchestration using Semantic Kernel" sections to match latest doc --- docs/index.md | 10 +++- .../hands-on-ai-orchestration.md | 1 - .../{00-ai-studio => 06-ai-studio}/index.md | 0 .../advanced-ai-orchestration/index.md | 1 + .../extend-copilot-ai-doc-intel.md | 0 docs/wksp2/07-semantic-kernel/index.md | 1 + .../simple-ai-orchestration/index.md | 1 + .../simple-ai-orchestration}/pre-reqs.md | 0 mkdocs.yml | 50 ++++++++++++++++--- 9 files changed, 55 insertions(+), 9 deletions(-) delete mode 100644 docs/wksp2/01-semantic-kernel/hands-on-ai-orchestration.md rename docs/wksp2/{00-ai-studio => 06-ai-studio}/index.md (100%) create mode 100644 docs/wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md rename docs/wksp2/{01-semantic-kernel => 07-semantic-kernel}/extend-copilot-ai-doc-intel.md (100%) create mode 100644 docs/wksp2/07-semantic-kernel/index.md create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/index.md rename docs/wksp2/{01-semantic-kernel => 07-semantic-kernel/simple-ai-orchestration}/pre-reqs.md (100%) diff --git a/docs/index.md b/docs/index.md index fcbe7e8..ad72384 100644 --- a/docs/index.md +++ b/docs/index.md @@ -14,7 +14,8 @@ Inspired by Github Copilot's impact on developer productivity, this experiential In this comprehensive workshop, you will: - Utilize Azure AI Studio for reasoning engines, Prompt Flow for LLMOps, AI Search for semantic retrieval systems, and Semantic Kernel for orchestration. -- Explore advanced capabilities such as AutoGen +- Work with [Miyagi](https://github.com/Azure-Samples/miyagi) codebase during the hands-on experiential workshop +- Explore advanced capabilities such as AutoGen and GraphRag ## Topics for the Workshop @@ -24,13 +25,18 @@ In this comprehensive workshop, you will: Please sign up for [Azure OpenAI (AOAI)](https://aka.ms/oai/access) and complete the [Getting Started with AOAI module](https://learn.microsoft.com/en-us/training/modules/get-started-openai/) to get the most out of this workshop. 1. **Brief Overview of Gen AI Capabilities and Use Cases**: Explore the art of the possible with multi-agent and advanced retrieval systems using samples like [Miyagi](https://github.com/Azure-Samples/miyagi) and [Holmes](https://github.com/Azure-Samples/holmes). Engage in interactive demonstrations to envision potential applications with reasoning engines and semantic memory systems. +1. **Design Thinking Session (Optional)**: Participate in a collaborative brainstorming activity to identify your unique use cases, focusing on addressing user needs and alleviating pain points, ensuring the workshop is relevant to you. 1. **AI Studio and Prompt Flow**: Quickly get started with your own copilot, grounded by your proprietary data in AI Search using our AI Studio experience. Customize it with Prompt Flow and deploy it to a production endpoint, including LLMOps integration. -1. **AI Orchestration SDKs**: Enhance your custom copilot by integrating it with existing APIs and incorporating advanced orchestration and multi-turn LLM interactions using SDKs like Semantic Kernel. +1. **AI Orchestration SDKs**: Enhance your custom copilot by integrating it with existing APIs and incorporating advanced orchestration and multi-turn LLM interactions using SDKs like Semantic Kernel and LangChain. +1. **Multi-Agent and Advanced Retrieval**: Further develop your solution by leveraging multi-agent capabilities for reliable outputs and complex inference tasks with AutoGen, Assistants API, and GraphRag. 1. **Other Use Cases**: Explore AI Document Intelligence and Vision model capabilities for automating business workflows.

+[See full agenda](wksp/00-intro/agenda-and-outcomes.md){ .md-button } + + ### Disclaimer diff --git a/docs/wksp2/01-semantic-kernel/hands-on-ai-orchestration.md b/docs/wksp2/01-semantic-kernel/hands-on-ai-orchestration.md deleted file mode 100644 index fadadb8..0000000 --- a/docs/wksp2/01-semantic-kernel/hands-on-ai-orchestration.md +++ /dev/null @@ -1 +0,0 @@ -# Advanced AI Orchestration using Semantic Kernel (agents, plugins, planners) \ No newline at end of file diff --git a/docs/wksp2/00-ai-studio/index.md b/docs/wksp2/06-ai-studio/index.md similarity index 100% rename from docs/wksp2/00-ai-studio/index.md rename to docs/wksp2/06-ai-studio/index.md diff --git a/docs/wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md b/docs/wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md new file mode 100644 index 0000000..769ab66 --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md @@ -0,0 +1 @@ +# Advanced AI Orchestration using agents, planners and plugins \ No newline at end of file diff --git a/docs/wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md b/docs/wksp2/07-semantic-kernel/extend-copilot-ai-doc-intel.md similarity index 100% rename from docs/wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md rename to docs/wksp2/07-semantic-kernel/extend-copilot-ai-doc-intel.md diff --git a/docs/wksp2/07-semantic-kernel/index.md b/docs/wksp2/07-semantic-kernel/index.md new file mode 100644 index 0000000..51dd430 --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/index.md @@ -0,0 +1 @@ +# Hands-on AI Orchestration using Semantic Kernel \ No newline at end of file diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/index.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/index.md new file mode 100644 index 0000000..71ecf3d --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/index.md @@ -0,0 +1 @@ +# Simple AI Orchestration using Semantic Kernel \ No newline at end of file diff --git a/docs/wksp2/01-semantic-kernel/pre-reqs.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md similarity index 100% rename from docs/wksp2/01-semantic-kernel/pre-reqs.md rename to docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md diff --git a/mkdocs.yml b/mkdocs.yml index 6e64bd9..783f311 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,12 +2,50 @@ site_name: Intelligent App Workshop for Microsoft Copilot Stack site_description: Complimentary workshop to Project Miyagi to demonstrate the potential of integrating SoTA foundation models in user experiences and backend workflows. Orchestrated by Semantic Kernel and built on Azure primitives. site_author: Govind Kamtamneni, Principal AI Engineer, Azure Global Black Belt, Microsoft nav: - - Home: wksp2/index.md - - Module 1 - Build Custom Copilots using Azure AI Studio: - - wksp2/00-ai-studio/index.md - - Module 2 - Build Custom Copilots using Semantic Kernel: - - Pre-requisites: wksp2/01-semantic-kernel/pre-reqs.md - - Advanced AI Orchestration using Semantic Kernel: wksp2/01-semantic-kernel/hands-on-ai-orchestration.md + - Home: index.md + - Intro: wksp/00-intro/index.md + - Agenda & Outcomes: wksp/00-intro/agenda-and-outcomes.md + - Miyagi Architecture Overview: wksp/00-intro/architecture-overview.md + - Sample Walkthroughs for inspiration: wksp/00-intro/samples-walk-through.md + - Semantic Kernel overview: wksp/00-intro/semantic-kernel-overview.md + - Pre-requisites: wksp/00-intro/pre-reqs.md + - Module 1 - Discovery and Ideation: + - wksp/01-design-thinking/index.md + - Design Thinking Canvas: wksp/01-design-thinking/design-thinking-canvas.md + - Optional discovery sessions: + - JTBD Worksheet: wksp/01-design-thinking/jobs-to-be-done.md + - HEART Framework: wksp/01-design-thinking/heart-framework.md + - Module 2 - Fork and Get Hands-on: wksp/02-fork-and-get-hands-on/index.md + - Module 3 - Inner-loop: wksp/03-inner-loop/index.md + - Module 4 - Basics of Semantic Kernel: wksp/04-Semantic-Kernel-Basics/index.md + - Module 5 - Use cases deep-dive with Miyagi and Reddog: + - wksp/05-use-cases/index.md + - Synthesis: wksp/05-use-cases/synthesis.md + - Generation: + - Overview: wksp/05-use-cases/generation.md + - Text: wksp/05-use-cases/generation.md + - Images: wksp/05-use-cases/generation.md + - Code: wksp/05-use-cases/generation.md + - Video: wksp/05-use-cases/generation.md + - Conversation: wksp/05-use-cases/synthesis.md + - Summarization: wksp/05-use-cases/synthesis.md + - Classification: wksp/05-use-cases/synthesis.md + - Translation: wksp/05-use-cases/synthesis.md + - Speech-to-text: wksp/05-use-cases/synthesis.md + - Semantic Search: wksp/05-use-cases/synthesis.md + - Anomaly Detection: wksp/05-use-cases/synthesis.md + - Agency and Planning: wksp/05-use-cases/synthesis.md + - QA on Domain Knowledge: wksp/05-use-cases/synthesis.md + - Plugins: wksp/05-use-cases/synthesis.md + - Module 6 - Build Custom Copilots using Azure AI Studio: + - wksp2/06-ai-studio/index.md + - Module 7 - Hands-on AI Orchestration using Semantic Kernel: + - AI Orchestration using Semantic Kernel: + - wksp2/07-semantic-kernel/index.md + - Simple AI Orchestration: + - wksp2/07-semantic-kernel/simple-ai-orchestration/index.md + - Pre-requisites: wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md + - Advanced AI Orchestration: wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md - Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md - Post-workshop: - Feedback: wksp/other/feedback.md From 40522438af7dd846975b385370a8f35a34c55c82 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 17 Sep 2024 09:40:23 -0400 Subject: [PATCH 03/61] updates to index --- mkdocs.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 783f311..435a787 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -37,10 +37,10 @@ nav: - Agency and Planning: wksp/05-use-cases/synthesis.md - QA on Domain Knowledge: wksp/05-use-cases/synthesis.md - Plugins: wksp/05-use-cases/synthesis.md - - Module 6 - Build Custom Copilots using Azure AI Studio: - - wksp2/06-ai-studio/index.md - - Module 7 - Hands-on AI Orchestration using Semantic Kernel: - - AI Orchestration using Semantic Kernel: + - Module 6 - Hands-on workshop: + - Build Custom Copilots using Azure AI Studio: + - wksp2/06-ai-studio/index.md + - Hands-on AI Orchestration using Semantic Kernel: - wksp2/07-semantic-kernel/index.md - Simple AI Orchestration: - wksp2/07-semantic-kernel/simple-ai-orchestration/index.md From 8ce35619c70c9a6cb23c2227be720adcf3c1731b Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Thu, 26 Sep 2024 11:15:10 -0400 Subject: [PATCH 04/61] added lesson 1 --- .gitignore | 17 +++++ .../simple-ai-orchestration/lesson1.md | 67 +++++++++++++++++++ .../simple-ai-orchestration/pre-reqs.md | 28 +++++++- mkdocs.yml | 1 + .../Config/AISettingsProvider.cs | 28 ++++++++ .../Config/KernelBuilderProvider.cs | 17 +++++ .../Core.Utilities/Core.Utilities.csproj | 15 +++++ .../Core.Utilities/Models/AISettings.cs | 12 ++++ workshop/dotnet/Directory.Build.props | 11 +++ workshop/dotnet/Directory.Packages.props | 15 +++++ workshop/dotnet/Lessons/Directory.Build.props | 18 +++++ .../dotnet/Lessons/Lesson1/Lesson1.csproj | 7 ++ workshop/dotnet/Lessons/Lesson1/Program.cs | 30 +++++++++ .../dotnet/Lessons/Lesson2/Lesson2.csproj | 7 ++ .../dotnet/Lessons/appsettings.json.example | 7 ++ .../dotnet/Solutions/Directory.Build.props | 18 +++++ .../dotnet/Solutions/Lesson1/Lesson1.csproj | 7 ++ workshop/dotnet/Solutions/Lesson1/Program.cs | 38 +++++++++++ 18 files changed, 342 insertions(+), 1 deletion(-) create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md create mode 100644 workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs create mode 100644 workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs create mode 100644 workshop/dotnet/Core.Utilities/Core.Utilities.csproj create mode 100644 workshop/dotnet/Core.Utilities/Models/AISettings.cs create mode 100644 workshop/dotnet/Directory.Build.props create mode 100644 workshop/dotnet/Directory.Packages.props create mode 100644 workshop/dotnet/Lessons/Directory.Build.props create mode 100644 workshop/dotnet/Lessons/Lesson1/Lesson1.csproj create mode 100644 workshop/dotnet/Lessons/Lesson1/Program.cs create mode 100644 workshop/dotnet/Lessons/Lesson2/Lesson2.csproj create mode 100644 workshop/dotnet/Lessons/appsettings.json.example create mode 100644 workshop/dotnet/Solutions/Directory.Build.props create mode 100644 workshop/dotnet/Solutions/Lesson1/Lesson1.csproj create mode 100644 workshop/dotnet/Solutions/Lesson1/Program.cs diff --git a/.gitignore b/.gitignore index a5c1681..60fdcab 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,20 @@ ENV/ # MkDocs documentation site*/ .vscode/ + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +appsettings.json \ No newline at end of file diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md new file mode 100644 index 0000000..aa7c686 --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md @@ -0,0 +1,67 @@ +# Lesson 1: Simple Semantic Kernel chat bot with history + +1. Switch to Lesson 1 directory: + + ```bash + cd Lessons\Lesson1 + ``` + +1. Open the project in your favorite IDE or text editor. + +1. Open `Program.cs` and locate the TODO for each step and apply the following changes for each: + + 1. Step 1: add code to initialize kernel with chat completion: + + ```csharp + IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); + Kernel kernel = builder.Build(); + ``` + + 1. Step 2: add the following system prompt: + + ```csharp + OpenAIPromptExecutionSettings promptExecutionSettings = new() + { + ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" + }; + ``` + + 1. Step 3: initialize kernel arguments + + ```csharp + KernelArguments kernelArgs = new(promptExecutionSettings); + ``` + + 1. Step 4: add a loop to invoke prompt asynchronously providing user input and kernel arguments: + + ```csharp + await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + { + Console.Write(response); + } + ``` + +1. Run the program with this command: + + ```bash + dotnet run + ``` + +1. When prompted ask for financial advice: + + ``` + User > Which stocks do you recommend buying for moderate growth? + Assistant > Ah, the magical world of stock picking! Imagine walking into a buffet, and instead of loading your plate with mystery meat, you're strategically choosing the tastiest, most promising dishes. Here are a few general menus to consider, with a sprinkle of fun: + + 1. **Tech Tango** - Think companies that dance to the tune of innovation! Look for firms diving into AI or cloud computing. They're like the cool kids at the financial disco. + + 2. **Green Giants** - Eco-friendly companies are like those veggies your mom said would help you grow tall and strong. Renewable energy stocks might just add some height to your portfolio. + + 3. **Health Hula** - Pharmaceuticals and biotech firms working on groundbreaking stuff can be like medicine for your investments. Just remember, there's always a bit of a twirl and spin with these. + + 4. **Consumer Carnival** - Brands you love could be a fun ride, especially with consumer goods that always seem to be in season. + + 5. **Financial Fiesta** - Banks or fintech companies can be like salsa on your stock tacos—adding a bit of spice and zing! + + Remember, always research like you're planning the perfect vacation and balance your choices like you balance a pizza with just the right amount of toppings. And of course, consult a real-world financial oracle before making any big moves. Bon appétit in the stock market buffet! + ``` \ No newline at end of file diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md index 16776da..2ad6eb2 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md @@ -8,9 +8,35 @@ Before attending the Intelligent App Development Workshop, please ensure you hav 1. **Basic programming knowledge**: Familiarity with at least one programming language (e.g., Python, JavaScript, Java, or C#) and basic understanding of software development concepts. 1. **Azure account**: A Microsoft Azure account with an active subscription. If you don't have one, sign up for a [free trial](https://azure.microsoft.com/en-us/free/). -1. 1. **Azure OpenAI**: Ability to provision an [Azure OpenAI](https://azure.microsoft.com/en-us/services/openai/) resource is required. +1. **Azure subscription with access enabled for the Azure OpenAI Service** - For more details, see the [Azure OpenAI Service documentation on how to get access](https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai). +1. **Azure OpenAI resource** - For this workshop, you'll need to deploy at least one model such as GPT 4. See the Azure OpenAI Service documentation for more details on [deploying models](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal) and [model availability](https://learn.microsoft.com/azure/ai-services/openai/concepts/models). 1. **Development environment**: A computer with your preferred development environment installed, such as Visual Studio Code, PyCharm, or another IDE that supports the programming language you'll be using in the workshop. 1. **Git**: Familiarity with Git and GitHub for version control. Ensure you have [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) installed on your computer. +1. **.NET CLI**: .NET CLI is included when you install [.NET SDK](https://dotnet.microsoft.com/en-us/download) + +## Initial Setup + +1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. +1. Clone this repo using: + + ```bash + git clone https://github.com/Azure/intelligent-app-workshop.git + ``` + +1. Change directory into cloned repo: + + ```bash + cd intelligent-app-workshop + ``` + +1. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): + + ```bash + cp workshop\donet\Lessons\appsettings.json.example workshop\dotnet\Lessons\Lesson1\appsettings.json + ``` + +1. Retrieve the OpenAI Endpoint URL, deployed model name and API Key (from pre-requisites) into the app settings + ??? note "Optional" The following prerequisites are optional but recommended to get the most out of the workshop: diff --git a/mkdocs.yml b/mkdocs.yml index 435a787..cfc2bc9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -45,6 +45,7 @@ nav: - Simple AI Orchestration: - wksp2/07-semantic-kernel/simple-ai-orchestration/index.md - Pre-requisites: wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md + - Lesson 1 - Simple Semantic Kernel chatbot with history: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md - Advanced AI Orchestration: wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md - Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md - Post-workshop: diff --git a/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs b/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs new file mode 100644 index 0000000..2c20f38 --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs @@ -0,0 +1,28 @@ +using Ardalis.GuardClauses; +using Core.Utilities.Models; +using Microsoft.Extensions.Configuration; +using System.Reflection; + +namespace Core.Utilities.Config; + +internal static class AISettingsProvider +{ + internal static AISettings GetSettings() + { + IConfigurationRoot config = new ConfigurationBuilder() + .AddJsonFile("appsettings.json", optional: true) + .AddEnvironmentVariables() + .AddUserSecrets(Assembly.GetExecutingAssembly()) + .Build(); + + var aiSettings = config + .Get(); + + Guard.Against.Null(aiSettings); + Guard.Against.NullOrEmpty(aiSettings.ModelName); + Guard.Against.NullOrEmpty(aiSettings.ApiKey); + Guard.Against.NullOrEmpty(aiSettings.Endpoint); + + return aiSettings; + } +} \ No newline at end of file diff --git a/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs b/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs new file mode 100644 index 0000000..2a5247a --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs @@ -0,0 +1,17 @@ +using Microsoft.SemanticKernel; + +namespace Core.Utilities.Config; + +public static class KernelBuilderProvider +{ + public static IKernelBuilder CreateKernelWithChatCompletion() + { + var applicationSettings = AISettingsProvider.GetSettings(); + return Kernel + .CreateBuilder() + .AddAzureOpenAIChatCompletion( + applicationSettings.ModelName, + applicationSettings.Endpoint, + applicationSettings.ApiKey); + } +} \ No newline at end of file diff --git a/workshop/dotnet/Core.Utilities/Core.Utilities.csproj b/workshop/dotnet/Core.Utilities/Core.Utilities.csproj new file mode 100644 index 0000000..3a2c456 --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Core.Utilities.csproj @@ -0,0 +1,15 @@ + + + SKEXP0110;SKEXP0001;SKEXP0101 + + + + + + + + + + + + diff --git a/workshop/dotnet/Core.Utilities/Models/AISettings.cs b/workshop/dotnet/Core.Utilities/Models/AISettings.cs new file mode 100644 index 0000000..59bbf09 --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Models/AISettings.cs @@ -0,0 +1,12 @@ +using System.Text.Json.Serialization; + +namespace Core.Utilities.Models; + +public class AISettings { + + public string Endpoint { get; set; } = string.Empty; + + public string ModelName { get; set; } = string.Empty; + + public string ApiKey { get; set; } = string.Empty; +}; \ No newline at end of file diff --git a/workshop/dotnet/Directory.Build.props b/workshop/dotnet/Directory.Build.props new file mode 100644 index 0000000..de2479e --- /dev/null +++ b/workshop/dotnet/Directory.Build.props @@ -0,0 +1,11 @@ + + + + net8.0 + enable + enable + SKEXP0110;SKEXP0001;SKEXP0101 + true + + + \ No newline at end of file diff --git a/workshop/dotnet/Directory.Packages.props b/workshop/dotnet/Directory.Packages.props new file mode 100644 index 0000000..3c469ef --- /dev/null +++ b/workshop/dotnet/Directory.Packages.props @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/workshop/dotnet/Lessons/Directory.Build.props b/workshop/dotnet/Lessons/Directory.Build.props new file mode 100644 index 0000000..e83f79a --- /dev/null +++ b/workshop/dotnet/Lessons/Directory.Build.props @@ -0,0 +1,18 @@ + + + + + Exe + + + + + + + + + Always + + + + \ No newline at end of file diff --git a/workshop/dotnet/Lessons/Lesson1/Lesson1.csproj b/workshop/dotnet/Lessons/Lesson1/Lesson1.csproj new file mode 100644 index 0000000..e6d1111 --- /dev/null +++ b/workshop/dotnet/Lessons/Lesson1/Lesson1.csproj @@ -0,0 +1,7 @@ + + + + Always + + + diff --git a/workshop/dotnet/Lessons/Lesson1/Program.cs b/workshop/dotnet/Lessons/Lesson1/Program.cs new file mode 100644 index 0000000..d698de4 --- /dev/null +++ b/workshop/dotnet/Lessons/Lesson1/Program.cs @@ -0,0 +1,30 @@ +using Core.Utilities.Config; +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.OpenAI; + + +// TODO: Step 1 - Initialize the kernel with chat completion + + +// TODO: Step 2 - Add system propmpt + + +// TODO: Step 3 - Initialize kernel arguments + +// Execute program. +const string terminationPhrase = "quit"; +string? userInput; +do +{ + Console.Write("User > "); + userInput = Console.ReadLine(); + + if (userInput != null && userInput != terminationPhrase) + { + Console.Write("Assistant > "); + // TODO: Step 4 - add a loop to invoke prompt asynchronously providing user input and kernel arguments + + Console.WriteLine(); + } +} +while (userInput != terminationPhrase); \ No newline at end of file diff --git a/workshop/dotnet/Lessons/Lesson2/Lesson2.csproj b/workshop/dotnet/Lessons/Lesson2/Lesson2.csproj new file mode 100644 index 0000000..e6d1111 --- /dev/null +++ b/workshop/dotnet/Lessons/Lesson2/Lesson2.csproj @@ -0,0 +1,7 @@ + + + + Always + + + diff --git a/workshop/dotnet/Lessons/appsettings.json.example b/workshop/dotnet/Lessons/appsettings.json.example new file mode 100644 index 0000000..a3dac4b --- /dev/null +++ b/workshop/dotnet/Lessons/appsettings.json.example @@ -0,0 +1,7 @@ +{ + + "endpoint": "", + "modelName": "", + "apiKey": "" + +} \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Directory.Build.props b/workshop/dotnet/Solutions/Directory.Build.props new file mode 100644 index 0000000..e83f79a --- /dev/null +++ b/workshop/dotnet/Solutions/Directory.Build.props @@ -0,0 +1,18 @@ + + + + + Exe + + + + + + + + + Always + + + + \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Lesson1/Lesson1.csproj b/workshop/dotnet/Solutions/Lesson1/Lesson1.csproj new file mode 100644 index 0000000..e6d1111 --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson1/Lesson1.csproj @@ -0,0 +1,7 @@ + + + + Always + + + diff --git a/workshop/dotnet/Solutions/Lesson1/Program.cs b/workshop/dotnet/Solutions/Lesson1/Program.cs new file mode 100644 index 0000000..f58a82d --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson1/Program.cs @@ -0,0 +1,38 @@ +using Core.Utilities.Config; +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.OpenAI; + + +// TODO: Step 1 - Initialize the kernel with chat completion +IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); +Kernel kernel = builder.Build(); + +// TODO: Step 2 - Add system propmpt +OpenAIPromptExecutionSettings promptExecutionSettings = new() +{ + ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" +}; + +// TODO: Step 3 - Initialize kernel arguments +KernelArguments kernelArgs = new(promptExecutionSettings); + +// Execute program. +const string terminationPhrase = "quit"; +string? userInput; +do +{ + Console.Write("User > "); + userInput = Console.ReadLine(); + + if (userInput != null && userInput != terminationPhrase) + { + Console.Write("Assistant > "); + // TODO: Step 4 - Provide kernel arguments as a second parameter + await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + { + Console.Write(response); + } + Console.WriteLine(); + } +} +while (userInput != terminationPhrase); \ No newline at end of file From cb7bdefc66eeff227e7b4a6d4b6fd1d95246989b Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Thu, 26 Sep 2024 11:20:59 -0400 Subject: [PATCH 05/61] fixed subnumbering --- .../simple-ai-orchestration/lesson1.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md index aa7c686..cfa536e 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md @@ -12,34 +12,34 @@ 1. Step 1: add code to initialize kernel with chat completion: - ```csharp - IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); - Kernel kernel = builder.Build(); - ``` + ```csharp + IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); + Kernel kernel = builder.Build(); + ``` 1. Step 2: add the following system prompt: - ```csharp - OpenAIPromptExecutionSettings promptExecutionSettings = new() - { - ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" - }; - ``` + ```csharp + OpenAIPromptExecutionSettings promptExecutionSettings = new() + { + ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" + }; + ``` 1. Step 3: initialize kernel arguments - ```csharp - KernelArguments kernelArgs = new(promptExecutionSettings); - ``` + ```csharp + KernelArguments kernelArgs = new(promptExecutionSettings); + ``` 1. Step 4: add a loop to invoke prompt asynchronously providing user input and kernel arguments: - ```csharp - await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) - { - Console.Write(response); - } - ``` + ```csharp + await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + { + Console.Write(response); + } + ``` 1. Run the program with this command: From deeb06324af8e9d3aebcd93e9edc34305499e9e9 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 4 Oct 2024 17:34:22 -0400 Subject: [PATCH 06/61] Added lesson 2 --- .../simple-ai-orchestration/lesson2.md | 129 ++++++++++++++++++ .../Core.Utilities.Tests.csproj | 28 ++++ .../Services/StocksServiceTest.cs | 129 ++++++++++++++++++ .../Core.Utilities/Core.Utilities.csproj | 3 + .../Extensions/ModelExtensionMethods.cs | 20 +++ .../Core.Utilities/Models/AISettings.cs | 3 + .../dotnet/Core.Utilities/Models/Stocks.cs | 14 ++ .../Core.Utilities/Services/StocksService.cs | 46 +++++++ workshop/dotnet/Directory.Packages.props | 6 + workshop/dotnet/Lessons/Lesson2/Program.cs | 44 ++++++ .../dotnet/Lessons/appsettings.json.example | 3 +- .../dotnet/Solutions/Lesson2/Lesson2.csproj | 8 ++ workshop/dotnet/Solutions/Lesson2/Program.cs | 55 ++++++++ .../Solutions/Lesson2/StockDataPlugin.cs | 26 ++++ .../Lesson2/TimeInformationPlugin.cs | 9 ++ workshop/dotnet/Solutions/Solutions.sln | 31 +++++ workshop/dotnet/dotnet.sln | 36 +++++ 17 files changed, 589 insertions(+), 1 deletion(-) create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md create mode 100644 workshop/dotnet/Core.Utilities.Tests/Core.Utilities.Tests.csproj create mode 100644 workshop/dotnet/Core.Utilities.Tests/Services/StocksServiceTest.cs create mode 100644 workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs create mode 100644 workshop/dotnet/Core.Utilities/Models/Stocks.cs create mode 100644 workshop/dotnet/Core.Utilities/Services/StocksService.cs create mode 100644 workshop/dotnet/Lessons/Lesson2/Program.cs create mode 100644 workshop/dotnet/Solutions/Lesson2/Lesson2.csproj create mode 100644 workshop/dotnet/Solutions/Lesson2/Program.cs create mode 100644 workshop/dotnet/Solutions/Lesson2/StockDataPlugin.cs create mode 100644 workshop/dotnet/Solutions/Lesson2/TimeInformationPlugin.cs create mode 100644 workshop/dotnet/Solutions/Solutions.sln create mode 100644 workshop/dotnet/dotnet.sln diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md new file mode 100644 index 0000000..626bf58 --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md @@ -0,0 +1,129 @@ +# Lesson 2: Simple Semantic Kernel chat agent with system prompt + +In this lesson we will a system prompt to provide financial advice. + + +1. Switch to Lesson 2 directory: + + ```bash + cd Lessons/Lesson2 + ``` + +1. Start by copying `appsetting.json` from Lesson 1: + + ```bash + cp ../Lessons/Lesson1/appsettings.json . + ``` + +1. Run program and ask what the current date is: + + ```bash + dotnet run + User > what is the current date? + Assistant > I can't access today's date, but imagine it’s an eternal "Fri-yay," ready for financial fun! How can I help you on this hypothetical day? + ``` + +1. Notice it does not provide a specific answer. Let's create a Semantic Kernel Plugin to be able to fix that. + On the `Lesson2` directory create a new file name `TimeInformationPlugin.cs` in the same directory as `Program.cs` + and add the following content + + ```csharp + using System.ComponentModel; + using Microsoft.SemanticKernel; + + public class TimeInformationPlugin + { + [KernelFunction]  + [Description("Retrieves the current time in UTC.")] + public string GetCurrentUtcTime() => DateTime.UtcNow.ToString("R"); + } + ``` + +1. Next locate Step 1 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: + + ```csharp + // TODO: Step 1 - Initialize Time plugin and registration in the kernel + kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + ``` + +1. Next locate Step 2 and add the following line (including the comma at the end) to be able to + auto invoke kernel functions: + + ```csharp + // Step 2 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, + ``` + +1. Re-run the program and ask what the current date is. The current date should be displayed this time: + + ```bash + dotnet run + User > what is the current date? + Assistant > Today's date is October 4, 2024. Time flies like an arrow; fruit flies like a banana! + ``` + +1. Congratulations you have written your first Semantic Kernel plugin! Next, we are going to add another plugin + that will integrate to be able to an existing `StockService` included within the `Core.Utilities` project. + Create a new file named `StockDataPlugin.cs` in the same directory as `Program.cs` and include the following code, + which includes 2 functions, one to retrieve the stock price for the current date and another one for a specific date: + + ```csharp + using Core.Utilities.Services; + using Core.Utilities.Models; + using Core.Utilities.Extensions; + + using Microsoft.SemanticKernel; + using System.ComponentModel; + + public class StockDataPlugin(StocksService stockService) + { + private readonly StocksService _stockService = stockService; + + [KernelFunction, Description("Gets stock price")] + public async Task GetStockPrice(string symbol) + { + string tabularData = (await _stockService.GetStockDailyOpenClose(symbol)).FormatStockData(); + return tabularData; + } + + [KernelFunction, Description("Gets stock price for a given date")] + public async Task GetStockPriceForDate(string symbol, DateTime date) + { + string tabularData = (await _stockService.GetStockDailyOpenClose(symbol, date)).FormatStockData(); + return tabularData; + } + + } + ``` + +1. Next, locate Step 3 in `Program.cs` and add import required for `StockService`: + + ```csharp + // TODO: Step 3 - Add import required for StockService + using Core.Utilities.Services; + ``` + +1. Next locate Step 4 and provide the following line to register the new `StockDataPlugin`: + + ```csharp + HttpClient httpClient = new(); + StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); + kernel.Plugins.AddFromObject(stockDataPlugin); + ``` + +1. Before we can run this, you need to get an API Key to be able to get stock prices from: + https://polygon.io/dashboard/login. You can sign up for a free API Key by creating a login. + +1. Once the apiKey is provide, update the `appSettings.json` and paste it into this line: + + ```json + "stockServiceApiKey": "" + ``` + +1. Next run program and ask stock pricing information: + + ```bash + User > what is MSFT price? + Assistant > Hold onto your calculators! The price of MSFT is currently $417.63. + Looks like it's trying to outshine the stars! + ``` \ No newline at end of file diff --git a/workshop/dotnet/Core.Utilities.Tests/Core.Utilities.Tests.csproj b/workshop/dotnet/Core.Utilities.Tests/Core.Utilities.Tests.csproj new file mode 100644 index 0000000..bd3667d --- /dev/null +++ b/workshop/dotnet/Core.Utilities.Tests/Core.Utilities.Tests.csproj @@ -0,0 +1,28 @@ + + + SKEXP0110;SKEXP0001;SKEXP0101 + + + + Always + + + + + + + + + + + + + + + + + + + + + diff --git a/workshop/dotnet/Core.Utilities.Tests/Services/StocksServiceTest.cs b/workshop/dotnet/Core.Utilities.Tests/Services/StocksServiceTest.cs new file mode 100644 index 0000000..37a3cf6 --- /dev/null +++ b/workshop/dotnet/Core.Utilities.Tests/Services/StocksServiceTest.cs @@ -0,0 +1,129 @@ +using Core.Utilities.Services; +using Core.Utilities.Models; +using Moq; +using Moq.Protected; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using System.Net.Http.Json; +using Xunit; + +namespace Core.Utilities.Services.Tests +{ + public class StocksServiceTest + { + private readonly Mock _httpMessageHandlerMock; + private readonly HttpClient _httpClient; + private readonly StocksService _stocksService; + + public StocksServiceTest() + { + _httpMessageHandlerMock = new Mock(); + _httpClient = new HttpClient(_httpMessageHandlerMock.Object) + { + BaseAddress = new Uri("https://api.polygon.io/v1/") + }; + _stocksService = new StocksService(_httpClient); + } + + [Fact] + public async Task GetStockDailyOpenClose_ReturnsStock_WhenResponseIsSuccessful() + { + // Arrange + string symbol = "AAPL"; + var date = new DateTime(2023, 10, 1); + var stock = new Stock(symbol, 150.0, 155.0, 160.0, 145.0, DateTime.Now.ToString("yyyy-MM-dd")); + + _httpMessageHandlerMock.Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.OK, + Content = JsonContent.Create(stock) + }); + + // Act + var result = await _stocksService.GetStockDailyOpenClose(symbol, date); + + // Assert + Assert.NotNull(result); + Assert.Equal(symbol, result.Symbol); + Assert.Equal(150.0, result.Open); + Assert.Equal(155.0, result.Close); + } + + [Fact] + public async Task GetStockDailyOpenClose_ThrowsHttpRequestException_WhenResponseIsUnsuccessful() + { + // Arrange + var symbol = "AAPL"; + var date = new DateTime(2023, 10, 1); + + _httpMessageHandlerMock.Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.BadRequest, + Content = new StringContent("Bad Request") + }); + + // Act & Assert + await Assert.ThrowsAsync(() => _stocksService.GetStockDailyOpenClose(symbol, date)); + } + + [Fact] + public async Task GetStockDailyOpenClose_ReturnsStock_WhenResponseIsSuccessfulWitMockJson() + { + // Arrange + string symbol = "MSFT"; + var date = new DateTime(2024, 10, 3); + var jsonResponse = @" + { + ""status"": ""OK"", + ""from"": ""2024-10-03"", + ""symbol"": ""MSFT"", + ""open"": 417.63, + ""high"": 419.55, + ""low"": 414.29, + ""close"": 416.54, + ""volume"": 13031361, + ""afterHours"": 416.33, + ""preMarket"": 416.91 + }"; + + _httpMessageHandlerMock.Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.OK, + Content = new StringContent(jsonResponse, System.Text.Encoding.UTF8, "application/json") + }); + + // Act + var result = await _stocksService.GetStockDailyOpenClose(symbol, date); + + // Assert + Assert.NotNull(result); + Assert.Equal("MSFT", result.Symbol); + Assert.Equal(417.63, result.Open); + Assert.Equal(416.54, result.Close); + Assert.Equal(416.33, result.AfterHours); + Assert.Equal(416.91, result.PreMarket); + Assert.Equal("2024-10-03", result.From); + Assert.Equal("OK", result.Status); + } + } +} \ No newline at end of file diff --git a/workshop/dotnet/Core.Utilities/Core.Utilities.csproj b/workshop/dotnet/Core.Utilities/Core.Utilities.csproj index 3a2c456..71d176b 100644 --- a/workshop/dotnet/Core.Utilities/Core.Utilities.csproj +++ b/workshop/dotnet/Core.Utilities/Core.Utilities.csproj @@ -9,6 +9,9 @@ + + + diff --git a/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs b/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs new file mode 100644 index 0000000..6cfb7e6 --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs @@ -0,0 +1,20 @@ +using Core.Utilities.Models; +using System.Text; +using System.Text.Json; + +namespace Core.Utilities.Extensions +{ + public static class ModelExtensionMethods + { + public static string FormatStockData(this Stock stockData) + { + StringBuilder stringBuilder = new(); + + stringBuilder.AppendLine("| Symbol | Price | Pre Market Price | After Hours Price | Date "); + stringBuilder.AppendLine("| ----- | ----- | ----- | ----- |"); + stringBuilder.AppendLine($"| {stockData.Symbol} | {stockData.Open} | {stockData.PreMarket} | {stockData.AfterHours} | {stockData.From} "); + + return stringBuilder.ToString(); + } + } +} diff --git a/workshop/dotnet/Core.Utilities/Models/AISettings.cs b/workshop/dotnet/Core.Utilities/Models/AISettings.cs index 59bbf09..8b9f67b 100644 --- a/workshop/dotnet/Core.Utilities/Models/AISettings.cs +++ b/workshop/dotnet/Core.Utilities/Models/AISettings.cs @@ -9,4 +9,7 @@ public class AISettings { public string ModelName { get; set; } = string.Empty; public string ApiKey { get; set; } = string.Empty; + + public string StockServiceApiKey { get; set;} = string.Empty; + }; \ No newline at end of file diff --git a/workshop/dotnet/Core.Utilities/Models/Stocks.cs b/workshop/dotnet/Core.Utilities/Models/Stocks.cs new file mode 100644 index 0000000..698ccbe --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Models/Stocks.cs @@ -0,0 +1,14 @@ +namespace Core.Utilities.Models +{ + public record Stocks(List Stock); + + public record Stock( + string Symbol, + double Open, + double Close, + double AfterHours, + double PreMarket, + string From, + string Status = "OK" + ); +} diff --git a/workshop/dotnet/Core.Utilities/Services/StocksService.cs b/workshop/dotnet/Core.Utilities/Services/StocksService.cs new file mode 100644 index 0000000..eeb4fff --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Services/StocksService.cs @@ -0,0 +1,46 @@ +using Ardalis.GuardClauses; +using Core.Utilities.Config; +using Core.Utilities.Models; +using System.Net.Http.Json; + +namespace Core.Utilities.Services +{ + public class StocksService + { + private readonly HttpClient _httpClient; + + private string _apiKey; + + public StocksService(HttpClient httpClient) + { + httpClient.BaseAddress = new Uri("https://api.polygon.io/v1/"); + _httpClient = httpClient; + _apiKey = AISettingsProvider.GetSettings().StockServiceApiKey; + } + public async Task GetStockDailyOpenClose(string symbol, DateTime? date = null) + { + //Default to yesterday's date if no date is provided as current day pricing requires premium subscription + string dateFormatted = date?.ToString("yyyy-MM-dd") ?? DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); + var requestUri = $"open-close/{symbol}/{dateFormatted}?adjusted=true&apiKey={_apiKey}"; + Stock stock = await GetHttpResponse(requestUri); + return stock; + } + + + private async Task GetHttpResponse(string requestUri) + { + HttpResponseMessage response = await _httpClient.GetAsync(requestUri); + + if (!response.IsSuccessStatusCode) + { + string errorMessage = await response.Content.ReadAsStringAsync(); + throw new HttpRequestException($"Request failed with status code: {response.StatusCode}, message: {errorMessage}"); + } + + T? data = await response.Content.ReadFromJsonAsync(); + Guard.Against.Null(data); + + return data; + } + } +} diff --git a/workshop/dotnet/Directory.Packages.props b/workshop/dotnet/Directory.Packages.props index 3c469ef..7552ce1 100644 --- a/workshop/dotnet/Directory.Packages.props +++ b/workshop/dotnet/Directory.Packages.props @@ -8,8 +8,14 @@ + + + + + + \ No newline at end of file diff --git a/workshop/dotnet/Lessons/Lesson2/Program.cs b/workshop/dotnet/Lessons/Lesson2/Program.cs new file mode 100644 index 0000000..7b04d4f --- /dev/null +++ b/workshop/dotnet/Lessons/Lesson2/Program.cs @@ -0,0 +1,44 @@ +using Core.Utilities.Config; +// TODO: Step 3 - Add import required for StockService +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.OpenAI; + + +// Initialize the kernel with chat completion +IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); +Kernel kernel = builder.Build(); + +// TODO: Step 1 - Initialize Time plugin and registration in the kernel + +// TODO: Step 4 - Initialize Stock Data Plugin and register it in the kernel + +// Add system propmpt +OpenAIPromptExecutionSettings promptExecutionSettings = new() +{ + // Step 2 - Add Auto invoke kernel functions as the tool call behavior + ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" +}; + +// Initialize kernel arguments +KernelArguments kernelArgs = new(promptExecutionSettings); + +// Execute program. +const string terminationPhrase = "quit"; +string? userInput; +do +{ + Console.Write("User > "); + userInput = Console.ReadLine(); + + if (userInput != null && userInput != terminationPhrase) + { + Console.Write("Assistant > "); + // Provide kernel arguments as a second parameter + await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + { + Console.Write(response); + } + Console.WriteLine(); + } +} +while (userInput != terminationPhrase); \ No newline at end of file diff --git a/workshop/dotnet/Lessons/appsettings.json.example b/workshop/dotnet/Lessons/appsettings.json.example index a3dac4b..3d336fd 100644 --- a/workshop/dotnet/Lessons/appsettings.json.example +++ b/workshop/dotnet/Lessons/appsettings.json.example @@ -2,6 +2,7 @@ "endpoint": "", "modelName": "", - "apiKey": "" + "apiKey": "", + "stockServiceApiKey": "" } \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Lesson2/Lesson2.csproj b/workshop/dotnet/Solutions/Lesson2/Lesson2.csproj new file mode 100644 index 0000000..ac0838b --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson2/Lesson2.csproj @@ -0,0 +1,8 @@ + + + + + Always + + + diff --git a/workshop/dotnet/Solutions/Lesson2/Program.cs b/workshop/dotnet/Solutions/Lesson2/Program.cs new file mode 100644 index 0000000..544960a --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson2/Program.cs @@ -0,0 +1,55 @@ +using Core.Utilities.Config; +// Add import required for StockService +using Core.Utilities.Services; +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.OpenAI; +// Temporarily added to enable Semantic Kernel tracing +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + + +// Initialize the kernel with chat completion +IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); +// Enable tracing +//builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); +Kernel kernel = builder.Build(); + +// Step 1 - Initialize Time plugin and registration in the kernel +kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + +// Step 3 - Initialize Stock Data Plugin and register it in the kernel +HttpClient httpClient = new(); +StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); +kernel.Plugins.AddFromObject(stockDataPlugin); + +// Add system propmpt +OpenAIPromptExecutionSettings promptExecutionSettings = new() +{ + // Step 2 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, + ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" +}; + +// Initialize kernel arguments +KernelArguments kernelArgs = new(promptExecutionSettings); + +// Execute program. +const string terminationPhrase = "quit"; +string? userInput; +do +{ + Console.Write("User > "); + userInput = Console.ReadLine(); + + if (userInput != null && userInput != terminationPhrase) + { + Console.Write("Assistant > "); + // Provide kernel arguments as a second parameter + await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + { + Console.Write(response); + } + Console.WriteLine(); + } +} +while (userInput != terminationPhrase); \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Lesson2/StockDataPlugin.cs b/workshop/dotnet/Solutions/Lesson2/StockDataPlugin.cs new file mode 100644 index 0000000..0a81e7b --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson2/StockDataPlugin.cs @@ -0,0 +1,26 @@ +using Core.Utilities.Services; +using Core.Utilities.Models; +using Core.Utilities.Extensions; + +using Microsoft.SemanticKernel; +using System.ComponentModel; + +public class StockDataPlugin(StocksService stockService) +{ + private readonly StocksService _stockService = stockService; + + [KernelFunction, Description("Gets stock price")] + public async Task GetStockPrice(string symbol) + { + string tabularData = (await _stockService.GetStockDailyOpenClose(symbol)).FormatStockData(); + return tabularData; + } + + [KernelFunction, Description("Gets stock price for a given date")] + public async Task GetStockPriceForDate(string symbol, DateTime date) + { + string tabularData = (await _stockService.GetStockDailyOpenClose(symbol, date)).FormatStockData(); + return tabularData; + } + +} diff --git a/workshop/dotnet/Solutions/Lesson2/TimeInformationPlugin.cs b/workshop/dotnet/Solutions/Lesson2/TimeInformationPlugin.cs new file mode 100644 index 0000000..a313411 --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson2/TimeInformationPlugin.cs @@ -0,0 +1,9 @@ +using System.ComponentModel; +using Microsoft.SemanticKernel; + +public class TimeInformationPlugin +{ + [KernelFunction]  + [Description("Retrieves the current time in UTC.")] + public string GetCurrentUtcTime() => DateTime.UtcNow.ToString("R"); +} \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Solutions.sln b/workshop/dotnet/Solutions/Solutions.sln new file mode 100644 index 0000000..88f0283 --- /dev/null +++ b/workshop/dotnet/Solutions/Solutions.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lesson1", "Lesson1\Lesson1.csproj", "{B230A526-2B91-4CC7-BF4E-B29568AB9670}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lesson2", "Lesson2\Lesson2.csproj", "{A5E9D722-3085-4780-954C-A132A67EB63B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B230A526-2B91-4CC7-BF4E-B29568AB9670}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B230A526-2B91-4CC7-BF4E-B29568AB9670}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B230A526-2B91-4CC7-BF4E-B29568AB9670}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B230A526-2B91-4CC7-BF4E-B29568AB9670}.Release|Any CPU.Build.0 = Release|Any CPU + {A5E9D722-3085-4780-954C-A132A67EB63B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5E9D722-3085-4780-954C-A132A67EB63B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5E9D722-3085-4780-954C-A132A67EB63B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5E9D722-3085-4780-954C-A132A67EB63B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A0BEA744-7023-4A7A-9475-8E2A2FF9E13A} + EndGlobalSection +EndGlobal diff --git a/workshop/dotnet/dotnet.sln b/workshop/dotnet/dotnet.sln new file mode 100644 index 0000000..b2a7bf0 --- /dev/null +++ b/workshop/dotnet/dotnet.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Utilities", "Core.Utilities\Core.Utilities.csproj", "{50BF7C2E-633E-46AA-945B-62180162EED2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lessons", "Lessons", "{7A43C88B-1868-4EB0-B337-E1FF94C2340D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lesson1", "Lessons\Lesson1\Lesson1.csproj", "{0F686E81-D73A-419A-8E2C-44BA950DB0E3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {50BF7C2E-633E-46AA-945B-62180162EED2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50BF7C2E-633E-46AA-945B-62180162EED2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50BF7C2E-633E-46AA-945B-62180162EED2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50BF7C2E-633E-46AA-945B-62180162EED2}.Release|Any CPU.Build.0 = Release|Any CPU + {0F686E81-D73A-419A-8E2C-44BA950DB0E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F686E81-D73A-419A-8E2C-44BA950DB0E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F686E81-D73A-419A-8E2C-44BA950DB0E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F686E81-D73A-419A-8E2C-44BA950DB0E3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0F686E81-D73A-419A-8E2C-44BA950DB0E3} = {7A43C88B-1868-4EB0-B337-E1FF94C2340D} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9A9D85F9-2CE3-44A2-B93E-209605E30E98} + EndGlobalSection +EndGlobal From 13503f9d4e9a9a311bb154e6ab69583a7118a9cc Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 4 Oct 2024 17:34:33 -0400 Subject: [PATCH 07/61] Changes to lesson titles --- .../07-semantic-kernel/simple-ai-orchestration/lesson1.md | 2 ++ .../07-semantic-kernel/simple-ai-orchestration/lesson2.md | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md index cfa536e..9f02d31 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md @@ -1,5 +1,7 @@ # Lesson 1: Simple Semantic Kernel chat bot with history +In this lesson we will create a semantic kernel chatbot with a system prompt and keeping track of chat history. + 1. Switch to Lesson 1 directory: ```bash diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md index 626bf58..45ed99c 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md @@ -1,7 +1,6 @@ -# Lesson 2: Simple Semantic Kernel chat agent with system prompt - -In this lesson we will a system prompt to provide financial advice. +# Lesson 2: Simple Semantic Kernel chat agent with plugins +In this lesson we will a semantic kernel plugins to be able to retrieve stock pricing. 1. Switch to Lesson 2 directory: From 7bd85db8aa008c67eef3f888317e3186a2727202 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 8 Oct 2024 16:52:11 -0400 Subject: [PATCH 08/61] added lesson 2 (chat history) --- .../simple-ai-orchestration/lesson1.md | 2 +- .../simple-ai-orchestration/lesson2.md | 149 +++++++----------- .../simple-ai-orchestration/lesson3.md | 128 +++++++++++++++ mkdocs.yml | 4 +- workshop/dotnet/Lessons/Lesson2/Program.cs | 21 ++- .../dotnet/Lessons/Lesson3/Lesson3.csproj | 7 + workshop/dotnet/Lessons/Lesson3/Program.cs | 44 ++++++ workshop/dotnet/Solutions/Lesson1/Program.cs | 2 +- .../dotnet/Solutions/Lesson2/Lesson2.csproj | 1 - workshop/dotnet/Solutions/Lesson2/Program.cs | 40 +++-- .../dotnet/Solutions/Lesson3/Lesson3.csproj | 8 + workshop/dotnet/Solutions/Lesson3/Program.cs | 55 +++++++ .../{Lesson2 => Lesson3}/StockDataPlugin.cs | 0 .../TimeInformationPlugin.cs | 0 14 files changed, 335 insertions(+), 126 deletions(-) create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md create mode 100644 workshop/dotnet/Lessons/Lesson3/Lesson3.csproj create mode 100644 workshop/dotnet/Lessons/Lesson3/Program.cs create mode 100644 workshop/dotnet/Solutions/Lesson3/Lesson3.csproj create mode 100644 workshop/dotnet/Solutions/Lesson3/Program.cs rename workshop/dotnet/Solutions/{Lesson2 => Lesson3}/StockDataPlugin.cs (100%) rename workshop/dotnet/Solutions/{Lesson2 => Lesson3}/TimeInformationPlugin.cs (100%) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md index 9f02d31..970a7bf 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md @@ -1,4 +1,4 @@ -# Lesson 1: Simple Semantic Kernel chat bot with history +# Lesson 1: Simple Semantic Kernel chatbot In this lesson we will create a semantic kernel chatbot with a system prompt and keeping track of chat history. diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md index 45ed99c..6e41ef9 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md @@ -1,6 +1,6 @@ -# Lesson 2: Simple Semantic Kernel chat agent with plugins +# Lesson 2: Simple Semantic Kernel chatbot with history -In this lesson we will a semantic kernel plugins to be able to retrieve stock pricing. +In this lesson we will a chat history to our chat agent. 1. Switch to Lesson 2 directory: @@ -14,115 +14,80 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr cp ../Lessons/Lesson1/appsettings.json . ``` -1. Run program and ask what the current date is: +1. Open the project in your favorite IDE or text editor. - ```bash - dotnet run - User > what is the current date? - Assistant > I can't access today's date, but imagine it’s an eternal "Fri-yay," ready for financial fun! How can I help you on this hypothetical day? - ``` - -1. Notice it does not provide a specific answer. Let's create a Semantic Kernel Plugin to be able to fix that. - On the `Lesson2` directory create a new file name `TimeInformationPlugin.cs` in the same directory as `Program.cs` - and add the following content - - ```csharp - using System.ComponentModel; - using Microsoft.SemanticKernel; - - public class TimeInformationPlugin - { - [KernelFunction]  - [Description("Retrieves the current time in UTC.")] - public string GetCurrentUtcTime() => DateTime.UtcNow.ToString("R"); - } - ``` +1. Open `Program.cs` and locate the TODO for each step and apply the following changes for each: -1. Next locate Step 1 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: + 1. Step 1: add code to initialize kernel with chat completion: - ```csharp - // TODO: Step 1 - Initialize Time plugin and registration in the kernel - kernel.Plugins.AddFromObject(new TimeInformationPlugin()); - ``` - -1. Next locate Step 2 and add the following line (including the comma at the end) to be able to - auto invoke kernel functions: - - ```csharp - // Step 2 - Add Auto invoke kernel functions as the tool call behavior - ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, - ``` + ```csharp + // TODO: Step 1 - Initialize Time plugin and registration in the kernel + kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + // Step 1 - add ChatCompletion import + using Microsoft.SemanticKernel.ChatCompletion; + ``` -1. Re-run the program and ask what the current date is. The current date should be displayed this time: + 1. Step 2a: Get `chatCompletionService` and initialize `chatHistory` wiht system prompt - ```bash - dotnet run - User > what is the current date? - Assistant > Today's date is October 4, 2024. Time flies like an arrow; fruit flies like a banana! - ``` + ```csharp + // TODO: Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt + var chatCompletionService = kernel.GetRequiredService(); + ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); + ``` + + Step 2b: Remove the `promptExecutionSettings` and `kernelArgs` initialization code -1. Congratulations you have written your first Semantic Kernel plugin! Next, we are going to add another plugin - that will integrate to be able to an existing `StockService` included within the `Core.Utilities` project. - Create a new file named `StockDataPlugin.cs` in the same directory as `Program.cs` and include the following code, - which includes 2 functions, one to retrieve the stock price for the current date and another one for a specific date: + ```csharp + // Add system prompt + OpenAIPromptExecutionSettings promptExecutionSettings = new() + { + ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" + }; - ```csharp - using Core.Utilities.Services; - using Core.Utilities.Models; - using Core.Utilities.Extensions; + // Initialize kernel arguments + KernelArguments kernelArgs = new(promptExecutionSettings); + ``` + + 1. Step 3: Initialize `fullMessage` variable and add user input to chat history: - using Microsoft.SemanticKernel; - using System.ComponentModel; + ```csharp + // TODO: Step 3 - Initialize fullMessage variable and add user input to chat history + string fullMessage = ""; + chatHistory.AddUserMessage(userInput); + ``` - public class StockDataPlugin(StocksService stockService) - { - private readonly StocksService _stockService = stockService; + 1. Step 4: Remove the `foreach` loop below: - [KernelFunction, Description("Gets stock price")] - public async Task GetStockPrice(string symbol) + ```csharp + await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) { - string tabularData = (await _stockService.GetStockDailyOpenClose(symbol)).FormatStockData(); - return tabularData; + Console.Write(response); } + ``` + + And replace it with this `foreach` loop including adding assistant message to chat history: - [KernelFunction, Description("Gets stock price for a given date")] - public async Task GetStockPriceForDate(string symbol, DateTime date) + ```csharp + // TODO: Step 4 - Replace the foreach loop and replace it with this code including adding assistant message to chat history + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory)) { - string tabularData = (await _stockService.GetStockDailyOpenClose(symbol, date)).FormatStockData(); - return tabularData; + Console.Write(chatUpdate.Content); + fullMessage += chatUpdate.Content ?? ""; } + chatHistory.AddAssistantMessage(fullMessage); + ``` - } - ``` - -1. Next, locate Step 3 in `Program.cs` and add import required for `StockService`: - - ```csharp - // TODO: Step 3 - Add import required for StockService - using Core.Utilities.Services; - ``` - -1. Next locate Step 4 and provide the following line to register the new `StockDataPlugin`: +1. Re-run the program and start by stating your portfolio preference: - ```csharp - HttpClient httpClient = new(); - StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); - kernel.Plugins.AddFromObject(stockDataPlugin); - ``` - -1. Before we can run this, you need to get an API Key to be able to get stock prices from: - https://polygon.io/dashboard/login. You can sign up for a free API Key by creating a login. - -1. Once the apiKey is provide, update the `appSettings.json` and paste it into this line: - - ```json - "stockServiceApiKey": "" + ```bash + dotnet run + User > My portfolio preference is moderate growth + Assistant > Ah, the sweet spot of moderation! You're like the Goldilocks of investing, not too hot, not too cold, but just right. Let's sprinkle some fairy dust on your portfolio and make it grow! ``` -1. Next run program and ask stock pricing information: +1. Next ask what your portfolio preferenc is: ```bash - User > what is MSFT price? - Assistant > Hold onto your calculators! The price of MSFT is currently $417.63. - Looks like it's trying to outshine the stars! + User > what is my portfolio preference? + Assistant > Ah, you're the maestro of moderate growth! You're seeking a harmonious balance between risk and return, like a blend of jazz and rock in the symphony of investing. A sprinkle of thrill, a dash of stability, all wrapped in a comfy financial blanket. ``` \ No newline at end of file diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md new file mode 100644 index 0000000..a4db4fa --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md @@ -0,0 +1,128 @@ +# Lesson 2: Simple Semantic Kernel chat agent with plugins + +In this lesson we will a semantic kernel plugins to be able to retrieve stock pricing. + +1. Switch to Lesson 2 directory: + + ```bash + cd Lessons/Lesson3 + ``` + +1. Start by copying `appsetting.json` from Lesson 1: + + ```bash + cp ../Lessons/Lesson1/appsettings.json . + ``` + +1. Run program and ask what the current date is: + + ```bash + dotnet run + User > what is the current date? + Assistant > I can't access today's date, but imagine it’s an eternal "Fri-yay," ready for financial fun! How can I help you on this hypothetical day? + ``` + +1. Notice it does not provide a specific answer. Let's create a Semantic Kernel Plugin to be able to fix that. + On the `Lesson3` directory create a new file name `TimeInformationPlugin.cs` in the same directory as `Program.cs` + and add the following content + + ```csharp + using System.ComponentModel; + using Microsoft.SemanticKernel; + + public class TimeInformationPlugin + { + [KernelFunction]  + [Description("Retrieves the current time in UTC.")] + public string GetCurrentUtcTime() => DateTime.UtcNow.ToString("R"); + } + ``` + +1. Next locate Step 1 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: + + ```csharp + // TODO: Step 1 - Initialize Time plugin and registration in the kernel + kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + ``` + +1. Next locate Step 2 and add the following line (including the comma at the end) to be able to + auto invoke kernel functions: + + ```csharp + // Step 2 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, + ``` + +1. Re-run the program and ask what the current date is. The current date should be displayed this time: + + ```bash + dotnet run + User > what is the current date? + Assistant > Today's date is October 4, 2024. Time flies like an arrow; fruit flies like a banana! + ``` + +1. Congratulations you have written your first Semantic Kernel plugin! Next, we are going to add another plugin + that will integrate to be able to an existing `StockService` included within the `Core.Utilities` project. + Create a new file named `StockDataPlugin.cs` in the same directory as `Program.cs` and include the following code, + which includes 2 functions, one to retrieve the stock price for the current date and another one for a specific date: + + ```csharp + using Core.Utilities.Services; + using Core.Utilities.Models; + using Core.Utilities.Extensions; + + using Microsoft.SemanticKernel; + using System.ComponentModel; + + public class StockDataPlugin(StocksService stockService) + { + private readonly StocksService _stockService = stockService; + + [KernelFunction, Description("Gets stock price")] + public async Task GetStockPrice(string symbol) + { + string tabularData = (await _stockService.GetStockDailyOpenClose(symbol)).FormatStockData(); + return tabularData; + } + + [KernelFunction, Description("Gets stock price for a given date")] + public async Task GetStockPriceForDate(string symbol, DateTime date) + { + string tabularData = (await _stockService.GetStockDailyOpenClose(symbol, date)).FormatStockData(); + return tabularData; + } + + } + ``` + +1. Next, locate Step 3 in `Program.cs` and add import required for `StockService`: + + ```csharp + // TODO: Step 3 - Add import required for StockService + using Core.Utilities.Services; + ``` + +1. Next locate Step 4 and provide the following line to register the new `StockDataPlugin`: + + ```csharp + HttpClient httpClient = new(); + StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); + kernel.Plugins.AddFromObject(stockDataPlugin); + ``` + +1. Before we can run this, you need to get an API Key to be able to get stock prices from: + https://polygon.io/dashboard/login. You can sign up for a free API Key by creating a login. + +1. Once the apiKey is provide, update the `appSettings.json` and paste it into this line: + + ```json + "stockServiceApiKey": "" + ``` + +1. Next run program and ask stock pricing information: + + ```bash + User > what is MSFT price? + Assistant > Hold onto your calculators! The price of MSFT is currently $417.63. + Looks like it's trying to outshine the stars! + ``` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index cfc2bc9..021c4c8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -45,7 +45,9 @@ nav: - Simple AI Orchestration: - wksp2/07-semantic-kernel/simple-ai-orchestration/index.md - Pre-requisites: wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md - - Lesson 1 - Simple Semantic Kernel chatbot with history: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md + - Lesson 1 - Simple Semantic Kernel chatbot: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md + - Lesson 2 - Simple Semantic Kernel chatbot with history: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md + - Lesson 3 - Simple Semantic Kernel chatbot with plugins: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md - Advanced AI Orchestration: wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md - Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md - Post-workshop: diff --git a/workshop/dotnet/Lessons/Lesson2/Program.cs b/workshop/dotnet/Lessons/Lesson2/Program.cs index 7b04d4f..7d75d68 100644 --- a/workshop/dotnet/Lessons/Lesson2/Program.cs +++ b/workshop/dotnet/Lessons/Lesson2/Program.cs @@ -1,27 +1,27 @@ using Core.Utilities.Config; -// TODO: Step 3 - Add import required for StockService using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; +// TODO: Step 1 - add ChatCompletion import +using Microsoft.SemanticKernel.ChatCompletion; + // Initialize the kernel with chat completion IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); Kernel kernel = builder.Build(); -// TODO: Step 1 - Initialize Time plugin and registration in the kernel - -// TODO: Step 4 - Initialize Stock Data Plugin and register it in the kernel +// TODO: Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt -// Add system propmpt +// TODO: Step 2b - Remove the promptExecutionSettings and kernelArgs initialization code +// Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { - // Step 2 - Add Auto invoke kernel functions as the tool call behavior + // Add Auto invoke kernel functions as the tool call behavior ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" }; // Initialize kernel arguments KernelArguments kernelArgs = new(promptExecutionSettings); - // Execute program. const string terminationPhrase = "quit"; string? userInput; @@ -33,11 +33,16 @@ if (userInput != null && userInput != terminationPhrase) { Console.Write("Assistant > "); - // Provide kernel arguments as a second parameter + // TODO: Step 3 - Initialize fullMessage variable and add user input to chat history + + + // TODO: Step 4 - Replace the foreach loop and replace it with `chatCompletionService` code + // including adding assistant message to chat history await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) { Console.Write(response); } + Console.WriteLine(); } } diff --git a/workshop/dotnet/Lessons/Lesson3/Lesson3.csproj b/workshop/dotnet/Lessons/Lesson3/Lesson3.csproj new file mode 100644 index 0000000..e6d1111 --- /dev/null +++ b/workshop/dotnet/Lessons/Lesson3/Lesson3.csproj @@ -0,0 +1,7 @@ + + + + Always + + + diff --git a/workshop/dotnet/Lessons/Lesson3/Program.cs b/workshop/dotnet/Lessons/Lesson3/Program.cs new file mode 100644 index 0000000..7b04d4f --- /dev/null +++ b/workshop/dotnet/Lessons/Lesson3/Program.cs @@ -0,0 +1,44 @@ +using Core.Utilities.Config; +// TODO: Step 3 - Add import required for StockService +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.OpenAI; + + +// Initialize the kernel with chat completion +IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); +Kernel kernel = builder.Build(); + +// TODO: Step 1 - Initialize Time plugin and registration in the kernel + +// TODO: Step 4 - Initialize Stock Data Plugin and register it in the kernel + +// Add system propmpt +OpenAIPromptExecutionSettings promptExecutionSettings = new() +{ + // Step 2 - Add Auto invoke kernel functions as the tool call behavior + ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" +}; + +// Initialize kernel arguments +KernelArguments kernelArgs = new(promptExecutionSettings); + +// Execute program. +const string terminationPhrase = "quit"; +string? userInput; +do +{ + Console.Write("User > "); + userInput = Console.ReadLine(); + + if (userInput != null && userInput != terminationPhrase) + { + Console.Write("Assistant > "); + // Provide kernel arguments as a second parameter + await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + { + Console.Write(response); + } + Console.WriteLine(); + } +} +while (userInput != terminationPhrase); \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Lesson1/Program.cs b/workshop/dotnet/Solutions/Lesson1/Program.cs index f58a82d..d8ab397 100644 --- a/workshop/dotnet/Solutions/Lesson1/Program.cs +++ b/workshop/dotnet/Solutions/Lesson1/Program.cs @@ -7,7 +7,7 @@ IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); Kernel kernel = builder.Build(); -// TODO: Step 2 - Add system propmpt +// TODO: Step 2 - Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" diff --git a/workshop/dotnet/Solutions/Lesson2/Lesson2.csproj b/workshop/dotnet/Solutions/Lesson2/Lesson2.csproj index ac0838b..e6d1111 100644 --- a/workshop/dotnet/Solutions/Lesson2/Lesson2.csproj +++ b/workshop/dotnet/Solutions/Lesson2/Lesson2.csproj @@ -1,5 +1,4 @@  - Always diff --git a/workshop/dotnet/Solutions/Lesson2/Program.cs b/workshop/dotnet/Solutions/Lesson2/Program.cs index 544960a..ab96ce7 100644 --- a/workshop/dotnet/Solutions/Lesson2/Program.cs +++ b/workshop/dotnet/Solutions/Lesson2/Program.cs @@ -1,38 +1,27 @@ using Core.Utilities.Config; -// Add import required for StockService -using Core.Utilities.Services; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; -// Temporarily added to enable Semantic Kernel tracing -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; +// Step 1 - add ChatCompletion import +using Microsoft.SemanticKernel.ChatCompletion; + // Initialize the kernel with chat completion IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); -// Enable tracing -//builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); Kernel kernel = builder.Build(); -// Step 1 - Initialize Time plugin and registration in the kernel -kernel.Plugins.AddFromObject(new TimeInformationPlugin()); - -// Step 3 - Initialize Stock Data Plugin and register it in the kernel -HttpClient httpClient = new(); -StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); -kernel.Plugins.AddFromObject(stockDataPlugin); - -// Add system propmpt +// Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt +var chatCompletionService = kernel.GetRequiredService(); +ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); +// Step 2b - Remove the promptExecutionSettings and kernelArgs initialization code +// Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { - // Step 2 - Add Auto invoke kernel functions as the tool call behavior - ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" }; // Initialize kernel arguments KernelArguments kernelArgs = new(promptExecutionSettings); - // Execute program. const string terminationPhrase = "quit"; string? userInput; @@ -44,11 +33,18 @@ if (userInput != null && userInput != terminationPhrase) { Console.Write("Assistant > "); - // Provide kernel arguments as a second parameter - await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + // Step 3 - Initialize fullMessage variable and add user input to chat history + string fullMessage = ""; + chatHistory.AddUserMessage(userInput); + + // Step 4 - Replace the foreach loop and replace it with this code including adding assistant message to chat history + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory)) { - Console.Write(response); + Console.Write(chatUpdate.Content); + fullMessage += chatUpdate.Content ?? ""; } + chatHistory.AddAssistantMessage(fullMessage); + Console.WriteLine(); } } diff --git a/workshop/dotnet/Solutions/Lesson3/Lesson3.csproj b/workshop/dotnet/Solutions/Lesson3/Lesson3.csproj new file mode 100644 index 0000000..ac0838b --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson3/Lesson3.csproj @@ -0,0 +1,8 @@ + + + + + Always + + + diff --git a/workshop/dotnet/Solutions/Lesson3/Program.cs b/workshop/dotnet/Solutions/Lesson3/Program.cs new file mode 100644 index 0000000..544960a --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson3/Program.cs @@ -0,0 +1,55 @@ +using Core.Utilities.Config; +// Add import required for StockService +using Core.Utilities.Services; +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.OpenAI; +// Temporarily added to enable Semantic Kernel tracing +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + + +// Initialize the kernel with chat completion +IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); +// Enable tracing +//builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); +Kernel kernel = builder.Build(); + +// Step 1 - Initialize Time plugin and registration in the kernel +kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + +// Step 3 - Initialize Stock Data Plugin and register it in the kernel +HttpClient httpClient = new(); +StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); +kernel.Plugins.AddFromObject(stockDataPlugin); + +// Add system propmpt +OpenAIPromptExecutionSettings promptExecutionSettings = new() +{ + // Step 2 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, + ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" +}; + +// Initialize kernel arguments +KernelArguments kernelArgs = new(promptExecutionSettings); + +// Execute program. +const string terminationPhrase = "quit"; +string? userInput; +do +{ + Console.Write("User > "); + userInput = Console.ReadLine(); + + if (userInput != null && userInput != terminationPhrase) + { + Console.Write("Assistant > "); + // Provide kernel arguments as a second parameter + await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + { + Console.Write(response); + } + Console.WriteLine(); + } +} +while (userInput != terminationPhrase); \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Lesson2/StockDataPlugin.cs b/workshop/dotnet/Solutions/Lesson3/StockDataPlugin.cs similarity index 100% rename from workshop/dotnet/Solutions/Lesson2/StockDataPlugin.cs rename to workshop/dotnet/Solutions/Lesson3/StockDataPlugin.cs diff --git a/workshop/dotnet/Solutions/Lesson2/TimeInformationPlugin.cs b/workshop/dotnet/Solutions/Lesson3/TimeInformationPlugin.cs similarity index 100% rename from workshop/dotnet/Solutions/Lesson2/TimeInformationPlugin.cs rename to workshop/dotnet/Solutions/Lesson3/TimeInformationPlugin.cs From 7030f60fc74e60692913800c1ecb35344dc2161f Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 8 Oct 2024 17:29:22 -0400 Subject: [PATCH 09/61] Added chat history to lesson3 --- .../simple-ai-orchestration/lesson3.md | 20 +++++++++---- workshop/dotnet/Lessons/Lesson3/Program.cs | 30 ++++++++++++++----- workshop/dotnet/Solutions/Lesson2/Program.cs | 12 ++------ workshop/dotnet/Solutions/Lesson3/Lesson3.sln | 25 ++++++++++++++++ workshop/dotnet/Solutions/Lesson3/Program.cs | 28 ++++++++++++----- 5 files changed, 84 insertions(+), 31 deletions(-) create mode 100644 workshop/dotnet/Solutions/Lesson3/Lesson3.sln diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md index a4db4fa..3c85db2 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md @@ -45,12 +45,19 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr kernel.Plugins.AddFromObject(new TimeInformationPlugin()); ``` -1. Next locate Step 2 and add the following line (including the comma at the end) to be able to +1. Next locate Step 2 and add the following line to be able to auto invoke kernel functions: ```csharp - // Step 2 - Add Auto invoke kernel functions as the tool call behavior - ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, + // TODO: Step 2 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions + ``` + +1. Next locate Step 3 and add the following parameters: + + ```csharp + // TODO: Step 3 - Provide promptExecutionSettings and kernel arguments + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, kernel)) ``` 1. Re-run the program and ask what the current date is. The current date should be displayed this time: @@ -95,16 +102,17 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr } ``` -1. Next, locate Step 3 in `Program.cs` and add import required for `StockService`: +1. Next, locate Step 4 in `Program.cs` and add import required for `StockService`: ```csharp - // TODO: Step 3 - Add import required for StockService + // TODO: Step 4 - Add import required for StockService using Core.Utilities.Services; ``` -1. Next locate Step 4 and provide the following line to register the new `StockDataPlugin`: +1. Next locate Step 5 and provide the following line to register the new `StockDataPlugin`: ```csharp + // TODO: Step 5 - Initialize Stock Data Plugin and register it in the kernel HttpClient httpClient = new(); StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); kernel.Plugins.AddFromObject(stockDataPlugin); diff --git a/workshop/dotnet/Lessons/Lesson3/Program.cs b/workshop/dotnet/Lessons/Lesson3/Program.cs index 7b04d4f..2c6bd62 100644 --- a/workshop/dotnet/Lessons/Lesson3/Program.cs +++ b/workshop/dotnet/Lessons/Lesson3/Program.cs @@ -1,7 +1,10 @@ using Core.Utilities.Config; -// TODO: Step 3 - Add import required for StockService +// TODO: Step 4 - Add import required for StockService + using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; +// Add ChatCompletion import +using Microsoft.SemanticKernel.ChatCompletion; // Initialize the kernel with chat completion @@ -10,13 +13,19 @@ // TODO: Step 1 - Initialize Time plugin and registration in the kernel -// TODO: Step 4 - Initialize Stock Data Plugin and register it in the kernel -// Add system propmpt +// TODO: Step 5 - Initialize Stock Data Plugin and register it in the kernel + + +// Get chatCompletionService and initialize chatHistory wiht system prompt +var chatCompletionService = kernel.GetRequiredService(); +ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); +// Remove the promptExecutionSettings and kernelArgs initialization code +// Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { // Step 2 - Add Auto invoke kernel functions as the tool call behavior - ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" + }; // Initialize kernel arguments @@ -33,11 +42,18 @@ if (userInput != null && userInput != terminationPhrase) { Console.Write("Assistant > "); - // Provide kernel arguments as a second parameter - await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + // Initialize fullMessage variable and add user input to chat history + string fullMessage = ""; + chatHistory.AddUserMessage(userInput); + + // TODO: Step 3 - Provide promptExecutionSettings and kernel arguments + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory)) { - Console.Write(response); + Console.Write(chatUpdate.Content); + fullMessage += chatUpdate.Content ?? ""; } + chatHistory.AddAssistantMessage(fullMessage); + Console.WriteLine(); } } diff --git a/workshop/dotnet/Solutions/Lesson2/Program.cs b/workshop/dotnet/Solutions/Lesson2/Program.cs index ab96ce7..e52ea08 100644 --- a/workshop/dotnet/Solutions/Lesson2/Program.cs +++ b/workshop/dotnet/Solutions/Lesson2/Program.cs @@ -1,11 +1,10 @@ using Core.Utilities.Config; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; -// Step 1 - add ChatCompletion import +// Step 1 - Add ChatCompletion import using Microsoft.SemanticKernel.ChatCompletion; - // Initialize the kernel with chat completion IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); Kernel kernel = builder.Build(); @@ -13,15 +12,8 @@ // Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt var chatCompletionService = kernel.GetRequiredService(); ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); -// Step 2b - Remove the promptExecutionSettings and kernelArgs initialization code -// Add system prompt -OpenAIPromptExecutionSettings promptExecutionSettings = new() -{ - ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" -}; +// Step 2b - Remove the promptExecutionSettings and kernelArgs initialization code - REMOVED -// Initialize kernel arguments -KernelArguments kernelArgs = new(promptExecutionSettings); // Execute program. const string terminationPhrase = "quit"; string? userInput; diff --git a/workshop/dotnet/Solutions/Lesson3/Lesson3.sln b/workshop/dotnet/Solutions/Lesson3/Lesson3.sln new file mode 100644 index 0000000..9a7529a --- /dev/null +++ b/workshop/dotnet/Solutions/Lesson3/Lesson3.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lesson3", "Lesson3.csproj", "{BF89ED0F-8671-429B-91A4-CEFB432DAD21}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BF89ED0F-8671-429B-91A4-CEFB432DAD21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF89ED0F-8671-429B-91A4-CEFB432DAD21}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF89ED0F-8671-429B-91A4-CEFB432DAD21}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF89ED0F-8671-429B-91A4-CEFB432DAD21}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C064C523-9186-413D-8213-7EDE44A472F8} + EndGlobalSection +EndGlobal diff --git a/workshop/dotnet/Solutions/Lesson3/Program.cs b/workshop/dotnet/Solutions/Lesson3/Program.cs index 544960a..cd5d399 100644 --- a/workshop/dotnet/Solutions/Lesson3/Program.cs +++ b/workshop/dotnet/Solutions/Lesson3/Program.cs @@ -1,8 +1,10 @@ using Core.Utilities.Config; -// Add import required for StockService +// Step 4 - Add import required for StockService using Core.Utilities.Services; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; +// Add ChatCompletion import +using Microsoft.SemanticKernel.ChatCompletion; // Temporarily added to enable Semantic Kernel tracing using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -17,17 +19,20 @@ // Step 1 - Initialize Time plugin and registration in the kernel kernel.Plugins.AddFromObject(new TimeInformationPlugin()); -// Step 3 - Initialize Stock Data Plugin and register it in the kernel +// Step 5 - Initialize Stock Data Plugin and register it in the kernel HttpClient httpClient = new(); StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); kernel.Plugins.AddFromObject(stockDataPlugin); -// Add system propmpt +// Get chatCompletionService and initialize chatHistory wiht system prompt +var chatCompletionService = kernel.GetRequiredService(); +ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); +// Remove the promptExecutionSettings and kernelArgs initialization code +// Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { // Step 2 - Add Auto invoke kernel functions as the tool call behavior - ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, - ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions }; // Initialize kernel arguments @@ -44,11 +49,18 @@ if (userInput != null && userInput != terminationPhrase) { Console.Write("Assistant > "); - // Provide kernel arguments as a second parameter - await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) + // Initialize fullMessage variable and add user input to chat history + string fullMessage = ""; + chatHistory.AddUserMessage(userInput); + + // Step 3 - Provide promptExecutionSettings and kernel arguments + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, kernel)) { - Console.Write(response); + Console.Write(chatUpdate.Content); + fullMessage += chatUpdate.Content ?? ""; } + chatHistory.AddAssistantMessage(fullMessage); + Console.WriteLine(); } } From 5cd643741d03f471493d6484feac463143d4072d Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Wed, 9 Oct 2024 15:29:41 -0400 Subject: [PATCH 10/61] Added plugins directory --- .../simple-ai-orchestration/lesson3.md | 42 +++++++++++++------ workshop/dotnet/Lessons/Lesson3/Program.cs | 12 +++--- .../Lesson3/{ => Plugins}/StockDataPlugin.cs | 4 +- .../{ => Plugins}/TimeInformationPlugin.cs | 2 + workshop/dotnet/Solutions/Lesson3/Program.cs | 14 ++++--- 5 files changed, 49 insertions(+), 25 deletions(-) rename workshop/dotnet/Solutions/Lesson3/{ => Plugins}/StockDataPlugin.cs (97%) rename workshop/dotnet/Solutions/Lesson3/{ => Plugins}/TimeInformationPlugin.cs (92%) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md index 3c85db2..82c7def 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md @@ -8,7 +8,7 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr cd Lessons/Lesson3 ``` -1. Start by copying `appsetting.json` from Lesson 1: +1. Start by copying `appsettings.json` from Lesson 1: ```bash cp ../Lessons/Lesson1/appsettings.json . @@ -23,13 +23,22 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr ``` 1. Notice it does not provide a specific answer. Let's create a Semantic Kernel Plugin to be able to fix that. - On the `Lesson3` directory create a new file name `TimeInformationPlugin.cs` in the same directory as `Program.cs` + On the `Lesson3` directory create a new directory named `Plugins`: + + ```bash + mkdir Plugins + cd Plugins + ``` + + 1. In the `Plugins` directory create a new file named `TimeInformationPlugin.cs` and add the following content ```csharp using System.ComponentModel; using Microsoft.SemanticKernel; + namespace Plugins; + public class TimeInformationPlugin { [KernelFunction]  @@ -38,25 +47,32 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr } ``` -1. Next locate Step 1 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: +1. Next locate Step 1 in `Program.cs` and add the following import line: + + ```csharp + // TODO: Step 1 - Add import for Plugins + using Plugins; + ``` + +1. Next locate Step 2 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: ```csharp - // TODO: Step 1 - Initialize Time plugin and registration in the kernel + // TODO: Step 2 - Initialize Time plugin and registration in the kernel kernel.Plugins.AddFromObject(new TimeInformationPlugin()); ``` -1. Next locate Step 2 and add the following line to be able to +1. Next locate Step 3 and add the following line to be able to auto invoke kernel functions: ```csharp - // TODO: Step 2 - Add Auto invoke kernel functions as the tool call behavior + // TODO: Step 3 - Add Auto invoke kernel functions as the tool call behavior ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions ``` -1. Next locate Step 3 and add the following parameters: +1. Next locate Step 4 and add the following parameters: ```csharp - // TODO: Step 3 - Provide promptExecutionSettings and kernel arguments + // TODO: Step 4 - Provide promptExecutionSettings and kernel arguments await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, kernel)) ``` @@ -102,24 +118,24 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr } ``` -1. Next, locate Step 4 in `Program.cs` and add import required for `StockService`: +1. Next, locate Step 5 in `Program.cs` and add import required for `StockService`: ```csharp - // TODO: Step 4 - Add import required for StockService + // TODO: Step 5 - Add import required for StockService using Core.Utilities.Services; ``` -1. Next locate Step 5 and provide the following line to register the new `StockDataPlugin`: +1. Next locate Step 6 and provide the following line to register the new `StockDataPlugin`: ```csharp - // TODO: Step 5 - Initialize Stock Data Plugin and register it in the kernel + // TODO: Step 6 - Initialize Stock Data Plugin and register it in the kernel HttpClient httpClient = new(); StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); kernel.Plugins.AddFromObject(stockDataPlugin); ``` 1. Before we can run this, you need to get an API Key to be able to get stock prices from: - https://polygon.io/dashboard/login. You can sign up for a free API Key by creating a login. + [https://polygon.io/dashboard/login](). You can sign up for a free API Key by creating a login. 1. Once the apiKey is provide, update the `appSettings.json` and paste it into this line: diff --git a/workshop/dotnet/Lessons/Lesson3/Program.cs b/workshop/dotnet/Lessons/Lesson3/Program.cs index 2c6bd62..61de308 100644 --- a/workshop/dotnet/Lessons/Lesson3/Program.cs +++ b/workshop/dotnet/Lessons/Lesson3/Program.cs @@ -1,5 +1,7 @@ using Core.Utilities.Config; -// TODO: Step 4 - Add import required for StockService +// TODO: Step 1 - Add import for Plugins + +// TODO: Step 5 - Add import required for StockService using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; @@ -11,10 +13,10 @@ IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); Kernel kernel = builder.Build(); -// TODO: Step 1 - Initialize Time plugin and registration in the kernel +// TODO: Step 2 - Initialize Time plugin and registration in the kernel -// TODO: Step 5 - Initialize Stock Data Plugin and register it in the kernel +// TODO: Step 6 - Initialize Stock Data Plugin and register it in the kernel // Get chatCompletionService and initialize chatHistory wiht system prompt @@ -24,7 +26,7 @@ // Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { - // Step 2 - Add Auto invoke kernel functions as the tool call behavior + // Step 3 - Add Auto invoke kernel functions as the tool call behavior }; @@ -46,7 +48,7 @@ string fullMessage = ""; chatHistory.AddUserMessage(userInput); - // TODO: Step 3 - Provide promptExecutionSettings and kernel arguments + // TODO: Step 4 - Provide promptExecutionSettings and kernel arguments await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory)) { Console.Write(chatUpdate.Content); diff --git a/workshop/dotnet/Solutions/Lesson3/StockDataPlugin.cs b/workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs similarity index 97% rename from workshop/dotnet/Solutions/Lesson3/StockDataPlugin.cs rename to workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs index 0a81e7b..24596eb 100644 --- a/workshop/dotnet/Solutions/Lesson3/StockDataPlugin.cs +++ b/workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs @@ -5,6 +5,8 @@ using Microsoft.SemanticKernel; using System.ComponentModel; +namespace Plugins; + public class StockDataPlugin(StocksService stockService) { private readonly StocksService _stockService = stockService; @@ -23,4 +25,4 @@ public async Task GetStockPriceForDate(string symbol, DateTime date) return tabularData; } -} +} \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Lesson3/TimeInformationPlugin.cs b/workshop/dotnet/Solutions/Lesson3/Plugins/TimeInformationPlugin.cs similarity index 92% rename from workshop/dotnet/Solutions/Lesson3/TimeInformationPlugin.cs rename to workshop/dotnet/Solutions/Lesson3/Plugins/TimeInformationPlugin.cs index a313411..32beb09 100644 --- a/workshop/dotnet/Solutions/Lesson3/TimeInformationPlugin.cs +++ b/workshop/dotnet/Solutions/Lesson3/Plugins/TimeInformationPlugin.cs @@ -1,6 +1,8 @@ using System.ComponentModel; using Microsoft.SemanticKernel; +namespace Plugins; + public class TimeInformationPlugin { [KernelFunction]  diff --git a/workshop/dotnet/Solutions/Lesson3/Program.cs b/workshop/dotnet/Solutions/Lesson3/Program.cs index cd5d399..290e45f 100644 --- a/workshop/dotnet/Solutions/Lesson3/Program.cs +++ b/workshop/dotnet/Solutions/Lesson3/Program.cs @@ -1,5 +1,7 @@ using Core.Utilities.Config; -// Step 4 - Add import required for StockService +// Step 1 - Add import for Plugins +using Plugins; +// Step 5 - Add import required for StockService using Core.Utilities.Services; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; @@ -13,13 +15,13 @@ // Initialize the kernel with chat completion IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); // Enable tracing -//builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); +builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); Kernel kernel = builder.Build(); -// Step 1 - Initialize Time plugin and registration in the kernel +// Step 2 - Initialize Time plugin and registration in the kernel kernel.Plugins.AddFromObject(new TimeInformationPlugin()); -// Step 5 - Initialize Stock Data Plugin and register it in the kernel +// Step 6 - Initialize Stock Data Plugin and register it in the kernel HttpClient httpClient = new(); StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); kernel.Plugins.AddFromObject(stockDataPlugin); @@ -31,7 +33,7 @@ // Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { - // Step 2 - Add Auto invoke kernel functions as the tool call behavior + // Step 3 - Add Auto invoke kernel functions as the tool call behavior ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions }; @@ -53,7 +55,7 @@ string fullMessage = ""; chatHistory.AddUserMessage(userInput); - // Step 3 - Provide promptExecutionSettings and kernel arguments + // Step 4 - Provide promptExecutionSettings and kernel arguments await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, kernel)) { Console.Write(chatUpdate.Content); From 315c7bbf7cbee07ea1709dd5f83aab5b2fda8d3a Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Wed, 9 Oct 2024 17:14:01 -0400 Subject: [PATCH 11/61] Initial version of Dockerfile for container app --- workshop/dotnet/App/Directory.Build.props | 18 +++++ workshop/dotnet/App/Dockerfile | 22 ++++++ workshop/dotnet/App/backend/MinimalApi.csproj | 9 +++ .../App/backend/Plugins/StockDataPlugin.cs | 28 ++++++++ .../backend/Plugins/TimeInformationPlugin.cs | 11 +++ workshop/dotnet/App/backend/Program.cs | 69 +++++++++++++++++++ workshop/dotnet/azure.yaml | 11 +++ 7 files changed, 168 insertions(+) create mode 100644 workshop/dotnet/App/Directory.Build.props create mode 100644 workshop/dotnet/App/Dockerfile create mode 100644 workshop/dotnet/App/backend/MinimalApi.csproj create mode 100644 workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs create mode 100644 workshop/dotnet/App/backend/Plugins/TimeInformationPlugin.cs create mode 100644 workshop/dotnet/App/backend/Program.cs create mode 100644 workshop/dotnet/azure.yaml diff --git a/workshop/dotnet/App/Directory.Build.props b/workshop/dotnet/App/Directory.Build.props new file mode 100644 index 0000000..e83f79a --- /dev/null +++ b/workshop/dotnet/App/Directory.Build.props @@ -0,0 +1,18 @@ + + + + + Exe + + + + + + + + + Always + + + + \ No newline at end of file diff --git a/workshop/dotnet/App/Dockerfile b/workshop/dotnet/App/Dockerfile new file mode 100644 index 0000000..7bfda56 --- /dev/null +++ b/workshop/dotnet/App/Dockerfile @@ -0,0 +1,22 @@ +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +WORKDIR /app +EXPOSE 8080 +EXPOSE 443 + +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS build +WORKDIR /src +COPY ["../Directory.Build.props", "."] +COPY ["../Directory.Packages.props", "."] +COPY ["App/Directory.Build.props", "App/"] +COPY ["App/backend/", "App/backend/"] +COPY ["../../Core.Utilities/", "Core.Utilities/"] +RUN dotnet restore "App/backend/MinimalApi.csproj" + +WORKDIR "/src/App/backend" +FROM build AS publish +RUN dotnet publish "MinimalApi.csproj" -o /app + +FROM base AS final +WORKDIR /app +COPY --from=publish /app . +ENTRYPOINT ["dotnet", "MinimalApi.dll"] \ No newline at end of file diff --git a/workshop/dotnet/App/backend/MinimalApi.csproj b/workshop/dotnet/App/backend/MinimalApi.csproj new file mode 100644 index 0000000..815d6af --- /dev/null +++ b/workshop/dotnet/App/backend/MinimalApi.csproj @@ -0,0 +1,9 @@ + baf96ebb-2f1a-4528-a2c3-c3179a4b7d35 + + + + + Always + + + diff --git a/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs b/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs new file mode 100644 index 0000000..24596eb --- /dev/null +++ b/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs @@ -0,0 +1,28 @@ +using Core.Utilities.Services; +using Core.Utilities.Models; +using Core.Utilities.Extensions; + +using Microsoft.SemanticKernel; +using System.ComponentModel; + +namespace Plugins; + +public class StockDataPlugin(StocksService stockService) +{ + private readonly StocksService _stockService = stockService; + + [KernelFunction, Description("Gets stock price")] + public async Task GetStockPrice(string symbol) + { + string tabularData = (await _stockService.GetStockDailyOpenClose(symbol)).FormatStockData(); + return tabularData; + } + + [KernelFunction, Description("Gets stock price for a given date")] + public async Task GetStockPriceForDate(string symbol, DateTime date) + { + string tabularData = (await _stockService.GetStockDailyOpenClose(symbol, date)).FormatStockData(); + return tabularData; + } + +} \ No newline at end of file diff --git a/workshop/dotnet/App/backend/Plugins/TimeInformationPlugin.cs b/workshop/dotnet/App/backend/Plugins/TimeInformationPlugin.cs new file mode 100644 index 0000000..32beb09 --- /dev/null +++ b/workshop/dotnet/App/backend/Plugins/TimeInformationPlugin.cs @@ -0,0 +1,11 @@ +using System.ComponentModel; +using Microsoft.SemanticKernel; + +namespace Plugins; + +public class TimeInformationPlugin +{ + [KernelFunction]  + [Description("Retrieves the current time in UTC.")] + public string GetCurrentUtcTime() => DateTime.UtcNow.ToString("R"); +} \ No newline at end of file diff --git a/workshop/dotnet/App/backend/Program.cs b/workshop/dotnet/App/backend/Program.cs new file mode 100644 index 0000000..290e45f --- /dev/null +++ b/workshop/dotnet/App/backend/Program.cs @@ -0,0 +1,69 @@ +using Core.Utilities.Config; +// Step 1 - Add import for Plugins +using Plugins; +// Step 5 - Add import required for StockService +using Core.Utilities.Services; +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.OpenAI; +// Add ChatCompletion import +using Microsoft.SemanticKernel.ChatCompletion; +// Temporarily added to enable Semantic Kernel tracing +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + + +// Initialize the kernel with chat completion +IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); +// Enable tracing +builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); +Kernel kernel = builder.Build(); + +// Step 2 - Initialize Time plugin and registration in the kernel +kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + +// Step 6 - Initialize Stock Data Plugin and register it in the kernel +HttpClient httpClient = new(); +StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); +kernel.Plugins.AddFromObject(stockDataPlugin); + +// Get chatCompletionService and initialize chatHistory wiht system prompt +var chatCompletionService = kernel.GetRequiredService(); +ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); +// Remove the promptExecutionSettings and kernelArgs initialization code +// Add system prompt +OpenAIPromptExecutionSettings promptExecutionSettings = new() +{ + // Step 3 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions +}; + +// Initialize kernel arguments +KernelArguments kernelArgs = new(promptExecutionSettings); + +// Execute program. +const string terminationPhrase = "quit"; +string? userInput; +do +{ + Console.Write("User > "); + userInput = Console.ReadLine(); + + if (userInput != null && userInput != terminationPhrase) + { + Console.Write("Assistant > "); + // Initialize fullMessage variable and add user input to chat history + string fullMessage = ""; + chatHistory.AddUserMessage(userInput); + + // Step 4 - Provide promptExecutionSettings and kernel arguments + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, kernel)) + { + Console.Write(chatUpdate.Content); + fullMessage += chatUpdate.Content ?? ""; + } + chatHistory.AddAssistantMessage(fullMessage); + + Console.WriteLine(); + } +} +while (userInput != terminationPhrase); \ No newline at end of file diff --git a/workshop/dotnet/azure.yaml b/workshop/dotnet/azure.yaml new file mode 100644 index 0000000..b261eaf --- /dev/null +++ b/workshop/dotnet/azure.yaml @@ -0,0 +1,11 @@ +name: semantic-kernel-workshop-csharp +metadata: + template: semantic-kernel-workshop-csharp@0.0.1-beta +services: + web: + project: ./App/backend/ + host: containerapp + language: dotnet + docker: + path: ../Dockerfile + context: ../../ From b0f87972fbf9dcc67ddcdae164a9ac362ab7985b Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 11 Oct 2024 10:47:58 -0400 Subject: [PATCH 12/61] initial simple working api --- .../App/backend/Controllers/ChatController.cs | 79 ++++++++++++++ workshop/dotnet/App/backend/MinimalApi.csproj | 8 +- workshop/dotnet/App/backend/Program.cs | 101 ++++++++---------- workshop/dotnet/Directory.Packages.props | 38 +++---- workshop/dotnet/Solutions/Lesson3/Program.cs | 2 +- 5 files changed, 148 insertions(+), 80 deletions(-) create mode 100644 workshop/dotnet/App/backend/Controllers/ChatController.cs diff --git a/workshop/dotnet/App/backend/Controllers/ChatController.cs b/workshop/dotnet/App/backend/Controllers/ChatController.cs new file mode 100644 index 0000000..1ad880d --- /dev/null +++ b/workshop/dotnet/App/backend/Controllers/ChatController.cs @@ -0,0 +1,79 @@ +using Core.Utilities.Config; +using Core.Utilities.Models; +// Add import for Plugins +using Plugins; +// Add import required for StockService +using Core.Utilities.Services; +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.Connectors.OpenAI; +// Add ChatCompletion import +using Microsoft.SemanticKernel.ChatCompletion; +// Temporarily added to enable Semantic Kernel tracing +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +using Microsoft.AspNetCore.Mvc; + +namespace Controllers; + +[ApiController] +[Route("chat")] +public class ChatController : ControllerBase { + + private readonly Kernel _kernel; + + public ChatController() + { + IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); + // Enable tracing + builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); + _kernel = builder.Build(); + + // Step 2 - Initialize Time plugin and registration in the kernel + _kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + + // Step 6 - Initialize Stock Data Plugin and register it in the kernel + HttpClient httpClient = new(); + StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); + _kernel.Plugins.AddFromObject(stockDataPlugin); + } + + [HttpPost("/")] + public async Task ReplyAsync( + String userInput, String[] history) + { + // Get chatCompletionService and initialize chatHistory wiht system prompt + var chatCompletionService = _kernel.GetRequiredService(); + ChatHistory chatHistory = new(string.Join("\n", history)); + chatHistory.AddUserMessage(userInput); + chatHistory.AddSystemMessage("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); + // Add system prompt + OpenAIPromptExecutionSettings promptExecutionSettings = new() + { + // Step 3 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions + }; + + // Initialize kernel arguments + KernelArguments kernelArgs = new(promptExecutionSettings); + + // Initialize fullMessage variable and add user input to chat history + string fullMessage = ""; + if (userInput != null) + { + chatHistory.AddUserMessage(userInput); + + // Step 4 - Provide promptExecutionSettings and kernel arguments + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, _kernel)) + { + Console.Write(chatUpdate.Content); + fullMessage += chatUpdate.Content ?? ""; + } + chatHistory.AddAssistantMessage(fullMessage); + } + + return fullMessage; + } + + +} \ No newline at end of file diff --git a/workshop/dotnet/App/backend/MinimalApi.csproj b/workshop/dotnet/App/backend/MinimalApi.csproj index 815d6af..578a94d 100644 --- a/workshop/dotnet/App/backend/MinimalApi.csproj +++ b/workshop/dotnet/App/backend/MinimalApi.csproj @@ -1,9 +1,13 @@ - baf96ebb-2f1a-4528-a2c3-c3179a4b7d35 - + Always + + + + + diff --git a/workshop/dotnet/App/backend/Program.cs b/workshop/dotnet/App/backend/Program.cs index 290e45f..65b6fc9 100644 --- a/workshop/dotnet/App/backend/Program.cs +++ b/workshop/dotnet/App/backend/Program.cs @@ -1,69 +1,54 @@ -using Core.Utilities.Config; -// Step 1 - Add import for Plugins -using Plugins; -// Step 5 - Add import required for StockService -using Core.Utilities.Services; -using Microsoft.SemanticKernel; -using Microsoft.SemanticKernel.Connectors.OpenAI; -// Add ChatCompletion import -using Microsoft.SemanticKernel.ChatCompletion; -// Temporarily added to enable Semantic Kernel tracing -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; +// Copyright (c) Microsoft. All rights reserved. +using Microsoft.AspNetCore.Antiforgery; -// Initialize the kernel with chat completion -IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); -// Enable tracing -builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); -Kernel kernel = builder.Build(); +var builder = WebApplication.CreateBuilder(args); -// Step 2 - Initialize Time plugin and registration in the kernel -kernel.Plugins.AddFromObject(new TimeInformationPlugin()); +builder.Services.AddControllers(); +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); -// Step 6 - Initialize Stock Data Plugin and register it in the kernel -HttpClient httpClient = new(); -StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); -kernel.Plugins.AddFromObject(stockDataPlugin); +// Load user secrets +builder.Configuration.AddUserSecrets(); +//builder.Configuration.ConfigureAzureKeyVault(); + +// See: https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); +builder.Services.AddOutputCache(); +//builder.Services.AddCrossOriginResourceSharing(); +//builder.Services.AddAzureServices(); +builder.Services.AddAntiforgery(options => { options.HeaderName = "X-CSRF-TOKEN-HEADER"; options.FormFieldName = "X-CSRF-TOKEN-FORM"; }); +builder.Services.AddHttpClient(); + +builder.Services.AddDistributedMemoryCache(); -// Get chatCompletionService and initialize chatHistory wiht system prompt -var chatCompletionService = kernel.GetRequiredService(); -ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); -// Remove the promptExecutionSettings and kernelArgs initialization code -// Add system prompt -OpenAIPromptExecutionSettings promptExecutionSettings = new() -{ - // Step 3 - Add Auto invoke kernel functions as the tool call behavior - ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions -}; -// Initialize kernel arguments -KernelArguments kernelArgs = new(promptExecutionSettings); +var app = builder.Build(); +app.UseSwagger(); +app.UseSwaggerUI(); -// Execute program. -const string terminationPhrase = "quit"; -string? userInput; -do +//app.UseHttpsRedirection(); +app.UseOutputCache(); +app.UseRouting(); +app.UseCors(); +app.UseAntiforgery(); +app.MapControllers(); + +app.Use(next => context => { - Console.Write("User > "); - userInput = Console.ReadLine(); + var antiforgery = app.Services.GetRequiredService(); + var tokens = antiforgery.GetAndStoreTokens(context); + context.Response.Cookies.Append("XSRF-TOKEN", tokens?.RequestToken ?? string.Empty, new CookieOptions() { HttpOnly = false }); + return next(context); +}); + +app.Map("/", () => Results.Redirect("/swagger")); - if (userInput != null && userInput != terminationPhrase) - { - Console.Write("Assistant > "); - // Initialize fullMessage variable and add user input to chat history - string fullMessage = ""; - chatHistory.AddUserMessage(userInput); +// app.UseAuthorization(); - // Step 4 - Provide promptExecutionSettings and kernel arguments - await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, kernel)) - { - Console.Write(chatUpdate.Content); - fullMessage += chatUpdate.Content ?? ""; - } - chatHistory.AddAssistantMessage(fullMessage); +app.MapControllerRoute( + "default", + "{controller=ChatController}"); - Console.WriteLine(); - } -} -while (userInput != terminationPhrase); \ No newline at end of file +app.Run(); \ No newline at end of file diff --git a/workshop/dotnet/Directory.Packages.props b/workshop/dotnet/Directory.Packages.props index 7552ce1..61d6e17 100644 --- a/workshop/dotnet/Directory.Packages.props +++ b/workshop/dotnet/Directory.Packages.props @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/workshop/dotnet/Solutions/Lesson3/Program.cs b/workshop/dotnet/Solutions/Lesson3/Program.cs index 290e45f..0db49e5 100644 --- a/workshop/dotnet/Solutions/Lesson3/Program.cs +++ b/workshop/dotnet/Solutions/Lesson3/Program.cs @@ -15,7 +15,7 @@ // Initialize the kernel with chat completion IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); // Enable tracing -builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); +//builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); Kernel kernel = builder.Build(); // Step 2 - Initialize Time plugin and registration in the kernel From 8c72f0eb5a6945af87e57e69afa96cd7c83a9489 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 11 Oct 2024 11:33:42 -0400 Subject: [PATCH 13/61] Refactored kernel as singleton --- .../App/backend/Controllers/ChatController.cs | 19 +++-------- .../backend/Extensions/ServiceExtensions.cs | 34 +++++++++++++++++++ workshop/dotnet/App/backend/Program.cs | 8 +++-- workshop/dotnet/Directory.Packages.props | 2 +- 4 files changed, 45 insertions(+), 18 deletions(-) create mode 100644 workshop/dotnet/App/backend/Extensions/ServiceExtensions.cs diff --git a/workshop/dotnet/App/backend/Controllers/ChatController.cs b/workshop/dotnet/App/backend/Controllers/ChatController.cs index 1ad880d..386a76a 100644 --- a/workshop/dotnet/App/backend/Controllers/ChatController.cs +++ b/workshop/dotnet/App/backend/Controllers/ChatController.cs @@ -17,28 +17,17 @@ namespace Controllers; [ApiController] -[Route("chat")] +[Route("sk")] public class ChatController : ControllerBase { private readonly Kernel _kernel; - public ChatController() + public ChatController(Kernel kernel) { - IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); - // Enable tracing - builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); - _kernel = builder.Build(); - - // Step 2 - Initialize Time plugin and registration in the kernel - _kernel.Plugins.AddFromObject(new TimeInformationPlugin()); - - // Step 6 - Initialize Stock Data Plugin and register it in the kernel - HttpClient httpClient = new(); - StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); - _kernel.Plugins.AddFromObject(stockDataPlugin); + _kernel = kernel; } - [HttpPost("/")] + [HttpPost("/chat")] public async Task ReplyAsync( String userInput, String[] history) { diff --git a/workshop/dotnet/App/backend/Extensions/ServiceExtensions.cs b/workshop/dotnet/App/backend/Extensions/ServiceExtensions.cs new file mode 100644 index 0000000..cd3e6f0 --- /dev/null +++ b/workshop/dotnet/App/backend/Extensions/ServiceExtensions.cs @@ -0,0 +1,34 @@ +using Core.Utilities.Config; +using Core.Utilities.Models; +// Add import for Plugins +using Plugins; +// Add import required for StockService +using Core.Utilities.Services; +using Microsoft.SemanticKernel; + +namespace Extensions; + +public static class ServiceExtensions +{ + public static void AddSkServices(this IServiceCollection services) + { + services.AddSingleton(_ => + { + IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); + // Enable tracing + builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); + Kernel kernel = builder.Build(); + + // Step 2 - Initialize Time plugin and registration in the kernel + kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + + // Step 6 - Initialize Stock Data Plugin and register it in the kernel + HttpClient httpClient = new(); + StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); + kernel.Plugins.AddFromObject(stockDataPlugin); + + return kernel; + }); + } + +} \ No newline at end of file diff --git a/workshop/dotnet/App/backend/Program.cs b/workshop/dotnet/App/backend/Program.cs index 65b6fc9..77a00db 100644 --- a/workshop/dotnet/App/backend/Program.cs +++ b/workshop/dotnet/App/backend/Program.cs @@ -1,6 +1,5 @@ -// Copyright (c) Microsoft. All rights reserved. - using Microsoft.AspNetCore.Antiforgery; +using Extensions; var builder = WebApplication.CreateBuilder(args); @@ -23,6 +22,11 @@ builder.Services.AddDistributedMemoryCache(); +// Add Azure services +//builder.Services.AddAzureServices(); + +// Add Semantic Kernel services +builder.Services.AddSkServices(); var app = builder.Build(); app.UseSwagger(); diff --git a/workshop/dotnet/Directory.Packages.props b/workshop/dotnet/Directory.Packages.props index 61d6e17..b67ce80 100644 --- a/workshop/dotnet/Directory.Packages.props +++ b/workshop/dotnet/Directory.Packages.props @@ -9,7 +9,7 @@ - + From 2d60c691a0f508ec7429b622af4e7fb7674f1e7f Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 11 Oct 2024 16:17:34 -0400 Subject: [PATCH 14/61] API working with request/response --- workshop/dotnet/App/Directory.Build.props | 4 -- .../App/backend/Controllers/ChatController.cs | 42 +++++++++---------- .../Config/AISettingsProvider.cs | 4 +- .../Extensions/ModelExtensionMethods.cs | 27 +++++++++++- .../Models/{AISettings.cs => AppSettings.cs} | 2 +- .../Core.Utilities/Models/ChatMessage.cs | 7 ++++ .../Core.Utilities/Models/ChatRequest.cs | 7 ++++ .../Core.Utilities/Models/ChatResponse.cs | 7 ++++ .../dotnet/Core.Utilities/Models/Stocks.cs | 26 ++++++------ 9 files changed, 84 insertions(+), 42 deletions(-) rename workshop/dotnet/Core.Utilities/Models/{AISettings.cs => AppSettings.cs} (92%) create mode 100644 workshop/dotnet/Core.Utilities/Models/ChatMessage.cs create mode 100644 workshop/dotnet/Core.Utilities/Models/ChatRequest.cs create mode 100644 workshop/dotnet/Core.Utilities/Models/ChatResponse.cs diff --git a/workshop/dotnet/App/Directory.Build.props b/workshop/dotnet/App/Directory.Build.props index e83f79a..4d74175 100644 --- a/workshop/dotnet/App/Directory.Build.props +++ b/workshop/dotnet/App/Directory.Build.props @@ -1,10 +1,6 @@ - - Exe - - diff --git a/workshop/dotnet/App/backend/Controllers/ChatController.cs b/workshop/dotnet/App/backend/Controllers/ChatController.cs index 386a76a..0c8f887 100644 --- a/workshop/dotnet/App/backend/Controllers/ChatController.cs +++ b/workshop/dotnet/App/backend/Controllers/ChatController.cs @@ -1,9 +1,8 @@ -using Core.Utilities.Config; using Core.Utilities.Models; +using Core.Utilities.Extensions; // Add import for Plugins using Plugins; // Add import required for StockService -using Core.Utilities.Services; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; // Add ChatCompletion import @@ -21,47 +20,48 @@ namespace Controllers; public class ChatController : ControllerBase { private readonly Kernel _kernel; + private readonly OpenAIPromptExecutionSettings _promptExecutionSettings; public ChatController(Kernel kernel) { _kernel = kernel; + _promptExecutionSettings = new() + { + // Step 3 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions + }; + } [HttpPost("/chat")] - public async Task ReplyAsync( - String userInput, String[] history) + public async Task ReplyAsync([FromBody]ChatRequest request) { // Get chatCompletionService and initialize chatHistory wiht system prompt var chatCompletionService = _kernel.GetRequiredService(); - ChatHistory chatHistory = new(string.Join("\n", history)); - chatHistory.AddUserMessage(userInput); - chatHistory.AddSystemMessage("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); - // Add system prompt - OpenAIPromptExecutionSettings promptExecutionSettings = new() - { - // Step 3 - Add Auto invoke kernel functions as the tool call behavior - ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions - }; - - // Initialize kernel arguments - KernelArguments kernelArgs = new(promptExecutionSettings); + var chatHistory = new ChatHistory(); + if (request.MessageHistory.Count == 0) { + chatHistory.AddSystemMessage("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); + } + else { + chatHistory = request.ToChatHistory(); + } // Initialize fullMessage variable and add user input to chat history string fullMessage = ""; - if (userInput != null) + if (request.InputMessage != null) { - chatHistory.AddUserMessage(userInput); + chatHistory.AddUserMessage(request.InputMessage); // Step 4 - Provide promptExecutionSettings and kernel arguments - await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, _kernel)) + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, _promptExecutionSettings, _kernel)) { Console.Write(chatUpdate.Content); fullMessage += chatUpdate.Content ?? ""; } chatHistory.AddAssistantMessage(fullMessage); } - - return fullMessage; + var chatResponse = new ChatResponse(fullMessage, chatHistory.FromChatHistory()); + return chatResponse; } diff --git a/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs b/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs index 2c20f38..c815073 100644 --- a/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs +++ b/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs @@ -7,7 +7,7 @@ namespace Core.Utilities.Config; internal static class AISettingsProvider { - internal static AISettings GetSettings() + internal static AppSettings GetSettings() { IConfigurationRoot config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true) @@ -16,7 +16,7 @@ internal static AISettings GetSettings() .Build(); var aiSettings = config - .Get(); + .Get(); Guard.Against.Null(aiSettings); Guard.Against.NullOrEmpty(aiSettings.ModelName); diff --git a/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs b/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs index 6cfb7e6..13c6223 100644 --- a/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs +++ b/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs @@ -1,6 +1,7 @@ using Core.Utilities.Models; +using Microsoft.SemanticKernel; +using Microsoft.SemanticKernel.ChatCompletion; using System.Text; -using System.Text.Json; namespace Core.Utilities.Extensions { @@ -16,5 +17,29 @@ public static string FormatStockData(this Stock stockData) return stringBuilder.ToString(); } + + public static ChatHistory ToChatHistory(this ChatRequest chatRequest) + { + var chatHistory = new ChatHistory(); + chatRequest.MessageHistory.ForEach(chatMessage => { + string role = chatMessage.Role; + if ("Tool".Equals(role, StringComparison.OrdinalIgnoreCase)) { + role = AuthorRole.Assistant.Label; + role = "assistant"; + } + chatHistory.Add(new ChatMessageContent(new AuthorRole(role), chatMessage.Message)); + }); + return chatHistory; + } + + public static List FromChatHistory(this ChatHistory chatHistory) { + var messageHistory = new List(); + messageHistory.AddRange(chatHistory + .Where(m => m.Content != null) + .Select(m => new ChatMessage(m.Content!, m.Role.Label))); + + return messageHistory; + } + } } diff --git a/workshop/dotnet/Core.Utilities/Models/AISettings.cs b/workshop/dotnet/Core.Utilities/Models/AppSettings.cs similarity index 92% rename from workshop/dotnet/Core.Utilities/Models/AISettings.cs rename to workshop/dotnet/Core.Utilities/Models/AppSettings.cs index 8b9f67b..090554a 100644 --- a/workshop/dotnet/Core.Utilities/Models/AISettings.cs +++ b/workshop/dotnet/Core.Utilities/Models/AppSettings.cs @@ -2,7 +2,7 @@ namespace Core.Utilities.Models; -public class AISettings { +public class AppSettings { public string Endpoint { get; set; } = string.Empty; diff --git a/workshop/dotnet/Core.Utilities/Models/ChatMessage.cs b/workshop/dotnet/Core.Utilities/Models/ChatMessage.cs new file mode 100644 index 0000000..4a4d783 --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Models/ChatMessage.cs @@ -0,0 +1,7 @@ +namespace Core.Utilities.Models; + +public record ChatMessage ( + string Message, + string Role +); + diff --git a/workshop/dotnet/Core.Utilities/Models/ChatRequest.cs b/workshop/dotnet/Core.Utilities/Models/ChatRequest.cs new file mode 100644 index 0000000..ab27fed --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Models/ChatRequest.cs @@ -0,0 +1,7 @@ +namespace Core.Utilities.Models; + +public record ChatRequest( + string InputMessage, + List MessageHistory +); + diff --git a/workshop/dotnet/Core.Utilities/Models/ChatResponse.cs b/workshop/dotnet/Core.Utilities/Models/ChatResponse.cs new file mode 100644 index 0000000..5cff796 --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Models/ChatResponse.cs @@ -0,0 +1,7 @@ +namespace Core.Utilities.Models; + +public record ChatResponse( + string Response, + List MessageHistory +); + diff --git a/workshop/dotnet/Core.Utilities/Models/Stocks.cs b/workshop/dotnet/Core.Utilities/Models/Stocks.cs index 698ccbe..d37d53d 100644 --- a/workshop/dotnet/Core.Utilities/Models/Stocks.cs +++ b/workshop/dotnet/Core.Utilities/Models/Stocks.cs @@ -1,14 +1,14 @@ -namespace Core.Utilities.Models -{ - public record Stocks(List Stock); +namespace Core.Utilities.Models; + +public record Stocks(List Stock); + +public record Stock( + string Symbol, + double Open, + double Close, + double AfterHours, + double PreMarket, + string From, + string Status = "OK" +); - public record Stock( - string Symbol, - double Open, - double Close, - double AfterHours, - double PreMarket, - string From, - string Status = "OK" - ); -} From a385007f6916b92430463e1f10698ca7c29220b7 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 14 Oct 2024 16:40:28 -0400 Subject: [PATCH 15/61] Refactored to use GetStockAggregate instead of dailyclose API due to change in polygon api data available --- .../App/backend/Plugins/StockDataPlugin.cs | 4 +- .../Services/StocksServiceTest.cs | 145 +++++++++++++++++- .../Extensions/ModelExtensionMethods.cs | 4 +- .../Models/AggregateStockResponse.cs | 21 +++ .../dotnet/Core.Utilities/Models/Stocks.cs | 4 +- .../Core.Utilities/Services/StocksService.cs | 48 ++++++ .../Lesson3/Plugins/StockDataPlugin.cs | 4 +- 7 files changed, 219 insertions(+), 11 deletions(-) create mode 100644 workshop/dotnet/Core.Utilities/Models/AggregateStockResponse.cs diff --git a/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs b/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs index 24596eb..4ac67bd 100644 --- a/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs +++ b/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs @@ -14,14 +14,14 @@ public class StockDataPlugin(StocksService stockService) [KernelFunction, Description("Gets stock price")] public async Task GetStockPrice(string symbol) { - string tabularData = (await _stockService.GetStockDailyOpenClose(symbol)).FormatStockData(); + string tabularData = (await _stockService.GetStockAggregate(symbol)).FormatStockData(); return tabularData; } [KernelFunction, Description("Gets stock price for a given date")] public async Task GetStockPriceForDate(string symbol, DateTime date) { - string tabularData = (await _stockService.GetStockDailyOpenClose(symbol, date)).FormatStockData(); + string tabularData = (await _stockService.GetStockAggregate(symbol, date)).FormatStockData(); return tabularData; } diff --git a/workshop/dotnet/Core.Utilities.Tests/Services/StocksServiceTest.cs b/workshop/dotnet/Core.Utilities.Tests/Services/StocksServiceTest.cs index 37a3cf6..f714850 100644 --- a/workshop/dotnet/Core.Utilities.Tests/Services/StocksServiceTest.cs +++ b/workshop/dotnet/Core.Utilities.Tests/Services/StocksServiceTest.cs @@ -120,10 +120,149 @@ public async Task GetStockDailyOpenClose_ReturnsStock_WhenResponseIsSuccessfulWi Assert.Equal("MSFT", result.Symbol); Assert.Equal(417.63, result.Open); Assert.Equal(416.54, result.Close); - Assert.Equal(416.33, result.AfterHours); - Assert.Equal(416.91, result.PreMarket); Assert.Equal("2024-10-03", result.From); Assert.Equal("OK", result.Status); } + + + [Fact] + public async Task GetStockAggregate_ReturnsStock_WhenResponseIsSuccessfulWitMockJson() + { + // Arrange + string symbol = "MSFT"; + var date = new DateTime(2024, 10, 3); + var jsonResponse = @" + { + ""status"": ""OK"", + ""ticker"": ""MSFT"", + ""queryCount"": 1, + ""results"": [ + { + ""o"": 150.0, + ""h"": 155.50, + ""l"": 145.20, + ""c"": 152.54 + } + ] + }"; + + _httpMessageHandlerMock.Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.OK, + Content = new StringContent(jsonResponse, System.Text.Encoding.UTF8, "application/json") + }); + + // Act + var result = await _stocksService.GetStockAggregate(symbol, date); + + // Assert + Assert.NotNull(result); + Assert.Equal(symbol, result.Symbol); + Assert.Equal(150.00, result.Open); + Assert.Equal(155.50, result.High); + Assert.Equal(145.20, result.Low); + Assert.Equal(152.54, result.Close); + Assert.Equal("OK", result.Status); + } + + [Fact] + public async Task GetStockAggregate_ReturnsStock_WhenResponseIsSuccessful() + { + // Arrange + string symbol = "AAPL"; + var date = new DateTime(2023, 10, 1); + + var aggregateStockResponse = new AggregateStockResponse( + 1, + "OK", + new List + { + new StockResult(Open: 150.0, High: 155.0, Low: 145.0, Close: 152.0) + } + ); + + _httpMessageHandlerMock.Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.OK, + Content = JsonContent.Create(aggregateStockResponse) + }); + + // Act + var result = await _stocksService.GetStockAggregate(symbol, date); + + // Assert + Assert.NotNull(result); + Assert.Equal(symbol, result.Symbol); + Assert.Equal(150.0, result.Open); + Assert.Equal(155.0, result.High); + Assert.Equal(145.0, result.Low); + Assert.Equal(152.0, result.Close); + Assert.Equal("OK", result.Status); + } + + [Fact] + public async Task GetStockAggregate_ThrowsHttpRequestException_WhenResponseIsUnsuccessful() + { + // Arrange + var symbol = "AAPL"; + var date = new DateTime(2023, 10, 1); + + _httpMessageHandlerMock.Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.BadRequest, + Content = new StringContent("Bad Request") + }); + + // Act & Assert + await Assert.ThrowsAsync(() => _stocksService.GetStockAggregate(symbol, date)); + } + + [Fact] + public async Task GetStockAggregate_ReturnsNull_WhenNoStockResults() + { + // Arrange + string symbol = "AAPL"; + var date = new DateTime(2023, 10, 1); + var aggregateStockResponse = new AggregateStockResponse( + 0, + "OK", + new List() + ); + _httpMessageHandlerMock.Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.OK, + Content = JsonContent.Create(aggregateStockResponse) + }); + + // Act + var result = await _stocksService.GetStockAggregate(symbol, date); + + // Assert + Assert.Null(result); + } } -} \ No newline at end of file +} diff --git a/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs b/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs index 13c6223..7227db9 100644 --- a/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs +++ b/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs @@ -11,9 +11,9 @@ public static string FormatStockData(this Stock stockData) { StringBuilder stringBuilder = new(); - stringBuilder.AppendLine("| Symbol | Price | Pre Market Price | After Hours Price | Date "); + stringBuilder.AppendLine("| Symbol | Price | Open | Low | High | Date "); stringBuilder.AppendLine("| ----- | ----- | ----- | ----- |"); - stringBuilder.AppendLine($"| {stockData.Symbol} | {stockData.Open} | {stockData.PreMarket} | {stockData.AfterHours} | {stockData.From} "); + stringBuilder.AppendLine($"| {stockData.Symbol} | {stockData.Close} | {stockData.Open} | {stockData.Low} | {stockData.High} | {stockData.From} "); return stringBuilder.ToString(); } diff --git a/workshop/dotnet/Core.Utilities/Models/AggregateStockResponse.cs b/workshop/dotnet/Core.Utilities/Models/AggregateStockResponse.cs new file mode 100644 index 0000000..947e903 --- /dev/null +++ b/workshop/dotnet/Core.Utilities/Models/AggregateStockResponse.cs @@ -0,0 +1,21 @@ +using System.Text.Json.Serialization; + +namespace Core.Utilities.Models; + +public record AggregateStockResponse( + int ResultsCount, + string Status, + [property: JsonPropertyName("results")] + List StockResults +); + +public record StockResult( + [property: JsonPropertyName("o")] + double Open, + [property: JsonPropertyName("c")] + double Close, + [property: JsonPropertyName("h")] + double High, + [property: JsonPropertyName("l")] + double Low +); \ No newline at end of file diff --git a/workshop/dotnet/Core.Utilities/Models/Stocks.cs b/workshop/dotnet/Core.Utilities/Models/Stocks.cs index d37d53d..4e23965 100644 --- a/workshop/dotnet/Core.Utilities/Models/Stocks.cs +++ b/workshop/dotnet/Core.Utilities/Models/Stocks.cs @@ -6,8 +6,8 @@ public record Stock( string Symbol, double Open, double Close, - double AfterHours, - double PreMarket, + double High, + double Low, string From, string Status = "OK" ); diff --git a/workshop/dotnet/Core.Utilities/Services/StocksService.cs b/workshop/dotnet/Core.Utilities/Services/StocksService.cs index eeb4fff..571ace8 100644 --- a/workshop/dotnet/Core.Utilities/Services/StocksService.cs +++ b/workshop/dotnet/Core.Utilities/Services/StocksService.cs @@ -1,22 +1,33 @@ using Ardalis.GuardClauses; using Core.Utilities.Config; using Core.Utilities.Models; +using Microsoft.Extensions.Logging; using System.Net.Http.Json; namespace Core.Utilities.Services { + /// + /// Service for retrieving stock information from the Polygon API. + /// public class StocksService { private readonly HttpClient _httpClient; private string _apiKey; + private static ILogger logger = LoggerFactory.Create(builder => builder.AddConsole()).CreateLogger(); + public StocksService(HttpClient httpClient) { httpClient.BaseAddress = new Uri("https://api.polygon.io/v1/"); _httpClient = httpClient; _apiKey = AISettingsProvider.GetSettings().StockServiceApiKey; } + + /// + /// Retrieves the daily open and close prices for a stock. + /// NOTE: this requires a premium subscription to get data for the current month + /// public async Task GetStockDailyOpenClose(string symbol, DateTime? date = null) { //Default to yesterday's date if no date is provided as current day pricing requires premium subscription @@ -27,6 +38,43 @@ public async Task GetStockDailyOpenClose(string symbol, DateTime? date = } + /// + /// Retrieves the aggregate stock information for a given symbol and date. + /// NOTE: using this to get stock last price as it is free to usecd + /// + public async Task GetStockAggregate(string symbol, DateTime? date = null) + { + logger.LogDebug("> Getting stock aggregate"); + //Default to yesterday's date if no date is provided as current day pricing requires premium subscription + DateTime toDate = date ?? DateTime.Now.AddDays(-1); + string toDateFormatted = toDate.ToString("yyyy-MM-dd"); + //Default fromDate to 4 days ago to account for weekends and Monday holidays + string fromDateFormatted = toDate.AddDays(-4).ToString("yyyy-MM-dd"); + var requestUri = $"/v2/aggs/ticker/{symbol}/range/1/day/{fromDateFormatted}/{toDateFormatted}?adjusted=true&sort=desc&apiKey="; + // Log the requestUri without the apiKey + logger.LogDebug($"Request URI: {requestUri}"); + requestUri += $"{_apiKey}"; + + AggregateStockResponse response = await GetHttpResponse(requestUri); + Stock stock = null; + if (response.StockResults.Count > 0) { + StockResult stockResult = response.StockResults[0]; + stock = new Stock( + Symbol: symbol, + Open: stockResult.Open, + High: stockResult.High, + Low: stockResult.Low, + Close: stockResult.Close, + From: toDateFormatted, + Status: response.Status + ); + + } + logger.LogDebug("< Getting stock aggregate count: " + response.ResultsCount); + return stock; + } + + private async Task GetHttpResponse(string requestUri) { HttpResponseMessage response = await _httpClient.GetAsync(requestUri); diff --git a/workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs b/workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs index 24596eb..4ac67bd 100644 --- a/workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs +++ b/workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs @@ -14,14 +14,14 @@ public class StockDataPlugin(StocksService stockService) [KernelFunction, Description("Gets stock price")] public async Task GetStockPrice(string symbol) { - string tabularData = (await _stockService.GetStockDailyOpenClose(symbol)).FormatStockData(); + string tabularData = (await _stockService.GetStockAggregate(symbol)).FormatStockData(); return tabularData; } [KernelFunction, Description("Gets stock price for a given date")] public async Task GetStockPriceForDate(string symbol, DateTime date) { - string tabularData = (await _stockService.GetStockDailyOpenClose(symbol, date)).FormatStockData(); + string tabularData = (await _stockService.GetStockAggregate(symbol, date)).FormatStockData(); return tabularData; } From d8781c6a40b17fc5549b3881f0cf4c94a4ba2147 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 15 Oct 2024 11:12:20 -0400 Subject: [PATCH 16/61] initial bicep template --- workshop/dotnet/infra/abbreviations.json | 136 ++ workshop/dotnet/infra/app/web.bicep | 128 ++ .../infra/core/ai/cognitiveservices.bicep | 58 + .../core/host/appservice-appsettings.bicep | 17 + .../dotnet/infra/core/host/appservice.bicep | 123 ++ .../infra/core/host/appserviceplan.bicep | 22 + .../core/host/container-app-upsert.bicep | 110 ++ .../infra/core/host/container-app.bicep | 169 +++ .../host/container-apps-environment.bicep | 41 + .../infra/core/host/container-apps.bicep | 40 + .../infra/core/host/container-registry.bicep | 137 ++ .../applicationinsights-dashboard.bicep | 1252 +++++++++++++++++ .../core/monitor/applicationinsights.bicep | 31 + .../infra/core/monitor/loganalytics.bicep | 22 + .../infra/core/monitor/monitoring.bicep | 35 + .../infra/core/security/keyvault-access.bicep | 22 + .../infra/core/security/keyvault-secret.bicep | 31 + .../core/security/keyvault-secrets.bicep | 23 + .../dotnet/infra/core/security/keyvault.bicep | 27 + .../infra/core/security/registry-access.bicep | 19 + .../dotnet/infra/core/security/role.bicep | 21 + .../infra/core/storage/storage-account.bicep | 101 ++ workshop/dotnet/infra/main.bicep | 409 ++++++ workshop/dotnet/infra/main.parameters.json | 81 ++ 24 files changed, 3055 insertions(+) create mode 100644 workshop/dotnet/infra/abbreviations.json create mode 100644 workshop/dotnet/infra/app/web.bicep create mode 100644 workshop/dotnet/infra/core/ai/cognitiveservices.bicep create mode 100644 workshop/dotnet/infra/core/host/appservice-appsettings.bicep create mode 100644 workshop/dotnet/infra/core/host/appservice.bicep create mode 100644 workshop/dotnet/infra/core/host/appserviceplan.bicep create mode 100644 workshop/dotnet/infra/core/host/container-app-upsert.bicep create mode 100644 workshop/dotnet/infra/core/host/container-app.bicep create mode 100644 workshop/dotnet/infra/core/host/container-apps-environment.bicep create mode 100644 workshop/dotnet/infra/core/host/container-apps.bicep create mode 100644 workshop/dotnet/infra/core/host/container-registry.bicep create mode 100644 workshop/dotnet/infra/core/monitor/applicationinsights-dashboard.bicep create mode 100644 workshop/dotnet/infra/core/monitor/applicationinsights.bicep create mode 100644 workshop/dotnet/infra/core/monitor/loganalytics.bicep create mode 100644 workshop/dotnet/infra/core/monitor/monitoring.bicep create mode 100644 workshop/dotnet/infra/core/security/keyvault-access.bicep create mode 100644 workshop/dotnet/infra/core/security/keyvault-secret.bicep create mode 100644 workshop/dotnet/infra/core/security/keyvault-secrets.bicep create mode 100644 workshop/dotnet/infra/core/security/keyvault.bicep create mode 100644 workshop/dotnet/infra/core/security/registry-access.bicep create mode 100644 workshop/dotnet/infra/core/security/role.bicep create mode 100644 workshop/dotnet/infra/core/storage/storage-account.bicep create mode 100644 workshop/dotnet/infra/main.bicep create mode 100644 workshop/dotnet/infra/main.parameters.json diff --git a/workshop/dotnet/infra/abbreviations.json b/workshop/dotnet/infra/abbreviations.json new file mode 100644 index 0000000..4841479 --- /dev/null +++ b/workshop/dotnet/infra/abbreviations.json @@ -0,0 +1,136 @@ +{ + "analysisServicesServers": "as", + "apiManagementService": "apim-", + "appConfigurationConfigurationStores": "appcs-", + "appManagedEnvironments": "cae-", + "appContainerApps": "ca-", + "authorizationPolicyDefinitions": "policy-", + "automationAutomationAccounts": "aa-", + "blueprintBlueprints": "bp-", + "blueprintBlueprintsArtifacts": "bpa-", + "cacheRedis": "redis-", + "cdnProfiles": "cdnp-", + "cdnProfilesEndpoints": "cdne-", + "cognitiveServicesAccounts": "cog-", + "cognitiveServicesFormRecognizer": "cog-fr-", + "cognitiveServicesTextAnalytics": "cog-ta-", + "cognitiveServicesComputerVision": "cog-cv-", + "computeAvailabilitySets": "avail-", + "computeCloudServices": "cld-", + "computeDiskEncryptionSets": "des", + "computeDisks": "disk", + "computeDisksOs": "osdisk", + "computeGalleries": "gal", + "computeSnapshots": "snap-", + "computeVirtualMachines": "vm", + "computeVirtualMachineScaleSets": "vmss-", + "containerInstanceContainerGroups": "ci", + "containerRegistryRegistries": "cr", + "containerServiceManagedClusters": "aks-", + "databricksWorkspaces": "dbw-", + "dataFactoryFactories": "adf-", + "dataLakeAnalyticsAccounts": "dla", + "dataLakeStoreAccounts": "dls", + "dataMigrationServices": "dms-", + "dBforMySQLServers": "mysql-", + "dBforPostgreSQLServers": "psql-", + "devicesIotHubs": "iot-", + "devicesProvisioningServices": "provs-", + "devicesProvisioningServicesCertificates": "pcert-", + "documentDBDatabaseAccounts": "cosmos-", + "eventGridDomains": "evgd-", + "eventGridDomainsTopics": "evgt-", + "eventGridEventSubscriptions": "evgs-", + "eventHubNamespaces": "evhns-", + "eventHubNamespacesEventHubs": "evh-", + "hdInsightClustersHadoop": "hadoop-", + "hdInsightClustersHbase": "hbase-", + "hdInsightClustersKafka": "kafka-", + "hdInsightClustersMl": "mls-", + "hdInsightClustersSpark": "spark-", + "hdInsightClustersStorm": "storm-", + "hybridComputeMachines": "arcs-", + "insightsActionGroups": "ag-", + "insightsComponents": "appi-", + "keyVaultVaults": "kv-", + "kubernetesConnectedClusters": "arck", + "kustoClusters": "dec", + "kustoClustersDatabases": "dedb", + "logicIntegrationAccounts": "ia-", + "logicWorkflows": "logic-", + "machineLearningServicesWorkspaces": "mlw-", + "managedIdentityUserAssignedIdentities": "id-", + "managementManagementGroups": "mg-", + "migrateAssessmentProjects": "migr-", + "networkApplicationGateways": "agw-", + "networkApplicationSecurityGroups": "asg-", + "networkAzureFirewalls": "afw-", + "networkBastionHosts": "bas-", + "networkConnections": "con-", + "networkDnsZones": "dnsz-", + "networkExpressRouteCircuits": "erc-", + "networkFirewallPolicies": "afwp-", + "networkFirewallPoliciesWebApplication": "waf", + "networkFirewallPoliciesRuleGroups": "wafrg", + "networkFrontDoors": "fd-", + "networkFrontdoorWebApplicationFirewallPolicies": "fdfp-", + "networkLoadBalancersExternal": "lbe-", + "networkLoadBalancersInternal": "lbi-", + "networkLoadBalancersInboundNatRules": "rule-", + "networkLocalNetworkGateways": "lgw-", + "networkNatGateways": "ng-", + "networkNetworkInterfaces": "nic-", + "networkNetworkSecurityGroups": "nsg-", + "networkNetworkSecurityGroupsSecurityRules": "nsgsr-", + "networkNetworkWatchers": "nw-", + "networkPrivateDnsZones": "pdnsz-", + "networkPrivateLinkServices": "pl-", + "networkPublicIPAddresses": "pip-", + "networkPublicIPPrefixes": "ippre-", + "networkRouteFilters": "rf-", + "networkRouteTables": "rt-", + "networkRouteTablesRoutes": "udr-", + "networkTrafficManagerProfiles": "traf-", + "networkVirtualNetworkGateways": "vgw-", + "networkVirtualNetworks": "vnet-", + "networkVirtualNetworksSubnets": "snet-", + "networkVirtualNetworksVirtualNetworkPeerings": "peer-", + "networkVirtualWans": "vwan-", + "networkVpnGateways": "vpng-", + "networkVpnGatewaysVpnConnections": "vcn-", + "networkVpnGatewaysVpnSites": "vst-", + "notificationHubsNamespaces": "ntfns-", + "notificationHubsNamespacesNotificationHubs": "ntf-", + "operationalInsightsWorkspaces": "log-", + "portalDashboards": "dash-", + "powerBIDedicatedCapacities": "pbi-", + "purviewAccounts": "pview-", + "recoveryServicesVaults": "rsv-", + "resourcesResourceGroups": "rg-", + "searchSearchServices": "srch-", + "serviceBusNamespaces": "sb-", + "serviceBusNamespacesQueues": "sbq-", + "serviceBusNamespacesTopics": "sbt-", + "serviceEndPointPolicies": "se-", + "serviceFabricClusters": "sf-", + "signalRServiceSignalR": "sigr", + "sqlManagedInstances": "sqlmi-", + "sqlServers": "sql-", + "sqlServersDataWarehouse": "sqldw-", + "sqlServersDatabases": "sqldb-", + "sqlServersDatabasesStretch": "sqlstrdb-", + "storageStorageAccounts": "st", + "storageStorageAccountsVm": "stvm", + "storSimpleManagers": "ssimp", + "streamAnalyticsCluster": "asa-", + "synapseWorkspaces": "syn", + "synapseWorkspacesAnalyticsWorkspaces": "synw", + "synapseWorkspacesSqlPoolsDedicated": "syndp", + "synapseWorkspacesSqlPoolsSpark": "synsp", + "timeSeriesInsightsEnvironments": "tsi-", + "webServerFarms": "plan-", + "webSitesAppService": "app-", + "webSitesAppServiceEnvironment": "ase-", + "webSitesFunctions": "func-", + "webStaticSites": "stapp-" +} diff --git a/workshop/dotnet/infra/app/web.bicep b/workshop/dotnet/infra/app/web.bicep new file mode 100644 index 0000000..e99081f --- /dev/null +++ b/workshop/dotnet/infra/app/web.bicep @@ -0,0 +1,128 @@ +param name string +param location string = resourceGroup().location +param tags object = {} + +@description('The name of the identity') +param identityName string + +@description('The name of the Application Insights') +param applicationInsightsName string + +@description('The name of the container apps environment') +param containerAppsEnvironmentName string + +@description('The name of the container registry') +param containerRegistryName string + +@description('The name of the service') +param serviceName string = 'web' + +@description('The name of the image') +param imageName string = '' + +@description('Specifies if the resource exists') +param exists bool + +@description('The name of the Key Vault') +param keyVaultName string + +@description('The name of the Key Vault resource group') +param keyVaultResourceGroupName string = resourceGroup().name + +@description('The storage blob endpoint') +param storageBlobEndpoint string + +@description('The name of the storage container') +param storageContainerName string + +@description('The OpenAI endpoint') +param openAiEndpoint string + +@description('The OpenAI ChatGPT deployment name') +param openAiChatGptDeployment string + +@description('The OpenAI API key') +param openAiApiKey string + +@description('An array of service binds') +param serviceBinds array + +resource webIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { + name: identityName + location: location +} + +module webKeyVaultAccess '../core/security/keyvault-access.bicep' = { + name: 'web-keyvault-access' + scope: resourceGroup(keyVaultResourceGroupName) + params: { + principalId: webIdentity.properties.principalId + keyVaultName: keyVault.name + } +} + +module app '../core/host/container-app-upsert.bicep' = { + name: '${serviceName}-container-app' + dependsOn: [ webKeyVaultAccess ] + params: { + name: name + location: location + tags: union(tags, { 'azd-service-name': serviceName }) + identityName: webIdentity.name + imageName: imageName + exists: exists + serviceBinds: serviceBinds + containerAppsEnvironmentName: containerAppsEnvironmentName + containerRegistryName: containerRegistryName + env: [ + { + name: 'AZURE_CLIENT_ID' + value: webIdentity.properties.clientId + } + { + name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' + value: !empty(applicationInsightsName) ? applicationInsights.properties.ConnectionString : '' + } + { + name: 'AZURE_KEY_VAULT_ENDPOINT' + value: keyVault.properties.vaultUri + } + { + name: 'AZURE_STORAGE_BLOB_ENDPOINT' + value: storageBlobEndpoint + } + { + name: 'AZURE_STORAGE_CONTAINER' + value: storageContainerName + } + { + name: 'AZURE_OPENAI_ENDPOINT' + value: openAiEndpoint + } + { + name: 'AZURE_OPENAI_CHATGPT_DEPLOYMENT' + value: openAiChatGptDeployment + } + { + name: 'OPENAI_API_KEY' + value: openAiApiKey + } + ] + targetPort: 8080 + } +} + +resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (!empty(applicationInsightsName)) { + name: applicationInsightsName +} + +resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { + name: keyVaultName + scope: resourceGroup(keyVaultResourceGroupName) +} + +output SERVICE_WEB_IDENTITY_NAME string = identityName +output SERVICE_WEB_IDENTITY_PRINCIPAL_ID string = webIdentity.properties.principalId +output SERVICE_WEB_IMAGE_NAME string = app.outputs.imageName +output SERVICE_WEB_NAME string = app.outputs.name +output SERVICE_WEB_URI string = app.outputs.uri diff --git a/workshop/dotnet/infra/core/ai/cognitiveservices.bicep b/workshop/dotnet/infra/core/ai/cognitiveservices.bicep new file mode 100644 index 0000000..3588072 --- /dev/null +++ b/workshop/dotnet/infra/core/ai/cognitiveservices.bicep @@ -0,0 +1,58 @@ +metadata description = 'Creates an Azure Cognitive Services instance.' +param name string +param location string = resourceGroup().location +param tags object = {} +@description('The custom subdomain name used to access the API. Defaults to the value of the name parameter.') +param customSubDomainName string = name +param deployments array = [] +param kind string = 'OpenAI' + +@allowed([ 'Enabled', 'Disabled' ]) +param publicNetworkAccess string = 'Enabled' +param sku object = { + name: 'S0' +} + +param allowedIpRules array = [] +param networkAcls object = empty(allowedIpRules) ? { + defaultAction: 'Allow' +} : { + ipRules: allowedIpRules + defaultAction: 'Deny' +} + +resource account 'Microsoft.CognitiveServices/accounts@2023-05-01' = { + name: name + location: location + tags: tags + kind: kind + identity: { + type: 'SystemAssigned' + } + properties: { + customSubDomainName: customSubDomainName + publicNetworkAccess: publicNetworkAccess + networkAcls: networkAcls + disableLocalAuth: true + } + sku: sku +} + +@batchSize(1) +resource deployment 'Microsoft.CognitiveServices/accounts/deployments@2023-05-01' = [for deployment in deployments: { + parent: account + name: deployment.name + properties: { + model: deployment.model + raiPolicyName: contains(deployment, 'raiPolicyName') ? deployment.raiPolicyName : null + } + sku: contains(deployment, 'sku') ? deployment.sku : { + name: 'Standard' + capacity: 20 + } +}] + +output endpoint string = account.properties.endpoint +output endpoints object = account.properties.endpoints +output id string = account.id +output name string = account.name diff --git a/workshop/dotnet/infra/core/host/appservice-appsettings.bicep b/workshop/dotnet/infra/core/host/appservice-appsettings.bicep new file mode 100644 index 0000000..f4b22f8 --- /dev/null +++ b/workshop/dotnet/infra/core/host/appservice-appsettings.bicep @@ -0,0 +1,17 @@ +metadata description = 'Updates app settings for an Azure App Service.' +@description('The name of the app service resource within the current resource group scope') +param name string + +@description('The app settings to be applied to the app service') +@secure() +param appSettings object + +resource appService 'Microsoft.Web/sites@2022-03-01' existing = { + name: name +} + +resource settings 'Microsoft.Web/sites/config@2022-03-01' = { + name: 'appsettings' + parent: appService + properties: appSettings +} diff --git a/workshop/dotnet/infra/core/host/appservice.bicep b/workshop/dotnet/infra/core/host/appservice.bicep new file mode 100644 index 0000000..bef4d2b --- /dev/null +++ b/workshop/dotnet/infra/core/host/appservice.bicep @@ -0,0 +1,123 @@ +metadata description = 'Creates an Azure App Service in an existing Azure App Service plan.' +param name string +param location string = resourceGroup().location +param tags object = {} + +// Reference Properties +param applicationInsightsName string = '' +param appServicePlanId string +param keyVaultName string = '' +param managedIdentity bool = !empty(keyVaultName) + +// Runtime Properties +@allowed([ + 'dotnet', 'dotnetcore', 'dotnet-isolated', 'node', 'python', 'java', 'powershell', 'custom' +]) +param runtimeName string +param runtimeNameAndVersion string = '${runtimeName}|${runtimeVersion}' +param runtimeVersion string + +// Microsoft.Web/sites Properties +param kind string = 'app,linux' + +// Microsoft.Web/sites/config +param allowedOrigins array = [] +param alwaysOn bool = true +param appCommandLine string = '' +@secure() +param appSettings object = {} +param clientAffinityEnabled bool = false +param enableOryxBuild bool = contains(kind, 'linux') +param functionAppScaleLimit int = -1 +param linuxFxVersion string = runtimeNameAndVersion +param minimumElasticInstanceCount int = -1 +param numberOfWorkers int = -1 +param scmDoBuildDuringDeployment bool = false +param use32BitWorkerProcess bool = false +param ftpsState string = 'FtpsOnly' +param healthCheckPath string = '' + +resource appService 'Microsoft.Web/sites@2022-03-01' = { + name: name + location: location + tags: tags + kind: kind + properties: { + serverFarmId: appServicePlanId + siteConfig: { + linuxFxVersion: linuxFxVersion + alwaysOn: alwaysOn + ftpsState: ftpsState + minTlsVersion: '1.2' + appCommandLine: appCommandLine + numberOfWorkers: numberOfWorkers != -1 ? numberOfWorkers : null + minimumElasticInstanceCount: minimumElasticInstanceCount != -1 ? minimumElasticInstanceCount : null + use32BitWorkerProcess: use32BitWorkerProcess + functionAppScaleLimit: functionAppScaleLimit != -1 ? functionAppScaleLimit : null + healthCheckPath: healthCheckPath + cors: { + allowedOrigins: union([ 'https://portal.azure.com', 'https://ms.portal.azure.com' ], allowedOrigins) + } + } + clientAffinityEnabled: clientAffinityEnabled + httpsOnly: true + } + + identity: { type: managedIdentity ? 'SystemAssigned' : 'None' } + + resource basicPublishingCredentialsPoliciesFtp 'basicPublishingCredentialsPolicies' = { + name: 'ftp' + properties: { + allow: false + } + } + + resource basicPublishingCredentialsPoliciesScm 'basicPublishingCredentialsPolicies' = { + name: 'scm' + properties: { + allow: false + } + } +} + +// Updates to the single Microsoft.sites/web/config resources that need to be performed sequentially +// sites/web/config 'appsettings' +module configAppSettings 'appservice-appsettings.bicep' = { + name: '${name}-appSettings' + params: { + name: appService.name + appSettings: union(appSettings, + { + SCM_DO_BUILD_DURING_DEPLOYMENT: string(scmDoBuildDuringDeployment) + ENABLE_ORYX_BUILD: string(enableOryxBuild) + }, + runtimeName == 'python' && appCommandLine == '' ? { PYTHON_ENABLE_GUNICORN_MULTIWORKERS: 'true'} : {}, + !empty(applicationInsightsName) ? { APPLICATIONINSIGHTS_CONNECTION_STRING: applicationInsights.properties.ConnectionString } : {}, + !empty(keyVaultName) ? { AZURE_KEY_VAULT_ENDPOINT: keyVault.properties.vaultUri } : {}) + } +} + +// sites/web/config 'logs' +resource configLogs 'Microsoft.Web/sites/config@2022-03-01' = { + name: 'logs' + parent: appService + properties: { + applicationLogs: { fileSystem: { level: 'Verbose' } } + detailedErrorMessages: { enabled: true } + failedRequestsTracing: { enabled: true } + httpLogs: { fileSystem: { enabled: true, retentionInDays: 1, retentionInMb: 35 } } + } + dependsOn: [configAppSettings] +} + +resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = if (!(empty(keyVaultName))) { + name: keyVaultName +} + +resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (!empty(applicationInsightsName)) { + name: applicationInsightsName +} + +output identityPrincipalId string = managedIdentity ? appService.identity.principalId : '' +output name string = appService.name +output uri string = 'https://${appService.properties.defaultHostName}' diff --git a/workshop/dotnet/infra/core/host/appserviceplan.bicep b/workshop/dotnet/infra/core/host/appserviceplan.bicep new file mode 100644 index 0000000..2e37e04 --- /dev/null +++ b/workshop/dotnet/infra/core/host/appserviceplan.bicep @@ -0,0 +1,22 @@ +metadata description = 'Creates an Azure App Service plan.' +param name string +param location string = resourceGroup().location +param tags object = {} + +param kind string = '' +param reserved bool = true +param sku object + +resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = { + name: name + location: location + tags: tags + sku: sku + kind: kind + properties: { + reserved: reserved + } +} + +output id string = appServicePlan.id +output name string = appServicePlan.name diff --git a/workshop/dotnet/infra/core/host/container-app-upsert.bicep b/workshop/dotnet/infra/core/host/container-app-upsert.bicep new file mode 100644 index 0000000..5e05f89 --- /dev/null +++ b/workshop/dotnet/infra/core/host/container-app-upsert.bicep @@ -0,0 +1,110 @@ +metadata description = 'Creates or updates an existing Azure Container App.' +param name string +param location string = resourceGroup().location +param tags object = {} + +@description('The environment name for the container apps') +param containerAppsEnvironmentName string + +@description('The number of CPU cores allocated to a single container instance, e.g., 0.5') +param containerCpuCoreCount string = '0.5' + +@description('The maximum number of replicas to run. Must be at least 1.') +@minValue(1) +param containerMaxReplicas int = 10 + +@description('The amount of memory allocated to a single container instance, e.g., 1Gi') +param containerMemory string = '1.0Gi' + +@description('The minimum number of replicas to run. Must be at least 1.') +@minValue(1) +param containerMinReplicas int = 1 + +@description('The name of the container') +param containerName string = 'main' + +@description('The name of the container registry') +param containerRegistryName string = '' + +@description('Hostname suffix for container registry. Set when deploying to sovereign clouds') +param containerRegistryHostSuffix string = 'azurecr.io' + +@allowed([ 'http', 'grpc' ]) +@description('The protocol used by Dapr to connect to the app, e.g., HTTP or gRPC') +param daprAppProtocol string = 'http' + +@description('Enable or disable Dapr for the container app') +param daprEnabled bool = false + +@description('The Dapr app ID') +param daprAppId string = containerName + +@description('Specifies if the resource already exists') +param exists bool = false + +@description('Specifies if Ingress is enabled for the container app') +param ingressEnabled bool = true + +@description('The type of identity for the resource') +@allowed([ 'None', 'SystemAssigned', 'UserAssigned' ]) +param identityType string = 'None' + +@description('The name of the user-assigned identity') +param identityName string = '' + +@description('The name of the container image') +param imageName string = '' + +@description('The secrets required for the container') +@secure() +param secrets object = {} + +@description('The environment variables for the container') +param env array = [] + +@description('Specifies if the resource ingress is exposed externally') +param external bool = true + +@description('The service binds associated with the container') +param serviceBinds array = [] + +@description('The target port for the container') +param targetPort int = 80 + +resource existingApp 'Microsoft.App/containerApps@2023-05-02-preview' existing = if (exists) { + name: name +} + +module app 'container-app.bicep' = { + name: '${deployment().name}-update' + params: { + name: name + location: location + tags: tags + identityType: identityType + identityName: identityName + ingressEnabled: ingressEnabled + containerName: containerName + containerAppsEnvironmentName: containerAppsEnvironmentName + containerRegistryName: containerRegistryName + containerRegistryHostSuffix: containerRegistryHostSuffix + containerCpuCoreCount: containerCpuCoreCount + containerMemory: containerMemory + containerMinReplicas: containerMinReplicas + containerMaxReplicas: containerMaxReplicas + daprEnabled: daprEnabled + daprAppId: daprAppId + daprAppProtocol: daprAppProtocol + secrets: secrets + external: external + env: env + imageName: !empty(imageName) ? imageName : exists ? existingApp.properties.template.containers[0].image : '' + targetPort: targetPort + serviceBinds: serviceBinds + } +} + +output defaultDomain string = app.outputs.defaultDomain +output imageName string = app.outputs.imageName +output name string = app.outputs.name +output uri string = app.outputs.uri diff --git a/workshop/dotnet/infra/core/host/container-app.bicep b/workshop/dotnet/infra/core/host/container-app.bicep new file mode 100644 index 0000000..c64fc82 --- /dev/null +++ b/workshop/dotnet/infra/core/host/container-app.bicep @@ -0,0 +1,169 @@ +metadata description = 'Creates a container app in an Azure Container App environment.' +param name string +param location string = resourceGroup().location +param tags object = {} + +@description('Allowed origins') +param allowedOrigins array = [] + +@description('Name of the environment for container apps') +param containerAppsEnvironmentName string + +@description('CPU cores allocated to a single container instance, e.g., 0.5') +param containerCpuCoreCount string = '0.5' + +@description('The maximum number of replicas to run. Must be at least 1.') +@minValue(1) +param containerMaxReplicas int = 10 + +@description('Memory allocated to a single container instance, e.g., 1Gi') +param containerMemory string = '1.0Gi' + +@description('The minimum number of replicas to run. Must be at least 1.') +param containerMinReplicas int = 1 + +@description('The name of the container') +param containerName string = 'main' + +@description('The name of the container registry') +param containerRegistryName string = '' + +@description('Hostname suffix for container registry. Set when deploying to sovereign clouds') +param containerRegistryHostSuffix string = 'azurecr.io' + +@description('The protocol used by Dapr to connect to the app, e.g., http or grpc') +@allowed([ 'http', 'grpc' ]) +param daprAppProtocol string = 'http' + +@description('The Dapr app ID') +param daprAppId string = containerName + +@description('Enable Dapr') +param daprEnabled bool = false + +@description('The environment variables for the container') +param env array = [] + +@description('Specifies if the resource ingress is exposed externally') +param external bool = true + +@description('The name of the user-assigned identity') +param identityName string = '' + +@description('The type of identity for the resource') +@allowed([ 'None', 'SystemAssigned', 'UserAssigned' ]) +param identityType string = 'None' + +@description('The name of the container image') +param imageName string = '' + +@description('Specifies if Ingress is enabled for the container app') +param ingressEnabled bool = true + +param revisionMode string = 'Single' + +@description('The secrets required for the container') +@secure() +param secrets object = {} + +@description('The service binds associated with the container') +param serviceBinds array = [] + +@description('The name of the container apps add-on to use. e.g. redis') +param serviceType string = '' + +@description('The target port for the container') +param targetPort int = 80 + +resource userIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' existing = if (!empty(identityName)) { + name: identityName +} + +// Private registry support requires both an ACR name and a User Assigned managed identity +var usePrivateRegistry = !empty(identityName) && !empty(containerRegistryName) + +// Automatically set to `UserAssigned` when an `identityName` has been set +var normalizedIdentityType = !empty(identityName) ? 'UserAssigned' : identityType + +module containerRegistryAccess '../security/registry-access.bicep' = if (usePrivateRegistry) { + name: '${deployment().name}-registry-access' + params: { + containerRegistryName: containerRegistryName + principalId: usePrivateRegistry ? userIdentity.properties.principalId : '' + } +} + +resource app 'Microsoft.App/containerApps@2023-05-02-preview' = { + name: name + location: location + tags: tags + // It is critical that the identity is granted ACR pull access before the app is created + // otherwise the container app will throw a provision error + // This also forces us to use an user assigned managed identity since there would no way to + // provide the system assigned identity with the ACR pull access before the app is created + dependsOn: usePrivateRegistry ? [ containerRegistryAccess ] : [] + identity: { + type: normalizedIdentityType + userAssignedIdentities: !empty(identityName) && normalizedIdentityType == 'UserAssigned' ? { '${userIdentity.id}': {} } : null + } + properties: { + managedEnvironmentId: containerAppsEnvironment.id + configuration: { + activeRevisionsMode: revisionMode + ingress: ingressEnabled ? { + external: external + targetPort: targetPort + transport: 'auto' + corsPolicy: { + allowedOrigins: union([ 'https://portal.azure.com', 'https://ms.portal.azure.com' ], allowedOrigins) + } + } : null + dapr: daprEnabled ? { + enabled: true + appId: daprAppId + appProtocol: daprAppProtocol + appPort: ingressEnabled ? targetPort : 0 + } : { enabled: false } + secrets: [for secret in items(secrets): { + name: secret.key + value: secret.value + }] + service: !empty(serviceType) ? { type: serviceType } : null + registries: usePrivateRegistry ? [ + { + server: '${containerRegistryName}.${containerRegistryHostSuffix}' + identity: userIdentity.id + } + ] : [] + } + template: { + serviceBinds: !empty(serviceBinds) ? serviceBinds : null + containers: [ + { + image: !empty(imageName) ? imageName : 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest' + name: containerName + env: env + resources: { + cpu: json(containerCpuCoreCount) + memory: containerMemory + } + } + ] + scale: { + minReplicas: containerMinReplicas + maxReplicas: containerMaxReplicas + } + } + } +} + +resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2023-05-01' existing = { + name: containerAppsEnvironmentName +} + +output defaultDomain string = containerAppsEnvironment.properties.defaultDomain +output identityPrincipalId string = normalizedIdentityType == 'None' ? '' : (empty(identityName) ? app.identity.principalId : userIdentity.properties.principalId) +output imageName string = imageName +output name string = app.name +output serviceBind object = !empty(serviceType) ? { serviceId: app.id, name: name } : {} +output uri string = ingressEnabled ? 'https://${app.properties.configuration.ingress.fqdn}' : '' diff --git a/workshop/dotnet/infra/core/host/container-apps-environment.bicep b/workshop/dotnet/infra/core/host/container-apps-environment.bicep new file mode 100644 index 0000000..20f4632 --- /dev/null +++ b/workshop/dotnet/infra/core/host/container-apps-environment.bicep @@ -0,0 +1,41 @@ +metadata description = 'Creates an Azure Container Apps environment.' +param name string +param location string = resourceGroup().location +param tags object = {} + +@description('Name of the Application Insights resource') +param applicationInsightsName string = '' + +@description('Specifies if Dapr is enabled') +param daprEnabled bool = false + +@description('Name of the Log Analytics workspace') +param logAnalyticsWorkspaceName string + +resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2023-05-01' = { + name: name + location: location + tags: tags + properties: { + appLogsConfiguration: { + destination: 'log-analytics' + logAnalyticsConfiguration: { + customerId: logAnalyticsWorkspace.properties.customerId + sharedKey: logAnalyticsWorkspace.listKeys().primarySharedKey + } + } + daprAIInstrumentationKey: daprEnabled && !empty(applicationInsightsName) ? applicationInsights.properties.InstrumentationKey : '' + } +} + +resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2022-10-01' existing = { + name: logAnalyticsWorkspaceName +} + +resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (daprEnabled && !empty(applicationInsightsName)) { + name: applicationInsightsName +} + +output defaultDomain string = containerAppsEnvironment.properties.defaultDomain +output id string = containerAppsEnvironment.id +output name string = containerAppsEnvironment.name diff --git a/workshop/dotnet/infra/core/host/container-apps.bicep b/workshop/dotnet/infra/core/host/container-apps.bicep new file mode 100644 index 0000000..1c656e2 --- /dev/null +++ b/workshop/dotnet/infra/core/host/container-apps.bicep @@ -0,0 +1,40 @@ +metadata description = 'Creates an Azure Container Registry and an Azure Container Apps environment.' +param name string +param location string = resourceGroup().location +param tags object = {} + +param containerAppsEnvironmentName string +param containerRegistryName string +param containerRegistryResourceGroupName string = '' +param containerRegistryAdminUserEnabled bool = false +param logAnalyticsWorkspaceName string +param applicationInsightsName string = '' + +module containerAppsEnvironment 'container-apps-environment.bicep' = { + name: '${name}-container-apps-environment' + params: { + name: containerAppsEnvironmentName + location: location + tags: tags + logAnalyticsWorkspaceName: logAnalyticsWorkspaceName + applicationInsightsName: applicationInsightsName + } +} + +module containerRegistry 'container-registry.bicep' = { + name: '${name}-container-registry' + scope: !empty(containerRegistryResourceGroupName) ? resourceGroup(containerRegistryResourceGroupName) : resourceGroup() + params: { + name: containerRegistryName + location: location + adminUserEnabled: containerRegistryAdminUserEnabled + tags: tags + } +} + +output defaultDomain string = containerAppsEnvironment.outputs.defaultDomain +output environmentName string = containerAppsEnvironment.outputs.name +output environmentId string = containerAppsEnvironment.outputs.id + +output registryLoginServer string = containerRegistry.outputs.loginServer +output registryName string = containerRegistry.outputs.name diff --git a/workshop/dotnet/infra/core/host/container-registry.bicep b/workshop/dotnet/infra/core/host/container-registry.bicep new file mode 100644 index 0000000..d14731c --- /dev/null +++ b/workshop/dotnet/infra/core/host/container-registry.bicep @@ -0,0 +1,137 @@ +metadata description = 'Creates an Azure Container Registry.' +param name string +param location string = resourceGroup().location +param tags object = {} + +@description('Indicates whether admin user is enabled') +param adminUserEnabled bool = false + +@description('Indicates whether anonymous pull is enabled') +param anonymousPullEnabled bool = false + +@description('Azure ad authentication as arm policy settings') +param azureADAuthenticationAsArmPolicy object = { + status: 'enabled' +} + +@description('Indicates whether data endpoint is enabled') +param dataEndpointEnabled bool = false + +@description('Encryption settings') +param encryption object = { + status: 'disabled' +} + +@description('Export policy settings') +param exportPolicy object = { + status: 'enabled' +} + +@description('Metadata search settings') +param metadataSearch string = 'Disabled' + +@description('Options for bypassing network rules') +param networkRuleBypassOptions string = 'AzureServices' + +@description('Public network access setting') +param publicNetworkAccess string = 'Enabled' + +@description('Quarantine policy settings') +param quarantinePolicy object = { + status: 'disabled' +} + +@description('Retention policy settings') +param retentionPolicy object = { + days: 7 + status: 'disabled' +} + +@description('Scope maps setting') +param scopeMaps array = [] + +@description('SKU settings') +param sku object = { + name: 'Basic' +} + +@description('Soft delete policy settings') +param softDeletePolicy object = { + retentionDays: 7 + status: 'disabled' +} + +@description('Trust policy settings') +param trustPolicy object = { + type: 'Notary' + status: 'disabled' +} + +@description('Zone redundancy setting') +param zoneRedundancy string = 'Disabled' + +@description('The log analytics workspace ID used for logging and monitoring') +param workspaceId string = '' + +// 2023-11-01-preview needed for metadataSearch +resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-11-01-preview' = { + name: name + location: location + tags: tags + sku: sku + properties: { + adminUserEnabled: adminUserEnabled + anonymousPullEnabled: anonymousPullEnabled + dataEndpointEnabled: dataEndpointEnabled + encryption: encryption + metadataSearch: metadataSearch + networkRuleBypassOptions: networkRuleBypassOptions + policies:{ + quarantinePolicy: quarantinePolicy + trustPolicy: trustPolicy + retentionPolicy: retentionPolicy + exportPolicy: exportPolicy + azureADAuthenticationAsArmPolicy: azureADAuthenticationAsArmPolicy + softDeletePolicy: softDeletePolicy + } + publicNetworkAccess: publicNetworkAccess + zoneRedundancy: zoneRedundancy + } + + resource scopeMap 'scopeMaps' = [for scopeMap in scopeMaps: { + name: scopeMap.name + properties: scopeMap.properties + }] +} + +// TODO: Update diagnostics to be its own module +// Blocking issue: https://github.com/Azure/bicep/issues/622 +// Unable to pass in a `resource` scope or unable to use string interpolation in resource types +resource diagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: 'registry-diagnostics' + scope: containerRegistry + properties: { + workspaceId: workspaceId + logs: [ + { + category: 'ContainerRegistryRepositoryEvents' + enabled: true + } + { + category: 'ContainerRegistryLoginEvents' + enabled: true + } + ] + metrics: [ + { + category: 'AllMetrics' + enabled: true + timeGrain: 'PT1M' + } + ] + } +} + +output id string = containerRegistry.id +output loginServer string = containerRegistry.properties.loginServer +output name string = containerRegistry.name diff --git a/workshop/dotnet/infra/core/monitor/applicationinsights-dashboard.bicep b/workshop/dotnet/infra/core/monitor/applicationinsights-dashboard.bicep new file mode 100644 index 0000000..fcd37ac --- /dev/null +++ b/workshop/dotnet/infra/core/monitor/applicationinsights-dashboard.bicep @@ -0,0 +1,1252 @@ +metadata description = 'Creates a dashboard for an Application Insights instance.' +param name string +param applicationInsightsName string +param location string = resourceGroup().location +param tags object = {} + +// 2020-09-01-preview because that is the latest valid version +resource applicationInsightsDashboard 'Microsoft.Portal/dashboards@2020-09-01-preview' = { + name: name + location: location + tags: tags + properties: { + lenses: [ + { + order: 0 + parts: [ + { + position: { + x: 0 + y: 0 + colSpan: 2 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'id' + value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + { + name: 'Version' + value: '1.0' + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/AspNetOverviewPinnedPart' + #disable-next-line BCP037 + asset: { + idInputName: 'id' + type: 'ApplicationInsights' + } + #disable-next-line BCP037 + defaultMenuItemId: 'overview' + } + } + { + position: { + x: 2 + y: 0 + colSpan: 1 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'ComponentId' + value: { + Name: applicationInsights.name + SubscriptionId: subscription().subscriptionId + ResourceGroup: resourceGroup().name + } + } + { + name: 'Version' + value: '1.0' + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/ProactiveDetectionAsyncPart' + #disable-next-line BCP037 + asset: { + idInputName: 'ComponentId' + type: 'ApplicationInsights' + } + #disable-next-line BCP037 + defaultMenuItemId: 'ProactiveDetection' + } + } + { + position: { + x: 3 + y: 0 + colSpan: 1 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'ComponentId' + value: { + Name: applicationInsights.name + SubscriptionId: subscription().subscriptionId + ResourceGroup: resourceGroup().name + } + } + { + name: 'ResourceId' + value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/QuickPulseButtonSmallPart' + #disable-next-line BCP037 + asset: { + idInputName: 'ComponentId' + type: 'ApplicationInsights' + } + } + } + { + position: { + x: 4 + y: 0 + colSpan: 1 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'ComponentId' + value: { + Name: applicationInsights.name + SubscriptionId: subscription().subscriptionId + ResourceGroup: resourceGroup().name + } + } + { + name: 'TimeContext' + value: { + durationMs: 86400000 + endTime: null + createdTime: '2018-05-04T01:20:33.345Z' + isInitialTime: true + grain: 1 + useDashboardTimeRange: false + } + } + { + name: 'Version' + value: '1.0' + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/AvailabilityNavButtonPart' + #disable-next-line BCP037 + asset: { + idInputName: 'ComponentId' + type: 'ApplicationInsights' + } + } + } + { + position: { + x: 5 + y: 0 + colSpan: 1 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'ComponentId' + value: { + Name: applicationInsights.name + SubscriptionId: subscription().subscriptionId + ResourceGroup: resourceGroup().name + } + } + { + name: 'TimeContext' + value: { + durationMs: 86400000 + endTime: null + createdTime: '2018-05-08T18:47:35.237Z' + isInitialTime: true + grain: 1 + useDashboardTimeRange: false + } + } + { + name: 'ConfigurationId' + value: '78ce933e-e864-4b05-a27b-71fd55a6afad' + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/AppMapButtonPart' + #disable-next-line BCP037 + asset: { + idInputName: 'ComponentId' + type: 'ApplicationInsights' + } + } + } + { + position: { + x: 0 + y: 1 + colSpan: 3 + rowSpan: 1 + } + metadata: { + inputs: [] + type: 'Extension/HubsExtension/PartType/MarkdownPart' + settings: { + content: { + settings: { + content: '# Usage' + title: '' + subtitle: '' + } + } + } + } + } + { + position: { + x: 3 + y: 1 + colSpan: 1 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'ComponentId' + value: { + Name: applicationInsights.name + SubscriptionId: subscription().subscriptionId + ResourceGroup: resourceGroup().name + } + } + { + name: 'TimeContext' + value: { + durationMs: 86400000 + endTime: null + createdTime: '2018-05-04T01:22:35.782Z' + isInitialTime: true + grain: 1 + useDashboardTimeRange: false + } + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/UsageUsersOverviewPart' + #disable-next-line BCP037 + asset: { + idInputName: 'ComponentId' + type: 'ApplicationInsights' + } + } + } + { + position: { + x: 4 + y: 1 + colSpan: 3 + rowSpan: 1 + } + metadata: { + inputs: [] + type: 'Extension/HubsExtension/PartType/MarkdownPart' + settings: { + content: { + settings: { + content: '# Reliability' + title: '' + subtitle: '' + } + } + } + } + } + { + position: { + x: 7 + y: 1 + colSpan: 1 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'ResourceId' + value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + { + name: 'DataModel' + value: { + version: '1.0.0' + timeContext: { + durationMs: 86400000 + createdTime: '2018-05-04T23:42:40.072Z' + isInitialTime: false + grain: 1 + useDashboardTimeRange: false + } + } + isOptional: true + } + { + name: 'ConfigurationId' + value: '8a02f7bf-ac0f-40e1-afe9-f0e72cfee77f' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/CuratedBladeFailuresPinnedPart' + #disable-next-line BCP037 + isAdapter: true + #disable-next-line BCP037 + asset: { + idInputName: 'ResourceId' + type: 'ApplicationInsights' + } + #disable-next-line BCP037 + defaultMenuItemId: 'failures' + } + } + { + position: { + x: 8 + y: 1 + colSpan: 3 + rowSpan: 1 + } + metadata: { + inputs: [] + type: 'Extension/HubsExtension/PartType/MarkdownPart' + settings: { + content: { + settings: { + content: '# Responsiveness\r\n' + title: '' + subtitle: '' + } + } + } + } + } + { + position: { + x: 11 + y: 1 + colSpan: 1 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'ResourceId' + value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + { + name: 'DataModel' + value: { + version: '1.0.0' + timeContext: { + durationMs: 86400000 + createdTime: '2018-05-04T23:43:37.804Z' + isInitialTime: false + grain: 1 + useDashboardTimeRange: false + } + } + isOptional: true + } + { + name: 'ConfigurationId' + value: '2a8ede4f-2bee-4b9c-aed9-2db0e8a01865' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/CuratedBladePerformancePinnedPart' + #disable-next-line BCP037 + isAdapter: true + #disable-next-line BCP037 + asset: { + idInputName: 'ResourceId' + type: 'ApplicationInsights' + } + #disable-next-line BCP037 + defaultMenuItemId: 'performance' + } + } + { + position: { + x: 12 + y: 1 + colSpan: 3 + rowSpan: 1 + } + metadata: { + inputs: [] + type: 'Extension/HubsExtension/PartType/MarkdownPart' + settings: { + content: { + settings: { + content: '# Browser' + title: '' + subtitle: '' + } + } + } + } + } + { + position: { + x: 15 + y: 1 + colSpan: 1 + rowSpan: 1 + } + metadata: { + inputs: [ + { + name: 'ComponentId' + value: { + Name: applicationInsights.name + SubscriptionId: subscription().subscriptionId + ResourceGroup: resourceGroup().name + } + } + { + name: 'MetricsExplorerJsonDefinitionId' + value: 'BrowserPerformanceTimelineMetrics' + } + { + name: 'TimeContext' + value: { + durationMs: 86400000 + createdTime: '2018-05-08T12:16:27.534Z' + isInitialTime: false + grain: 1 + useDashboardTimeRange: false + } + } + { + name: 'CurrentFilter' + value: { + eventTypes: [ + 4 + 1 + 3 + 5 + 2 + 6 + 13 + ] + typeFacets: {} + isPermissive: false + } + } + { + name: 'id' + value: { + Name: applicationInsights.name + SubscriptionId: subscription().subscriptionId + ResourceGroup: resourceGroup().name + } + } + { + name: 'Version' + value: '1.0' + } + ] + #disable-next-line BCP036 + type: 'Extension/AppInsightsExtension/PartType/MetricsExplorerBladePinnedPart' + #disable-next-line BCP037 + asset: { + idInputName: 'ComponentId' + type: 'ApplicationInsights' + } + #disable-next-line BCP037 + defaultMenuItemId: 'browser' + } + } + { + position: { + x: 0 + y: 2 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'sessions/count' + aggregationType: 5 + namespace: 'microsoft.insights/components/kusto' + metricVisualization: { + displayName: 'Sessions' + color: '#47BDF5' + } + } + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'users/count' + aggregationType: 5 + namespace: 'microsoft.insights/components/kusto' + metricVisualization: { + displayName: 'Users' + color: '#7E58FF' + } + } + ] + title: 'Unique sessions and users' + visualization: { + chartType: 2 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + openBladeOnClick: { + openBlade: true + destinationBlade: { + extensionName: 'HubsExtension' + bladeName: 'ResourceMenuBlade' + parameters: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + menuid: 'segmentationUsers' + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 4 + y: 2 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'requests/failed' + aggregationType: 7 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Failed requests' + color: '#EC008C' + } + } + ] + title: 'Failed requests' + visualization: { + chartType: 3 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + openBladeOnClick: { + openBlade: true + destinationBlade: { + extensionName: 'HubsExtension' + bladeName: 'ResourceMenuBlade' + parameters: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + menuid: 'failures' + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 8 + y: 2 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'requests/duration' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Server response time' + color: '#00BCF2' + } + } + ] + title: 'Server response time' + visualization: { + chartType: 2 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + openBladeOnClick: { + openBlade: true + destinationBlade: { + extensionName: 'HubsExtension' + bladeName: 'ResourceMenuBlade' + parameters: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + menuid: 'performance' + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 12 + y: 2 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'browserTimings/networkDuration' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Page load network connect time' + color: '#7E58FF' + } + } + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'browserTimings/processingDuration' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Client processing time' + color: '#44F1C8' + } + } + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'browserTimings/sendDuration' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Send request time' + color: '#EB9371' + } + } + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'browserTimings/receiveDuration' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Receiving response time' + color: '#0672F1' + } + } + ] + title: 'Average page load time breakdown' + visualization: { + chartType: 3 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 0 + y: 5 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'availabilityResults/availabilityPercentage' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Availability' + color: '#47BDF5' + } + } + ] + title: 'Average availability' + visualization: { + chartType: 3 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + openBladeOnClick: { + openBlade: true + destinationBlade: { + extensionName: 'HubsExtension' + bladeName: 'ResourceMenuBlade' + parameters: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + menuid: 'availability' + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 4 + y: 5 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'exceptions/server' + aggregationType: 7 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Server exceptions' + color: '#47BDF5' + } + } + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'dependencies/failed' + aggregationType: 7 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Dependency failures' + color: '#7E58FF' + } + } + ] + title: 'Server exceptions and Dependency failures' + visualization: { + chartType: 2 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 8 + y: 5 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'performanceCounters/processorCpuPercentage' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Processor time' + color: '#47BDF5' + } + } + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'performanceCounters/processCpuPercentage' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Process CPU' + color: '#7E58FF' + } + } + ] + title: 'Average processor and process CPU utilization' + visualization: { + chartType: 2 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 12 + y: 5 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'exceptions/browser' + aggregationType: 7 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Browser exceptions' + color: '#47BDF5' + } + } + ] + title: 'Browser exceptions' + visualization: { + chartType: 2 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 0 + y: 8 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'availabilityResults/count' + aggregationType: 7 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Availability test results count' + color: '#47BDF5' + } + } + ] + title: 'Availability test results count' + visualization: { + chartType: 2 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 4 + y: 8 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'performanceCounters/processIOBytesPerSecond' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Process IO rate' + color: '#47BDF5' + } + } + ] + title: 'Average process I/O rate' + visualization: { + chartType: 2 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + { + position: { + x: 8 + y: 8 + colSpan: 4 + rowSpan: 3 + } + metadata: { + inputs: [ + { + name: 'options' + value: { + chart: { + metrics: [ + { + resourceMetadata: { + id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' + } + name: 'performanceCounters/memoryAvailableBytes' + aggregationType: 4 + namespace: 'microsoft.insights/components' + metricVisualization: { + displayName: 'Available memory' + color: '#47BDF5' + } + } + ] + title: 'Average available memory' + visualization: { + chartType: 2 + legendVisualization: { + isVisible: true + position: 2 + hideSubtitle: false + } + axisVisualization: { + x: { + isVisible: true + axisType: 2 + } + y: { + isVisible: true + axisType: 1 + } + } + } + } + } + } + { + name: 'sharedTimeRange' + isOptional: true + } + ] + #disable-next-line BCP036 + type: 'Extension/HubsExtension/PartType/MonitorChartPart' + settings: {} + } + } + ] + } + ] + } +} + +resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = { + name: applicationInsightsName +} diff --git a/workshop/dotnet/infra/core/monitor/applicationinsights.bicep b/workshop/dotnet/infra/core/monitor/applicationinsights.bicep new file mode 100644 index 0000000..850e9fe --- /dev/null +++ b/workshop/dotnet/infra/core/monitor/applicationinsights.bicep @@ -0,0 +1,31 @@ +metadata description = 'Creates an Application Insights instance based on an existing Log Analytics workspace.' +param name string +param dashboardName string = '' +param location string = resourceGroup().location +param tags object = {} +param logAnalyticsWorkspaceId string + +resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = { + name: name + location: location + tags: tags + kind: 'web' + properties: { + Application_Type: 'web' + WorkspaceResourceId: logAnalyticsWorkspaceId + } +} + +module applicationInsightsDashboard 'applicationinsights-dashboard.bicep' = if (!empty(dashboardName)) { + name: 'application-insights-dashboard' + params: { + name: dashboardName + location: location + applicationInsightsName: applicationInsights.name + } +} + +output connectionString string = applicationInsights.properties.ConnectionString +output id string = applicationInsights.id +output instrumentationKey string = applicationInsights.properties.InstrumentationKey +output name string = applicationInsights.name diff --git a/workshop/dotnet/infra/core/monitor/loganalytics.bicep b/workshop/dotnet/infra/core/monitor/loganalytics.bicep new file mode 100644 index 0000000..33f9dc2 --- /dev/null +++ b/workshop/dotnet/infra/core/monitor/loganalytics.bicep @@ -0,0 +1,22 @@ +metadata description = 'Creates a Log Analytics workspace.' +param name string +param location string = resourceGroup().location +param tags object = {} + +resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2021-12-01-preview' = { + name: name + location: location + tags: tags + properties: any({ + retentionInDays: 30 + features: { + searchVersion: 1 + } + sku: { + name: 'PerGB2018' + } + }) +} + +output id string = logAnalytics.id +output name string = logAnalytics.name diff --git a/workshop/dotnet/infra/core/monitor/monitoring.bicep b/workshop/dotnet/infra/core/monitor/monitoring.bicep new file mode 100644 index 0000000..a95a50d --- /dev/null +++ b/workshop/dotnet/infra/core/monitor/monitoring.bicep @@ -0,0 +1,35 @@ +metadata description = 'Creates an Application Insights instance and a Log Analytics workspace.' +param logAnalyticsName string +param includeApplicationInsights bool = false +param applicationInsightsName string +param applicationInsightsDashboardName string = '' +param location string = resourceGroup().location +param tags object = {} + + +module logAnalytics 'loganalytics.bicep' = { + name: 'loganalytics' + params: { + name: logAnalyticsName + location: location + tags: tags + } +} + +module applicationInsights 'applicationinsights.bicep' = if(includeApplicationInsights) { + name: 'applicationinsights' + params: { + name: applicationInsightsName + location: location + tags: tags + dashboardName: applicationInsightsDashboardName + logAnalyticsWorkspaceId: logAnalytics.outputs.id + } +} + +output applicationInsightsConnectionString string = applicationInsights.outputs.connectionString +output applicationInsightsId string = applicationInsights.outputs.id +output applicationInsightsInstrumentationKey string = applicationInsights.outputs.instrumentationKey +output applicationInsightsName string = applicationInsights.outputs.name +output logAnalyticsWorkspaceId string = logAnalytics.outputs.id +output logAnalyticsWorkspaceName string = logAnalytics.outputs.name diff --git a/workshop/dotnet/infra/core/security/keyvault-access.bicep b/workshop/dotnet/infra/core/security/keyvault-access.bicep new file mode 100644 index 0000000..316775f --- /dev/null +++ b/workshop/dotnet/infra/core/security/keyvault-access.bicep @@ -0,0 +1,22 @@ +metadata description = 'Assigns an Azure Key Vault access policy.' +param name string = 'add' + +param keyVaultName string +param permissions object = { secrets: [ 'get', 'list' ] } +param principalId string + +resource keyVaultAccessPolicies 'Microsoft.KeyVault/vaults/accessPolicies@2022-07-01' = { + parent: keyVault + name: name + properties: { + accessPolicies: [ { + objectId: principalId + tenantId: subscription().tenantId + permissions: permissions + } ] + } +} + +resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { + name: keyVaultName +} diff --git a/workshop/dotnet/infra/core/security/keyvault-secret.bicep b/workshop/dotnet/infra/core/security/keyvault-secret.bicep new file mode 100644 index 0000000..7441b29 --- /dev/null +++ b/workshop/dotnet/infra/core/security/keyvault-secret.bicep @@ -0,0 +1,31 @@ +metadata description = 'Creates or updates a secret in an Azure Key Vault.' +param name string +param tags object = {} +param keyVaultName string +param contentType string = 'string' +@description('The value of the secret. Provide only derived values like blob storage access, but do not hard code any secrets in your templates') +@secure() +param secretValue string + +param enabled bool = true +param exp int = 0 +param nbf int = 0 + +resource keyVaultSecret 'Microsoft.KeyVault/vaults/secrets@2022-07-01' = { + name: name + tags: tags + parent: keyVault + properties: { + attributes: { + enabled: enabled + exp: exp + nbf: nbf + } + contentType: contentType + value: secretValue + } +} + +resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { + name: keyVaultName +} diff --git a/workshop/dotnet/infra/core/security/keyvault-secrets.bicep b/workshop/dotnet/infra/core/security/keyvault-secrets.bicep new file mode 100644 index 0000000..7116bf8 --- /dev/null +++ b/workshop/dotnet/infra/core/security/keyvault-secrets.bicep @@ -0,0 +1,23 @@ +param tags object = {} +param keyVaultName string +param secrets array = [] + +resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { + name: keyVaultName +} + +@batchSize(1) +resource keyVaultSecret 'Microsoft.KeyVault/vaults/secrets@2022-07-01' = [for secret in secrets: { + parent: keyVault + name: secret.name + tags: tags + properties: { + attributes: { + enabled: contains(secret, 'enabled') ? secret.enabled : true + exp: contains(secret, 'exp') ? secret.exp : 0 + nbf: contains(secret, 'nbf') ? secret.nbf : 0 + } + contentType: contains(secret, 'contentType') ? secret.contentType : 'string' + value: secret.value + } +}] diff --git a/workshop/dotnet/infra/core/security/keyvault.bicep b/workshop/dotnet/infra/core/security/keyvault.bicep new file mode 100644 index 0000000..663ec00 --- /dev/null +++ b/workshop/dotnet/infra/core/security/keyvault.bicep @@ -0,0 +1,27 @@ +metadata description = 'Creates an Azure Key Vault.' +param name string +param location string = resourceGroup().location +param tags object = {} + +param principalId string = '' + +resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' = { + name: name + location: location + tags: tags + properties: { + tenantId: subscription().tenantId + sku: { family: 'A', name: 'standard' } + accessPolicies: !empty(principalId) ? [ + { + objectId: principalId + permissions: { secrets: [ 'get', 'list' ] } + tenantId: subscription().tenantId + } + ] : [] + } +} + +output endpoint string = keyVault.properties.vaultUri +output id string = keyVault.id +output name string = keyVault.name diff --git a/workshop/dotnet/infra/core/security/registry-access.bicep b/workshop/dotnet/infra/core/security/registry-access.bicep new file mode 100644 index 0000000..fc66837 --- /dev/null +++ b/workshop/dotnet/infra/core/security/registry-access.bicep @@ -0,0 +1,19 @@ +metadata description = 'Assigns ACR Pull permissions to access an Azure Container Registry.' +param containerRegistryName string +param principalId string + +var acrPullRole = subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') + +resource aksAcrPull 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + scope: containerRegistry // Use when specifying a scope that is different than the deployment scope + name: guid(subscription().id, resourceGroup().id, principalId, acrPullRole) + properties: { + roleDefinitionId: acrPullRole + principalType: 'ServicePrincipal' + principalId: principalId + } +} + +resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-01-01-preview' existing = { + name: containerRegistryName +} diff --git a/workshop/dotnet/infra/core/security/role.bicep b/workshop/dotnet/infra/core/security/role.bicep new file mode 100644 index 0000000..0b30cfd --- /dev/null +++ b/workshop/dotnet/infra/core/security/role.bicep @@ -0,0 +1,21 @@ +metadata description = 'Creates a role assignment for a service principal.' +param principalId string + +@allowed([ + 'Device' + 'ForeignGroup' + 'Group' + 'ServicePrincipal' + 'User' +]) +param principalType string = 'ServicePrincipal' +param roleDefinitionId string + +resource role 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(subscription().id, resourceGroup().id, principalId, roleDefinitionId) + properties: { + principalId: principalId + principalType: principalType + roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId) + } +} diff --git a/workshop/dotnet/infra/core/storage/storage-account.bicep b/workshop/dotnet/infra/core/storage/storage-account.bicep new file mode 100644 index 0000000..6149fb2 --- /dev/null +++ b/workshop/dotnet/infra/core/storage/storage-account.bicep @@ -0,0 +1,101 @@ +metadata description = 'Creates an Azure storage account.' +param name string +param location string = resourceGroup().location +param tags object = {} + +@allowed([ + 'Cool' + 'Hot' + 'Premium' ]) +param accessTier string = 'Hot' +param allowBlobPublicAccess bool = true +param allowCrossTenantReplication bool = true +param allowSharedKeyAccess bool = true +param containers array = [] +param corsRules array = [] +param defaultToOAuthAuthentication bool = false +param deleteRetentionPolicy object = {} +@allowed([ 'AzureDnsZone', 'Standard' ]) +param dnsEndpointType string = 'Standard' +param files array = [] +param kind string = 'StorageV2' +param minimumTlsVersion string = 'TLS1_2' +param queues array = [] +param shareDeleteRetentionPolicy object = {} +param supportsHttpsTrafficOnly bool = true +param tables array = [] +param networkAcls object = { + bypass: 'AzureServices' + defaultAction: 'Allow' +} +@allowed([ 'Enabled', 'Disabled' ]) +param publicNetworkAccess string = 'Enabled' +param sku object = { name: 'Standard_LRS' } + +resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { + name: name + location: location + tags: tags + kind: kind + sku: sku + properties: { + accessTier: accessTier + allowBlobPublicAccess: allowBlobPublicAccess + allowCrossTenantReplication: allowCrossTenantReplication + allowSharedKeyAccess: allowSharedKeyAccess + defaultToOAuthAuthentication: defaultToOAuthAuthentication + dnsEndpointType: dnsEndpointType + minimumTlsVersion: minimumTlsVersion + networkAcls: networkAcls + publicNetworkAccess: publicNetworkAccess + supportsHttpsTrafficOnly: supportsHttpsTrafficOnly + } + + resource blobServices 'blobServices' = if (!empty(containers)) { + name: 'default' + properties: { + cors: { + corsRules: corsRules + } + deleteRetentionPolicy: deleteRetentionPolicy + } + resource container 'containers' = [for container in containers: { + name: container.name + properties: { + publicAccess: contains(container, 'publicAccess') ? container.publicAccess : 'None' + } + }] + } + + resource fileServices 'fileServices' = if (!empty(files)) { + name: 'default' + properties: { + cors: { + corsRules: corsRules + } + shareDeleteRetentionPolicy: shareDeleteRetentionPolicy + } + } + + resource queueServices 'queueServices' = if (!empty(queues)) { + name: 'default' + properties: { + + } + resource queue 'queues' = [for queue in queues: { + name: queue.name + properties: { + metadata: {} + } + }] + } + + resource tableServices 'tableServices' = if (!empty(tables)) { + name: 'default' + properties: {} + } +} + +output id string = storage.id +output name string = storage.name +output primaryEndpoints object = storage.properties.primaryEndpoints diff --git a/workshop/dotnet/infra/main.bicep b/workshop/dotnet/infra/main.bicep new file mode 100644 index 0000000..73b1915 --- /dev/null +++ b/workshop/dotnet/infra/main.bicep @@ -0,0 +1,409 @@ +targetScope = 'subscription' + +@description('Name of the environment used to generate a short unique hash for resources.') +@minLength(1) +@maxLength(64) +param environmentName string + +@description('Primary location for all resources') +@allowed([ 'centralus', 'eastus2', 'eastasia', 'westus', 'westeurope', 'westus2', 'australiaeast', 'eastus', 'francecentral', 'japaneast', 'nortcentralus', 'swedencentral', 'switzerlandnorth', 'uksouth' ]) +param location string +param tags string = '' + +@description('Location for the OpenAI resource group') +@allowed([ 'canadaeast', 'westus', 'eastus', 'eastus2', 'francecentral', 'swedencentral', 'switzerlandnorth', 'uksouth', 'japaneast', 'northcentralus', 'australiaeast' ]) +@metadata({ + azd: { + type: 'location' + } +}) +param openAiResourceGroupLocation string + +@description('Name of the chat GPT model. Default: gpt-35-turbo') +@allowed([ 'gpt-35-turbo', 'gpt-4', 'gpt-4o', 'gpt-4o-mini', 'gpt-35-turbo-16k', 'gpt-4-16k' ]) +param azureOpenAIChatGptModelName string = 'gpt-4o-mini' + +@description('Name of the chat GPT model. Default: 0613 for gpt-35-turbo, or choose 2024-07-18 for gpt-4o-mini') +@allowed([ '0613', '2024-07-18' ]) +param azureOpenAIChatGptModelVersion string ='2024-07-18' + +@description('Defines if the process will deploy an Azure Application Insights resource') +param useApplicationInsights bool = true + +// @description('Name of the Azure Application Insights dashboard') +param applicationInsightsDashboardName string = '' + +@description('Name of the Azure Application Insights resource') +param applicationInsightsName string = '' + +@description('Name of the Azure App Service Plan') +param appServicePlanName string = '' + +@description('Capacity of the chat GPT deployment. Default: 10') +param chatGptDeploymentCapacity int = 8 + +@description('Name of the chat GPT deployment') +param azureChatGptDeploymentName string = 'chat' + +@description('Name of the container apps environment') +param containerAppsEnvironmentName string = '' + +@description('Name of the Azure container registry') +param containerRegistryName string = '' + +@description('Name of the resource group for the Azure container registry') +param containerRegistryResourceGroupName string = '' + +@description('Name of the Azure Key Vault') +param keyVaultName string = '' + +@description('Location of the resource group for the Azure Key Vault') +param keyVaultResourceGroupLocation string = location + +@description('Name of the resource group for the Azure Key Vault') +param keyVaultResourceGroupName string = '' + +@description('Name of the Azure Log Analytics workspace') +param logAnalyticsName string = '' + +@description('Name of the resource group for the OpenAI resources') +param openAiResourceGroupName string = '' + +@description('Name of the OpenAI service') +param openAiServiceName string = '' + +@description('SKU name for the OpenAI service. Default: S0') +param openAiSkuName string = 'S0' + +@description('ID of the principal') +param principalId string = '' + +@description('Type of the principal. Valid values: User,ServicePrincipal') +param principalType string = 'User' + +@description('Name of the resource group') +param resourceGroupName string = '' + +@description('Name of the storage account') +param storageAccountName string = '' + +@description('Name of the storage container. Default: content') +param storageContainerName string = 'content' + +@description('Location of the resource group for the storage account') +param storageResourceGroupLocation string = location + +@description('Name of the resource group for the storage account') +param storageResourceGroupName string = '' + +@description('Specifies if the web app exists') +param webAppExists bool = false + +@description('Name of the web app container') +param webContainerAppName string = '' + +@description('Name of the web app identity') +param webIdentityName string = '' + +@description('Name of the web app image') +param webImageName string = '' + +@description('Use Azure OpenAI service') +param useAOAI bool + +@description('OpenAI API Key, leave empty to provision a new Azure OpenAI instance') +param openAIApiKey string + +@description('OpenAI Model') +param openAiChatGptDeployment string + + +var abbrs = loadJsonContent('./abbreviations.json') +var resourceToken = toLower(uniqueString(subscription().id, environmentName, location)) + +var baseTags = { 'azd-env-name': environmentName } +var updatedTags = union(empty(tags) ? {} : base64ToJson(tags), baseTags) + +// Organize resources in a resource group +resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { + name: !empty(resourceGroupName) ? resourceGroupName : '${abbrs.resourcesResourceGroups}${environmentName}' + location: location + tags: updatedTags +} + +resource azureOpenAiResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' existing = if (!empty(openAiResourceGroupName) && useAOAI) { + name: !empty(openAiResourceGroupName) ? openAiResourceGroupName : resourceGroup.name +} + + +resource storageResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' existing = if (!empty(storageResourceGroupName)) { + name: !empty(storageResourceGroupName) ? storageResourceGroupName : resourceGroup.name +} + +resource keyVaultResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' existing = if (!empty(keyVaultResourceGroupName)) { + name: !empty(keyVaultResourceGroupName) ? keyVaultResourceGroupName : resourceGroup.name +} + +// Store secrets in a keyvault +module keyVault 'core/security/keyvault.bicep' = { + name: 'keyvault' + scope: keyVaultResourceGroup + params: { + name: !empty(keyVaultName) ? keyVaultName : '${abbrs.keyVaultVaults}${resourceToken}' + location: keyVaultResourceGroupLocation + tags: updatedTags + principalId: principalId + } +} + +module keyVaultSecrets 'core/security/keyvault-secrets.bicep' = { + scope: keyVaultResourceGroup + name: 'keyvault-secrets' + params: { + keyVaultName: keyVault.outputs.name + tags: updatedTags + secrets: concat([ + { + name: 'AzureStorageAccountEndpoint' + value: storage.outputs.primaryEndpoints.blob + } + { + name: 'AzureStorageContainer' + value: storageContainerName + } + { + name: 'UseAOAI' + value: useAOAI ? 'true' : 'false' + } + ], + useAOAI ? [ + { + name: 'AzureOpenAiServiceEndpoint' + value: azureOpenAi.outputs.endpoint + } + { + name: 'AzureOpenAiChatGptDeployment' + value: azureChatGptDeploymentName + } + ] : [ + { + name: 'OpenAIAPIKey' + value: openAIApiKey + } + { + name: 'OpenAiChatGptDeployment' + value: openAiChatGptDeployment + } + ]) + } +} + +// Container apps host (including container registry) +module containerApps 'core/host/container-apps.bicep' = { + name: 'container-apps' + scope: resourceGroup + params: { + name: 'app' + containerAppsEnvironmentName: !empty(containerAppsEnvironmentName) ? containerAppsEnvironmentName : '${abbrs.appManagedEnvironments}${resourceToken}' + containerRegistryName: !empty(containerRegistryName) ? containerRegistryName : '${abbrs.containerRegistryRegistries}${resourceToken}' + containerRegistryResourceGroupName: !empty(containerRegistryResourceGroupName) ? containerRegistryResourceGroupName : resourceGroup.name + location: location + logAnalyticsWorkspaceName: monitoring.outputs.logAnalyticsWorkspaceName + } +} + +// Web frontend +module web './app/web.bicep' = { + name: 'web' + scope: resourceGroup + params: { + name: !empty(webContainerAppName) ? webContainerAppName : '${abbrs.appContainerApps}web-${resourceToken}' + location: location + tags: updatedTags + imageName: webImageName + identityName: !empty(webIdentityName) ? webIdentityName : '${abbrs.managedIdentityUserAssignedIdentities}web-${resourceToken}' + applicationInsightsName: monitoring.outputs.applicationInsightsName + containerAppsEnvironmentName: containerApps.outputs.environmentName + containerRegistryName: containerApps.outputs.registryName + exists: webAppExists + keyVaultName: keyVault.outputs.name + keyVaultResourceGroupName: keyVaultResourceGroup.name + storageBlobEndpoint: storage.outputs.primaryEndpoints.blob + storageContainerName: storageContainerName + openAiApiKey: useAOAI ? '' : openAIApiKey + openAiEndpoint: useAOAI ? azureOpenAi.outputs.endpoint : '' + openAiChatGptDeployment: useAOAI ? azureChatGptDeploymentName : '' + serviceBinds: [] + } +} + +// Create an App Service Plan to group applications under the same payment plan and SKU +// module appServicePlan './core/host/appserviceplan.bicep' = { +// name: 'appserviceplan' +// scope: resourceGroup +// params: { +// name: !empty(appServicePlanName) ? appServicePlanName : '${abbrs.webServerFarms}${resourceToken}' +// location: location +// tags: updatedTags +// sku: { +// name: 'Y1' +// tier: 'Dynamic' +// } +// } +// } + +// Monitor application with Azure Monitor +module monitoring 'core/monitor/monitoring.bicep' = { + name: 'monitoring' + scope: resourceGroup + params: { + location: location + tags: updatedTags + includeApplicationInsights: true + logAnalyticsName: !empty(logAnalyticsName) ? logAnalyticsName : '${abbrs.operationalInsightsWorkspaces}${resourceToken}' + applicationInsightsName: !empty(applicationInsightsName) ? applicationInsightsName : '${abbrs.insightsComponents}${resourceToken}' + applicationInsightsDashboardName: !empty(applicationInsightsDashboardName) ? applicationInsightsDashboardName : '${abbrs.portalDashboards}${resourceToken}' + } +} + +module azureOpenAi 'core/ai/cognitiveservices.bicep' = if (useAOAI) { + name: 'openai' + scope: azureOpenAiResourceGroup + params: { + name: !empty(openAiServiceName) ? openAiServiceName : '${abbrs.cognitiveServicesAccounts}${resourceToken}' + location: openAiResourceGroupLocation + tags: updatedTags + sku: { + name: openAiSkuName + } + deployments: [ + { + name: azureChatGptDeploymentName + model: { + format: 'OpenAI' + name: azureOpenAIChatGptModelName + version: azureOpenAIChatGptModelVersion + } + sku: { + name: 'Standard' + capacity: chatGptDeploymentCapacity + } + } + ] + } +} + +module storage 'core/storage/storage-account.bicep' = { + name: 'storage' + scope: storageResourceGroup + params: { + name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' + location: storageResourceGroupLocation + tags: updatedTags + publicNetworkAccess: 'Enabled' + sku: { + name: 'Standard_LRS' + } + deleteRetentionPolicy: { + enabled: true + days: 2 + } + containers: [ + { + name: storageContainerName + publicAccess: 'Blob' + } + ] + } +} + +// USER ROLES +module azureOpenAiRoleUser 'core/security/role.bicep' = if (useAOAI) { + scope: azureOpenAiResourceGroup + name: 'openai-role-user' + params: { + principalId: principalId + roleDefinitionId: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd' + principalType: principalType + } +} + +module storageRoleUser 'core/security/role.bicep' = { + scope: storageResourceGroup + name: 'storage-role-user' + params: { + principalId: principalId + roleDefinitionId: '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1' + principalType: principalType + } +} + +module storageContribRoleUser 'core/security/role.bicep' = { + scope: storageResourceGroup + name: 'storage-contribrole-user' + params: { + principalId: principalId + roleDefinitionId: 'ba92f5b4-2d11-453d-a403-e96b0029c9fe' + principalType: principalType + } +} + + +// SYSTEM IDENTITIES +module azureOpenAiRoleBackend 'core/security/role.bicep' = if (useAOAI) { + scope: azureOpenAiResourceGroup + name: 'openai-role-backend' + params: { + principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID + roleDefinitionId: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd' + principalType: 'ServicePrincipal' + } +} + +module storageRoleBackend 'core/security/role.bicep' = { + scope: storageResourceGroup + name: 'storage-role-backend' + params: { + principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID + roleDefinitionId: '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1' + principalType: 'ServicePrincipal' + } +} + +module storageContribRoleBackend 'core/security/role.bicep' = { + scope: storageResourceGroup + name: 'storage-contribrole-backend' + params: { + principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID + roleDefinitionId: 'ba92f5b4-2d11-453d-a403-e96b0029c9fe' + principalType: 'ServicePrincipal' + } +} + +output APPLICATIONINSIGHTS_CONNECTION_STRING string = monitoring.outputs.applicationInsightsConnectionString +output APPLICATIONINSIGHTS_NAME string = monitoring.outputs.applicationInsightsName +output AZURE_USE_APPLICATION_INSIGHTS bool = useApplicationInsights +output AZURE_CONTAINER_ENVIRONMENT_NAME string = containerApps.outputs.environmentName +output AZURE_CONTAINER_REGISTRY_ENDPOINT string = containerApps.outputs.registryLoginServer +output AZURE_CONTAINER_REGISTRY_NAME string = containerApps.outputs.registryName +output AZURE_CONTAINER_REGISTRY_RESOURCE_GROUP string = containerApps.outputs.registryName +output AZURE_KEY_VAULT_ENDPOINT string = keyVault.outputs.endpoint +output AZURE_KEY_VAULT_NAME string = keyVault.outputs.name +output AZURE_KEY_VAULT_RESOURCE_GROUP string = keyVaultResourceGroup.name +output AZURE_LOCATION string = location +output AZURE_OPENAI_RESOURCE_LOCATION string = openAiResourceGroupLocation +output AZURE_OPENAI_CHATGPT_DEPLOYMENT string = azureChatGptDeploymentName +output AZURE_OPENAI_ENDPOINT string = useAOAI? azureOpenAi.outputs.endpoint : '' +output AZURE_OPENAI_RESOURCE_GROUP string = useAOAI ? azureOpenAiResourceGroup.name : '' +output AZURE_OPENAI_SERVICE string = useAOAI ? azureOpenAi.outputs.name : '' +output AZURE_RESOURCE_GROUP string = resourceGroup.name +output AZURE_STORAGE_ACCOUNT string = storage.outputs.name +output AZURE_STORAGE_BLOB_ENDPOINT string = storage.outputs.primaryEndpoints.blob +output AZURE_STORAGE_CONTAINER string = storageContainerName +output AZURE_STORAGE_RESOURCE_GROUP string = storageResourceGroup.name +output AZURE_TENANT_ID string = tenant().tenantId +output SERVICE_WEB_IDENTITY_NAME string = web.outputs.SERVICE_WEB_IDENTITY_NAME +output SERVICE_WEB_NAME string = web.outputs.SERVICE_WEB_NAME +output USE_AOAI bool = useAOAI +output AZURE_OPENAI_CHATGPT_MODEL_VERSION string = azureOpenAIChatGptModelVersion +output AZURE_OPENAI_CHATGPT_MODEL_NAME string = azureOpenAIChatGptModelName diff --git a/workshop/dotnet/infra/main.parameters.json b/workshop/dotnet/infra/main.parameters.json new file mode 100644 index 0000000..b1a1d9a --- /dev/null +++ b/workshop/dotnet/infra/main.parameters.json @@ -0,0 +1,81 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "environmentName": { + "value": "${AZURE_ENV_NAME}" + }, + "location": { + "value": "${AZURE_LOCATION}" + }, + "tags": { + "value": "${AZURE_TAGS}" + }, + "keyVaultName": { + "value": "${AZURE_KEY_VAULT_NAME}" + }, + "keyVaultResourceGroupName": { + "value": "${AZURE_KEY_VAULT_RESOURCE_GROUP}" + }, + "openAiResourceGroupName": { + "value": "${AZURE_OPENAI_RESOURCE_GROUP}" + }, + "openAiResourceGroupLocation": { + "value": "${AZURE_OPENAI_RESOURCE_LOCATION=${AZURE_LOCATION}}" + }, + "chatGptDeploymentName": { + "value": "${AZURE_OPENAI_CHATGPT_DEPLOYMENT=chat}" + }, + "openAiServiceName": { + "value": "${AZURE_OPENAI_SERVICE}" + }, + "openAiSkuName": { + "value": "S0" + }, + "principalId": { + "value": "${AZURE_PRINCIPAL_ID}" + }, + "principalType": { + "value": "${AZURE_PRINCIPAL_TYPE=User}" + }, + "resourceGroupName": { + "value": "${AZURE_RESOURCE_GROUP}" + }, + "storageAccountName": { + "value": "${AZURE_STORAGE_ACCOUNT}" + }, + "storageResourceGroupName": { + "value": "${AZURE_STORAGE_RESOURCE_GROUP}" + }, + "webAppExists": { + "value": "${SERVICE_WEB_RESOURCE_EXISTS=false}" + }, + "webIdentityName": { + "value": "${SERVICE_WEB_IDENTITY_NAME}" + }, + "useApplicationInsights": { + "value": "${AZURE_USE_APPLICATION_INSIGHTS=true}" + }, + "publicNetworkAccess": { + "value": "${AZURE_PUBLIC_NETWORK_ACCESS=Enabled}" + }, + "openAIApiKey": { + "value": "${OPENAI_API_KEY}" + }, + "useAOAI": { + "value": "${USE_AOAI=true}" + }, + "openAiChatGptDeployment": { + "value": "${OPENAI_CHATGPT_DEPLOYMENT=gpt-4o-mini}" + }, + "azureOpenAIChatGptModelVersion": { + "value": "${AZURE_OPENAI_CHATGPT_MODEL_VERSION=2024-07-18}" + }, + "azureOpenAIChatGptModelName": { + "value": "${AZURE_OPENAI_CHATGPT_MODEL_NAME=gpt-4o-mini}" + }, + "azureOpenAIChatGptDeploymentCapacity": { + "value": "${AZURE_OPENAI_CHATGPT_DEPLOYMENT_CAPACITY=30}" + } + } +} From 70f288bbc3f9e2a68dd11f11484c4fcd32bb7b73 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 15 Oct 2024 11:36:46 -0400 Subject: [PATCH 17/61] refactored OpenAI app settings --- .../simple-ai-orchestration/lesson3.md | 4 +++- .../Config/AISettingsProvider.cs | 8 +++---- .../Config/KernelBuilderProvider.cs | 6 +++--- .../Core.Utilities/Models/AppSettings.cs | 21 +++++++++++-------- .../Core.Utilities/Services/StocksService.cs | 2 +- .../dotnet/Lessons/appsettings.json.example | 14 +++++++------ 6 files changed, 31 insertions(+), 24 deletions(-) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md index 82c7def..eb53275 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md @@ -140,7 +140,9 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr 1. Once the apiKey is provide, update the `appSettings.json` and paste it into this line: ```json - "stockServiceApiKey": "" + "StockService": { + "ApiKey": "" + } ``` 1. Next run program and ask stock pricing information: diff --git a/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs b/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs index c815073..4896f6a 100644 --- a/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs +++ b/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs @@ -17,11 +17,11 @@ internal static AppSettings GetSettings() var aiSettings = config .Get(); - Guard.Against.Null(aiSettings); - Guard.Against.NullOrEmpty(aiSettings.ModelName); - Guard.Against.NullOrEmpty(aiSettings.ApiKey); - Guard.Against.NullOrEmpty(aiSettings.Endpoint); + Guard.Against.Null(aiSettings.OpenAI); + Guard.Against.NullOrEmpty(aiSettings.OpenAI.ModelName); + Guard.Against.NullOrEmpty(aiSettings.OpenAI.ApiKey); + Guard.Against.NullOrEmpty(aiSettings.OpenAI.Endpoint); return aiSettings; } diff --git a/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs b/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs index 2a5247a..ff7d4e3 100644 --- a/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs +++ b/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs @@ -10,8 +10,8 @@ public static IKernelBuilder CreateKernelWithChatCompletion() return Kernel .CreateBuilder() .AddAzureOpenAIChatCompletion( - applicationSettings.ModelName, - applicationSettings.Endpoint, - applicationSettings.ApiKey); + applicationSettings.OpenAI.ModelName, + applicationSettings.OpenAI.Endpoint, + applicationSettings.OpenAI.ApiKey); } } \ No newline at end of file diff --git a/workshop/dotnet/Core.Utilities/Models/AppSettings.cs b/workshop/dotnet/Core.Utilities/Models/AppSettings.cs index 090554a..f6fbafc 100644 --- a/workshop/dotnet/Core.Utilities/Models/AppSettings.cs +++ b/workshop/dotnet/Core.Utilities/Models/AppSettings.cs @@ -2,14 +2,17 @@ namespace Core.Utilities.Models; -public class AppSettings { +public record AppSettings ( + OpenAI OpenAI, + StockService StockService +); - public string Endpoint { get; set; } = string.Empty; - - public string ModelName { get; set; } = string.Empty; +public record OpenAI ( + string Endpoint, + string ModelName, + string ApiKey +); - public string ApiKey { get; set; } = string.Empty; - - public string StockServiceApiKey { get; set;} = string.Empty; - -}; \ No newline at end of file +public record StockService ( + string ApiKey +); \ No newline at end of file diff --git a/workshop/dotnet/Core.Utilities/Services/StocksService.cs b/workshop/dotnet/Core.Utilities/Services/StocksService.cs index 571ace8..f076783 100644 --- a/workshop/dotnet/Core.Utilities/Services/StocksService.cs +++ b/workshop/dotnet/Core.Utilities/Services/StocksService.cs @@ -21,7 +21,7 @@ public StocksService(HttpClient httpClient) { httpClient.BaseAddress = new Uri("https://api.polygon.io/v1/"); _httpClient = httpClient; - _apiKey = AISettingsProvider.GetSettings().StockServiceApiKey; + _apiKey = AISettingsProvider.GetSettings().StockService.ApiKey; } /// diff --git a/workshop/dotnet/Lessons/appsettings.json.example b/workshop/dotnet/Lessons/appsettings.json.example index 3d336fd..9d26f3f 100644 --- a/workshop/dotnet/Lessons/appsettings.json.example +++ b/workshop/dotnet/Lessons/appsettings.json.example @@ -1,8 +1,10 @@ { - - "endpoint": "", - "modelName": "", - "apiKey": "", - "stockServiceApiKey": "" - + "OpenAI": { + "endpoint": "", + "modelName": "", + "apiKey": "" + }, + "StockService": { + "apiKey": "" + } } \ No newline at end of file From 957b82ac5b2aae1be95c6fb1d654f2a626ff3050 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 15 Oct 2024 12:20:49 -0400 Subject: [PATCH 18/61] refactored ModelName as deploymentName --- .../Core.Utilities/Config/AISettingsProvider.cs | 2 +- .../Core.Utilities/Config/KernelBuilderProvider.cs | 2 +- .../dotnet/Core.Utilities/Models/AppSettings.cs | 2 +- workshop/dotnet/Lessons/appsettings.json.example | 2 +- workshop/dotnet/infra/app/web.bicep | 13 ++++++++++--- workshop/dotnet/infra/main.bicep | 11 +++++++++++ 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs b/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs index 4896f6a..d5b9fd7 100644 --- a/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs +++ b/workshop/dotnet/Core.Utilities/Config/AISettingsProvider.cs @@ -19,7 +19,7 @@ internal static AppSettings GetSettings() .Get(); Guard.Against.Null(aiSettings); Guard.Against.Null(aiSettings.OpenAI); - Guard.Against.NullOrEmpty(aiSettings.OpenAI.ModelName); + Guard.Against.NullOrEmpty(aiSettings.OpenAI.DeploymentName); Guard.Against.NullOrEmpty(aiSettings.OpenAI.ApiKey); Guard.Against.NullOrEmpty(aiSettings.OpenAI.Endpoint); diff --git a/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs b/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs index ff7d4e3..199db10 100644 --- a/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs +++ b/workshop/dotnet/Core.Utilities/Config/KernelBuilderProvider.cs @@ -10,7 +10,7 @@ public static IKernelBuilder CreateKernelWithChatCompletion() return Kernel .CreateBuilder() .AddAzureOpenAIChatCompletion( - applicationSettings.OpenAI.ModelName, + applicationSettings.OpenAI.DeploymentName, applicationSettings.OpenAI.Endpoint, applicationSettings.OpenAI.ApiKey); } diff --git a/workshop/dotnet/Core.Utilities/Models/AppSettings.cs b/workshop/dotnet/Core.Utilities/Models/AppSettings.cs index f6fbafc..b34b782 100644 --- a/workshop/dotnet/Core.Utilities/Models/AppSettings.cs +++ b/workshop/dotnet/Core.Utilities/Models/AppSettings.cs @@ -9,7 +9,7 @@ StockService StockService public record OpenAI ( string Endpoint, - string ModelName, + string DeploymentName, string ApiKey ); diff --git a/workshop/dotnet/Lessons/appsettings.json.example b/workshop/dotnet/Lessons/appsettings.json.example index 9d26f3f..13962a1 100644 --- a/workshop/dotnet/Lessons/appsettings.json.example +++ b/workshop/dotnet/Lessons/appsettings.json.example @@ -1,7 +1,7 @@ { "OpenAI": { "endpoint": "", - "modelName": "", + "deploymentName": "", "apiKey": "" }, "StockService": { diff --git a/workshop/dotnet/infra/app/web.bicep b/workshop/dotnet/infra/app/web.bicep index e99081f..330e7d1 100644 --- a/workshop/dotnet/infra/app/web.bicep +++ b/workshop/dotnet/infra/app/web.bicep @@ -44,6 +44,9 @@ param openAiChatGptDeployment string @description('The OpenAI API key') param openAiApiKey string +@description('The Stock Service API key') +param stockServiceApiKey string + @description('An array of service binds') param serviceBinds array @@ -96,17 +99,21 @@ module app '../core/host/container-app-upsert.bicep' = { value: storageContainerName } { - name: 'AZURE_OPENAI_ENDPOINT' + name: 'OpenAI__Endpoint' value: openAiEndpoint } { - name: 'AZURE_OPENAI_CHATGPT_DEPLOYMENT' + name: 'OpenAI_DeploymentName' value: openAiChatGptDeployment } { - name: 'OPENAI_API_KEY' + name: 'OpenAI__ApiKey' value: openAiApiKey } + { + name: 'StockService__ApiKey' + value: stockServiceApiKey + } ] targetPort: 8080 } diff --git a/workshop/dotnet/infra/main.bicep b/workshop/dotnet/infra/main.bicep index 73b1915..16cf3a0 100644 --- a/workshop/dotnet/infra/main.bicep +++ b/workshop/dotnet/infra/main.bicep @@ -117,6 +117,8 @@ param openAIApiKey string @description('OpenAI Model') param openAiChatGptDeployment string +@description('Stock Service API Key from Polygon.io') +param stockServiceApiKey string var abbrs = loadJsonContent('./abbreviations.json') var resourceToken = toLower(uniqueString(subscription().id, environmentName, location)) @@ -175,6 +177,10 @@ module keyVaultSecrets 'core/security/keyvault-secrets.bicep' = { name: 'UseAOAI' value: useAOAI ? 'true' : 'false' } + { + name: 'StockServiceApiKey' + value: stockServiceApiKey + } ], useAOAI ? [ { @@ -194,6 +200,10 @@ module keyVaultSecrets 'core/security/keyvault-secrets.bicep' = { name: 'OpenAiChatGptDeployment' value: openAiChatGptDeployment } + { + name: 'StockServiceApiKey' + value: stockServiceApiKey + } ]) } } @@ -232,6 +242,7 @@ module web './app/web.bicep' = { storageContainerName: storageContainerName openAiApiKey: useAOAI ? '' : openAIApiKey openAiEndpoint: useAOAI ? azureOpenAi.outputs.endpoint : '' + stockServiceApiKey: stockServiceApiKey openAiChatGptDeployment: useAOAI ? azureChatGptDeploymentName : '' serviceBinds: [] } From 31afc645e6a0e348461e8cb5757f302564b20148 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 15 Oct 2024 15:40:23 -0400 Subject: [PATCH 19/61] working deployment --- workshop/dotnet/infra/app/web.bicep | 2 +- workshop/dotnet/infra/main.bicep | 13 ++++++------- workshop/dotnet/infra/main.parameters.json | 7 +++++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/workshop/dotnet/infra/app/web.bicep b/workshop/dotnet/infra/app/web.bicep index 330e7d1..e9f781f 100644 --- a/workshop/dotnet/infra/app/web.bicep +++ b/workshop/dotnet/infra/app/web.bicep @@ -103,7 +103,7 @@ module app '../core/host/container-app-upsert.bicep' = { value: openAiEndpoint } { - name: 'OpenAI_DeploymentName' + name: 'OpenAI__DeploymentName' value: openAiChatGptDeployment } { diff --git a/workshop/dotnet/infra/main.bicep b/workshop/dotnet/infra/main.bicep index 16cf3a0..8c670f7 100644 --- a/workshop/dotnet/infra/main.bicep +++ b/workshop/dotnet/infra/main.bicep @@ -114,9 +114,12 @@ param useAOAI bool @description('OpenAI API Key, leave empty to provision a new Azure OpenAI instance') param openAIApiKey string -@description('OpenAI Model') +@description('OpenAI Deployment name') param openAiChatGptDeployment string +@description('OpenAI Endoint') +param openAiEndpoint string + @description('Stock Service API Key from Polygon.io') param stockServiceApiKey string @@ -200,10 +203,6 @@ module keyVaultSecrets 'core/security/keyvault-secrets.bicep' = { name: 'OpenAiChatGptDeployment' value: openAiChatGptDeployment } - { - name: 'StockServiceApiKey' - value: stockServiceApiKey - } ]) } } @@ -241,9 +240,9 @@ module web './app/web.bicep' = { storageBlobEndpoint: storage.outputs.primaryEndpoints.blob storageContainerName: storageContainerName openAiApiKey: useAOAI ? '' : openAIApiKey - openAiEndpoint: useAOAI ? azureOpenAi.outputs.endpoint : '' + openAiEndpoint: useAOAI ? azureOpenAi.outputs.endpoint : openAiEndpoint stockServiceApiKey: stockServiceApiKey - openAiChatGptDeployment: useAOAI ? azureChatGptDeploymentName : '' + openAiChatGptDeployment: useAOAI ? azureChatGptDeploymentName : openAiChatGptDeployment serviceBinds: [] } } diff --git a/workshop/dotnet/infra/main.parameters.json b/workshop/dotnet/infra/main.parameters.json index b1a1d9a..166cbc0 100644 --- a/workshop/dotnet/infra/main.parameters.json +++ b/workshop/dotnet/infra/main.parameters.json @@ -63,11 +63,14 @@ "value": "${OPENAI_API_KEY}" }, "useAOAI": { - "value": "${USE_AOAI=true}" + "value": "${USE_AOAI=false}" }, "openAiChatGptDeployment": { - "value": "${OPENAI_CHATGPT_DEPLOYMENT=gpt-4o-mini}" + "value": "${OPENAI_CHATGPT_DEPLOYMENT}" }, + "openAiEndpoint": { + "value": "${OPENAI_ENDPOINT}" + }, "azureOpenAIChatGptModelVersion": { "value": "${AZURE_OPENAI_CHATGPT_MODEL_VERSION=2024-07-18}" }, From c303691c78befd93cb994e98a8630b757c363645 Mon Sep 17 00:00:00 2001 From: Govind Kamtamneni Date: Tue, 15 Oct 2024 23:48:09 -0700 Subject: [PATCH 20/61] add frontend code --- .gitignore | 4 +- sample/frontend/.dockerignore | 7 + .../workflows/azure-container-apps-deploy.yml | 49 + sample/frontend/Dockerfile | 35 + sample/frontend/README.md | 50 + sample/frontend/package-lock.json | 18530 ++++++++++++++++ sample/frontend/package.json | 51 + sample/frontend/public/index.html | 18 + sample/frontend/server.js | 41 + sample/frontend/src/App.tsx | 142 + sample/frontend/src/index.tsx | 10 + sample/frontend/tsconfig.json | 21 + 12 files changed, 18956 insertions(+), 2 deletions(-) create mode 100644 sample/frontend/.dockerignore create mode 100644 sample/frontend/.github/workflows/azure-container-apps-deploy.yml create mode 100644 sample/frontend/Dockerfile create mode 100644 sample/frontend/README.md create mode 100644 sample/frontend/package-lock.json create mode 100644 sample/frontend/package.json create mode 100644 sample/frontend/public/index.html create mode 100644 sample/frontend/server.js create mode 100644 sample/frontend/src/App.tsx create mode 100644 sample/frontend/src/index.tsx create mode 100644 sample/frontend/tsconfig.json diff --git a/.gitignore b/.gitignore index 60fdcab..0686cb1 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,6 @@ node_modules/ parts/ sdist/ var/ -package*.json *.egg-info/ .installed.cfg *.egg @@ -85,4 +84,5 @@ bld/ [Ll]og/ [Ll]ogs/ -appsettings.json \ No newline at end of file +appsettings.json +sample/frontend/.env diff --git a/sample/frontend/.dockerignore b/sample/frontend/.dockerignore new file mode 100644 index 0000000..a8a20f8 --- /dev/null +++ b/sample/frontend/.dockerignore @@ -0,0 +1,7 @@ +# Exclude node_modules and logs +node_modules +npm-debug.log + +# Exclude Git-related files +.git +.gitignore diff --git a/sample/frontend/.github/workflows/azure-container-apps-deploy.yml b/sample/frontend/.github/workflows/azure-container-apps-deploy.yml new file mode 100644 index 0000000..cb8194a --- /dev/null +++ b/sample/frontend/.github/workflows/azure-container-apps-deploy.yml @@ -0,0 +1,49 @@ +name: Deploy to Azure Container Apps + +on: + push: + branches: [ "main" ] + workflow_dispatch: + +env: + AZURE_CONTAINER_REGISTRY: gksamples24 + CONTAINER_APP_NAME: sample-frontend + RESOURCE_GROUP: copilotwksp + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to Azure + uses: azure/login@v1 + with: + creds: ${{ secrets.AZURE_CREDENTIALS }} + + - name: Log in to Azure Container Registry + uses: azure/docker-login@v1 + with: + login-server: ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io + username: ${{ secrets.AZURE_CLIENT_ID }} + password: ${{ secrets.AZURE_CLIENT_SECRET }} + + - name: Build and push image to ACR + uses: docker/build-push-action@v4 + with: + push: true + tags: ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_APP_NAME }}:${{ github.sha }} + file: ./Dockerfile + + - name: Deploy to Azure Container Apps + uses: azure/container-apps-deploy-action@v1 + with: + appName: ${{ env.CONTAINER_APP_NAME }} + resourceGroup: ${{ env.RESOURCE_GROUP }} + imageToDeploy: ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_APP_NAME }}:${{ github.sha }} + registryUrl: ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io + registryUsername: ${{ secrets.AZURE_CLIENT_ID }} + registryPassword: ${{ secrets.AZURE_CLIENT_SECRET }} diff --git a/sample/frontend/Dockerfile b/sample/frontend/Dockerfile new file mode 100644 index 0000000..d653f79 --- /dev/null +++ b/sample/frontend/Dockerfile @@ -0,0 +1,35 @@ +# Build stage +FROM node:16 AS build + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +# Production stage +FROM node:16-alpine + +WORKDIR /app + +COPY --from=build /app/build ./build +COPY --from=build /app/package*.json ./ +COPY --from=build /app/server.js ./ + +# Install production dependencies +RUN npm ci --only=production + +# Set environment variables +ENV NODE_ENV=production +ENV PORT=3001 + +# Expose the correct port +EXPOSE 3001 + +# Create a shell script to run the server +RUN echo '#!/bin/sh\n\nnode server.js' > /app/run.sh +RUN chmod +x /app/run.sh + +CMD ["/app/run.sh"] diff --git a/sample/frontend/README.md b/sample/frontend/README.md new file mode 100644 index 0000000..53a7823 --- /dev/null +++ b/sample/frontend/README.md @@ -0,0 +1,50 @@ +# Simple Copilot Chat Frontend + +A React-based chat application for interacting with an AI assistant (backend), designed for deployment on Azure Container Apps. + +## Getting Started + +### Prerequisites + +- **Node.js** (v16 or higher) +- **npm** (v7 or higher) +- **Git** + +### Installation + +1. **Install Dependencies:** + + ```bash + npm install + ``` + +1. **Set Environment Variables:** + + Create a `.env` file in the root directory of frontend and add the following environment variables: + + ```bash + API_URL=https://your-backend-api-url/chat + PORT=3001 + ``` + +1. **Run the Application:** + + ```bash + npm start + ``` + + The application will be available at `http://localhost:3001`. + +### Docker Usage (Optional) + +1. **Build the Docker Image:** + + ```bash + docker build -t simple-copilot-frontend . + ``` + +1. **Run the Docker Container:** + + ```bash + docker run -p 3001:3001 -d simple-copilot-frontend + ``` \ No newline at end of file diff --git a/sample/frontend/package-lock.json b/sample/frontend/package-lock.json new file mode 100644 index 0000000..6fa6244 --- /dev/null +++ b/sample/frontend/package-lock.json @@ -0,0 +1,18530 @@ +{ + "name": "frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.1.0", + "dependencies": { + "@chakra-ui/icons": "^2.2.4", + "@chakra-ui/react": "^2.10.2", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.113", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1", + "axios": "^1.7.7", + "cors": "^2.8.5", + "express": "^4.21.1", + "framer-motion": "^11.11.9", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-scripts": "5.0.1", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "dependencies": { + "@babel/highlight": "^7.25.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", + "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", + "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.8", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.8", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz", + "integrity": "sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg==", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "dependencies": { + "@babel/types": "^7.25.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "dependencies": { + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", + "dependencies": { + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", + "dependencies": { + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", + "dependencies": { + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", + "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", + "dependencies": { + "@babel/types": "^7.25.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz", + "integrity": "sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-decorators": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz", + "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.25.7.tgz", + "integrity": "sha512-fyoj6/YdVtlv2ROig/J0fP7hh/wNO1MJGm1NR70Pg7jbkF+jOUL9joorqaCOQh06Y+LfgTagHzC8KqZ3MF782w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", + "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz", + "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz", + "integrity": "sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz", + "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", + "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", + "dependencies": { + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz", + "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz", + "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", + "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.7.tgz", + "integrity": "sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-flow": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz", + "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz", + "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", + "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz", + "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", + "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz", + "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", + "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", + "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.7.tgz", + "integrity": "sha512-/qXt69Em8HgsjCLu7G3zdIQn7A2QwmYND7Wa0LTp09Na+Zn8L5d0A7wSXrKi18TJRc/Q5S1i1De/SU1LzVkSvA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz", + "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz", + "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-jsx": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz", + "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz", + "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz", + "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==", + "dependencies": { + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz", + "integrity": "sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-syntax-typescript": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz", + "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==", + "dependencies": { + "@babel/compat-data": "^7.25.8", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.8", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.8", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.8", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.8", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.8", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.8", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8", + "@babel/plugin-transform-numeric-separator": "^7.25.8", + "@babel/plugin-transform-object-rest-spread": "^7.25.8", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.8", + "@babel/plugin-transform-optional-chaining": "^7.25.8", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.8", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz", + "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-transform-react-display-name": "^7.25.7", + "@babel/plugin-transform-react-jsx": "^7.25.7", + "@babel/plugin-transform-react-jsx-development": "^7.25.7", + "@babel/plugin-transform-react-pure-annotations": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz", + "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-syntax-jsx": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-typescript": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", + "dependencies": { + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@chakra-ui/anatomy": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.3.4.tgz", + "integrity": "sha512-fFIYN7L276gw0Q7/ikMMlZxP7mvnjRaWJ7f3Jsf9VtDOi6eAYIBRrhQe6+SZ0PGmoOkRaBc7gSE5oeIbgFFyrw==" + }, + "node_modules/@chakra-ui/hooks": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.4.2.tgz", + "integrity": "sha512-LRKiVE1oA7afT5tbbSKAy7Uas2xFHE6IkrQdbhWCHmkHBUtPvjQQDgwtnd4IRZPmoEfNGwoJ/MQpwOM/NRTTwA==", + "dependencies": { + "@chakra-ui/utils": "2.2.2", + "@zag-js/element-size": "0.31.1", + "copy-to-clipboard": "3.3.3", + "framesync": "6.1.2" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/icons": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@chakra-ui/icons/-/icons-2.2.4.tgz", + "integrity": "sha512-l5QdBgwrAg3Sc2BRqtNkJpfuLw/pWRDwwT58J6c4PqQT6wzXxyNa8Q0PForu1ltB5qEiFb1kxr/F/HO1EwNa6g==", + "peerDependencies": { + "@chakra-ui/react": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.10.2.tgz", + "integrity": "sha512-TfIHTqTlxTHYJZBtpiR5EZasPUrLYKJxdbHkdOJb5G1OQ+2c5kKl5XA7c2pMtsEptzb7KxAAIB62t3hxdfWp1w==", + "dependencies": { + "@chakra-ui/hooks": "2.4.2", + "@chakra-ui/styled-system": "2.11.2", + "@chakra-ui/theme": "3.4.6", + "@chakra-ui/utils": "2.2.2", + "@popperjs/core": "^2.11.8", + "@zag-js/focus-visible": "^0.31.1", + "aria-hidden": "^1.2.3", + "react-fast-compare": "3.2.2", + "react-focus-lock": "^2.9.6", + "react-remove-scroll": "^2.5.7" + }, + "peerDependencies": { + "@emotion/react": ">=11", + "@emotion/styled": ">=11", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/styled-system": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.11.2.tgz", + "integrity": "sha512-y++z2Uop+hjfZX9mbH88F1ikazPv32asD2er56zMJBemUAzweXnHTpiCQbluEDSUDhqmghVZAdb+5L4XLbsRxA==", + "dependencies": { + "@chakra-ui/utils": "2.2.2", + "csstype": "^3.1.2" + } + }, + "node_modules/@chakra-ui/theme": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-3.4.6.tgz", + "integrity": "sha512-ZwFBLfiMC3URwaO31ONXoKH9k0TX0OW3UjdPF3EQkQpYyrk/fm36GkkzajjtdpWEd7rzDLRsQjPmvwNaSoNDtg==", + "dependencies": { + "@chakra-ui/anatomy": "2.3.4", + "@chakra-ui/theme-tools": "2.2.6", + "@chakra-ui/utils": "2.2.2" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.8.0" + } + }, + "node_modules/@chakra-ui/theme-tools": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.2.6.tgz", + "integrity": "sha512-3UhKPyzKbV3l/bg1iQN9PBvffYp+EBOoYMUaeTUdieQRPFzo2jbYR0lNCxqv8h5aGM/k54nCHU2M/GStyi9F2A==", + "dependencies": { + "@chakra-ui/anatomy": "2.3.4", + "@chakra-ui/utils": "2.2.2", + "color2k": "^2.0.2" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.0.0" + } + }, + "node_modules/@chakra-ui/utils": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.2.2.tgz", + "integrity": "sha512-jUPLT0JzRMWxpdzH6c+t0YMJYrvc5CLericgITV3zDSXblkfx3DsYXqU11DJTSGZI9dUKzM1Wd0Wswn4eJwvFQ==", + "dependencies": { + "@types/lodash.mergewith": "4.6.9", + "lodash.mergewith": "4.6.2" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/react": { + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", + "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" + }, + "node_modules/@emotion/styled": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", + "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", + "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead" + }, + "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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/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/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/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/@jest/console/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/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/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/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/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/@jest/core/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/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/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/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/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/@jest/reporters/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/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/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/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/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/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/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/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/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/@jest/transform/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/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/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/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/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/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/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/@jest/types/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/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", + "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", + "dependencies": { + "ansi-html": "^0.0.9", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/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==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/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==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/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==", + "peer": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/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/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/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/@testing-library/jest-dom/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/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/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/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/react/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/react/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/@testing-library/react/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/@testing-library/react/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.12", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", + "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", + "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==" + }, + "node_modules/@types/lodash.mergewith": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.9.tgz", + "integrity": "sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/node": { + "version": "16.18.113", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.113.tgz", + "integrity": "sha512-4jHxcEzSXpF1cBNxogs5FVbVSFSKo50sFCn7Xg7vmjJTbWFWgeuHW3QnoINlfmfG++MFR/q97RZE5RQXKeT+jg==" + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" + }, + "node_modules/@types/qs": { + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/react": { + "version": "18.3.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", + "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/@zag-js/dom-query": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.31.1.tgz", + "integrity": "sha512-oiuohEXAXhBxpzzNm9k2VHGEOLC1SXlXSbRPcfBZ9so5NRQUA++zCE7cyQJqGLTZR0t3itFLlZqDbYEXRrefwg==" + }, + "node_modules/@zag-js/element-size": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.31.1.tgz", + "integrity": "sha512-4T3yvn5NqqAjhlP326Fv+w9RqMIBbNN9H72g5q2ohwzhSgSfZzrKtjL4rs9axY/cw9UfMfXjRjEE98e5CMq7WQ==" + }, + "node_modules/@zag-js/focus-visible": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.31.1.tgz", + "integrity": "sha512-dbLksz7FEwyFoANbpIlNnd3bVm0clQSUsnP8yUVQucStZPsuWjCrhL2jlAbGNrTrahX96ntUMXHb/sM68TibFg==", + "dependencies": { + "@zag-js/dom-query": "0.31.1" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead" + }, + "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==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "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/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" + }, + "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==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/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/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/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/babel-jest/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/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "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==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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==", + "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/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/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "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": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "engines": { + "node": ">=6" + }, + "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==", + "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==", + "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/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001669", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", + "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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/chokidar/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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/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/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "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-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/color2k": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", + "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "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==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/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/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/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/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "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==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "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==", + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "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/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/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/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/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/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/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ] + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/csso/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/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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==", + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/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/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.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/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "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": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.39", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.39.tgz", + "integrity": "sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "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==", + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", + "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "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/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", + "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", + "dependencies": { + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", + "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/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/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/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/eslint/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/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "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.10", + "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" + } + }, + "node_modules/express/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/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "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==", + "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/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/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + }, + "node_modules/focus-lock": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.5.tgz", + "integrity": "sha512-QFaHbhv9WPUeLYBDe/PAuLKJ4Dd9OPvKs9xZBr3yLXnUrDNaVXKu2baDBXe3naPY30hgHYSsf2JW4jzas2mDEQ==", + "dependencies": { + "tslib": "^2.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "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" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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/foreground-child/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/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "11.11.9", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.9.tgz", + "integrity": "sha512-XpdZseuCrZehdHGuW22zZt3SF5g6AHJHJi7JwQIigOznW4Jg1n0oGPMJQheMaKLC+0rp5gxUKMRYI6ytd3q4RQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/framesync": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", + "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "dependencies": { + "tslib": "2.4.0" + } + }, + "node_modules/framesync/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "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==", + "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/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "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/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "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==", + "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==", + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "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==", + "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/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/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/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "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==", + "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-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "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/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/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/jake/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/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/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/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/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/jest-circus/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/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/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/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/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/jest-cli/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/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/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/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/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/jest-config/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/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/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/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/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/jest-diff/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/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/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/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/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/jest-each/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/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/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/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/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/jest-jasmine2/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/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/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/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/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/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/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/jest-message-util/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/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/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/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/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/jest-resolve/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/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/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/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/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/jest-runner/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/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/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/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/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/jest-runtime/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/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/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/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/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/jest-snapshot/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/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/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/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/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/jest-util/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/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/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/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/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/jest-validate/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/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/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/jest-watch-typeahead/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/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/jest-watch-typeahead/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/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/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/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/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/jest-watch-typeahead/node_modules/strip-ansi/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/jest-watch-typeahead/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/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/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/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/jest-watcher/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/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "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==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", + "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "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==", + "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/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "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==", + "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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "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/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "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/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "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-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/postcss-svgo/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/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "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==", + "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/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "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/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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==", + "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==", + "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/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/react-clientside-effect": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", + "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", + "dependencies": { + "@babel/runtime": "^7.12.13" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/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/react-dev-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-dev-utils/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/react-dev-utils/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/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-focus-lock": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.13.2.tgz", + "integrity": "sha512-T/7bsofxYqnod2xadvuwjGKHOoL5GH7/EIPI5UyEvaU/c2CcphvGI371opFtuY/SYdbMsNiuF4HsHQ50nA/TKQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^1.3.5", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.6", + "use-callback-ref": "^1.3.2", + "use-sidecar": "^1.1.2" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "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==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" + }, + "node_modules/regjsparser": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", + "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/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/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "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==", + "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/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/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/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/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "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==", + "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/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "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==" + }, + "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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "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": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-loader/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/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "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/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/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/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.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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-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-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/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/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "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/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.95.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "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/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/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/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/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/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "node_modules/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": { + "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-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/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/wrap-ansi-cjs/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/wrap-ansi/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/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/wrap-ansi/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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/sample/frontend/package.json b/sample/frontend/package.json new file mode 100644 index 0000000..b72f2d1 --- /dev/null +++ b/sample/frontend/package.json @@ -0,0 +1,51 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "dependencies": { + "@chakra-ui/icons": "^2.2.4", + "@chakra-ui/react": "^2.10.2", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.113", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.1", + "axios": "^1.7.7", + "cors": "^2.8.5", + "express": "^4.21.1", + "framer-motion": "^11.11.9", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-scripts": "5.0.1", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/sample/frontend/public/index.html b/sample/frontend/public/index.html new file mode 100644 index 0000000..a34fe12 --- /dev/null +++ b/sample/frontend/public/index.html @@ -0,0 +1,18 @@ + + + + + + + + + Simple Copilot Chat Frontend + + + +
+ + diff --git a/sample/frontend/server.js b/sample/frontend/server.js new file mode 100644 index 0000000..7adc1e5 --- /dev/null +++ b/sample/frontend/server.js @@ -0,0 +1,41 @@ +const express = require('express'); +const cors = require('cors'); +const axios = require('axios'); +const path = require('path'); + +const app = express(); +const PORT = process.env.PORT || 3001; + +app.use(cors()); +app.use(express.json()); + +// Serve static files from the React app +app.use(express.static(path.join(__dirname, 'build'))); + +const API_URL = process.env.API_URL || 'https://ca-web-5ssljjzhgthbc.agreeablesea-63caf67a.eastus2.azurecontainerapps.io/chat'; + +app.post('/api/chat', async (req, res) => { + try { + const response = await axios.post(API_URL, req.body, { + headers: { + 'Content-Type': 'application/json', + 'accept': 'text/plain' + } + }); + res.json(response.data); + } catch (error) { + console.error('Error:', error.message); + res.status(500).json({ error: 'An error occurred while processing your request' }); + } +}); + +// The "catchall" handler: for any request that doesn't +// match one above, send back React's index.html file. +app.get('*', (req, res) => { + res.sendFile(path.join(__dirname, 'build', 'index.html')); +}); + +app.listen(PORT, () => { + console.log(`Server running on port ${PORT}`); + console.log(`API URL: ${API_URL}`); +}); diff --git a/sample/frontend/src/App.tsx b/sample/frontend/src/App.tsx new file mode 100644 index 0000000..debf4c7 --- /dev/null +++ b/sample/frontend/src/App.tsx @@ -0,0 +1,142 @@ +import React, { useState, useEffect } from 'react'; +import { ChakraProvider, Box, VStack, Input, Text, Container, useColorMode, useColorModeValue, IconButton, Flex, InputGroup, InputRightElement } from '@chakra-ui/react'; +import { SunIcon, MoonIcon, ArrowForwardIcon } from '@chakra-ui/icons'; +import axios from 'axios'; +import { extendTheme, ThemeConfig } from "@chakra-ui/react"; + +interface Message { + message: string; + role: string; +} + +// Azure color scheme +const colors = { + azure: { + 50: '#e5f1fb', + 100: '#cce4f6', + 200: '#99c9ed', + 300: '#66ade3', + 400: '#3392da', + 500: '#0078d4', // Primary Azure color + 600: '#006abe', + 700: '#005ba7', + 800: '#004d8f', + 900: '#003e77', + }, +}; + +// Custom theme configuration +const config: ThemeConfig = { + initialColorMode: "light", + useSystemColorMode: false, +}; + +// Create a custom theme with Azure colors +const theme = extendTheme({ colors, config }); + +// Color mode toggle button component +const ColorModeToggle = () => { + const { toggleColorMode } = useColorMode(); + const text = useColorModeValue("dark", "light"); + const SwitchIcon = useColorModeValue(MoonIcon, SunIcon); + + return ( + } + size="md" + /> + ); +}; + +function App() { + const [inputMessage, setInputMessage] = useState(''); + const [messageHistory, setMessageHistory] = useState([]); + const [welcomeMessage, setWelcomeMessage] = useState({ message: 'Welcome to Azure Chat! How can I assist you today?', role: 'system' }); + + useEffect(() => { + setMessageHistory([welcomeMessage]); + }, []); + + const handleSendMessage = async () => { + if (!inputMessage.trim()) return; + + try { + const result = await axios.post('http://localhost:3001/api/chat', { + inputMessage, + messageHistory + }, { + headers: { + 'Content-Type': 'application/json' + } + }); + + if (result.data && result.data.messageHistory) { + setMessageHistory(result.data.messageHistory); + } else { + const newUserMessage: Message = { message: inputMessage, role: 'user' }; + const newAssistantMessage: Message = { + message: result.data.response || 'No response received', + role: 'assistant' + }; + setMessageHistory(prevHistory => [...prevHistory, newUserMessage, newAssistantMessage]); + } + setInputMessage(''); + } catch (error) { + console.error('Error sending message:', error); + const errorMessage: Message = { message: 'Error occurred while sending message', role: 'system' }; + setMessageHistory(prevHistory => [...prevHistory, errorMessage]); + } + }; + + const bgColor = useColorModeValue("azure.50", "azure.900"); + const textColor = useColorModeValue("azure.900", "azure.50"); + + return ( + + + + + Simple Copilot chat + + + + + {messageHistory.map((msg, index) => ( + + {msg.role}: {msg.message} + + ))} + + + setInputMessage(e.target.value)} + onKeyPress={(e) => { + if (e.key === 'Enter') { + handleSendMessage(); + } + }} + bg={useColorModeValue("white", "gray.800")} + /> + + } + onClick={handleSendMessage} + colorScheme="azure" + /> + + + + + + + ); +} + +export default App; diff --git a/sample/frontend/src/index.tsx b/sample/frontend/src/index.tsx new file mode 100644 index 0000000..c1f31c5 --- /dev/null +++ b/sample/frontend/src/index.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +ReactDOM.render( + + + , + document.getElementById('root') +); diff --git a/sample/frontend/tsconfig.json b/sample/frontend/tsconfig.json new file mode 100644 index 0000000..7ae7426 --- /dev/null +++ b/sample/frontend/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"] + } + \ No newline at end of file From a385992f5703e8c752096cc0d1c111264663019f Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Thu, 17 Oct 2024 17:03:36 -0400 Subject: [PATCH 21/61] AZD changes --- .gitignore | 4 +- sample/frontend/package-lock.json | 18530 ---------------- workshop/dotnet/azure.yaml | 9 +- {sample => workshop}/frontend/.dockerignore | 0 .../workflows/azure-container-apps-deploy.yml | 0 {sample => workshop}/frontend/Dockerfile | 0 {sample => workshop}/frontend/README.md | 0 {sample => workshop}/frontend/package.json | 1 + .../frontend/public/index.html | 0 {sample => workshop}/frontend/server.js | 0 {sample => workshop}/frontend/src/App.tsx | 0 {sample => workshop}/frontend/src/index.tsx | 0 {sample => workshop}/frontend/tsconfig.json | 0 13 files changed, 12 insertions(+), 18532 deletions(-) delete mode 100644 sample/frontend/package-lock.json rename {sample => workshop}/frontend/.dockerignore (100%) rename {sample => workshop}/frontend/.github/workflows/azure-container-apps-deploy.yml (100%) rename {sample => workshop}/frontend/Dockerfile (100%) rename {sample => workshop}/frontend/README.md (100%) rename {sample => workshop}/frontend/package.json (97%) rename {sample => workshop}/frontend/public/index.html (100%) rename {sample => workshop}/frontend/server.js (100%) rename {sample => workshop}/frontend/src/App.tsx (100%) rename {sample => workshop}/frontend/src/index.tsx (100%) rename {sample => workshop}/frontend/tsconfig.json (100%) diff --git a/.gitignore b/.gitignore index 0686cb1..5491291 100644 --- a/.gitignore +++ b/.gitignore @@ -84,5 +84,7 @@ bld/ [Ll]og/ [Ll]ogs/ +# Frontend/react/npm files appsettings.json -sample/frontend/.env +.env +package-lock.json diff --git a/sample/frontend/package-lock.json b/sample/frontend/package-lock.json deleted file mode 100644 index 6fa6244..0000000 --- a/sample/frontend/package-lock.json +++ /dev/null @@ -1,18530 +0,0 @@ -{ - "name": "frontend", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "frontend", - "version": "0.1.0", - "dependencies": { - "@chakra-ui/icons": "^2.2.4", - "@chakra-ui/react": "^2.10.2", - "@emotion/react": "^11.13.3", - "@emotion/styled": "^11.13.0", - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@types/jest": "^27.5.2", - "@types/node": "^16.18.113", - "@types/react": "^18.3.11", - "@types/react-dom": "^18.3.1", - "axios": "^1.7.7", - "cors": "^2.8.5", - "express": "^4.21.1", - "framer-motion": "^11.11.9", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-scripts": "5.0.1", - "typescript": "^4.9.5", - "web-vitals": "^2.1.4" - } - }, - "node_modules/@adobe/css-tools": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", - "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==" - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", - "dependencies": { - "@babel/highlight": "^7.25.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", - "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", - "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helpers": "^7.25.7", - "@babel/parser": "^7.25.8", - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.8", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz", - "integrity": "sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg==", - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", - "dependencies": { - "@babel/types": "^7.25.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", - "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", - "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", - "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", - "dependencies": { - "@babel/compat-data": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", - "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-member-expression-to-functions": "^7.25.7", - "@babel/helper-optimise-call-expression": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/traverse": "^7.25.7", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", - "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "regexpu-core": "^6.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", - "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", - "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", - "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", - "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", - "dependencies": { - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", - "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-wrap-function": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", - "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.7", - "@babel/helper-optimise-call-expression": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", - "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", - "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", - "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", - "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", - "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", - "dependencies": { - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", - "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", - "dependencies": { - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", - "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", - "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", - "dependencies": { - "@babel/types": "^7.25.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", - "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", - "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", - "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", - "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/plugin-transform-optional-chaining": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", - "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz", - "integrity": "sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-syntax-decorators": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz", - "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.25.7.tgz", - "integrity": "sha512-fyoj6/YdVtlv2ROig/J0fP7hh/wNO1MJGm1NR70Pg7jbkF+jOUL9joorqaCOQh06Y+LfgTagHzC8KqZ3MF782w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", - "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", - "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz", - "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz", - "integrity": "sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", - "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz", - "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-remap-async-to-generator": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", - "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-remap-async-to-generator": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", - "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", - "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", - "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz", - "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", - "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7", - "@babel/traverse": "^7.25.7", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", - "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/template": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", - "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", - "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", - "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", - "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz", - "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", - "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", - "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.7.tgz", - "integrity": "sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-syntax-flow": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", - "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", - "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz", - "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", - "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz", - "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", - "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", - "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", - "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", - "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", - "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", - "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", - "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", - "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz", - "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", - "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-transform-parameters": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", - "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz", - "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", - "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", - "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", - "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", - "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", - "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.7.tgz", - "integrity": "sha512-/qXt69Em8HgsjCLu7G3zdIQn7A2QwmYND7Wa0LTp09Na+Zn8L5d0A7wSXrKi18TJRc/Q5S1i1De/SU1LzVkSvA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz", - "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz", - "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-syntax-jsx": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz", - "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz", - "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", - "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", - "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz", - "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", - "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", - "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", - "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", - "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", - "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz", - "integrity": "sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/plugin-syntax-typescript": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", - "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", - "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", - "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", - "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz", - "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==", - "dependencies": { - "@babel/compat-data": "^7.25.8", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.25.7", - "@babel/plugin-syntax-import-attributes": "^7.25.7", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.8", - "@babel/plugin-transform-async-to-generator": "^7.25.7", - "@babel/plugin-transform-block-scoped-functions": "^7.25.7", - "@babel/plugin-transform-block-scoping": "^7.25.7", - "@babel/plugin-transform-class-properties": "^7.25.7", - "@babel/plugin-transform-class-static-block": "^7.25.8", - "@babel/plugin-transform-classes": "^7.25.7", - "@babel/plugin-transform-computed-properties": "^7.25.7", - "@babel/plugin-transform-destructuring": "^7.25.7", - "@babel/plugin-transform-dotall-regex": "^7.25.7", - "@babel/plugin-transform-duplicate-keys": "^7.25.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", - "@babel/plugin-transform-dynamic-import": "^7.25.8", - "@babel/plugin-transform-exponentiation-operator": "^7.25.7", - "@babel/plugin-transform-export-namespace-from": "^7.25.8", - "@babel/plugin-transform-for-of": "^7.25.7", - "@babel/plugin-transform-function-name": "^7.25.7", - "@babel/plugin-transform-json-strings": "^7.25.8", - "@babel/plugin-transform-literals": "^7.25.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.8", - "@babel/plugin-transform-member-expression-literals": "^7.25.7", - "@babel/plugin-transform-modules-amd": "^7.25.7", - "@babel/plugin-transform-modules-commonjs": "^7.25.7", - "@babel/plugin-transform-modules-systemjs": "^7.25.7", - "@babel/plugin-transform-modules-umd": "^7.25.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", - "@babel/plugin-transform-new-target": "^7.25.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8", - "@babel/plugin-transform-numeric-separator": "^7.25.8", - "@babel/plugin-transform-object-rest-spread": "^7.25.8", - "@babel/plugin-transform-object-super": "^7.25.7", - "@babel/plugin-transform-optional-catch-binding": "^7.25.8", - "@babel/plugin-transform-optional-chaining": "^7.25.8", - "@babel/plugin-transform-parameters": "^7.25.7", - "@babel/plugin-transform-private-methods": "^7.25.7", - "@babel/plugin-transform-private-property-in-object": "^7.25.8", - "@babel/plugin-transform-property-literals": "^7.25.7", - "@babel/plugin-transform-regenerator": "^7.25.7", - "@babel/plugin-transform-reserved-words": "^7.25.7", - "@babel/plugin-transform-shorthand-properties": "^7.25.7", - "@babel/plugin-transform-spread": "^7.25.7", - "@babel/plugin-transform-sticky-regex": "^7.25.7", - "@babel/plugin-transform-template-literals": "^7.25.7", - "@babel/plugin-transform-typeof-symbol": "^7.25.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.7", - "@babel/plugin-transform-unicode-property-regex": "^7.25.7", - "@babel/plugin-transform-unicode-regex": "^7.25.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz", - "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-transform-react-display-name": "^7.25.7", - "@babel/plugin-transform-react-jsx": "^7.25.7", - "@babel/plugin-transform-react-jsx-development": "^7.25.7", - "@babel/plugin-transform-react-pure-annotations": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz", - "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-syntax-jsx": "^7.25.7", - "@babel/plugin-transform-modules-commonjs": "^7.25.7", - "@babel/plugin-transform-typescript": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", - "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", - "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", - "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", - "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", - "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "node_modules/@chakra-ui/anatomy": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.3.4.tgz", - "integrity": "sha512-fFIYN7L276gw0Q7/ikMMlZxP7mvnjRaWJ7f3Jsf9VtDOi6eAYIBRrhQe6+SZ0PGmoOkRaBc7gSE5oeIbgFFyrw==" - }, - "node_modules/@chakra-ui/hooks": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.4.2.tgz", - "integrity": "sha512-LRKiVE1oA7afT5tbbSKAy7Uas2xFHE6IkrQdbhWCHmkHBUtPvjQQDgwtnd4IRZPmoEfNGwoJ/MQpwOM/NRTTwA==", - "dependencies": { - "@chakra-ui/utils": "2.2.2", - "@zag-js/element-size": "0.31.1", - "copy-to-clipboard": "3.3.3", - "framesync": "6.1.2" - }, - "peerDependencies": { - "react": ">=18" - } - }, - "node_modules/@chakra-ui/icons": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@chakra-ui/icons/-/icons-2.2.4.tgz", - "integrity": "sha512-l5QdBgwrAg3Sc2BRqtNkJpfuLw/pWRDwwT58J6c4PqQT6wzXxyNa8Q0PForu1ltB5qEiFb1kxr/F/HO1EwNa6g==", - "peerDependencies": { - "@chakra-ui/react": ">=2.0.0", - "react": ">=18" - } - }, - "node_modules/@chakra-ui/react": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.10.2.tgz", - "integrity": "sha512-TfIHTqTlxTHYJZBtpiR5EZasPUrLYKJxdbHkdOJb5G1OQ+2c5kKl5XA7c2pMtsEptzb7KxAAIB62t3hxdfWp1w==", - "dependencies": { - "@chakra-ui/hooks": "2.4.2", - "@chakra-ui/styled-system": "2.11.2", - "@chakra-ui/theme": "3.4.6", - "@chakra-ui/utils": "2.2.2", - "@popperjs/core": "^2.11.8", - "@zag-js/focus-visible": "^0.31.1", - "aria-hidden": "^1.2.3", - "react-fast-compare": "3.2.2", - "react-focus-lock": "^2.9.6", - "react-remove-scroll": "^2.5.7" - }, - "peerDependencies": { - "@emotion/react": ">=11", - "@emotion/styled": ">=11", - "framer-motion": ">=4.0.0", - "react": ">=18", - "react-dom": ">=18" - } - }, - "node_modules/@chakra-ui/styled-system": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.11.2.tgz", - "integrity": "sha512-y++z2Uop+hjfZX9mbH88F1ikazPv32asD2er56zMJBemUAzweXnHTpiCQbluEDSUDhqmghVZAdb+5L4XLbsRxA==", - "dependencies": { - "@chakra-ui/utils": "2.2.2", - "csstype": "^3.1.2" - } - }, - "node_modules/@chakra-ui/theme": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-3.4.6.tgz", - "integrity": "sha512-ZwFBLfiMC3URwaO31ONXoKH9k0TX0OW3UjdPF3EQkQpYyrk/fm36GkkzajjtdpWEd7rzDLRsQjPmvwNaSoNDtg==", - "dependencies": { - "@chakra-ui/anatomy": "2.3.4", - "@chakra-ui/theme-tools": "2.2.6", - "@chakra-ui/utils": "2.2.2" - }, - "peerDependencies": { - "@chakra-ui/styled-system": ">=2.8.0" - } - }, - "node_modules/@chakra-ui/theme-tools": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.2.6.tgz", - "integrity": "sha512-3UhKPyzKbV3l/bg1iQN9PBvffYp+EBOoYMUaeTUdieQRPFzo2jbYR0lNCxqv8h5aGM/k54nCHU2M/GStyi9F2A==", - "dependencies": { - "@chakra-ui/anatomy": "2.3.4", - "@chakra-ui/utils": "2.2.2", - "color2k": "^2.0.2" - }, - "peerDependencies": { - "@chakra-ui/styled-system": ">=2.0.0" - } - }, - "node_modules/@chakra-ui/utils": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.2.2.tgz", - "integrity": "sha512-jUPLT0JzRMWxpdzH6c+t0YMJYrvc5CLericgITV3zDSXblkfx3DsYXqU11DJTSGZI9dUKzM1Wd0Wswn4eJwvFQ==", - "dependencies": { - "@types/lodash.mergewith": "4.6.9", - "lodash.mergewith": "4.6.2" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@csstools/normalize.css": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", - "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==" - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@emotion/babel-plugin": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", - "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/serialize": "^1.2.0", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/cache": { - "version": "11.13.1", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", - "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", - "dependencies": { - "@emotion/memoize": "^0.9.0", - "@emotion/sheet": "^1.4.0", - "@emotion/utils": "^1.4.0", - "@emotion/weak-memoize": "^0.4.0", - "stylis": "4.2.0" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", - "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", - "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", - "dependencies": { - "@emotion/memoize": "^0.9.0" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", - "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" - }, - "node_modules/@emotion/react": { - "version": "11.13.3", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", - "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.12.0", - "@emotion/cache": "^11.13.0", - "@emotion/serialize": "^1.3.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", - "@emotion/utils": "^1.4.0", - "@emotion/weak-memoize": "^0.4.0", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/serialize": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", - "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", - "dependencies": { - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/unitless": "^0.10.0", - "@emotion/utils": "^1.4.1", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/sheet": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", - "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" - }, - "node_modules/@emotion/styled": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", - "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.12.0", - "@emotion/is-prop-valid": "^1.3.0", - "@emotion/serialize": "^1.3.0", - "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", - "@emotion/utils": "^1.4.0" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/unitless": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", - "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", - "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@emotion/utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", - "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", - "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead" - }, - "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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@isaacs/cliui/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/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/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/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/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/@jest/console/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/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/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/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/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/@jest/core/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/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/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/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/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/@jest/reporters/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/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/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/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/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/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/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/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/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/@jest/transform/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/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/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/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/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/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/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/@jest/types/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/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", - "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", - "dependencies": { - "ansi-html": "^0.0.9", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^4.2.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <5.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x || 5.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", - "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@testing-library/dom/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==", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/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==", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/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==", - "peer": true - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", - "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", - "dependencies": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@testing-library/jest-dom/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/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/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/@testing-library/jest-dom/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/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", - "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.5.0", - "@types/react-dom": "^18.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", - "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@testing-library/react/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/@testing-library/react/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/@testing-library/react/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/react/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/@testing-library/react/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/@testing-library/react/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/user-event": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.56.12", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", - "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", - "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", - "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==" - }, - "node_modules/@types/lodash.mergewith": { - "version": "4.6.9", - "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.9.tgz", - "integrity": "sha512-fgkoCAOF47K7sxrQ7Mlud2TH023itugZs2bUg8h/KzT+BnZNrR2jAOmaokbLunHNnobXVWOezAeNn/lZqwxkcw==", - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "node_modules/@types/node": { - "version": "16.18.113", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.113.tgz", - "integrity": "sha512-4jHxcEzSXpF1cBNxogs5FVbVSFSKo50sFCn7Xg7vmjJTbWFWgeuHW3QnoINlfmfG++MFR/q97RZE5RQXKeT+jg==" - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" - }, - "node_modules/@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" - }, - "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/react": { - "version": "18.3.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", - "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" - }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.9", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", - "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", - "dependencies": { - "@types/jest": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" - }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/@zag-js/dom-query": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.31.1.tgz", - "integrity": "sha512-oiuohEXAXhBxpzzNm9k2VHGEOLC1SXlXSbRPcfBZ9so5NRQUA++zCE7cyQJqGLTZR0t3itFLlZqDbYEXRrefwg==" - }, - "node_modules/@zag-js/element-size": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.31.1.tgz", - "integrity": "sha512-4T3yvn5NqqAjhlP326Fv+w9RqMIBbNN9H72g5q2ohwzhSgSfZzrKtjL4rs9axY/cw9UfMfXjRjEE98e5CMq7WQ==" - }, - "node_modules/@zag-js/focus-visible": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.31.1.tgz", - "integrity": "sha512-dbLksz7FEwyFoANbpIlNnd3bVm0clQSUsnP8yUVQucStZPsuWjCrhL2jlAbGNrTrahX96ntUMXHb/sM68TibFg==", - "dependencies": { - "@zag-js/dom-query": "0.31.1" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead" - }, - "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==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", - "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", - "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "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/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "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==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", - "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-array-method-boxes-properly": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" - }, - "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==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", - "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/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/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/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/babel-jest/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/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", - "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.4", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "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==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/bfj": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", - "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", - "dependencies": { - "bluebird": "^3.7.2", - "check-types": "^11.2.3", - "hoopy": "^0.1.4", - "jsonpath": "^1.1.1", - "tryer": "^1.0.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "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==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "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==", - "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/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/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "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": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "node_modules/browserslist": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "engines": { - "node": ">=6" - }, - "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==", - "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==", - "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/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001669", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", - "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/check-types": { - "version": "11.2.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", - "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "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/chokidar/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==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/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/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" - }, - "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-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/color2k": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz", - "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "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==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/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/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/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/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "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==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "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==", - "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", - "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, - "node_modules/core-js": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", - "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", - "dependencies": { - "browserslist": "^4.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", - "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "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/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/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/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/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/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/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" - }, - "node_modules/cssdb": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", - "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ] - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/csso/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/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "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==", - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/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/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.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/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "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": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.39", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.39.tgz", - "integrity": "sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==" - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "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/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "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==", - "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==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", - "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.4", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "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/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/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==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", - "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", - "dependencies": { - "aria-query": "~5.1.3", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.19", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", - "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", - "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/eslint/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/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/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/eslint/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/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "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.10", - "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" - } - }, - "node_modules/express/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/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/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==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/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/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "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==", - "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==", - "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/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/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" - }, - "node_modules/focus-lock": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.5.tgz", - "integrity": "sha512-QFaHbhv9WPUeLYBDe/PAuLKJ4Dd9OPvKs9xZBr3yLXnUrDNaVXKu2baDBXe3naPY30hgHYSsf2JW4jzas2mDEQ==", - "dependencies": { - "tslib": "^2.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "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" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "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/foreground-child/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/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/framer-motion": { - "version": "11.11.9", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.9.tgz", - "integrity": "sha512-XpdZseuCrZehdHGuW22zZt3SF5g6AHJHJi7JwQIigOznW4Jg1n0oGPMJQheMaKLC+0rp5gxUKMRYI6ytd3q4RQ==", - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/framesync": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", - "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", - "dependencies": { - "tslib": "2.4.0" - } - }, - "node_modules/framesync/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "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==", - "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/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "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/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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==", - "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==", - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "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==", - "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/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/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/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "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==", - "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-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "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/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "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==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/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/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/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/jake/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/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/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/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/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/jest-circus/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/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/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/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/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/jest-cli/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/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/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/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/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/jest-config/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/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/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/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/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/jest-diff/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/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/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/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/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/jest-each/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/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/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/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/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/jest-jasmine2/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/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/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/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/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/jest-matcher-utils/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/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/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/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/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/jest-message-util/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/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/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/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/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/jest-resolve/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/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/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/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/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/jest-runner/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/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/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/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/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/jest-runtime/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/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/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/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/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/jest-snapshot/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/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/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/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/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/jest-util/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/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/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/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/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/jest-validate/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/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watch-typeahead/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/jest-watch-typeahead/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/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/jest-watch-typeahead/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/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/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/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/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/jest-watch-typeahead/node_modules/strip-ansi/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/jest-watch-typeahead/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/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/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/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/jest-watcher/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/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", - "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpath": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", - "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", - "dependencies": { - "esprima": "1.2.2", - "static-eval": "2.0.2", - "underscore": "1.12.1" - } - }, - "node_modules/jsonpath/node_modules/esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "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==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "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==", - "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==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", - "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "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/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - }, - "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==", - "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/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", - "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", - "dependencies": { - "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "gopd": "^1.0.1", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "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==", - "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/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "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/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "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/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "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-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "browserslist": ">=4", - "postcss": ">=8" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "peerDependencies": { - "postcss": "^8.1.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", - "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dependencies": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "browserslist": ">= 4", - "postcss": ">= 8" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/postcss-svgo/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/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "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==", - "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/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "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/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "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==", - "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==", - "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/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "dependencies": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/react-clientside-effect": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", - "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", - "dependencies": { - "@babel/runtime": "^7.12.13" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/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/react-dev-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/react-dev-utils/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/react-dev-utils/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/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" - }, - "node_modules/react-focus-lock": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.13.2.tgz", - "integrity": "sha512-T/7bsofxYqnod2xadvuwjGKHOoL5GH7/EIPI5UyEvaU/c2CcphvGI371opFtuY/SYdbMsNiuF4HsHQ50nA/TKQ==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "focus-lock": "^1.3.5", - "prop-types": "^15.6.2", - "react-clientside-effect": "^1.2.6", - "use-callback-ref": "^1.3.2", - "use-sidecar": "^1.1.2" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "dependencies": { - "react-style-singleton": "^2.2.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "dependencies": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, - "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==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", - "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" - }, - "node_modules/regjsparser": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", - "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/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/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", - "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" - }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "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==", - "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/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/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/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/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "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==", - "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/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "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==" - }, - "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/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-loader/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/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/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/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "dependencies": { - "escodegen": "^1.8.1" - } - }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-eval/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/static-eval/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/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==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-eval/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "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/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/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/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.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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-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-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/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/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "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/tailwindcss": { - "version": "3.4.14", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", - "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.34.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", - "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" - }, - "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==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "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/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-vitals": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", - "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.95.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", - "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", - "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "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/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dependencies": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" - } - }, - "node_modules/webpack-manifest-plugin/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/webpack-manifest-plugin/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "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/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "dependencies": { - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", - "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", - "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-build": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", - "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.6.0", - "workbox-broadcast-update": "6.6.0", - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-google-analytics": "6.6.0", - "workbox-navigation-preload": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-range-requests": "6.6.0", - "workbox-recipes": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0", - "workbox-streams": "6.6.0", - "workbox-sw": "6.6.0", - "workbox-window": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", - "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", - "deprecated": "workbox-background-sync@6.6.0", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-core": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", - "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" - }, - "node_modules/workbox-expiration": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", - "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", - "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", - "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", - "dependencies": { - "workbox-background-sync": "6.6.0", - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", - "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-precaching": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", - "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", - "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-recipes": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", - "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", - "dependencies": { - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-routing": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", - "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-strategies": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", - "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-streams": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", - "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0" - } - }, - "node_modules/workbox-sw": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", - "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", - "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", - "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-webpack-plugin/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/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/workbox-window": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", - "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.6.0" - } - }, - "node_modules/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": { - "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-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/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/wrap-ansi-cjs/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/wrap-ansi/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/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/wrap-ansi/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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/workshop/dotnet/azure.yaml b/workshop/dotnet/azure.yaml index b261eaf..ba4446e 100644 --- a/workshop/dotnet/azure.yaml +++ b/workshop/dotnet/azure.yaml @@ -2,10 +2,17 @@ name: semantic-kernel-workshop-csharp metadata: template: semantic-kernel-workshop-csharp@0.0.1-beta services: - web: + api: project: ./App/backend/ host: containerapp language: dotnet docker: path: ../Dockerfile context: ../../ + web: + project: ../frontend/ + host: containerapp + language: ts + docker: + path: ./Dockerfile + context: ./ \ No newline at end of file diff --git a/sample/frontend/.dockerignore b/workshop/frontend/.dockerignore similarity index 100% rename from sample/frontend/.dockerignore rename to workshop/frontend/.dockerignore diff --git a/sample/frontend/.github/workflows/azure-container-apps-deploy.yml b/workshop/frontend/.github/workflows/azure-container-apps-deploy.yml similarity index 100% rename from sample/frontend/.github/workflows/azure-container-apps-deploy.yml rename to workshop/frontend/.github/workflows/azure-container-apps-deploy.yml diff --git a/sample/frontend/Dockerfile b/workshop/frontend/Dockerfile similarity index 100% rename from sample/frontend/Dockerfile rename to workshop/frontend/Dockerfile diff --git a/sample/frontend/README.md b/workshop/frontend/README.md similarity index 100% rename from sample/frontend/README.md rename to workshop/frontend/README.md diff --git a/sample/frontend/package.json b/workshop/frontend/package.json similarity index 97% rename from sample/frontend/package.json rename to workshop/frontend/package.json index b72f2d1..248c014 100644 --- a/sample/frontend/package.json +++ b/workshop/frontend/package.json @@ -18,6 +18,7 @@ "cors": "^2.8.5", "express": "^4.21.1", "framer-motion": "^11.11.9", + "frontend": "file:", "react": "^18.3.1", "react-dom": "^18.3.1", "react-scripts": "5.0.1", diff --git a/sample/frontend/public/index.html b/workshop/frontend/public/index.html similarity index 100% rename from sample/frontend/public/index.html rename to workshop/frontend/public/index.html diff --git a/sample/frontend/server.js b/workshop/frontend/server.js similarity index 100% rename from sample/frontend/server.js rename to workshop/frontend/server.js diff --git a/sample/frontend/src/App.tsx b/workshop/frontend/src/App.tsx similarity index 100% rename from sample/frontend/src/App.tsx rename to workshop/frontend/src/App.tsx diff --git a/sample/frontend/src/index.tsx b/workshop/frontend/src/index.tsx similarity index 100% rename from sample/frontend/src/index.tsx rename to workshop/frontend/src/index.tsx diff --git a/sample/frontend/tsconfig.json b/workshop/frontend/tsconfig.json similarity index 100% rename from sample/frontend/tsconfig.json rename to workshop/frontend/tsconfig.json From 7752c49cbafa29b1bd51cfaf811c4d33083ad515 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Thu, 17 Oct 2024 17:03:55 -0400 Subject: [PATCH 22/61] AZD changes (part 2) --- workshop/dotnet/infra/app/api.bicep | 135 +++++++++++++++++++++ workshop/dotnet/infra/app/web-backup.bicep | 135 +++++++++++++++++++++ workshop/dotnet/infra/app/web.bicep | 34 ++---- workshop/dotnet/infra/main.bicep | 61 ++++++++-- workshop/dotnet/infra/main.parameters.json | 3 + workshop/frontend/Dockerfile | 6 +- workshop/frontend/README.md | 6 +- workshop/frontend/server.js | 4 +- workshop/frontend/src/App.tsx | 6 +- 9 files changed, 342 insertions(+), 48 deletions(-) create mode 100644 workshop/dotnet/infra/app/api.bicep create mode 100644 workshop/dotnet/infra/app/web-backup.bicep diff --git a/workshop/dotnet/infra/app/api.bicep b/workshop/dotnet/infra/app/api.bicep new file mode 100644 index 0000000..713a4c1 --- /dev/null +++ b/workshop/dotnet/infra/app/api.bicep @@ -0,0 +1,135 @@ +param name string +param location string = resourceGroup().location +param tags object = {} + +@description('The name of the identity') +param identityName string + +@description('The name of the Application Insights') +param applicationInsightsName string + +@description('The name of the container apps environment') +param containerAppsEnvironmentName string + +@description('The name of the container registry') +param containerRegistryName string + +@description('The name of the service') +param serviceName string = 'api' + +@description('The name of the image') +param imageName string = '' + +@description('Specifies if the resource exists') +param exists bool + +@description('The name of the Key Vault') +param keyVaultName string + +@description('The name of the Key Vault resource group') +param keyVaultResourceGroupName string = resourceGroup().name + +@description('The storage blob endpoint') +param storageBlobEndpoint string + +@description('The name of the storage container') +param storageContainerName string + +@description('The OpenAI endpoint') +param openAiEndpoint string + +@description('The OpenAI ChatGPT deployment name') +param openAiChatGptDeployment string + +@description('The OpenAI API key') +param openAiApiKey string + +@description('The Stock Service API key') +param stockServiceApiKey string + +@description('An array of service binds') +param serviceBinds array + +resource webIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { + name: identityName + location: location +} + +module webKeyVaultAccess '../core/security/keyvault-access.bicep' = { + name: 'web-keyvault-access' + scope: resourceGroup(keyVaultResourceGroupName) + params: { + principalId: webIdentity.properties.principalId + keyVaultName: keyVault.name + } +} + +module app '../core/host/container-app-upsert.bicep' = { + name: '${serviceName}-container-app' + dependsOn: [ webKeyVaultAccess ] + params: { + name: name + location: location + tags: union(tags, { 'azd-service-name': serviceName }) + identityName: webIdentity.name + imageName: imageName + exists: exists + serviceBinds: serviceBinds + containerAppsEnvironmentName: containerAppsEnvironmentName + containerRegistryName: containerRegistryName + env: [ + { + name: 'AZURE_CLIENT_ID' + value: webIdentity.properties.clientId + } + { + name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' + value: !empty(applicationInsightsName) ? applicationInsights.properties.ConnectionString : '' + } + { + name: 'AZURE_KEY_VAULT_ENDPOINT' + value: keyVault.properties.vaultUri + } + { + name: 'AZURE_STORAGE_BLOB_ENDPOINT' + value: storageBlobEndpoint + } + { + name: 'AZURE_STORAGE_CONTAINER' + value: storageContainerName + } + { + name: 'OpenAI__Endpoint' + value: openAiEndpoint + } + { + name: 'OpenAI__DeploymentName' + value: openAiChatGptDeployment + } + { + name: 'OpenAI__ApiKey' + value: openAiApiKey + } + { + name: 'StockService__ApiKey' + value: stockServiceApiKey + } + ] + targetPort: 8080 + } +} + +resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (!empty(applicationInsightsName)) { + name: applicationInsightsName +} + +resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { + name: keyVaultName + scope: resourceGroup(keyVaultResourceGroupName) +} + +output SERVICE_API_IDENTITY_NAME string = identityName +output SERVICE_API_IDENTITY_PRINCIPAL_ID string = webIdentity.properties.principalId +output SERVICE_API_IMAGE_NAME string = app.outputs.imageName +output SERVICE_API_NAME string = app.outputs.name +output SERVICE_API_URI string = app.outputs.uri diff --git a/workshop/dotnet/infra/app/web-backup.bicep b/workshop/dotnet/infra/app/web-backup.bicep new file mode 100644 index 0000000..e9f781f --- /dev/null +++ b/workshop/dotnet/infra/app/web-backup.bicep @@ -0,0 +1,135 @@ +param name string +param location string = resourceGroup().location +param tags object = {} + +@description('The name of the identity') +param identityName string + +@description('The name of the Application Insights') +param applicationInsightsName string + +@description('The name of the container apps environment') +param containerAppsEnvironmentName string + +@description('The name of the container registry') +param containerRegistryName string + +@description('The name of the service') +param serviceName string = 'web' + +@description('The name of the image') +param imageName string = '' + +@description('Specifies if the resource exists') +param exists bool + +@description('The name of the Key Vault') +param keyVaultName string + +@description('The name of the Key Vault resource group') +param keyVaultResourceGroupName string = resourceGroup().name + +@description('The storage blob endpoint') +param storageBlobEndpoint string + +@description('The name of the storage container') +param storageContainerName string + +@description('The OpenAI endpoint') +param openAiEndpoint string + +@description('The OpenAI ChatGPT deployment name') +param openAiChatGptDeployment string + +@description('The OpenAI API key') +param openAiApiKey string + +@description('The Stock Service API key') +param stockServiceApiKey string + +@description('An array of service binds') +param serviceBinds array + +resource webIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { + name: identityName + location: location +} + +module webKeyVaultAccess '../core/security/keyvault-access.bicep' = { + name: 'web-keyvault-access' + scope: resourceGroup(keyVaultResourceGroupName) + params: { + principalId: webIdentity.properties.principalId + keyVaultName: keyVault.name + } +} + +module app '../core/host/container-app-upsert.bicep' = { + name: '${serviceName}-container-app' + dependsOn: [ webKeyVaultAccess ] + params: { + name: name + location: location + tags: union(tags, { 'azd-service-name': serviceName }) + identityName: webIdentity.name + imageName: imageName + exists: exists + serviceBinds: serviceBinds + containerAppsEnvironmentName: containerAppsEnvironmentName + containerRegistryName: containerRegistryName + env: [ + { + name: 'AZURE_CLIENT_ID' + value: webIdentity.properties.clientId + } + { + name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' + value: !empty(applicationInsightsName) ? applicationInsights.properties.ConnectionString : '' + } + { + name: 'AZURE_KEY_VAULT_ENDPOINT' + value: keyVault.properties.vaultUri + } + { + name: 'AZURE_STORAGE_BLOB_ENDPOINT' + value: storageBlobEndpoint + } + { + name: 'AZURE_STORAGE_CONTAINER' + value: storageContainerName + } + { + name: 'OpenAI__Endpoint' + value: openAiEndpoint + } + { + name: 'OpenAI__DeploymentName' + value: openAiChatGptDeployment + } + { + name: 'OpenAI__ApiKey' + value: openAiApiKey + } + { + name: 'StockService__ApiKey' + value: stockServiceApiKey + } + ] + targetPort: 8080 + } +} + +resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (!empty(applicationInsightsName)) { + name: applicationInsightsName +} + +resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { + name: keyVaultName + scope: resourceGroup(keyVaultResourceGroupName) +} + +output SERVICE_WEB_IDENTITY_NAME string = identityName +output SERVICE_WEB_IDENTITY_PRINCIPAL_ID string = webIdentity.properties.principalId +output SERVICE_WEB_IMAGE_NAME string = app.outputs.imageName +output SERVICE_WEB_NAME string = app.outputs.name +output SERVICE_WEB_URI string = app.outputs.uri diff --git a/workshop/dotnet/infra/app/web.bicep b/workshop/dotnet/infra/app/web.bicep index e9f781f..47ebdb9 100644 --- a/workshop/dotnet/infra/app/web.bicep +++ b/workshop/dotnet/infra/app/web.bicep @@ -8,6 +8,9 @@ param identityName string @description('The name of the Application Insights') param applicationInsightsName string +@description('Port for Web UI') +param webPort string = '80' + @description('The name of the container apps environment') param containerAppsEnvironmentName string @@ -35,17 +38,8 @@ param storageBlobEndpoint string @description('The name of the storage container') param storageContainerName string -@description('The OpenAI endpoint') -param openAiEndpoint string - -@description('The OpenAI ChatGPT deployment name') -param openAiChatGptDeployment string - -@description('The OpenAI API key') -param openAiApiKey string - -@description('The Stock Service API key') -param stockServiceApiKey string +@description('The URI for the backend API') +param apiEndpoint string @description('An array of service binds') param serviceBinds array @@ -99,23 +93,15 @@ module app '../core/host/container-app-upsert.bicep' = { value: storageContainerName } { - name: 'OpenAI__Endpoint' - value: openAiEndpoint - } - { - name: 'OpenAI__DeploymentName' - value: openAiChatGptDeployment - } - { - name: 'OpenAI__ApiKey' - value: openAiApiKey + name: 'API_URI' + value: apiEndpoint } { - name: 'StockService__ApiKey' - value: stockServiceApiKey + name: 'PORT' + value: webPort } ] - targetPort: 8080 + targetPort: 80 } } diff --git a/workshop/dotnet/infra/main.bicep b/workshop/dotnet/infra/main.bicep index 8c670f7..faa33d2 100644 --- a/workshop/dotnet/infra/main.bicep +++ b/workshop/dotnet/infra/main.bicep @@ -99,6 +99,12 @@ param storageResourceGroupName string = '' @description('Specifies if the web app exists') param webAppExists bool = false +@description('Specifies if the api app exists') +param apiAppExists bool = false + +@description('Name of the api app container') +param apiContainerAppName string = '' + @description('Name of the web app container') param webContainerAppName string = '' @@ -108,6 +114,9 @@ param webIdentityName string = '' @description('Name of the web app image') param webImageName string = '' +@description('Name of the api app image') +param apiImageName string = '' + @description('Use Azure OpenAI service') param useAOAI bool @@ -221,7 +230,34 @@ module containerApps 'core/host/container-apps.bicep' = { } } -// Web frontend + +// App api +module api './app/api.bicep' = { + name: 'api' + scope: resourceGroup + params: { + name: !empty(apiContainerAppName) ? apiContainerAppName : '${abbrs.appContainerApps}api-${resourceToken}' + location: location + tags: updatedTags + imageName: apiImageName + identityName: !empty(webIdentityName) ? webIdentityName : '${abbrs.managedIdentityUserAssignedIdentities}api-${resourceToken}' + applicationInsightsName: monitoring.outputs.applicationInsightsName + containerAppsEnvironmentName: containerApps.outputs.environmentName + containerRegistryName: containerApps.outputs.registryName + exists: apiAppExists + keyVaultName: keyVault.outputs.name + keyVaultResourceGroupName: keyVaultResourceGroup.name + storageBlobEndpoint: storage.outputs.primaryEndpoints.blob + storageContainerName: storageContainerName + openAiApiKey: useAOAI ? '' : openAIApiKey + openAiEndpoint: useAOAI ? azureOpenAi.outputs.endpoint : openAiEndpoint + stockServiceApiKey: stockServiceApiKey + openAiChatGptDeployment: useAOAI ? azureChatGptDeploymentName : openAiChatGptDeployment + serviceBinds: [] + } +} + +// App web module web './app/web.bicep' = { name: 'web' scope: resourceGroup @@ -239,15 +275,12 @@ module web './app/web.bicep' = { keyVaultResourceGroupName: keyVaultResourceGroup.name storageBlobEndpoint: storage.outputs.primaryEndpoints.blob storageContainerName: storageContainerName - openAiApiKey: useAOAI ? '' : openAIApiKey - openAiEndpoint: useAOAI ? azureOpenAi.outputs.endpoint : openAiEndpoint - stockServiceApiKey: stockServiceApiKey - openAiChatGptDeployment: useAOAI ? azureChatGptDeploymentName : openAiChatGptDeployment + apiEndpoint: '${api.outputs.SERVICE_API_URI}/chat' serviceBinds: [] } } -// Create an App Service Plan to group applications under the same payment plan and SKU +// //Create an App Service Plan to group applications under the same payment plan and SKU // module appServicePlan './core/host/appserviceplan.bicep' = { // name: 'appserviceplan' // scope: resourceGroup @@ -310,7 +343,7 @@ module storage 'core/storage/storage-account.bicep' = { name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' location: storageResourceGroupLocation tags: updatedTags - publicNetworkAccess: 'Enabled' + // publicNetworkAccess: 'Enabled' sku: { name: 'Standard_LRS' } @@ -360,9 +393,9 @@ module storageContribRoleUser 'core/security/role.bicep' = { // SYSTEM IDENTITIES -module azureOpenAiRoleBackend 'core/security/role.bicep' = if (useAOAI) { +module azureOpenAiRoleApi 'core/security/role.bicep' = if (useAOAI) { scope: azureOpenAiResourceGroup - name: 'openai-role-backend' + name: 'openai-role-api' params: { principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID roleDefinitionId: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd' @@ -370,9 +403,9 @@ module azureOpenAiRoleBackend 'core/security/role.bicep' = if (useAOAI) { } } -module storageRoleBackend 'core/security/role.bicep' = { +module storageRoleApi 'core/security/role.bicep' = { scope: storageResourceGroup - name: 'storage-role-backend' + name: 'storage-role-api' params: { principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID roleDefinitionId: '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1' @@ -380,9 +413,9 @@ module storageRoleBackend 'core/security/role.bicep' = { } } -module storageContribRoleBackend 'core/security/role.bicep' = { +module storageContribRoleApi 'core/security/role.bicep' = { scope: storageResourceGroup - name: 'storage-contribrole-backend' + name: 'storage-contribrole-api' params: { principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID roleDefinitionId: 'ba92f5b4-2d11-453d-a403-e96b0029c9fe' @@ -414,6 +447,8 @@ output AZURE_STORAGE_RESOURCE_GROUP string = storageResourceGroup.name output AZURE_TENANT_ID string = tenant().tenantId output SERVICE_WEB_IDENTITY_NAME string = web.outputs.SERVICE_WEB_IDENTITY_NAME output SERVICE_WEB_NAME string = web.outputs.SERVICE_WEB_NAME +output SERVICE_API_IDENTITY_NAME string = api.outputs.SERVICE_API_IDENTITY_NAME +output SERVICE_API_NAME string = api.outputs.SERVICE_API_NAME output USE_AOAI bool = useAOAI output AZURE_OPENAI_CHATGPT_MODEL_VERSION string = azureOpenAIChatGptModelVersion output AZURE_OPENAI_CHATGPT_MODEL_NAME string = azureOpenAIChatGptModelName diff --git a/workshop/dotnet/infra/main.parameters.json b/workshop/dotnet/infra/main.parameters.json index 166cbc0..2d2b9aa 100644 --- a/workshop/dotnet/infra/main.parameters.json +++ b/workshop/dotnet/infra/main.parameters.json @@ -53,6 +53,9 @@ "webIdentityName": { "value": "${SERVICE_WEB_IDENTITY_NAME}" }, + "apiAppExists": { + "value": "${SERVICE_API_RESOURCE_EXISTS=false}" + }, "useApplicationInsights": { "value": "${AZURE_USE_APPLICATION_INSIGHTS=true}" }, diff --git a/workshop/frontend/Dockerfile b/workshop/frontend/Dockerfile index d653f79..31c832b 100644 --- a/workshop/frontend/Dockerfile +++ b/workshop/frontend/Dockerfile @@ -23,13 +23,13 @@ RUN npm ci --only=production # Set environment variables ENV NODE_ENV=production -ENV PORT=3001 +ENV PORT=80 # Expose the correct port -EXPOSE 3001 +EXPOSE 80 # Create a shell script to run the server -RUN echo '#!/bin/sh\n\nnode server.js' > /app/run.sh +RUN echo 'node server.js' > /app/run.sh RUN chmod +x /app/run.sh CMD ["/app/run.sh"] diff --git a/workshop/frontend/README.md b/workshop/frontend/README.md index 53a7823..00a34a6 100644 --- a/workshop/frontend/README.md +++ b/workshop/frontend/README.md @@ -24,7 +24,7 @@ A React-based chat application for interacting with an AI assistant (backend), d ```bash API_URL=https://your-backend-api-url/chat - PORT=3001 + PORT=80 ``` 1. **Run the Application:** @@ -33,7 +33,7 @@ A React-based chat application for interacting with an AI assistant (backend), d npm start ``` - The application will be available at `http://localhost:3001`. + The application will be available at `http://localhost:80`. ### Docker Usage (Optional) @@ -46,5 +46,5 @@ A React-based chat application for interacting with an AI assistant (backend), d 1. **Run the Docker Container:** ```bash - docker run -p 3001:3001 -d simple-copilot-frontend + docker run -p 80:80 -d simple-copilot-frontend ``` \ No newline at end of file diff --git a/workshop/frontend/server.js b/workshop/frontend/server.js index 7adc1e5..95d7fbf 100644 --- a/workshop/frontend/server.js +++ b/workshop/frontend/server.js @@ -4,7 +4,7 @@ const axios = require('axios'); const path = require('path'); const app = express(); -const PORT = process.env.PORT || 3001; +const PORT = process.env.PORT; app.use(cors()); app.use(express.json()); @@ -12,7 +12,7 @@ app.use(express.json()); // Serve static files from the React app app.use(express.static(path.join(__dirname, 'build'))); -const API_URL = process.env.API_URL || 'https://ca-web-5ssljjzhgthbc.agreeablesea-63caf67a.eastus2.azurecontainerapps.io/chat'; +const API_URL = process.env.API_URL || 'http://localhost:' + PORT + '/chat'; app.post('/api/chat', async (req, res) => { try { diff --git a/workshop/frontend/src/App.tsx b/workshop/frontend/src/App.tsx index debf4c7..7b737ae 100644 --- a/workshop/frontend/src/App.tsx +++ b/workshop/frontend/src/App.tsx @@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react'; import { ChakraProvider, Box, VStack, Input, Text, Container, useColorMode, useColorModeValue, IconButton, Flex, InputGroup, InputRightElement } from '@chakra-ui/react'; import { SunIcon, MoonIcon, ArrowForwardIcon } from '@chakra-ui/icons'; import axios from 'axios'; -import { extendTheme, ThemeConfig } from "@chakra-ui/react"; +import { extendTheme, ThemeConfig } from '@chakra-ui/react'; interface Message { message: string; @@ -55,7 +55,7 @@ const ColorModeToggle = () => { function App() { const [inputMessage, setInputMessage] = useState(''); const [messageHistory, setMessageHistory] = useState([]); - const [welcomeMessage, setWelcomeMessage] = useState({ message: 'Welcome to Azure Chat! How can I assist you today?', role: 'system' }); + const [welcomeMessage, setWelcomeMessage] = useState({ message: 'You are a friendly financial advisor that only emits financial advice in a creative and funny tone', role: 'system' }); useEffect(() => { setMessageHistory([welcomeMessage]); @@ -65,7 +65,7 @@ function App() { if (!inputMessage.trim()) return; try { - const result = await axios.post('http://localhost:3001/api/chat', { + const result = await axios.post('https://ca-web-5ssljjzhgthbc.redbeach-42d46aa6.eastus2.azurecontainerapps.io/api/chat', { inputMessage, messageHistory }, { From 5e7ddbf1d8b02d0dbdb78a4ad904f22a1cd66c94 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 18 Oct 2024 12:12:30 -0400 Subject: [PATCH 23/61] fixed issue with API_URL variable name --- workshop/dotnet/infra/app/web-backup.bicep | 135 --------------------- workshop/dotnet/infra/app/web.bicep | 4 +- workshop/frontend/Dockerfile | 1 + 3 files changed, 3 insertions(+), 137 deletions(-) delete mode 100644 workshop/dotnet/infra/app/web-backup.bicep diff --git a/workshop/dotnet/infra/app/web-backup.bicep b/workshop/dotnet/infra/app/web-backup.bicep deleted file mode 100644 index e9f781f..0000000 --- a/workshop/dotnet/infra/app/web-backup.bicep +++ /dev/null @@ -1,135 +0,0 @@ -param name string -param location string = resourceGroup().location -param tags object = {} - -@description('The name of the identity') -param identityName string - -@description('The name of the Application Insights') -param applicationInsightsName string - -@description('The name of the container apps environment') -param containerAppsEnvironmentName string - -@description('The name of the container registry') -param containerRegistryName string - -@description('The name of the service') -param serviceName string = 'web' - -@description('The name of the image') -param imageName string = '' - -@description('Specifies if the resource exists') -param exists bool - -@description('The name of the Key Vault') -param keyVaultName string - -@description('The name of the Key Vault resource group') -param keyVaultResourceGroupName string = resourceGroup().name - -@description('The storage blob endpoint') -param storageBlobEndpoint string - -@description('The name of the storage container') -param storageContainerName string - -@description('The OpenAI endpoint') -param openAiEndpoint string - -@description('The OpenAI ChatGPT deployment name') -param openAiChatGptDeployment string - -@description('The OpenAI API key') -param openAiApiKey string - -@description('The Stock Service API key') -param stockServiceApiKey string - -@description('An array of service binds') -param serviceBinds array - -resource webIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { - name: identityName - location: location -} - -module webKeyVaultAccess '../core/security/keyvault-access.bicep' = { - name: 'web-keyvault-access' - scope: resourceGroup(keyVaultResourceGroupName) - params: { - principalId: webIdentity.properties.principalId - keyVaultName: keyVault.name - } -} - -module app '../core/host/container-app-upsert.bicep' = { - name: '${serviceName}-container-app' - dependsOn: [ webKeyVaultAccess ] - params: { - name: name - location: location - tags: union(tags, { 'azd-service-name': serviceName }) - identityName: webIdentity.name - imageName: imageName - exists: exists - serviceBinds: serviceBinds - containerAppsEnvironmentName: containerAppsEnvironmentName - containerRegistryName: containerRegistryName - env: [ - { - name: 'AZURE_CLIENT_ID' - value: webIdentity.properties.clientId - } - { - name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' - value: !empty(applicationInsightsName) ? applicationInsights.properties.ConnectionString : '' - } - { - name: 'AZURE_KEY_VAULT_ENDPOINT' - value: keyVault.properties.vaultUri - } - { - name: 'AZURE_STORAGE_BLOB_ENDPOINT' - value: storageBlobEndpoint - } - { - name: 'AZURE_STORAGE_CONTAINER' - value: storageContainerName - } - { - name: 'OpenAI__Endpoint' - value: openAiEndpoint - } - { - name: 'OpenAI__DeploymentName' - value: openAiChatGptDeployment - } - { - name: 'OpenAI__ApiKey' - value: openAiApiKey - } - { - name: 'StockService__ApiKey' - value: stockServiceApiKey - } - ] - targetPort: 8080 - } -} - -resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (!empty(applicationInsightsName)) { - name: applicationInsightsName -} - -resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { - name: keyVaultName - scope: resourceGroup(keyVaultResourceGroupName) -} - -output SERVICE_WEB_IDENTITY_NAME string = identityName -output SERVICE_WEB_IDENTITY_PRINCIPAL_ID string = webIdentity.properties.principalId -output SERVICE_WEB_IMAGE_NAME string = app.outputs.imageName -output SERVICE_WEB_NAME string = app.outputs.name -output SERVICE_WEB_URI string = app.outputs.uri diff --git a/workshop/dotnet/infra/app/web.bicep b/workshop/dotnet/infra/app/web.bicep index 47ebdb9..edc1c49 100644 --- a/workshop/dotnet/infra/app/web.bicep +++ b/workshop/dotnet/infra/app/web.bicep @@ -93,13 +93,13 @@ module app '../core/host/container-app-upsert.bicep' = { value: storageContainerName } { - name: 'API_URI' + name: 'API_URL' value: apiEndpoint } { name: 'PORT' value: webPort - } + } ] targetPort: 80 } diff --git a/workshop/frontend/Dockerfile b/workshop/frontend/Dockerfile index 31c832b..9fc2eda 100644 --- a/workshop/frontend/Dockerfile +++ b/workshop/frontend/Dockerfile @@ -4,6 +4,7 @@ FROM node:16 AS build WORKDIR /app COPY package*.json ./ +RUN npm install RUN npm ci COPY . . From a40f765f02306d45ff615de96543dc26cdd0b7bd Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 18 Oct 2024 14:27:55 -0400 Subject: [PATCH 24/61] Maded proxy url parameterized --- workshop/dotnet/infra/app/web.bicep | 4 ++++ workshop/dotnet/infra/main.bicep | 14 -------------- workshop/frontend/README.md | 1 + workshop/frontend/src/App.tsx | 8 ++++++-- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/workshop/dotnet/infra/app/web.bicep b/workshop/dotnet/infra/app/web.bicep index edc1c49..953b024 100644 --- a/workshop/dotnet/infra/app/web.bicep +++ b/workshop/dotnet/infra/app/web.bicep @@ -100,6 +100,10 @@ module app '../core/host/container-app-upsert.bicep' = { name: 'PORT' value: webPort } + { + name: 'REACT_APP_PROXY_URL' + value: 'https://$(CONTAINER_APP_HOSTNAME)/api/chat' + } ] targetPort: 80 } diff --git a/workshop/dotnet/infra/main.bicep b/workshop/dotnet/infra/main.bicep index faa33d2..0373a77 100644 --- a/workshop/dotnet/infra/main.bicep +++ b/workshop/dotnet/infra/main.bicep @@ -280,20 +280,6 @@ module web './app/web.bicep' = { } } -// //Create an App Service Plan to group applications under the same payment plan and SKU -// module appServicePlan './core/host/appserviceplan.bicep' = { -// name: 'appserviceplan' -// scope: resourceGroup -// params: { -// name: !empty(appServicePlanName) ? appServicePlanName : '${abbrs.webServerFarms}${resourceToken}' -// location: location -// tags: updatedTags -// sku: { -// name: 'Y1' -// tier: 'Dynamic' -// } -// } -// } // Monitor application with Azure Monitor module monitoring 'core/monitor/monitoring.bicep' = { diff --git a/workshop/frontend/README.md b/workshop/frontend/README.md index 00a34a6..0678a6a 100644 --- a/workshop/frontend/README.md +++ b/workshop/frontend/README.md @@ -24,6 +24,7 @@ A React-based chat application for interacting with an AI assistant (backend), d ```bash API_URL=https://your-backend-api-url/chat + REACT_APP_PROXY_URL=http://localhost/api/chat PORT=80 ``` diff --git a/workshop/frontend/src/App.tsx b/workshop/frontend/src/App.tsx index 7b737ae..ef7cf42 100644 --- a/workshop/frontend/src/App.tsx +++ b/workshop/frontend/src/App.tsx @@ -56,16 +56,20 @@ function App() { const [inputMessage, setInputMessage] = useState(''); const [messageHistory, setMessageHistory] = useState([]); const [welcomeMessage, setWelcomeMessage] = useState({ message: 'You are a friendly financial advisor that only emits financial advice in a creative and funny tone', role: 'system' }); - + const proxy_url = process.env.REACT_APP_PROXY_URL; useEffect(() => { setMessageHistory([welcomeMessage]); }, []); const handleSendMessage = async () => { if (!inputMessage.trim()) return; + if (!proxy_url) { + console.error('Proxy URL is not set'); + return; + } try { - const result = await axios.post('https://ca-web-5ssljjzhgthbc.redbeach-42d46aa6.eastus2.azurecontainerapps.io/api/chat', { + const result = await axios.post(proxy_url, { inputMessage, messageHistory }, { From d92c2b6531cf7377fd24e71414c7c194595a88a9 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 18 Oct 2024 16:29:19 -0400 Subject: [PATCH 25/61] added setup for backend api (partial) --- .../app-backend-api.md | 78 +++++++++++++++++++ .../simple-ai-orchestration/app-howto.md | 9 +++ mkdocs.yml | 3 + workshop/dotnet/App/backend/Program.cs | 23 ++---- 4 files changed, 96 insertions(+), 17 deletions(-) create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md new file mode 100644 index 0000000..05730d7 --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md @@ -0,0 +1,78 @@ +# Creating the Backend API + +These changes are already available in the repository. These instructions walk +you through the process followed for create the backend API from the Console application: + +1. Start by creating a new directory: + + ```bash + mkdir -p workshop/dotnet/App/backend + cd workshop/dotnet/App/backend + ``` + +1. Next create a new SDK .NET project: + + ```bash + dotnet new webapi -n MinimialApi + ``` + +1. Add the following nuget packages: + + ```bash + dotnet add package Microsoft.AspNetCore.Mvc + dotnet add package Swashbuckle.AspNetCore + ``` + +1. Create a new `Program.cs` in the project directory. This file initializes and loads + the required services and configuration for the API, namely configuring CORS protection, + enabling controllers for the API and exposing Swagger document: + + ```csharp + using Microsoft.AspNetCore.Antiforgery; + using Extensions; + + var builder = WebApplication.CreateBuilder(args); + + builder.Services.AddControllers(); + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + // See: https://aka.ms/aspnetcore/swashbuckle + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + builder.Services.AddOutputCache(); + builder.Services.AddAntiforgery(options => { + options.HeaderName = "X-CSRF-TOKEN-HEADER"; + options.FormFieldName = "X-CSRF-TOKEN-FORM"; }); + builder.Services.AddHttpClient(); + builder.Services.AddDistributedMemoryCache(); + // Add Semantic Kernel services + builder.Services.AddSkServices(); + + // Load user secrets + builder.Configuration.AddUserSecrets(); + + var app = builder.Build(); + app.UseSwagger(); + app.UseSwaggerUI(); + app.UseOutputCache(); + app.UseRouting(); + app.UseCors(); + app.UseAntiforgery(); + app.MapControllers(); + + app.Use(next => context => + { + var antiforgery = app.Services.GetRequiredService(); + var tokens = antiforgery.GetAndStoreTokens(context); + context.Response.Cookies.Append("XSRF-TOKEN", tokens?.RequestToken ?? string.Empty, new CookieOptions() { HttpOnly = false }); + return next(context); + }); + + app.Map("/", () => Results.Redirect("/swagger")); + + app.MapControllerRoute( + "default", + "{controller=ChatController}"); + + app.Run(); + ``` diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md new file mode 100644 index 0000000..42db92d --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md @@ -0,0 +1,9 @@ +# Turning the console application into a Deployable application + +In this lesson we go over the steps on how to create a deployable version of the +semantic kernel console application by creating 3 main components: + +1. [Backend API (C#) using ASP .NET Core libraries](app-backend-api.md) +1. React JS Web application (with Node Proxy) +1. AZD + Bicep templates for Infrastructure as Code deployment + diff --git a/mkdocs.yml b/mkdocs.yml index 021c4c8..e864bda 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -48,6 +48,9 @@ nav: - Lesson 1 - Simple Semantic Kernel chatbot: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md - Lesson 2 - Simple Semantic Kernel chatbot with history: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md - Lesson 3 - Simple Semantic Kernel chatbot with plugins: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md + - Build a deployable web application: + - wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md + - Create Backend API: wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md - Advanced AI Orchestration: wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md - Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md - Post-workshop: diff --git a/workshop/dotnet/App/backend/Program.cs b/workshop/dotnet/App/backend/Program.cs index 77a00db..9d654c5 100644 --- a/workshop/dotnet/App/backend/Program.cs +++ b/workshop/dotnet/App/backend/Program.cs @@ -6,33 +6,24 @@ builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); - -// Load user secrets -builder.Configuration.AddUserSecrets(); -//builder.Configuration.ConfigureAzureKeyVault(); - // See: https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddOutputCache(); -//builder.Services.AddCrossOriginResourceSharing(); -//builder.Services.AddAzureServices(); -builder.Services.AddAntiforgery(options => { options.HeaderName = "X-CSRF-TOKEN-HEADER"; options.FormFieldName = "X-CSRF-TOKEN-FORM"; }); +builder.Services.AddAntiforgery(options => { + options.HeaderName = "X-CSRF-TOKEN-HEADER"; + options.FormFieldName = "X-CSRF-TOKEN-FORM"; }); builder.Services.AddHttpClient(); - builder.Services.AddDistributedMemoryCache(); - -// Add Azure services -//builder.Services.AddAzureServices(); - // Add Semantic Kernel services builder.Services.AddSkServices(); +// Load user secrets +builder.Configuration.AddUserSecrets(); + var app = builder.Build(); app.UseSwagger(); app.UseSwaggerUI(); - -//app.UseHttpsRedirection(); app.UseOutputCache(); app.UseRouting(); app.UseCors(); @@ -49,8 +40,6 @@ app.Map("/", () => Results.Redirect("/swagger")); -// app.UseAuthorization(); - app.MapControllerRoute( "default", "{controller=ChatController}"); From 2f36ec0c13ebfc62ebb89d0e4d1cf666b5cfe0dc Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Sun, 20 Oct 2024 16:12:48 -0400 Subject: [PATCH 26/61] added web-app instructions and refactored plugins --- .../app-backend-api.md | 78 ------ .../create-deployable-app/backend-api.md | 239 ++++++++++++++++++ .../index.md} | 4 +- .../create-deployable-app/web-app.md | 48 ++++ .../simple-ai-orchestration/lesson3.md | 20 +- mkdocs.yml | 5 +- .../Plugins/StockDataPlugin.cs | 2 +- .../Plugins/TimeInformationPlugin.cs | 2 +- workshop/dotnet/Solutions/Lesson3/Program.cs | 2 +- workshop/frontend/server.js | 2 +- 10 files changed, 303 insertions(+), 99 deletions(-) delete mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md rename docs/wksp2/07-semantic-kernel/simple-ai-orchestration/{app-howto.md => create-deployable-app/index.md} (68%) create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md rename workshop/dotnet/{Solutions/Lesson3 => Core.Utilities}/Plugins/StockDataPlugin.cs (96%) rename workshop/dotnet/{Solutions/Lesson3 => Core.Utilities}/Plugins/TimeInformationPlugin.cs (88%) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md deleted file mode 100644 index 05730d7..0000000 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md +++ /dev/null @@ -1,78 +0,0 @@ -# Creating the Backend API - -These changes are already available in the repository. These instructions walk -you through the process followed for create the backend API from the Console application: - -1. Start by creating a new directory: - - ```bash - mkdir -p workshop/dotnet/App/backend - cd workshop/dotnet/App/backend - ``` - -1. Next create a new SDK .NET project: - - ```bash - dotnet new webapi -n MinimialApi - ``` - -1. Add the following nuget packages: - - ```bash - dotnet add package Microsoft.AspNetCore.Mvc - dotnet add package Swashbuckle.AspNetCore - ``` - -1. Create a new `Program.cs` in the project directory. This file initializes and loads - the required services and configuration for the API, namely configuring CORS protection, - enabling controllers for the API and exposing Swagger document: - - ```csharp - using Microsoft.AspNetCore.Antiforgery; - using Extensions; - - var builder = WebApplication.CreateBuilder(args); - - builder.Services.AddControllers(); - builder.Services.AddEndpointsApiExplorer(); - builder.Services.AddSwaggerGen(); - // See: https://aka.ms/aspnetcore/swashbuckle - builder.Services.AddEndpointsApiExplorer(); - builder.Services.AddSwaggerGen(); - builder.Services.AddOutputCache(); - builder.Services.AddAntiforgery(options => { - options.HeaderName = "X-CSRF-TOKEN-HEADER"; - options.FormFieldName = "X-CSRF-TOKEN-FORM"; }); - builder.Services.AddHttpClient(); - builder.Services.AddDistributedMemoryCache(); - // Add Semantic Kernel services - builder.Services.AddSkServices(); - - // Load user secrets - builder.Configuration.AddUserSecrets(); - - var app = builder.Build(); - app.UseSwagger(); - app.UseSwaggerUI(); - app.UseOutputCache(); - app.UseRouting(); - app.UseCors(); - app.UseAntiforgery(); - app.MapControllers(); - - app.Use(next => context => - { - var antiforgery = app.Services.GetRequiredService(); - var tokens = antiforgery.GetAndStoreTokens(context); - context.Response.Cookies.Append("XSRF-TOKEN", tokens?.RequestToken ?? string.Empty, new CookieOptions() { HttpOnly = false }); - return next(context); - }); - - app.Map("/", () => Results.Redirect("/swagger")); - - app.MapControllerRoute( - "default", - "{controller=ChatController}"); - - app.Run(); - ``` diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md new file mode 100644 index 0000000..f9374cb --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md @@ -0,0 +1,239 @@ +# Creating the Backend API + +These changes are already available in the repository. These instructions walk +you through the process followed for create the backend API from the Console application: + +1. Start by creating a new directory: + + ```bash + mkdir -p workshop/dotnet/App/backend + cd workshop/dotnet/App/backend + ``` + +1. Next create a new SDK .NET project: + + ```bash + dotnet new webapi -n MinimialApi + ``` + +1. Add the following nuget packages: + + ```bash + dotnet add package Microsoft.AspNetCore.Mvc + dotnet add package Swashbuckle.AspNetCore + ``` + +1. Create a new `Program.cs` in the project directory. This file initializes and loads + the required services and configuration for the API, namely configuring CORS protection, + enabling controllers for the API and exposing Swagger document: + + ```csharp + using Microsoft.AspNetCore.Antiforgery; + using Extensions; + + var builder = WebApplication.CreateBuilder(args); + + builder.Services.AddControllers(); + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + // See: https://aka.ms/aspnetcore/swashbuckle + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(); + builder.Services.AddOutputCache(); + builder.Services.AddAntiforgery(options => { + options.HeaderName = "X-CSRF-TOKEN-HEADER"; + options.FormFieldName = "X-CSRF-TOKEN-FORM"; }); + builder.Services.AddHttpClient(); + builder.Services.AddDistributedMemoryCache(); + // Add Semantic Kernel services + builder.Services.AddSkServices(); + + // Load user secrets + builder.Configuration.AddUserSecrets(); + + var app = builder.Build(); + app.UseSwagger(); + app.UseSwaggerUI(); + app.UseOutputCache(); + app.UseRouting(); + app.UseCors(); + app.UseAntiforgery(); + app.MapControllers(); + + app.Use(next => context => + { + var antiforgery = app.Services.GetRequiredService(); + var tokens = antiforgery.GetAndStoreTokens(context); + context.Response.Cookies.Append("XSRF-TOKEN", tokens?.RequestToken ?? string.Empty, new CookieOptions() { HttpOnly = false }); + return next(context); + }); + + app.Map("/", () => Results.Redirect("/swagger")); + + app.MapControllerRoute( + "default", + "{controller=ChatController}"); + + app.Run(); + ``` + +1. Next we need to create `Extensions` directory to and add service extensions: + + ```bash + mkdir Extensions + cd Extensions + ``` + +1. In the `Extensions` directory create a `ServiceExtensions.cs` class with the following code + to initialie the semantic kernel: + + ```csharp + using Core.Utilities.Config; + using Core.Utilities.Models; + // Add import for Plugins + using Core.Utilities.Plugins; + // Add import required for StockService + using Core.Utilities.Services; + using Microsoft.SemanticKernel; + + namespace Extensions; + + public static class ServiceExtensions + { + public static void AddSkServices(this IServiceCollection services) + { + services.AddSingleton(_ => + { + IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); + // Enable tracing + builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); + Kernel kernel = builder.Build(); + + // Step 2 - Initialize Time plugin and registration in the kernel + kernel.Plugins.AddFromObject(new TimeInformationPlugin()); + + // Step 6 - Initialize Stock Data Plugin and register it in the kernel + HttpClient httpClient = new(); + StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); + kernel.Plugins.AddFromObject(stockDataPlugin); + + return kernel; + }); + } + + } + ``` + +1. Next we need to create a `Controllers` directory to add REST API controller classes: + + ```bash + cd .. + mkdir Controllers + cd Controllers + ``` + +1. Within the `Controllers` directory create a `ChatController.cs` file which exposes a reply + method mapped to the `chat` path and the HTTP Post method: + + ```csharp + using Core.Utilities.Models; + using Core.Utilities.Extensions; + // Add import for Plugins + using Plugins; + // Add import required for StockService + using Microsoft.SemanticKernel; + using Microsoft.SemanticKernel.Connectors.OpenAI; + // Add ChatCompletion import + using Microsoft.SemanticKernel.ChatCompletion; + // Temporarily added to enable Semantic Kernel tracing + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Logging; + + using Microsoft.AspNetCore.Mvc; + + namespace Controllers; + + [ApiController] + [Route("sk")] + public class ChatController : ControllerBase { + + private readonly Kernel _kernel; + private readonly OpenAIPromptExecutionSettings _promptExecutionSettings; + + public ChatController(Kernel kernel) + { + _kernel = kernel; + _promptExecutionSettings = new() + { + // Step 3 - Add Auto invoke kernel functions as the tool call behavior + ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions + }; + + } + + [HttpPost("/chat")] + public async Task ReplyAsync([FromBody]ChatRequest request) + { + // Get chatCompletionService and initialize chatHistory wiht system prompt + var chatCompletionService = _kernel.GetRequiredService(); + var chatHistory = new ChatHistory(); + if (request.MessageHistory.Count == 0) { + chatHistory.AddSystemMessage("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); + } + else { + chatHistory = request.ToChatHistory(); + } + + // Initialize fullMessage variable and add user input to chat history + string fullMessage = ""; + if (request.InputMessage != null) + { + chatHistory.AddUserMessage(request.InputMessage); + + // Step 4 - Provide promptExecutionSettings and kernel arguments + await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, _promptExecutionSettings, _kernel)) + { + Console.Write(chatUpdate.Content); + fullMessage += chatUpdate.Content ?? ""; + } + chatHistory.AddAssistantMessage(fullMessage); + } + var chatResponse = new ChatResponse(fullMessage, chatHistory.FromChatHistory()); + return chatResponse; + } + + } + ``` + +## Running the Backend API locally + +1. To run API locally first copy valid `appsettings.json` from completed `Lessons/Lesson3` into `backend` directory: + + ```bash + cp ../../Lessons/Lesson3/appsettings.json . + ``` + +1. Next run using `dotnet run`: + + ```bash + dotnet run + ... + info: Microsoft.Hosting.Lifetime[14] + Now listening on: http://localhost:5000 + ``` + +1. Application will start on default port (5000). Navigate to and it should redirect you to the swagger UI page. + +1. You can either test the API using the "Try it out" feature from within Swagger UI, or via command line using `curl` command: + + ```bash + curl -X 'POST' \ + 'http://localhost:5000/chat' \ + -H 'accept: text/plain' \ + -H 'Content-Type: application/json' \ + -d '{ + "inputMessage": "what is Microsoft price?", + "messageHistory": [ + ] + }' + ``` diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md similarity index 68% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md rename to docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md index 42db92d..cbf449e 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md @@ -3,7 +3,7 @@ In this lesson we go over the steps on how to create a deployable version of the semantic kernel console application by creating 3 main components: -1. [Backend API (C#) using ASP .NET Core libraries](app-backend-api.md) -1. React JS Web application (with Node Proxy) +1. [Backend API (C#) using ASP .NET Core libraries](backend-api.md) +1. [React JS Web application (with Node Proxy)](web-app.md) 1. AZD + Bicep templates for Infrastructure as Code deployment diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md new file mode 100644 index 0000000..1ac16d4 --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md @@ -0,0 +1,48 @@ +# Creating simple Web UI + +The UI was created using React JS and a Node JS proxy to the API. Here is a highlight of key files: + +* `workshop/frontend` + * `Dockerfile` - Dockerfile for building and deploying web app + * `.env` - local file used to provide configuration values (e.g. url) + * `package.json` - required package dependencies + * `server.js` - NodeJS application code + * `src` - React JS application source code directory + * `App.tsx` - main application code + * `index.tsx` - application entry point + +## Running Web UI locally + +### Build Web UI + +1. Run `npm install` to get required dependencies + +1. Run `npm start build` to build the React application + +### Run Web UI + +1. Create `.env` file in `frontend` directory and provide the following required values: + 1. `API_URL` - URL to the backend API + 1. `PORT` - port where React app is running + 1. `REACT_APP_PROXY_URL` - url to the Node JS proxy + + ```shell + API_URL=http://localhost:5000/chat + PORT=3001 + REACT_APP_PROXY_URL=http://localhost:3001/api/chat + ``` + +1. Start backend API using `dotnet run` + +1. On a separate terminal start React application using `npm start` + +1. On a separate terminal export the following required variables for NodeJS application: + + ```bash + PORT=3001 + API_URL=http://localhost:5000/chat + ``` + + 1. Start the NodeJS application using `node server.js` + +1. Navigate to browser on and test the chat application. \ No newline at end of file diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md index eb53275..49cc83a 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md @@ -22,16 +22,10 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr Assistant > I can't access today's date, but imagine it’s an eternal "Fri-yay," ready for financial fun! How can I help you on this hypothetical day? ``` -1. Notice it does not provide a specific answer. Let's create a Semantic Kernel Plugin to be able to fix that. - On the `Lesson3` directory create a new directory named `Plugins`: - - ```bash - mkdir Plugins - cd Plugins - ``` +1. Notice it does not provide a specific answer. We can use a Semantic Kernel Plugin to be able to fix that. - 1. In the `Plugins` directory create a new file named `TimeInformationPlugin.cs` - and add the following content + 1. In the `Plugins` directory from `Console.Utilities` directory review the file named + `TimeInformationPlugin.cs` which has the following content: ```csharp using System.ComponentModel; @@ -51,7 +45,7 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr ```csharp // TODO: Step 1 - Add import for Plugins - using Plugins; + using Console.Utiltiies.Plugins; ``` 1. Next locate Step 2 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: @@ -84,10 +78,10 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr Assistant > Today's date is October 4, 2024. Time flies like an arrow; fruit flies like a banana! ``` -1. Congratulations you have written your first Semantic Kernel plugin! Next, we are going to add another plugin +1. Congratulations you are now using your first Semantic Kernel plugin! Next, we are going to need another plugin that will integrate to be able to an existing `StockService` included within the `Core.Utilities` project. - Create a new file named `StockDataPlugin.cs` in the same directory as `Program.cs` and include the following code, - which includes 2 functions, one to retrieve the stock price for the current date and another one for a specific date: + Review the file named `StockDataPlugin.cs` from `Console.Utilities\Plugins` which includes 2 functions, + one to retrieve the stock price for the current date and another one for a specific date: ```csharp using Core.Utilities.Services; diff --git a/mkdocs.yml b/mkdocs.yml index e864bda..61de875 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -49,8 +49,9 @@ nav: - Lesson 2 - Simple Semantic Kernel chatbot with history: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md - Lesson 3 - Simple Semantic Kernel chatbot with plugins: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md - Build a deployable web application: - - wksp2/07-semantic-kernel/simple-ai-orchestration/app-howto.md - - Create Backend API: wksp2/07-semantic-kernel/simple-ai-orchestration/app-backend-api.md + - wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md + - Create Backend API: wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md + - Create Web application: wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md - Advanced AI Orchestration: wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md - Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md - Post-workshop: diff --git a/workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs b/workshop/dotnet/Core.Utilities/Plugins/StockDataPlugin.cs similarity index 96% rename from workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs rename to workshop/dotnet/Core.Utilities/Plugins/StockDataPlugin.cs index 4ac67bd..616330c 100644 --- a/workshop/dotnet/Solutions/Lesson3/Plugins/StockDataPlugin.cs +++ b/workshop/dotnet/Core.Utilities/Plugins/StockDataPlugin.cs @@ -5,7 +5,7 @@ using Microsoft.SemanticKernel; using System.ComponentModel; -namespace Plugins; +namespace Core.Utilities.Plugins; public class StockDataPlugin(StocksService stockService) { diff --git a/workshop/dotnet/Solutions/Lesson3/Plugins/TimeInformationPlugin.cs b/workshop/dotnet/Core.Utilities/Plugins/TimeInformationPlugin.cs similarity index 88% rename from workshop/dotnet/Solutions/Lesson3/Plugins/TimeInformationPlugin.cs rename to workshop/dotnet/Core.Utilities/Plugins/TimeInformationPlugin.cs index 32beb09..72f1e96 100644 --- a/workshop/dotnet/Solutions/Lesson3/Plugins/TimeInformationPlugin.cs +++ b/workshop/dotnet/Core.Utilities/Plugins/TimeInformationPlugin.cs @@ -1,7 +1,7 @@ using System.ComponentModel; using Microsoft.SemanticKernel; -namespace Plugins; +namespace Core.Utilities.Plugins; public class TimeInformationPlugin { diff --git a/workshop/dotnet/Solutions/Lesson3/Program.cs b/workshop/dotnet/Solutions/Lesson3/Program.cs index 0db49e5..dc171b6 100644 --- a/workshop/dotnet/Solutions/Lesson3/Program.cs +++ b/workshop/dotnet/Solutions/Lesson3/Program.cs @@ -1,6 +1,6 @@ using Core.Utilities.Config; // Step 1 - Add import for Plugins -using Plugins; +using Core.Utilities.Plugins; // Step 5 - Add import required for StockService using Core.Utilities.Services; using Microsoft.SemanticKernel; diff --git a/workshop/frontend/server.js b/workshop/frontend/server.js index 95d7fbf..018e86f 100644 --- a/workshop/frontend/server.js +++ b/workshop/frontend/server.js @@ -12,7 +12,7 @@ app.use(express.json()); // Serve static files from the React app app.use(express.static(path.join(__dirname, 'build'))); -const API_URL = process.env.API_URL || 'http://localhost:' + PORT + '/chat'; +const API_URL = process.env.API_URL || 'http://localhost:5000/chat'; app.post('/api/chat', async (req, res) => { try { From 36077e339ae8bde1854013d20187ecd91723a596 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 22 Oct 2024 10:36:49 -0400 Subject: [PATCH 27/61] adding infra and web instructions --- .../create-deployable-app/azd-infra.md | 94 +++++++++++++ .../create-deployable-app/index.md | 2 +- .../create-deployable-app/web-app.md | 5 +- workshop/dotnet/infra/app/web.bicep | 2 +- .../core/host/appservice-appsettings.bicep | 17 --- .../dotnet/infra/core/host/appservice.bicep | 123 ------------------ .../infra/core/host/appserviceplan.bicep | 22 ---- .../infra/core/storage/storage-account.bicep | 2 +- workshop/frontend/server.js | 2 +- 9 files changed, 100 insertions(+), 169 deletions(-) create mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/azd-infra.md delete mode 100644 workshop/dotnet/infra/core/host/appservice-appsettings.bicep delete mode 100644 workshop/dotnet/infra/core/host/appservice.bicep delete mode 100644 workshop/dotnet/infra/core/host/appserviceplan.bicep diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/azd-infra.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/azd-infra.md new file mode 100644 index 0000000..d3831f5 --- /dev/null +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/azd-infra.md @@ -0,0 +1,94 @@ +# Azure Developer CLI (AZD) and Bicep templates for Infrastructure as Code deployment + +In this section we go over the creation of `azd` [(Azure Developer CLI)]((https://aka.ms/azure-dev/install)) +files and corresponding bicep templates to be able to build, provision infrastructure and +deploy our solution into Azure. + +## Azure Developer CLI files overview + +The following components are needed to deploy via AZD + +### `azure.yaml` file + +This file specifies the components to be deployed. Our file specifies two components to be deployed: + +1. Application backend - .NET deployed as Azure Container App +1. Web frontend - Typescript deployed as Azure Container App + +For each component we need to provide the path to the corresponding `Dockerfile` which will be used +to build and package the application: + +```yaml +name: semantic-kernel-workshop-csharp +metadata: + template: semantic-kernel-workshop-csharp@0.0.1-beta +services: + api: + project: ./App/backend/ + host: containerapp + language: dotnet + docker: + path: ../Dockerfile + context: ../../ + web: + project: ../frontend/ + host: containerapp + language: ts + docker: + path: ./Dockerfile + context: ./ +``` + +### `infra` directory + +Within the `infra` directory you have the option to provide either `bicep` or `terraform templates +to deploy the required infrastructure for our application to run. In this example we +use `bicep` templates which are organized as follows: + +* infra + * `main.bicep` - contains the bicep parameters and modules to deploy + * `main.paramters.json` - parameter values to be used during deployment + * `abbreviations.json` - optional file to specify suffix abbreviations for each resource type + * app - subdirectory with application related templates + * `api.bicep` - bicep template for backend application infrastructure + * `web.bicep` - bicep templated for web application infrastructure + * core - subdirectory with templates for core infrastructure components + * ai - subdirectory for AI related components + * host - subdirectory for container app, environment and registry components + * monitor - subdirectory for monitoring components (e.g. application insights) + * security - subdirectory for security components (e.g. keyvault) + * storage - subdirectory for storage components (e.g. storage account) + +The `azd init` command can be used to generate a starter template, however the quickest way +to generate an existing template is to find a template that uses similar components from +[awesome-azd](https://azure.github.io/awesome-azd/). + +## Deploying using AZD CLI + +You can build, provision all resources and deploy by following these steps: + +1. Switch to `workshop/donet` directory. +1. Ensure Docker desktip is running. +1. Run `azd auth login` to login to your Azure account. +1. Run `azd up` to provision Azure resources and deploy this sample to those resources. + You will be prompted for the following parameters: + * Environment name: sk-test + * Select an Azure subscription to use from list + * Select an Azure location to use: e.g. (US) East US 2 (eastus2) + * Enter a value for the infrastructure parameters: + * 'openAIApiKey' + * 'openAiChatGptDeployment': e.g. gpt-4o + * 'openAiEndpoint' + * 'stockServiceApiKey' +1. After the application has been successfully deployed you will see the API + and Web Service URLs printed in the console. + Click the Web Service URL to interact with the application in your browser. + > NOTE: It may take a few minutes for the application to be fully deployed. + +## Deployment removal + +In order to remove all resources deployed, use this command: + +```bash +azd down --purge +``` diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md index cbf449e..18732e6 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md @@ -5,5 +5,5 @@ semantic kernel console application by creating 3 main components: 1. [Backend API (C#) using ASP .NET Core libraries](backend-api.md) 1. [React JS Web application (with Node Proxy)](web-app.md) -1. AZD + Bicep templates for Infrastructure as Code deployment +1. [AZD + Bicep templates for Infrastructure as Code deployment](azd-infra.md) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md index 1ac16d4..76750d9 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md @@ -27,9 +27,8 @@ The UI was created using React JS and a Node JS proxy to the API. Here is a high 1. `REACT_APP_PROXY_URL` - url to the Node JS proxy ```shell - API_URL=http://localhost:5000/chat PORT=3001 - REACT_APP_PROXY_URL=http://localhost:3001/api/chat + REACT_APP_PROXY_URL=/api/chat ``` 1. Start backend API using `dotnet run` @@ -45,4 +44,4 @@ The UI was created using React JS and a Node JS proxy to the API. Here is a high 1. Start the NodeJS application using `node server.js` -1. Navigate to browser on and test the chat application. \ No newline at end of file +1. Navigate to browser on and test the chat application. diff --git a/workshop/dotnet/infra/app/web.bicep b/workshop/dotnet/infra/app/web.bicep index 953b024..c408a36 100644 --- a/workshop/dotnet/infra/app/web.bicep +++ b/workshop/dotnet/infra/app/web.bicep @@ -102,7 +102,7 @@ module app '../core/host/container-app-upsert.bicep' = { } { name: 'REACT_APP_PROXY_URL' - value: 'https://$(CONTAINER_APP_HOSTNAME)/api/chat' + value: '/api/chat' } ] targetPort: 80 diff --git a/workshop/dotnet/infra/core/host/appservice-appsettings.bicep b/workshop/dotnet/infra/core/host/appservice-appsettings.bicep deleted file mode 100644 index f4b22f8..0000000 --- a/workshop/dotnet/infra/core/host/appservice-appsettings.bicep +++ /dev/null @@ -1,17 +0,0 @@ -metadata description = 'Updates app settings for an Azure App Service.' -@description('The name of the app service resource within the current resource group scope') -param name string - -@description('The app settings to be applied to the app service') -@secure() -param appSettings object - -resource appService 'Microsoft.Web/sites@2022-03-01' existing = { - name: name -} - -resource settings 'Microsoft.Web/sites/config@2022-03-01' = { - name: 'appsettings' - parent: appService - properties: appSettings -} diff --git a/workshop/dotnet/infra/core/host/appservice.bicep b/workshop/dotnet/infra/core/host/appservice.bicep deleted file mode 100644 index bef4d2b..0000000 --- a/workshop/dotnet/infra/core/host/appservice.bicep +++ /dev/null @@ -1,123 +0,0 @@ -metadata description = 'Creates an Azure App Service in an existing Azure App Service plan.' -param name string -param location string = resourceGroup().location -param tags object = {} - -// Reference Properties -param applicationInsightsName string = '' -param appServicePlanId string -param keyVaultName string = '' -param managedIdentity bool = !empty(keyVaultName) - -// Runtime Properties -@allowed([ - 'dotnet', 'dotnetcore', 'dotnet-isolated', 'node', 'python', 'java', 'powershell', 'custom' -]) -param runtimeName string -param runtimeNameAndVersion string = '${runtimeName}|${runtimeVersion}' -param runtimeVersion string - -// Microsoft.Web/sites Properties -param kind string = 'app,linux' - -// Microsoft.Web/sites/config -param allowedOrigins array = [] -param alwaysOn bool = true -param appCommandLine string = '' -@secure() -param appSettings object = {} -param clientAffinityEnabled bool = false -param enableOryxBuild bool = contains(kind, 'linux') -param functionAppScaleLimit int = -1 -param linuxFxVersion string = runtimeNameAndVersion -param minimumElasticInstanceCount int = -1 -param numberOfWorkers int = -1 -param scmDoBuildDuringDeployment bool = false -param use32BitWorkerProcess bool = false -param ftpsState string = 'FtpsOnly' -param healthCheckPath string = '' - -resource appService 'Microsoft.Web/sites@2022-03-01' = { - name: name - location: location - tags: tags - kind: kind - properties: { - serverFarmId: appServicePlanId - siteConfig: { - linuxFxVersion: linuxFxVersion - alwaysOn: alwaysOn - ftpsState: ftpsState - minTlsVersion: '1.2' - appCommandLine: appCommandLine - numberOfWorkers: numberOfWorkers != -1 ? numberOfWorkers : null - minimumElasticInstanceCount: minimumElasticInstanceCount != -1 ? minimumElasticInstanceCount : null - use32BitWorkerProcess: use32BitWorkerProcess - functionAppScaleLimit: functionAppScaleLimit != -1 ? functionAppScaleLimit : null - healthCheckPath: healthCheckPath - cors: { - allowedOrigins: union([ 'https://portal.azure.com', 'https://ms.portal.azure.com' ], allowedOrigins) - } - } - clientAffinityEnabled: clientAffinityEnabled - httpsOnly: true - } - - identity: { type: managedIdentity ? 'SystemAssigned' : 'None' } - - resource basicPublishingCredentialsPoliciesFtp 'basicPublishingCredentialsPolicies' = { - name: 'ftp' - properties: { - allow: false - } - } - - resource basicPublishingCredentialsPoliciesScm 'basicPublishingCredentialsPolicies' = { - name: 'scm' - properties: { - allow: false - } - } -} - -// Updates to the single Microsoft.sites/web/config resources that need to be performed sequentially -// sites/web/config 'appsettings' -module configAppSettings 'appservice-appsettings.bicep' = { - name: '${name}-appSettings' - params: { - name: appService.name - appSettings: union(appSettings, - { - SCM_DO_BUILD_DURING_DEPLOYMENT: string(scmDoBuildDuringDeployment) - ENABLE_ORYX_BUILD: string(enableOryxBuild) - }, - runtimeName == 'python' && appCommandLine == '' ? { PYTHON_ENABLE_GUNICORN_MULTIWORKERS: 'true'} : {}, - !empty(applicationInsightsName) ? { APPLICATIONINSIGHTS_CONNECTION_STRING: applicationInsights.properties.ConnectionString } : {}, - !empty(keyVaultName) ? { AZURE_KEY_VAULT_ENDPOINT: keyVault.properties.vaultUri } : {}) - } -} - -// sites/web/config 'logs' -resource configLogs 'Microsoft.Web/sites/config@2022-03-01' = { - name: 'logs' - parent: appService - properties: { - applicationLogs: { fileSystem: { level: 'Verbose' } } - detailedErrorMessages: { enabled: true } - failedRequestsTracing: { enabled: true } - httpLogs: { fileSystem: { enabled: true, retentionInDays: 1, retentionInMb: 35 } } - } - dependsOn: [configAppSettings] -} - -resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = if (!(empty(keyVaultName))) { - name: keyVaultName -} - -resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (!empty(applicationInsightsName)) { - name: applicationInsightsName -} - -output identityPrincipalId string = managedIdentity ? appService.identity.principalId : '' -output name string = appService.name -output uri string = 'https://${appService.properties.defaultHostName}' diff --git a/workshop/dotnet/infra/core/host/appserviceplan.bicep b/workshop/dotnet/infra/core/host/appserviceplan.bicep deleted file mode 100644 index 2e37e04..0000000 --- a/workshop/dotnet/infra/core/host/appserviceplan.bicep +++ /dev/null @@ -1,22 +0,0 @@ -metadata description = 'Creates an Azure App Service plan.' -param name string -param location string = resourceGroup().location -param tags object = {} - -param kind string = '' -param reserved bool = true -param sku object - -resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = { - name: name - location: location - tags: tags - sku: sku - kind: kind - properties: { - reserved: reserved - } -} - -output id string = appServicePlan.id -output name string = appServicePlan.name diff --git a/workshop/dotnet/infra/core/storage/storage-account.bicep b/workshop/dotnet/infra/core/storage/storage-account.bicep index 6149fb2..f33133a 100644 --- a/workshop/dotnet/infra/core/storage/storage-account.bicep +++ b/workshop/dotnet/infra/core/storage/storage-account.bicep @@ -8,7 +8,7 @@ param tags object = {} 'Hot' 'Premium' ]) param accessTier string = 'Hot' -param allowBlobPublicAccess bool = true +param allowBlobPublicAccess bool = false param allowCrossTenantReplication bool = true param allowSharedKeyAccess bool = true param containers array = [] diff --git a/workshop/frontend/server.js b/workshop/frontend/server.js index 018e86f..50eeac0 100644 --- a/workshop/frontend/server.js +++ b/workshop/frontend/server.js @@ -12,7 +12,7 @@ app.use(express.json()); // Serve static files from the React app app.use(express.static(path.join(__dirname, 'build'))); -const API_URL = process.env.API_URL || 'http://localhost:5000/chat'; +const API_URL = process.env.API_URL; app.post('/api/chat', async (req, res) => { try { From 08661502434a66a4fac5916f3a1752c524d237b7 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 22 Oct 2024 10:37:03 -0400 Subject: [PATCH 28/61] update to index --- mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mkdocs.yml b/mkdocs.yml index 61de875..a88bbd1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -52,6 +52,7 @@ nav: - wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md - Create Backend API: wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md - Create Web application: wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md + - Deploy Azure resources: wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/infra-azd.md - Advanced AI Orchestration: wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md - Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md - Post-workshop: From b792cab1fbf01044c197ff0f52388a0c5bcd9b2e Mon Sep 17 00:00:00 2001 From: Snuckles2 <160873182+Snuckles2@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:49:32 -0400 Subject: [PATCH 29/61] Update pre-reqs.md (#18) fixed typo. --- .../07-semantic-kernel/simple-ai-orchestration/pre-reqs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md index 2ad6eb2..926bf7c 100644 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md @@ -32,7 +32,7 @@ Before attending the Intelligent App Development Workshop, please ensure you hav 1. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): ```bash - cp workshop\donet\Lessons\appsettings.json.example workshop\dotnet\Lessons\Lesson1\appsettings.json + cp workshop\dotnet\Lessons\appsettings.json.example workshop\dotnet\Lessons\Lesson1\appsettings.json ``` 1. Retrieve the OpenAI Endpoint URL, deployed model name and API Key (from pre-requisites) into the app settings From a4354af4426c8e5415deb2f203dadfa61e58594c Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 22 Oct 2024 11:26:27 -0400 Subject: [PATCH 30/61] refactored sk workshop as module 5 --- .../advanced-ai-orchestration/index.md | 1 + .../wksp/05-semantic-kernel-workshop/index.md | 6 ++ .../create-deployable-app/azd-infra.md | 0 .../create-deployable-app/backend-api.md | 0 .../create-deployable-app/index.md | 0 .../create-deployable-app/web-app.md | 0 .../simple-ai-orchestration/index.md | 15 ++++ .../simple-ai-orchestration/lesson1.md | 0 .../simple-ai-orchestration/lesson2.md | 0 .../simple-ai-orchestration/lesson3.md | 0 .../simple-ai-orchestration/pre-reqs.md | 0 .../generation.md | 0 .../{05-use-cases => 06-use-cases}/index.md | 0 .../synthesis.md | 0 .../extend-copilot-ai-doc-intel.md | 0 .../07-custom-copilot}/index.md | 0 .../advanced-ai-orchestration/index.md | 1 - docs/wksp2/07-semantic-kernel/index.md | 1 - .../simple-ai-orchestration/index.md | 1 - docs/wksp2/index.md | 5 -- mkdocs.yml | 70 +++++++++---------- 21 files changed, 56 insertions(+), 44 deletions(-) create mode 100644 docs/wksp/05-semantic-kernel-workshop/advanced-ai-orchestration/index.md create mode 100644 docs/wksp/05-semantic-kernel-workshop/index.md rename docs/{wksp2/07-semantic-kernel => wksp/05-semantic-kernel-workshop}/simple-ai-orchestration/create-deployable-app/azd-infra.md (100%) rename docs/{wksp2/07-semantic-kernel => wksp/05-semantic-kernel-workshop}/simple-ai-orchestration/create-deployable-app/backend-api.md (100%) rename docs/{wksp2/07-semantic-kernel => wksp/05-semantic-kernel-workshop}/simple-ai-orchestration/create-deployable-app/index.md (100%) rename docs/{wksp2/07-semantic-kernel => wksp/05-semantic-kernel-workshop}/simple-ai-orchestration/create-deployable-app/web-app.md (100%) create mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md rename docs/{wksp2/07-semantic-kernel => wksp/05-semantic-kernel-workshop}/simple-ai-orchestration/lesson1.md (100%) rename docs/{wksp2/07-semantic-kernel => wksp/05-semantic-kernel-workshop}/simple-ai-orchestration/lesson2.md (100%) rename docs/{wksp2/07-semantic-kernel => wksp/05-semantic-kernel-workshop}/simple-ai-orchestration/lesson3.md (100%) rename docs/{wksp2/07-semantic-kernel => wksp/05-semantic-kernel-workshop}/simple-ai-orchestration/pre-reqs.md (100%) rename docs/wksp/{05-use-cases => 06-use-cases}/generation.md (100%) rename docs/wksp/{05-use-cases => 06-use-cases}/index.md (100%) rename docs/wksp/{05-use-cases => 06-use-cases}/synthesis.md (100%) rename docs/{wksp2/07-semantic-kernel => wksp/07-custom-copilot}/extend-copilot-ai-doc-intel.md (100%) rename docs/{wksp2/06-ai-studio => wksp/07-custom-copilot}/index.md (100%) delete mode 100644 docs/wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md delete mode 100644 docs/wksp2/07-semantic-kernel/index.md delete mode 100644 docs/wksp2/07-semantic-kernel/simple-ai-orchestration/index.md delete mode 100644 docs/wksp2/index.md diff --git a/docs/wksp/05-semantic-kernel-workshop/advanced-ai-orchestration/index.md b/docs/wksp/05-semantic-kernel-workshop/advanced-ai-orchestration/index.md new file mode 100644 index 0000000..5b7581a --- /dev/null +++ b/docs/wksp/05-semantic-kernel-workshop/advanced-ai-orchestration/index.md @@ -0,0 +1 @@ +# Advanced AI Orchestration using agents and planners diff --git a/docs/wksp/05-semantic-kernel-workshop/index.md b/docs/wksp/05-semantic-kernel-workshop/index.md new file mode 100644 index 0000000..e07751d --- /dev/null +++ b/docs/wksp/05-semantic-kernel-workshop/index.md @@ -0,0 +1,6 @@ +# Hands-on AI Orchestration using Semantic Kernel + +This workshop is broken into 2 main sections: + +1. [Create simple AI Orchestration using Sematic Kernel](simple-ai-orchestration/index.md) +1. [Create advanced AI Orchestration using Sematik Kernel with agents and planners](advanced-ai-orchestration/index.md) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/azd-infra.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/azd-infra.md rename to docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md rename to docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/index.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md rename to docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/index.md diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md rename to docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md new file mode 100644 index 0000000..6425f32 --- /dev/null +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md @@ -0,0 +1,15 @@ +# Simple AI Orchestration using Semantic Kernel + +This hands on workshop goes through the following lessons for creating a simple Semantic Kernel +chatbot as a console application: + +1. [Lesson 1: Create Simple Semantic Kernel chatbot](lesson1.md) +1. [Lesson 2: Create Simple Semantic Kernel chatbot with history](lesson2.md) +1. [Lesson 3: Create Simple Semantic Kernel chatbot with plugins](lesson3.md) + +Subsequently the following lessons guide you through converting that chatbot application +into a deployable application with a backend API and Web UI frontend and deploying into Azure: + +1. [Create Backend API](create-deployable-app/backend-api.md) +1. [Create Web application](create-deployable-app/web-app.md) +1. [Deploy application into Azure](create-deployable-app/azd-infra.md) diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md rename to docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md rename to docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md rename to docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md rename to docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md diff --git a/docs/wksp/05-use-cases/generation.md b/docs/wksp/06-use-cases/generation.md similarity index 100% rename from docs/wksp/05-use-cases/generation.md rename to docs/wksp/06-use-cases/generation.md diff --git a/docs/wksp/05-use-cases/index.md b/docs/wksp/06-use-cases/index.md similarity index 100% rename from docs/wksp/05-use-cases/index.md rename to docs/wksp/06-use-cases/index.md diff --git a/docs/wksp/05-use-cases/synthesis.md b/docs/wksp/06-use-cases/synthesis.md similarity index 100% rename from docs/wksp/05-use-cases/synthesis.md rename to docs/wksp/06-use-cases/synthesis.md diff --git a/docs/wksp2/07-semantic-kernel/extend-copilot-ai-doc-intel.md b/docs/wksp/07-custom-copilot/extend-copilot-ai-doc-intel.md similarity index 100% rename from docs/wksp2/07-semantic-kernel/extend-copilot-ai-doc-intel.md rename to docs/wksp/07-custom-copilot/extend-copilot-ai-doc-intel.md diff --git a/docs/wksp2/06-ai-studio/index.md b/docs/wksp/07-custom-copilot/index.md similarity index 100% rename from docs/wksp2/06-ai-studio/index.md rename to docs/wksp/07-custom-copilot/index.md diff --git a/docs/wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md b/docs/wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md deleted file mode 100644 index 769ab66..0000000 --- a/docs/wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md +++ /dev/null @@ -1 +0,0 @@ -# Advanced AI Orchestration using agents, planners and plugins \ No newline at end of file diff --git a/docs/wksp2/07-semantic-kernel/index.md b/docs/wksp2/07-semantic-kernel/index.md deleted file mode 100644 index 51dd430..0000000 --- a/docs/wksp2/07-semantic-kernel/index.md +++ /dev/null @@ -1 +0,0 @@ -# Hands-on AI Orchestration using Semantic Kernel \ No newline at end of file diff --git a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/index.md b/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/index.md deleted file mode 100644 index 71ecf3d..0000000 --- a/docs/wksp2/07-semantic-kernel/simple-ai-orchestration/index.md +++ /dev/null @@ -1 +0,0 @@ -# Simple AI Orchestration using Semantic Kernel \ No newline at end of file diff --git a/docs/wksp2/index.md b/docs/wksp2/index.md deleted file mode 100644 index 75e1fbd..0000000 --- a/docs/wksp2/index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Introduction - -In this hands-on workshop, we will explore how to use Microsoft's Copilot Stack to develop your own AI-infused, enterprise-grade applications that improve productivity and create hyper-personalized product experiences. - -We will also highlight the emergent capabilities that are advantageous to adopt, as well as the limitations that can be mitigated through engineering, particularly in the areas of orchestration and retrieval. Additionally, we will showcase the capabilities within the Copilot Stack that enable you to achieve this. diff --git a/mkdocs.yml b/mkdocs.yml index a88bbd1..83c1bdb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -18,43 +18,41 @@ nav: - Module 2 - Fork and Get Hands-on: wksp/02-fork-and-get-hands-on/index.md - Module 3 - Inner-loop: wksp/03-inner-loop/index.md - Module 4 - Basics of Semantic Kernel: wksp/04-Semantic-Kernel-Basics/index.md - - Module 5 - Use cases deep-dive with Miyagi and Reddog: - - wksp/05-use-cases/index.md - - Synthesis: wksp/05-use-cases/synthesis.md + - Module 5 - Hands-on AI Orchestration using Semantic Kernel Workshop: + - wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md + - Pre-requisites: wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md + - Lesson 1 - Simple Semantic Kernel chatbot: wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md + - Lesson 2 - Simple Semantic Kernel chatbot with history: wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md + - Lesson 3 - Simple Semantic Kernel chatbot with plugins: wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md + - Build a deployable web application: + - wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/index.md + - Create Backend API: wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md + - Create Web application: wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md + - Deploy Azure resources: wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md + - Module 6 - Use cases deep-dive with Miyagi and Reddog: + - wksp/06-use-cases/index.md + - Synthesis: wksp/06-use-cases/synthesis.md - Generation: - - Overview: wksp/05-use-cases/generation.md - - Text: wksp/05-use-cases/generation.md - - Images: wksp/05-use-cases/generation.md - - Code: wksp/05-use-cases/generation.md - - Video: wksp/05-use-cases/generation.md - - Conversation: wksp/05-use-cases/synthesis.md - - Summarization: wksp/05-use-cases/synthesis.md - - Classification: wksp/05-use-cases/synthesis.md - - Translation: wksp/05-use-cases/synthesis.md - - Speech-to-text: wksp/05-use-cases/synthesis.md - - Semantic Search: wksp/05-use-cases/synthesis.md - - Anomaly Detection: wksp/05-use-cases/synthesis.md - - Agency and Planning: wksp/05-use-cases/synthesis.md - - QA on Domain Knowledge: wksp/05-use-cases/synthesis.md - - Plugins: wksp/05-use-cases/synthesis.md - - Module 6 - Hands-on workshop: - - Build Custom Copilots using Azure AI Studio: - - wksp2/06-ai-studio/index.md - - Hands-on AI Orchestration using Semantic Kernel: - - wksp2/07-semantic-kernel/index.md - - Simple AI Orchestration: - - wksp2/07-semantic-kernel/simple-ai-orchestration/index.md - - Pre-requisites: wksp2/07-semantic-kernel/simple-ai-orchestration/pre-reqs.md - - Lesson 1 - Simple Semantic Kernel chatbot: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson1.md - - Lesson 2 - Simple Semantic Kernel chatbot with history: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson2.md - - Lesson 3 - Simple Semantic Kernel chatbot with plugins: wksp2/07-semantic-kernel/simple-ai-orchestration/lesson3.md - - Build a deployable web application: - - wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/index.md - - Create Backend API: wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/backend-api.md - - Create Web application: wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/web-app.md - - Deploy Azure resources: wksp2/07-semantic-kernel/simple-ai-orchestration/create-deployable-app/infra-azd.md - - Advanced AI Orchestration: wksp2/07-semantic-kernel/advanced-ai-orchestration/index.md - - Extend custom copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp2/01-semantic-kernel/extend-copilot-ai-doc-intel.md + - Overview: wksp/06-use-cases/generation.md + - Text: wksp/06-use-cases/generation.md + - Images: wksp/06-use-cases/generation.md + - Code: wksp/06-use-cases/generation.md + - Video: wksp/06-use-cases/generation.md + - Conversation: wksp/06-use-cases/synthesis.md + - Summarization: wksp/06-use-cases/synthesis.md + - Classification: wksp/06-use-cases/synthesis.md + - Translation: wksp/06-use-cases/synthesis.md + - Speech-to-text: wksp/06-use-cases/synthesis.md + - Semantic Search: wksp/06-use-cases/synthesis.md + - Anomaly Detection: wksp/06-use-cases/synthesis.md + - Agency and Planning: wksp/06-use-cases/synthesis.md + - QA on Domain Knowledge: wksp/06-use-cases/synthesis.md + - Plugins: wksp/06-use-cases/synthesis.md + - Module 7 - Building Custom Copilots: + - Build Custom Copilots using Azure AI Studio: wksp/07-custom-copilot/index.md + - Extend Custom Copilot with AI Document Intelligence, AI Vision, and multi-modal Foundation model: wksp/07-custom-copilot/extend-copilot-ai-doc-intel.md + + - Post-workshop: - Feedback: wksp/other/feedback.md - Appendix: From 4858fc583a69adce5f561b34ef5ab0a3f2c71140 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 22 Oct 2024 14:38:14 -0400 Subject: [PATCH 31/61] fixed indent --- .../create-deployable-app/backend-api.md | 2 +- workshop/dotnet/App/backend/MinimalApi.csproj | 3 ++- workshop/dotnet/App/backend/backend.sln | 25 +++++++++++++++++++ .../Core.Utilities.Tests.sln | 25 +++++++++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 workshop/dotnet/App/backend/backend.sln create mode 100644 workshop/dotnet/Core.Utilities.Tests/Core.Utilities.Tests.sln diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md index f9374cb..a1d7f88 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md @@ -135,7 +135,7 @@ you through the process followed for create the backend API from the Console app 1. Within the `Controllers` directory create a `ChatController.cs` file which exposes a reply method mapped to the `chat` path and the HTTP Post method: - ```csharp + ```csharp using Core.Utilities.Models; using Core.Utilities.Extensions; // Add import for Plugins diff --git a/workshop/dotnet/App/backend/MinimalApi.csproj b/workshop/dotnet/App/backend/MinimalApi.csproj index 578a94d..c44f99c 100644 --- a/workshop/dotnet/App/backend/MinimalApi.csproj +++ b/workshop/dotnet/App/backend/MinimalApi.csproj @@ -1,4 +1,5 @@ - + 0b9505af-93c5-4d5b-8ea5-a3b472deb0bc + diff --git a/workshop/dotnet/App/backend/backend.sln b/workshop/dotnet/App/backend/backend.sln new file mode 100644 index 0000000..6d3b094 --- /dev/null +++ b/workshop/dotnet/App/backend/backend.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MinimalApi", "MinimalApi.csproj", "{E399B9E6-E511-4F2B-B587-0DAE20A7B53D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E399B9E6-E511-4F2B-B587-0DAE20A7B53D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E399B9E6-E511-4F2B-B587-0DAE20A7B53D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E399B9E6-E511-4F2B-B587-0DAE20A7B53D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E399B9E6-E511-4F2B-B587-0DAE20A7B53D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D4965937-77FF-4589-AD6E-49873F397625} + EndGlobalSection +EndGlobal diff --git a/workshop/dotnet/Core.Utilities.Tests/Core.Utilities.Tests.sln b/workshop/dotnet/Core.Utilities.Tests/Core.Utilities.Tests.sln new file mode 100644 index 0000000..74c3064 --- /dev/null +++ b/workshop/dotnet/Core.Utilities.Tests/Core.Utilities.Tests.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Utilities.Tests", "Core.Utilities.Tests.csproj", "{51B8B6A8-715E-4C2E-B325-80FC8B932942}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {51B8B6A8-715E-4C2E-B325-80FC8B932942}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {51B8B6A8-715E-4C2E-B325-80FC8B932942}.Debug|Any CPU.Build.0 = Debug|Any CPU + {51B8B6A8-715E-4C2E-B325-80FC8B932942}.Release|Any CPU.ActiveCfg = Release|Any CPU + {51B8B6A8-715E-4C2E-B325-80FC8B932942}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F51AE0FC-B37B-4D43-98B2-2B6E098F9D01} + EndGlobalSection +EndGlobal From ca3b33d9de6d075c9ecb6b2359c26416b3670588 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 22 Oct 2024 16:59:09 -0400 Subject: [PATCH 32/61] reverting public access as it's needed for deployment --- workshop/dotnet/infra/main.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workshop/dotnet/infra/main.bicep b/workshop/dotnet/infra/main.bicep index 0373a77..e90d892 100644 --- a/workshop/dotnet/infra/main.bicep +++ b/workshop/dotnet/infra/main.bicep @@ -329,7 +329,7 @@ module storage 'core/storage/storage-account.bicep' = { name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' location: storageResourceGroupLocation tags: updatedTags - // publicNetworkAccess: 'Enabled' + publicNetworkAccess: 'Enabled' sku: { name: 'Standard_LRS' } From 048d1af4fcf207afcc2a44aa491476cee03a3e90 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 22 Oct 2024 17:49:15 -0400 Subject: [PATCH 33/61] public blob access re-enabled --- workshop/dotnet/infra/core/storage/storage-account.bicep | 2 +- workshop/dotnet/infra/main.bicep | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/workshop/dotnet/infra/core/storage/storage-account.bicep b/workshop/dotnet/infra/core/storage/storage-account.bicep index f33133a..6149fb2 100644 --- a/workshop/dotnet/infra/core/storage/storage-account.bicep +++ b/workshop/dotnet/infra/core/storage/storage-account.bicep @@ -8,7 +8,7 @@ param tags object = {} 'Hot' 'Premium' ]) param accessTier string = 'Hot' -param allowBlobPublicAccess bool = false +param allowBlobPublicAccess bool = true param allowCrossTenantReplication bool = true param allowSharedKeyAccess bool = true param containers array = [] diff --git a/workshop/dotnet/infra/main.bicep b/workshop/dotnet/infra/main.bicep index e90d892..37b2067 100644 --- a/workshop/dotnet/infra/main.bicep +++ b/workshop/dotnet/infra/main.bicep @@ -329,7 +329,7 @@ module storage 'core/storage/storage-account.bicep' = { name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' location: storageResourceGroupLocation tags: updatedTags - publicNetworkAccess: 'Enabled' + publicNetworkAccess: 'Disabled' sku: { name: 'Standard_LRS' } From 2377f765f03503030e7c61472f1a8eef14fb221b Mon Sep 17 00:00:00 2001 From: Snuckles2 <160873182+Snuckles2@users.noreply.github.com> Date: Thu, 24 Oct 2024 16:31:17 -0400 Subject: [PATCH 34/61] Pre-req, Lesson 1 & 2 updates (#20) * Update pre-reqs.md fixed typo. * Update pre-reqs.md Concerns regarding the learn module and step 5. * Update pre-reqs.md * Create images * Delete docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images * Create readme.md * Added file * Add files via upload * Update pre-reqs.md updating pre-regs * add more images * Update pre-reqs.md * Update appsettings.json.example Just changed the ordering of OpenAI fields to group together values retrieved from Azure Portal and values from Azure OpenAI Studio. * Update lesson1.md * Update lesson2.md * Update lesson1.md * Update lesson1.md * Update Program.cs * Update lesson2.md --- .../images/Keys and Endpoint.jpg | Bin 0 -> 137299 bytes .../images/deploy-model.jpg | Bin 0 -> 64737 bytes .../images/keys-and-endpoint.jpg | Bin 0 -> 137299 bytes .../images/model-deployments.jpg | Bin 0 -> 164276 bytes .../simple-ai-orchestration/images/readme.md | 1 + .../simple-ai-orchestration/lesson1.md | 27 ++++++----- .../simple-ai-orchestration/lesson2.md | 16 ++++--- .../simple-ai-orchestration/pre-reqs.md | 42 +++++++++++++++--- workshop/dotnet/Lessons/Lesson2/Program.cs | 3 +- .../dotnet/Lessons/appsettings.json.example | 6 +-- 10 files changed, 69 insertions(+), 26 deletions(-) create mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/Keys and Endpoint.jpg create mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/deploy-model.jpg create mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/keys-and-endpoint.jpg create mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/model-deployments.jpg create mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/readme.md diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/Keys and Endpoint.jpg b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/Keys and Endpoint.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac44566ab17b636694a4a9ceec4a424a93761089 GIT binary patch literal 137299 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 literal 0 HcmV?d00001 diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/deploy-model.jpg b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/deploy-model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16e190a6c9a8b96fc5cc794e61c712247c5a3f31 GIT binary patch literal 64737 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 Zk)i(9-+zM*p{6B6lHU!8`Ac8S{1*q}$>sn6 literal 0 HcmV?d00001 diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/keys-and-endpoint.jpg b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/keys-and-endpoint.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac44566ab17b636694a4a9ceec4a424a93761089 GIT binary patch literal 137299 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 literal 0 HcmV?d00001 diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/model-deployments.jpg b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/model-deployments.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42f5262dd7c8123b843499969b40438d7bc7a208 GIT binary patch literal 164276 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≫|z20Lg56lAWZn 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 z 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 Which stocks do you recommend buying for moderate growth? - Assistant > Ah, the magical world of stock picking! Imagine walking into a buffet, and instead of loading your plate with mystery meat, you're strategically choosing the tastiest, most promising dishes. Here are a few general menus to consider, with a sprinkle of fun: - - 1. **Tech Tango** - Think companies that dance to the tune of innovation! Look for firms diving into AI or cloud computing. They're like the cool kids at the financial disco. - - 2. **Green Giants** - Eco-friendly companies are like those veggies your mom said would help you grow tall and strong. Renewable energy stocks might just add some height to your portfolio. - - 3. **Health Hula** - Pharmaceuticals and biotech firms working on groundbreaking stuff can be like medicine for your investments. Just remember, there's always a bit of a twirl and spin with these. + ``` - 4. **Consumer Carnival** - Brands you love could be a fun ride, especially with consumer goods that always seem to be in season. + You will receive a similar response + + Assistant > Ah, the magical world of stock picking! Imagine walking into a buffet, and instead of loading your plate with mystery meat, you're strategically choosing the tastiest, most promising dishes. Here are a few general menus to consider, with a sprinkle of fun: + + 1. **Tech Tango** - Think companies that dance to the tune of innovation! Look for firms diving into AI or cloud computing. They're like the cool kids at the financial disco. + + 2. **Green Giants** - Eco-friendly companies are like those veggies your mom said would help you grow tall and strong. Renewable energy stocks might just add some height to your portfolio. + + 3. **Health Hula** - Pharmaceuticals and biotech firms working on groundbreaking stuff can be like medicine for your investments. Just remember, there's always a bit of a twirl and spin with these. + + 4. **Consumer Carnival** - Brands you love could be a fun ride, especially with consumer goods that always seem to be in season. + + 5. **Financial Fiesta** - Banks or fintech companies can be like salsa on your stock tacos—adding a bit of spice and zing! + + Remember, always research like you're planning the perfect vacation and balance your choices like you balance a pizza with just the right amount of toppings. And of course, consult a real-world financial oracle before making any big moves. Bon appétit in the stock market buffet! - 5. **Financial Fiesta** - Banks or fintech companies can be like salsa on your stock tacos—adding a bit of spice and zing! - Remember, always research like you're planning the perfect vacation and balance your choices like you balance a pizza with just the right amount of toppings. And of course, consult a real-world financial oracle before making any big moves. Bon appétit in the stock market buffet! - ``` \ No newline at end of file diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md index 6e41ef9..e9905b5 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md @@ -1,17 +1,17 @@ # Lesson 2: Simple Semantic Kernel chatbot with history -In this lesson we will a chat history to our chat agent. +In this lesson we will add chat history to our chat agent. 1. Switch to Lesson 2 directory: ```bash - cd Lessons/Lesson2 + cd ../Lesson2 ``` 1. Start by copying `appsetting.json` from Lesson 1: ```bash - cp ../Lessons/Lesson1/appsettings.json . + cp ../Lesson1/appsettings.json . ``` 1. Open the project in your favorite IDE or text editor. @@ -77,17 +77,21 @@ In this lesson we will a chat history to our chat agent. chatHistory.AddAssistantMessage(fullMessage); ``` -1. Re-run the program and start by stating your portfolio preference: +1. Run the program and start by stating your portfolio preference: ```bash dotnet run + ``` + ```bash User > My portfolio preference is moderate growth - Assistant > Ah, the sweet spot of moderation! You're like the Goldilocks of investing, not too hot, not too cold, but just right. Let's sprinkle some fairy dust on your portfolio and make it grow! ``` + Assistant > Ah, the sweet spot of moderation! You're like the Goldilocks of investing, not too hot, not too cold, but just right. Let's sprinkle some fairy dust on your portfolio and make it grow! + 1. Next ask what your portfolio preferenc is: ```bash User > what is my portfolio preference? + ``` Assistant > Ah, you're the maestro of moderate growth! You're seeking a harmonious balance between risk and return, like a blend of jazz and rock in the symphony of investing. A sprinkle of thrill, a dash of stability, all wrapped in a comfy financial blanket. - ``` \ No newline at end of file + diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md index 926bf7c..ac6e373 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md @@ -16,27 +16,59 @@ Before attending the Intelligent App Development Workshop, please ensure you hav ## Initial Setup -1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. -1. Clone this repo using: +### 1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. +### 2. Clone this repo using: ```bash git clone https://github.com/Azure/intelligent-app-workshop.git ``` -1. Change directory into cloned repo: +### 3. Change directory into cloned repo: ```bash cd intelligent-app-workshop ``` -1. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): +### 4. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): ```bash cp workshop\dotnet\Lessons\appsettings.json.example workshop\dotnet\Lessons\Lesson1\appsettings.json ``` -1. Retrieve the OpenAI Endpoint URL, deployed model name and API Key (from pre-requisites) into the app settings +### 5. Retrieve the OpenAI Endpoint URL, API Key and deployed model name then update newly created appsettings.json +#### 5.1 Get Azure OpenAI access values: From Portal + +The Azure OpenAI endpoint and key values will be found in the [Azure Portal](https://portal.azure.com) so let's start there. + +1. Go to the [Azure Portal](https://portal.azure.com). +1. Go to the Azure OpenAI resource. +1. Expand the **Resource Management** section in the sidebar (menu at left) +1. Click the **Keys and Endpoint** option. +1. Click **Show Keys** - you should see the following: KEY 1, KEY 2 and Endpoint. +1. Use the **KEY 1** value for **apiKey** in appsettings.json under OpenAI. +1. Use the **Endpoint** value for **endpoint** in appsettings.json under OpenAI. + +![Terminal](./images/keys-and-endpoint.jpg) + +Next, we need to create deployments from the Azure OpenAI models. + +1. Click the **Model deployments** option in the sidebar (left menu) for Azure OpenAI resource. +1. In the destination page, click **Manage Deployments** +1. (Optional) You can directly navigate to the [Azure OpenAI Studio website](https://oai.azure.com). + +This will take you to the Azure OpenAI Studio website, where we'll find the other values as described below. + +#### 5.2 Get Azure OpenAI deployments: From Studio + +1. Navigate to [Azure OpenAI Studio](https://oai.azure.com) **from your resource** as described above. +2. Click the **Deployments** tab (sidebar, left) to view currently deployed models. +3. If your desired model is not deployed, use **Create new deployment** to deploy it. If using the new portal, use **Deploy model** button. +4. You will need a chat completion model (gpt-35-turbo model or similar)- deploy the model +5. Update appsettings.json deploymentName field with your model deployment name. + +![Terminal](./images/deploy-model.jpg) +![Terminal](./images/model-deployments.jpg) ??? note "Optional" The following prerequisites are optional but recommended to get the most out of the workshop: diff --git a/workshop/dotnet/Lessons/Lesson2/Program.cs b/workshop/dotnet/Lessons/Lesson2/Program.cs index 7d75d68..f1b6dea 100644 --- a/workshop/dotnet/Lessons/Lesson2/Program.cs +++ b/workshop/dotnet/Lessons/Lesson2/Program.cs @@ -1,6 +1,7 @@ using Core.Utilities.Config; using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; + // TODO: Step 1 - add ChatCompletion import using Microsoft.SemanticKernel.ChatCompletion; @@ -46,4 +47,4 @@ Console.WriteLine(); } } -while (userInput != terminationPhrase); \ No newline at end of file +while (userInput != terminationPhrase); diff --git a/workshop/dotnet/Lessons/appsettings.json.example b/workshop/dotnet/Lessons/appsettings.json.example index 13962a1..471f31d 100644 --- a/workshop/dotnet/Lessons/appsettings.json.example +++ b/workshop/dotnet/Lessons/appsettings.json.example @@ -1,10 +1,10 @@ { "OpenAI": { "endpoint": "", - "deploymentName": "", - "apiKey": "" + "apiKey": "", + "deploymentName": "" }, "StockService": { "apiKey": "" } -} \ No newline at end of file +} From 1db2b475e2952650398af7e9e6c52aab2c800c7f Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Thu, 24 Oct 2024 17:10:15 -0400 Subject: [PATCH 35/61] Enhancements to Lesson 2 --- .../simple-ai-orchestration/lesson2.md | 50 ++++++++++++++----- workshop/dotnet/Lessons/Lesson2/Program.cs | 2 +- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md index e9905b5..7bd7aa0 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md @@ -27,7 +27,7 @@ In this lesson we will add chat history to our chat agent. using Microsoft.SemanticKernel.ChatCompletion; ``` - 1. Step 2a: Get `chatCompletionService` and initialize `chatHistory` wiht system prompt + 1. Step 2a: Add code to get `chatCompletionService` instance and to initialize `chatHistory` with system prompt ```csharp // TODO: Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt @@ -38,7 +38,6 @@ In this lesson we will add chat history to our chat agent. Step 2b: Remove the `promptExecutionSettings` and `kernelArgs` initialization code ```csharp - // Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { ChatSystemPrompt = @"You are a friendly financial advisor that only emits financial advice in a creative and funny tone" @@ -48,7 +47,7 @@ In this lesson we will add chat history to our chat agent. KernelArguments kernelArgs = new(promptExecutionSettings); ``` - 1. Step 3: Initialize `fullMessage` variable and add user input to chat history: + 1. Step 3: Add code to initialize `fullMessage` variable and add user input to chat history: ```csharp // TODO: Step 3 - Initialize fullMessage variable and add user input to chat history @@ -81,17 +80,42 @@ In this lesson we will add chat history to our chat agent. ```bash dotnet run - ``` - ```bash - User > My portfolio preference is moderate growth ``` - Assistant > Ah, the sweet spot of moderation! You're like the Goldilocks of investing, not too hot, not too cold, but just right. Let's sprinkle some fairy dust on your portfolio and make it grow! - -1. Next ask what your portfolio preferenc is: +1. Introduce yourself and provide your year of birth: - ```bash - User > what is my portfolio preference? + ```txt + User > My name is John and I was born in 1980 + Assistant > Ah, John, fresh from the 80s, where big hair and bigger dreams reigned! As you're jamming to your life’s mixtape, let's rewind and fast-forward through some financial wisdom: + + 1. **Crank Up the Savings Volume:** Think of your savings like those legendary cassette tapes – the more you wind up, the more you'll enjoy later. Aim to save 15-20% of your income! + + 2. **Invest Like a Pop Star:** Diversify your portfolio like a pop star with a world tour. Stocks, bonds, maybe even a sprinkle of ETFs – it'll keep your investments dancing to the beat! + + 3. **Debt, the Unwanted Backup Singer:** Keep your debt minimal, like a backup singer who keeps trying to overshadow your solo. Pay off high-interest debt ASAP! + + 4. **Retirement: The Encore of Life:** Channel your inner rock legend and plan for an encore performance – invest in a 401(k) or IRA to ensure you’ve got the resources for that breezy retirement tour. + + 5. **Budget Like a 80’s Hairdo:** Structured and resilient! Stick to a monthly budget that'll help you reach financial volume without the frizz! + + Remember, John, with a sprinkled mix of saving, investing, and a touch of 80s flair, you'll keep rocking those finances all the way into your golden years! + ``` + +1. Next ask which stocks you should have bought if you could go back to the year you were born: + + ```txt + User > If I could go back in time to the year I was born, which stocks would have made me a millionare? + Assistant > Oh, if only we had a DeLorean stocked with hindsight! Let’s put on our leg warmers and moonwalk back to 1980. Here are some stocks that would've been music to your financial ears: + + 1. **Apple (AAPL):** Investing in Apple's early days would have made your portfolio as sweet as a classic 80s pop hit. The iRevolution was just around the corner! + + 2. **Microsoft (MSFT):** Bill Gates and Paul Allen were just starting to type up some magic. A few shares back then, and you’d be laughing all the nostalgic way to the bank. + + 3. **Berkshire Hathaway (BRK.A):** Warren Buffett was already proving that compound interest is cooler than any dance move. + + 4. **Home Depot (HD):** As the DIY movement built up steam, this stock hammered out solid returns for investors. + + 5. **Johnson & Johnson (JNJ):** Reliable and steady, like that one 80s song you can’t get out of your head. + + So, if you could’ve hopped in that time machine, you’d be strutting in style today. But fear not! Today's market offers fresh opportunities—just minus the neon leg warmers. ``` - Assistant > Ah, you're the maestro of moderate growth! You're seeking a harmonious balance between risk and return, like a blend of jazz and rock in the symphony of investing. A sprinkle of thrill, a dash of stability, all wrapped in a comfy financial blanket. - diff --git a/workshop/dotnet/Lessons/Lesson2/Program.cs b/workshop/dotnet/Lessons/Lesson2/Program.cs index f1b6dea..6c21d62 100644 --- a/workshop/dotnet/Lessons/Lesson2/Program.cs +++ b/workshop/dotnet/Lessons/Lesson2/Program.cs @@ -14,7 +14,6 @@ // TODO: Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt // TODO: Step 2b - Remove the promptExecutionSettings and kernelArgs initialization code -// Add system prompt OpenAIPromptExecutionSettings promptExecutionSettings = new() { // Add Auto invoke kernel functions as the tool call behavior @@ -23,6 +22,7 @@ // Initialize kernel arguments KernelArguments kernelArgs = new(promptExecutionSettings); + // Execute program. const string terminationPhrase = "quit"; string? userInput; From 2accc73fcb72782ce1ee67a8165a6e4ed96b713b Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Sat, 26 Oct 2024 17:37:56 -0400 Subject: [PATCH 36/61] eliminate anonymous blob access --- .../simple-ai-orchestration/images/readme.md | 1 - workshop/dotnet/infra/app/api.bicep | 62 +++------- .../infra/app/user-assigned-identity.bicep | 17 +++ workshop/dotnet/infra/app/web.bicep | 56 ++------- .../infra/core/host/container-apps.bicep | 8 +- .../infra/core/storage/storage-account.bicep | 2 +- workshop/dotnet/infra/main.bicep | 110 ++++-------------- 7 files changed, 73 insertions(+), 183 deletions(-) delete mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/readme.md create mode 100644 workshop/dotnet/infra/app/user-assigned-identity.bicep diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/readme.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/readme.md deleted file mode 100644 index 8b13789..0000000 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/readme.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/workshop/dotnet/infra/app/api.bicep b/workshop/dotnet/infra/app/api.bicep index 713a4c1..efe8d96 100644 --- a/workshop/dotnet/infra/app/api.bicep +++ b/workshop/dotnet/infra/app/api.bicep @@ -23,18 +23,6 @@ param imageName string = '' @description('Specifies if the resource exists') param exists bool -@description('The name of the Key Vault') -param keyVaultName string - -@description('The name of the Key Vault resource group') -param keyVaultResourceGroupName string = resourceGroup().name - -@description('The storage blob endpoint') -param storageBlobEndpoint string - -@description('The name of the storage container') -param storageContainerName string - @description('The OpenAI endpoint') param openAiEndpoint string @@ -50,54 +38,40 @@ param stockServiceApiKey string @description('An array of service binds') param serviceBinds array -resource webIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { - name: identityName - location: location +type managedIdentity = { + resourceId: string + clientId: string } -module webKeyVaultAccess '../core/security/keyvault-access.bicep' = { - name: 'web-keyvault-access' - scope: resourceGroup(keyVaultResourceGroupName) - params: { - principalId: webIdentity.properties.principalId - keyVaultName: keyVault.name - } -} +@description('Unique identifier for user-assigned managed identity.') +param userAssignedManagedIdentity managedIdentity module app '../core/host/container-app-upsert.bicep' = { name: '${serviceName}-container-app' - dependsOn: [ webKeyVaultAccess ] params: { name: name location: location tags: union(tags, { 'azd-service-name': serviceName }) - identityName: webIdentity.name + identityName: identityName imageName: imageName exists: exists serviceBinds: serviceBinds containerAppsEnvironmentName: containerAppsEnvironmentName containerRegistryName: containerRegistryName + secrets: { + 'open-ai-api-key': openAiApiKey + 'stock-service-api-key': stockServiceApiKey + 'azure-managed-identity-client-id': userAssignedManagedIdentity.clientId + } env: [ { - name: 'AZURE_CLIENT_ID' - value: webIdentity.properties.clientId + name: 'AZURE_MANAGED_IDENTITY_CLIENT_ID' + value: 'azure-managed-identity-client-id' } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' value: !empty(applicationInsightsName) ? applicationInsights.properties.ConnectionString : '' } - { - name: 'AZURE_KEY_VAULT_ENDPOINT' - value: keyVault.properties.vaultUri - } - { - name: 'AZURE_STORAGE_BLOB_ENDPOINT' - value: storageBlobEndpoint - } - { - name: 'AZURE_STORAGE_CONTAINER' - value: storageContainerName - } { name: 'OpenAI__Endpoint' value: openAiEndpoint @@ -108,11 +82,11 @@ module app '../core/host/container-app-upsert.bicep' = { } { name: 'OpenAI__ApiKey' - value: openAiApiKey + secretRef: 'open-ai-api-key' } { name: 'StockService__ApiKey' - value: stockServiceApiKey + secretRef: 'stock-service-api-key' } ] targetPort: 8080 @@ -123,13 +97,7 @@ resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing name: applicationInsightsName } -resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { - name: keyVaultName - scope: resourceGroup(keyVaultResourceGroupName) -} - output SERVICE_API_IDENTITY_NAME string = identityName -output SERVICE_API_IDENTITY_PRINCIPAL_ID string = webIdentity.properties.principalId output SERVICE_API_IMAGE_NAME string = app.outputs.imageName output SERVICE_API_NAME string = app.outputs.name output SERVICE_API_URI string = app.outputs.uri diff --git a/workshop/dotnet/infra/app/user-assigned-identity.bicep b/workshop/dotnet/infra/app/user-assigned-identity.bicep new file mode 100644 index 0000000..0583ab8 --- /dev/null +++ b/workshop/dotnet/infra/app/user-assigned-identity.bicep @@ -0,0 +1,17 @@ +metadata description = 'Creates a Microsoft Entra user-assigned identity.' + +param name string +param location string = resourceGroup().location +param tags object = {} + +resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { + name: name + location: location + tags: tags +} + +output name string = identity.name +output resourceId string = identity.id +output principalId string = identity.properties.principalId +output clientId string = identity.properties.clientId +output tenantId string = identity.properties.tenantId diff --git a/workshop/dotnet/infra/app/web.bicep b/workshop/dotnet/infra/app/web.bicep index c408a36..9ded691 100644 --- a/workshop/dotnet/infra/app/web.bicep +++ b/workshop/dotnet/infra/app/web.bicep @@ -26,72 +26,44 @@ param imageName string = '' @description('Specifies if the resource exists') param exists bool -@description('The name of the Key Vault') -param keyVaultName string - -@description('The name of the Key Vault resource group') -param keyVaultResourceGroupName string = resourceGroup().name - -@description('The storage blob endpoint') -param storageBlobEndpoint string - -@description('The name of the storage container') -param storageContainerName string - @description('The URI for the backend API') param apiEndpoint string @description('An array of service binds') param serviceBinds array -resource webIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { - name: identityName - location: location +type managedIdentity = { + resourceId: string + clientId: string } -module webKeyVaultAccess '../core/security/keyvault-access.bicep' = { - name: 'web-keyvault-access' - scope: resourceGroup(keyVaultResourceGroupName) - params: { - principalId: webIdentity.properties.principalId - keyVaultName: keyVault.name - } -} +@description('Unique identifier for user-assigned managed identity.') +param userAssignedManagedIdentity managedIdentity module app '../core/host/container-app-upsert.bicep' = { name: '${serviceName}-container-app' - dependsOn: [ webKeyVaultAccess ] params: { name: name location: location tags: union(tags, { 'azd-service-name': serviceName }) - identityName: webIdentity.name + identityName: identityName imageName: imageName exists: exists serviceBinds: serviceBinds containerAppsEnvironmentName: containerAppsEnvironmentName containerRegistryName: containerRegistryName + secrets: { + 'azure-managed-identity-client-id': userAssignedManagedIdentity.clientId + } env: [ { - name: 'AZURE_CLIENT_ID' - value: webIdentity.properties.clientId + name: 'AZURE_MANAGED_IDENTITY_CLIENT_ID' + value: 'azure-managed-identity-client-id' } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' value: !empty(applicationInsightsName) ? applicationInsights.properties.ConnectionString : '' } - { - name: 'AZURE_KEY_VAULT_ENDPOINT' - value: keyVault.properties.vaultUri - } - { - name: 'AZURE_STORAGE_BLOB_ENDPOINT' - value: storageBlobEndpoint - } - { - name: 'AZURE_STORAGE_CONTAINER' - value: storageContainerName - } { name: 'API_URL' value: apiEndpoint @@ -113,13 +85,7 @@ resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing name: applicationInsightsName } -resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = { - name: keyVaultName - scope: resourceGroup(keyVaultResourceGroupName) -} - output SERVICE_WEB_IDENTITY_NAME string = identityName -output SERVICE_WEB_IDENTITY_PRINCIPAL_ID string = webIdentity.properties.principalId output SERVICE_WEB_IMAGE_NAME string = app.outputs.imageName output SERVICE_WEB_NAME string = app.outputs.name output SERVICE_WEB_URI string = app.outputs.uri diff --git a/workshop/dotnet/infra/core/host/container-apps.bicep b/workshop/dotnet/infra/core/host/container-apps.bicep index 1c656e2..b382ccd 100644 --- a/workshop/dotnet/infra/core/host/container-apps.bicep +++ b/workshop/dotnet/infra/core/host/container-apps.bicep @@ -7,8 +7,9 @@ param containerAppsEnvironmentName string param containerRegistryName string param containerRegistryResourceGroupName string = '' param containerRegistryAdminUserEnabled bool = false -param logAnalyticsWorkspaceName string +param logAnalyticsWorkspaceName string = '' param applicationInsightsName string = '' +param daprEnabled bool = false module containerAppsEnvironment 'container-apps-environment.bicep' = { name: '${name}-container-apps-environment' @@ -18,6 +19,7 @@ module containerAppsEnvironment 'container-apps-environment.bicep' = { tags: tags logAnalyticsWorkspaceName: logAnalyticsWorkspaceName applicationInsightsName: applicationInsightsName + daprEnabled: daprEnabled } } @@ -29,6 +31,10 @@ module containerRegistry 'container-registry.bicep' = { location: location adminUserEnabled: containerRegistryAdminUserEnabled tags: tags + sku: { + name: 'Standard' + } + anonymousPullEnabled: false } } diff --git a/workshop/dotnet/infra/core/storage/storage-account.bicep b/workshop/dotnet/infra/core/storage/storage-account.bicep index 6149fb2..f33133a 100644 --- a/workshop/dotnet/infra/core/storage/storage-account.bicep +++ b/workshop/dotnet/infra/core/storage/storage-account.bicep @@ -8,7 +8,7 @@ param tags object = {} 'Hot' 'Premium' ]) param accessTier string = 'Hot' -param allowBlobPublicAccess bool = true +param allowBlobPublicAccess bool = false param allowCrossTenantReplication bool = true param allowSharedKeyAccess bool = true param containers array = [] diff --git a/workshop/dotnet/infra/main.bicep b/workshop/dotnet/infra/main.bicep index 37b2067..b09ccba 100644 --- a/workshop/dotnet/infra/main.bicep +++ b/workshop/dotnet/infra/main.bicep @@ -54,15 +54,6 @@ param containerRegistryName string = '' @description('Name of the resource group for the Azure container registry') param containerRegistryResourceGroupName string = '' -@description('Name of the Azure Key Vault') -param keyVaultName string = '' - -@description('Location of the resource group for the Azure Key Vault') -param keyVaultResourceGroupLocation string = location - -@description('Name of the resource group for the Azure Key Vault') -param keyVaultResourceGroupName string = '' - @description('Name of the Azure Log Analytics workspace') param logAnalyticsName string = '' @@ -108,9 +99,6 @@ param apiContainerAppName string = '' @description('Name of the web app container') param webContainerAppName string = '' -@description('Name of the web app identity') -param webIdentityName string = '' - @description('Name of the web app image') param webImageName string = '' @@ -154,67 +142,16 @@ resource storageResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' ex name: !empty(storageResourceGroupName) ? storageResourceGroupName : resourceGroup.name } -resource keyVaultResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' existing = if (!empty(keyVaultResourceGroupName)) { - name: !empty(keyVaultResourceGroupName) ? keyVaultResourceGroupName : resourceGroup.name -} -// Store secrets in a keyvault -module keyVault 'core/security/keyvault.bicep' = { - name: 'keyvault' - scope: keyVaultResourceGroup +// Create a user assigned identity +module identity './app/user-assigned-identity.bicep' = { + name: 'identity' + scope: resourceGroup params: { - name: !empty(keyVaultName) ? keyVaultName : '${abbrs.keyVaultVaults}${resourceToken}' - location: keyVaultResourceGroupLocation - tags: updatedTags - principalId: principalId + name: 'sk-app-identity' } } -module keyVaultSecrets 'core/security/keyvault-secrets.bicep' = { - scope: keyVaultResourceGroup - name: 'keyvault-secrets' - params: { - keyVaultName: keyVault.outputs.name - tags: updatedTags - secrets: concat([ - { - name: 'AzureStorageAccountEndpoint' - value: storage.outputs.primaryEndpoints.blob - } - { - name: 'AzureStorageContainer' - value: storageContainerName - } - { - name: 'UseAOAI' - value: useAOAI ? 'true' : 'false' - } - { - name: 'StockServiceApiKey' - value: stockServiceApiKey - } - ], - useAOAI ? [ - { - name: 'AzureOpenAiServiceEndpoint' - value: azureOpenAi.outputs.endpoint - } - { - name: 'AzureOpenAiChatGptDeployment' - value: azureChatGptDeploymentName - } - ] : [ - { - name: 'OpenAIAPIKey' - value: openAIApiKey - } - { - name: 'OpenAiChatGptDeployment' - value: openAiChatGptDeployment - } - ]) - } -} // Container apps host (including container registry) module containerApps 'core/host/container-apps.bicep' = { @@ -240,15 +177,15 @@ module api './app/api.bicep' = { location: location tags: updatedTags imageName: apiImageName - identityName: !empty(webIdentityName) ? webIdentityName : '${abbrs.managedIdentityUserAssignedIdentities}api-${resourceToken}' + identityName: identity.outputs.name applicationInsightsName: monitoring.outputs.applicationInsightsName containerAppsEnvironmentName: containerApps.outputs.environmentName containerRegistryName: containerApps.outputs.registryName + userAssignedManagedIdentity: { + resourceId: identity.outputs.resourceId + clientId: identity.outputs.clientId + } exists: apiAppExists - keyVaultName: keyVault.outputs.name - keyVaultResourceGroupName: keyVaultResourceGroup.name - storageBlobEndpoint: storage.outputs.primaryEndpoints.blob - storageContainerName: storageContainerName openAiApiKey: useAOAI ? '' : openAIApiKey openAiEndpoint: useAOAI ? azureOpenAi.outputs.endpoint : openAiEndpoint stockServiceApiKey: stockServiceApiKey @@ -266,15 +203,15 @@ module web './app/web.bicep' = { location: location tags: updatedTags imageName: webImageName - identityName: !empty(webIdentityName) ? webIdentityName : '${abbrs.managedIdentityUserAssignedIdentities}web-${resourceToken}' + identityName: identity.outputs.name applicationInsightsName: monitoring.outputs.applicationInsightsName containerAppsEnvironmentName: containerApps.outputs.environmentName containerRegistryName: containerApps.outputs.registryName + userAssignedManagedIdentity: { + resourceId: identity.outputs.resourceId + clientId: identity.outputs.clientId + } exists: webAppExists - keyVaultName: keyVault.outputs.name - keyVaultResourceGroupName: keyVaultResourceGroup.name - storageBlobEndpoint: storage.outputs.primaryEndpoints.blob - storageContainerName: storageContainerName apiEndpoint: '${api.outputs.SERVICE_API_URI}/chat' serviceBinds: [] } @@ -329,7 +266,6 @@ module storage 'core/storage/storage-account.bicep' = { name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' location: storageResourceGroupLocation tags: updatedTags - publicNetworkAccess: 'Disabled' sku: { name: 'Standard_LRS' } @@ -340,7 +276,6 @@ module storage 'core/storage/storage-account.bicep' = { containers: [ { name: storageContainerName - publicAccess: 'Blob' } ] } @@ -357,16 +292,18 @@ module azureOpenAiRoleUser 'core/security/role.bicep' = if (useAOAI) { } } +// Assign storage blob data contributor to the user for local runs module storageRoleUser 'core/security/role.bicep' = { scope: storageResourceGroup name: 'storage-role-user' params: { - principalId: principalId - roleDefinitionId: '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1' + principalId: principalId + roleDefinitionId: '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1' // built-in role definition id for storage blob data reader principalType: principalType } } +// Assign storage blob data contributor to the identity module storageContribRoleUser 'core/security/role.bicep' = { scope: storageResourceGroup name: 'storage-contribrole-user' @@ -383,7 +320,7 @@ module azureOpenAiRoleApi 'core/security/role.bicep' = if (useAOAI) { scope: azureOpenAiResourceGroup name: 'openai-role-api' params: { - principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID + principalId: identity.outputs.principalId roleDefinitionId: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd' principalType: 'ServicePrincipal' } @@ -393,7 +330,7 @@ module storageRoleApi 'core/security/role.bicep' = { scope: storageResourceGroup name: 'storage-role-api' params: { - principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID + principalId: identity.outputs.principalId roleDefinitionId: '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1' principalType: 'ServicePrincipal' } @@ -403,7 +340,7 @@ module storageContribRoleApi 'core/security/role.bicep' = { scope: storageResourceGroup name: 'storage-contribrole-api' params: { - principalId: web.outputs.SERVICE_WEB_IDENTITY_PRINCIPAL_ID + principalId: identity.outputs.principalId roleDefinitionId: 'ba92f5b4-2d11-453d-a403-e96b0029c9fe' principalType: 'ServicePrincipal' } @@ -416,9 +353,6 @@ output AZURE_CONTAINER_ENVIRONMENT_NAME string = containerApps.outputs.environme output AZURE_CONTAINER_REGISTRY_ENDPOINT string = containerApps.outputs.registryLoginServer output AZURE_CONTAINER_REGISTRY_NAME string = containerApps.outputs.registryName output AZURE_CONTAINER_REGISTRY_RESOURCE_GROUP string = containerApps.outputs.registryName -output AZURE_KEY_VAULT_ENDPOINT string = keyVault.outputs.endpoint -output AZURE_KEY_VAULT_NAME string = keyVault.outputs.name -output AZURE_KEY_VAULT_RESOURCE_GROUP string = keyVaultResourceGroup.name output AZURE_LOCATION string = location output AZURE_OPENAI_RESOURCE_LOCATION string = openAiResourceGroupLocation output AZURE_OPENAI_CHATGPT_DEPLOYMENT string = azureChatGptDeploymentName From 453b992a6d0a50cabee02b971074a8744f0c31a2 Mon Sep 17 00:00:00 2001 From: Snuckles2 <160873182+Snuckles2@users.noreply.github.com> Date: Mon, 4 Nov 2024 07:44:37 -0500 Subject: [PATCH 37/61] Update Program.cs --- workshop/dotnet/Lessons/Lesson2/Program.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/workshop/dotnet/Lessons/Lesson2/Program.cs b/workshop/dotnet/Lessons/Lesson2/Program.cs index 6c21d62..94214be 100644 --- a/workshop/dotnet/Lessons/Lesson2/Program.cs +++ b/workshop/dotnet/Lessons/Lesson2/Program.cs @@ -3,13 +3,6 @@ using Microsoft.SemanticKernel.Connectors.OpenAI; // TODO: Step 1 - add ChatCompletion import -using Microsoft.SemanticKernel.ChatCompletion; - - - -// Initialize the kernel with chat completion -IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); -Kernel kernel = builder.Build(); // TODO: Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt @@ -37,7 +30,7 @@ // TODO: Step 3 - Initialize fullMessage variable and add user input to chat history - // TODO: Step 4 - Replace the foreach loop and replace it with `chatCompletionService` code + // TODO: Step 4 - Remove the foreach loop and replace it with `chatCompletionService` code // including adding assistant message to chat history await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) { From 79d1e3babfad9af44605d4cc398c627c01f5a97a Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 5 Nov 2024 16:46:24 -0500 Subject: [PATCH 38/61] changes to enforce use enum values in Role --- workshop/dotnet/App/backend/Program.cs | 4 ++++ .../Core.Utilities/Extensions/ModelExtensionMethods.cs | 4 ++-- workshop/dotnet/Core.Utilities/Models/ChatMessage.cs | 9 ++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/workshop/dotnet/App/backend/Program.cs b/workshop/dotnet/App/backend/Program.cs index 9d654c5..a88afca 100644 --- a/workshop/dotnet/App/backend/Program.cs +++ b/workshop/dotnet/App/backend/Program.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Antiforgery; using Extensions; +using System.Text.Json.Serialization; var builder = WebApplication.CreateBuilder(args); @@ -9,6 +10,9 @@ // See: https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); +// Required to generate enumeration values in Swagger doc +builder.Services.AddControllersWithViews().AddJsonOptions(options => + options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter())); builder.Services.AddOutputCache(); builder.Services.AddAntiforgery(options => { options.HeaderName = "X-CSRF-TOKEN-HEADER"; diff --git a/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs b/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs index 7227db9..f6fe3f7 100644 --- a/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs +++ b/workshop/dotnet/Core.Utilities/Extensions/ModelExtensionMethods.cs @@ -22,7 +22,7 @@ public static ChatHistory ToChatHistory(this ChatRequest chatRequest) { var chatHistory = new ChatHistory(); chatRequest.MessageHistory.ForEach(chatMessage => { - string role = chatMessage.Role; + string role = chatMessage.Role.ToString(); if ("Tool".Equals(role, StringComparison.OrdinalIgnoreCase)) { role = AuthorRole.Assistant.Label; role = "assistant"; @@ -36,7 +36,7 @@ public static List FromChatHistory(this ChatHistory chatHistory) { var messageHistory = new List(); messageHistory.AddRange(chatHistory .Where(m => m.Content != null) - .Select(m => new ChatMessage(m.Content!, m.Role.Label))); + .Select(m => new ChatMessage(m.Content!, Enum.TryParse(m.Role.Label, out var role) ? role : Role.User))); return messageHistory; } diff --git a/workshop/dotnet/Core.Utilities/Models/ChatMessage.cs b/workshop/dotnet/Core.Utilities/Models/ChatMessage.cs index 4a4d783..e4c8999 100644 --- a/workshop/dotnet/Core.Utilities/Models/ChatMessage.cs +++ b/workshop/dotnet/Core.Utilities/Models/ChatMessage.cs @@ -2,6 +2,13 @@ namespace Core.Utilities.Models; public record ChatMessage ( string Message, - string Role + Role Role ); +public enum Role { + User, + Assistant, + Tool, + System +} + From a29c419aa987b3c49b6c00f18b94846d82571434 Mon Sep 17 00:00:00 2001 From: Snuckles2 <160873182+Snuckles2@users.noreply.github.com> Date: Fri, 8 Nov 2024 14:34:46 -0500 Subject: [PATCH 39/61] Miyagi v2 (#22) - documentation updates * Update pre-reqs.md * Updated lesson1, 2 and 3 md * Update pre-reqs.md * Update web-app.md * Update backend-api.md --- .../create-deployable-app/backend-api.md | 6 +- .../create-deployable-app/web-app.md | 6 +- .../images/deploy-model.jpg | Bin 64737 -> 77687 bytes .../simple-ai-orchestration/lesson1.md | 14 +-- .../simple-ai-orchestration/lesson2.md | 32 ++++--- .../simple-ai-orchestration/lesson3.md | 62 ++++++------ .../simple-ai-orchestration/pre-reqs.md | 88 ++++++++---------- 7 files changed, 105 insertions(+), 103 deletions(-) diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md index a1d7f88..58f7079 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md @@ -1,7 +1,7 @@ # Creating the Backend API These changes are already available in the repository. These instructions walk -you through the process followed for create the backend API from the Console application: +you through the process followed to create the backend API from the Console application: 1. Start by creating a new directory: @@ -30,6 +30,7 @@ you through the process followed for create the backend API from the Console app ```csharp using Microsoft.AspNetCore.Antiforgery; using Extensions; + using System.Text.Json.Serialization; var builder = WebApplication.CreateBuilder(args); @@ -39,6 +40,9 @@ you through the process followed for create the backend API from the Console app // See: https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); + // Required to generate enumeration values in Swagger doc + builder.Services.AddControllersWithViews().AddJsonOptions(options => + options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter())); builder.Services.AddOutputCache(); builder.Services.AddAntiforgery(options => { options.HeaderName = "X-CSRF-TOKEN-HEADER"; diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md index 76750d9..ed0361d 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md @@ -15,9 +15,13 @@ The UI was created using React JS and a Node JS proxy to the API. Here is a high ### Build Web UI +1. Go to the frontend directory + ```bash + cd workshop/frontend + ``` 1. Run `npm install` to get required dependencies -1. Run `npm start build` to build the React application +1. Run `npm run build` to build the React application ### Run Web UI diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/deploy-model.jpg b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/deploy-model.jpg index 16e190a6c9a8b96fc5cc794e61c712247c5a3f31..75d0ff93421e07c7f197774346157abdfb5b8c7e 100644 GIT binary patch literal 77687 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

S-KDm8e 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 literal 64737 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 Zk)i(9-+zM*p{6B6lHU!8`Ac8S{1*q}$>sn6 diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md index c32bc56..11a328f 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md @@ -10,16 +10,16 @@ In this lesson we will create a semantic kernel chatbot with a system prompt and 1. Open the project in your favorite IDE or text editor. -1. Open `Program.cs` and locate the TODO for each step and apply the following changes for each: +1. Open `Program.cs` and locate the **TODO** for each step and apply the following changes for each: - 1. Step 1: add code to initialize kernel with chat completion: + 1. TODO: Step 1: add code to initialize kernel with chat completion: ```csharp IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); Kernel kernel = builder.Build(); ``` - 1. Step 2: add the following system prompt: + 1. TODO: Step 2: add the following system prompt: ```csharp OpenAIPromptExecutionSettings promptExecutionSettings = new() @@ -28,13 +28,13 @@ In this lesson we will create a semantic kernel chatbot with a system prompt and }; ``` - 1. Step 3: initialize kernel arguments + 1. TODO: Step 3: initialize kernel arguments ```csharp KernelArguments kernelArgs = new(promptExecutionSettings); ``` - 1. Step 4: add a loop to invoke prompt asynchronously providing user input and kernel arguments: + 1. TODO: Step 4: add a loop to invoke prompt asynchronously providing user input and kernel arguments: ```csharp await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) @@ -52,10 +52,10 @@ In this lesson we will create a semantic kernel chatbot with a system prompt and 1. When prompted ask for financial advice: ``` - User > Which stocks do you recommend buying for moderate growth? + Which stocks do you recommend buying for moderate growth? ``` - You will receive a similar response + You will receive a similar response: Assistant > Ah, the magical world of stock picking! Imagine walking into a buffet, and instead of loading your plate with mystery meat, you're strategically choosing the tastiest, most promising dishes. Here are a few general menus to consider, with a sprinkle of fun: diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md index 7bd7aa0..c3f821e 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md @@ -16,26 +16,24 @@ In this lesson we will add chat history to our chat agent. 1. Open the project in your favorite IDE or text editor. -1. Open `Program.cs` and locate the TODO for each step and apply the following changes for each: +1. Open `Program.cs` and locate the **TODO** for each step and apply the following changes for each: - 1. Step 1: add code to initialize kernel with chat completion: + 1. TODO: Step 1: add code to include the chat completion namespace & initialize kernel with chat completion: ```csharp - // TODO: Step 1 - Initialize Time plugin and registration in the kernel - kernel.Plugins.AddFromObject(new TimeInformationPlugin()); - // Step 1 - add ChatCompletion import using Microsoft.SemanticKernel.ChatCompletion; + IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); + Kernel kernel = builder.Build(); ``` - 1. Step 2a: Add code to get `chatCompletionService` instance and to initialize `chatHistory` with system prompt + 1. TODO: Step 2a: Add code to get `chatCompletionService` instance and to initialize `chatHistory` with system prompt ```csharp - // TODO: Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt var chatCompletionService = kernel.GetRequiredService(); ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); ``` - Step 2b: Remove the `promptExecutionSettings` and `kernelArgs` initialization code + TODO: Step 2b: **Remove** the `promptExecutionSettings` and `kernelArgs` initialization code ```csharp OpenAIPromptExecutionSettings promptExecutionSettings = new() @@ -47,15 +45,14 @@ In this lesson we will add chat history to our chat agent. KernelArguments kernelArgs = new(promptExecutionSettings); ``` - 1. Step 3: Add code to initialize `fullMessage` variable and add user input to chat history: + 1. TODO: Step 3: Add code to initialize `fullMessage` variable and add user input to chat history: ```csharp - // TODO: Step 3 - Initialize fullMessage variable and add user input to chat history string fullMessage = ""; chatHistory.AddUserMessage(userInput); ``` - 1. Step 4: Remove the `foreach` loop below: + 1. TODO: Step 4: **Remove** the `foreach` loop below: ```csharp await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) @@ -67,7 +64,6 @@ In this lesson we will add chat history to our chat agent. And replace it with this `foreach` loop including adding assistant message to chat history: ```csharp - // TODO: Step 4 - Replace the foreach loop and replace it with this code including adding assistant message to chat history await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory)) { Console.Write(chatUpdate.Content); @@ -84,8 +80,11 @@ In this lesson we will add chat history to our chat agent. 1. Introduce yourself and provide your year of birth: - ```txt - User > My name is John and I was born in 1980 + ``` + My name is John and I was born in 1980 + ``` + You will receive a similar response: + ``` Assistant > Ah, John, fresh from the 80s, where big hair and bigger dreams reigned! As you're jamming to your life’s mixtape, let's rewind and fast-forward through some financial wisdom: 1. **Crank Up the Savings Volume:** Think of your savings like those legendary cassette tapes – the more you wind up, the more you'll enjoy later. Aim to save 15-20% of your income! @@ -104,7 +103,10 @@ In this lesson we will add chat history to our chat agent. 1. Next ask which stocks you should have bought if you could go back to the year you were born: ```txt - User > If I could go back in time to the year I was born, which stocks would have made me a millionare? + If I could go back in time to the year I was born, which stocks would have made me a millionare? + ``` + You will receive a similar response: + ``` Assistant > Oh, if only we had a DeLorean stocked with hindsight! Let’s put on our leg warmers and moonwalk back to 1980. Here are some stocks that would've been music to your financial ears: 1. **Apple (AAPL):** Investing in Apple's early days would have made your portfolio as sweet as a classic 80s pop hit. The iRevolution was just around the corner! diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md index 49cc83a..d608824 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md @@ -1,30 +1,35 @@ -# Lesson 2: Simple Semantic Kernel chat agent with plugins +# Lesson 3: Simple Semantic Kernel chat agent with plugins In this lesson we will a semantic kernel plugins to be able to retrieve stock pricing. -1. Switch to Lesson 2 directory: +1. Switch to Lesson 3 directory: ```bash - cd Lessons/Lesson3 + cd ../Lesson3 ``` 1. Start by copying `appsettings.json` from Lesson 1: ```bash - cp ../Lessons/Lesson1/appsettings.json . + cp ../Lesson1/appsettings.json . ``` 1. Run program and ask what the current date is: ```bash dotnet run - User > what is the current date? - Assistant > I can't access today's date, but imagine it’s an eternal "Fri-yay," ready for financial fun! How can I help you on this hypothetical day? ``` - + At the prompt enter + ```bash + What is the current date? + ``` + Assistant will give a similar response: + ``` + Assistant > I can't access today's date, but imagine it’s an eternal "Fri-yay," ready for financial fun! How can I help you on this hypothetical day? + ``` 1. Notice it does not provide a specific answer. We can use a Semantic Kernel Plugin to be able to fix that. - 1. In the `Plugins` directory from `Console.Utilities` directory review the file named + 1. In the `Plugins` directory from `Core.Utilities` directory review the file named `TimeInformationPlugin.cs` which has the following content: ```csharp @@ -41,32 +46,28 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr } ``` -1. Next locate Step 1 in `Program.cs` and add the following import line: +1. Next locate TODO: Step 1 in `Program.cs` and add the following import line: ```csharp - // TODO: Step 1 - Add import for Plugins - using Console.Utiltiies.Plugins; + using Core.Utiltiies.Plugins; ``` -1. Next locate Step 2 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: +1. Next locate TODO: Step 2 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: ```csharp - // TODO: Step 2 - Initialize Time plugin and registration in the kernel kernel.Plugins.AddFromObject(new TimeInformationPlugin()); ``` -1. Next locate Step 3 and add the following line to be able to +1. Next locate TODO: Step 3 and add the following line to be able to auto invoke kernel functions: ```csharp - // TODO: Step 3 - Add Auto invoke kernel functions as the tool call behavior ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions ``` -1. Next locate Step 4 and add the following parameters: +1. Next locate TODO: Step 4 and add the following parameters: ```csharp - // TODO: Step 4 - Provide promptExecutionSettings and kernel arguments await foreach (var chatUpdate in chatCompletionService.GetStreamingChatMessageContentsAsync(chatHistory, promptExecutionSettings, kernel)) ``` @@ -74,13 +75,16 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr ```bash dotnet run - User > what is the current date? + What is the current date? + ``` + Assistant response: + ``` Assistant > Today's date is October 4, 2024. Time flies like an arrow; fruit flies like a banana! ``` -1. Congratulations you are now using your first Semantic Kernel plugin! Next, we are going to need another plugin - that will integrate to be able to an existing `StockService` included within the `Core.Utilities` project. - Review the file named `StockDataPlugin.cs` from `Console.Utilities\Plugins` which includes 2 functions, +1. Congratulations you are now using your first Semantic Kernel plugin! Next, we are going to leverage another plugin + that will provide a `StockService`. This plugin is included within the `Core.Utilities` project. + Review the file named `StockDataPlugin.cs` from `Core.Utilities\Plugins` which includes 2 functions, one to retrieve the stock price for the current date and another one for a specific date: ```csharp @@ -112,17 +116,15 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr } ``` -1. Next, locate Step 5 in `Program.cs` and add import required for `StockService`: +1. Next, locate TODO: Step 5 in `Program.cs` and add import required for `StockService`: ```csharp - // TODO: Step 5 - Add import required for StockService using Core.Utilities.Services; ``` -1. Next locate Step 6 and provide the following line to register the new `StockDataPlugin`: +1. Next locate TODO: Step 6 and provide the following line to register the new `StockDataPlugin`: ```csharp - // TODO: Step 6 - Initialize Stock Data Plugin and register it in the kernel HttpClient httpClient = new(); StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); kernel.Plugins.AddFromObject(stockDataPlugin); @@ -131,7 +133,7 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr 1. Before we can run this, you need to get an API Key to be able to get stock prices from: [https://polygon.io/dashboard/login](). You can sign up for a free API Key by creating a login. -1. Once the apiKey is provide, update the `appSettings.json` and paste it into this line: +1. Once you have an apiKey, update the `appSettings.json` and paste it into this line: ```json "StockService": { @@ -142,7 +144,11 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr 1. Next run program and ask stock pricing information: ```bash - User > what is MSFT price? + dotnet run + What is MSFT price? + ``` + Assistant response: + ``` Assistant > Hold onto your calculators! The price of MSFT is currently $417.63. Looks like it's trying to outshine the stars! - ``` \ No newline at end of file + ``` diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md index ac6e373..60a3f5f 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md @@ -1,9 +1,5 @@ # Prerequisites -!!! note "Mandatory pre-requisite" - - Please signup for [Azure OpenAI (AOAI)](https://aka.ms/oai/access) and complete [Getting started with AOAI module](https://learn.microsoft.com/en-us/training/modules/get-started-openai/) - Before attending the Intelligent App Development Workshop, please ensure you have the following prerequisites in place: 1. **Basic programming knowledge**: Familiarity with at least one programming language (e.g., Python, JavaScript, Java, or C#) and basic understanding of software development concepts. @@ -12,73 +8,63 @@ Before attending the Intelligent App Development Workshop, please ensure you hav 1. **Azure OpenAI resource** - For this workshop, you'll need to deploy at least one model such as GPT 4. See the Azure OpenAI Service documentation for more details on [deploying models](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal) and [model availability](https://learn.microsoft.com/azure/ai-services/openai/concepts/models). 1. **Development environment**: A computer with your preferred development environment installed, such as Visual Studio Code, PyCharm, or another IDE that supports the programming language you'll be using in the workshop. 1. **Git**: Familiarity with Git and GitHub for version control. Ensure you have [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) installed on your computer. +1. **Azure CLI**: Install the [Azure Command-Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) to interact with Azure services and manage resources from the command line. 1. **.NET CLI**: .NET CLI is included when you install [.NET SDK](https://dotnet.microsoft.com/en-us/download) +1. **Docker**: Install [Docker Desktop](https://www.docker.com/products/docker-desktop) to build and run containerized applications. ## Initial Setup -### 1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. -### 2. Clone this repo using: +1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. +2. Clone this repo using: ```bash git clone https://github.com/Azure/intelligent-app-workshop.git ``` -### 3. Change directory into cloned repo: +3. Change directory into cloned repo: ```bash cd intelligent-app-workshop ``` -### 4. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): +4. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): ```bash cp workshop\dotnet\Lessons\appsettings.json.example workshop\dotnet\Lessons\Lesson1\appsettings.json ``` -### 5. Retrieve the OpenAI Endpoint URL, API Key and deployed model name then update newly created appsettings.json - -#### 5.1 Get Azure OpenAI access values: From Portal - -The Azure OpenAI endpoint and key values will be found in the [Azure Portal](https://portal.azure.com) so let's start there. - -1. Go to the [Azure Portal](https://portal.azure.com). -1. Go to the Azure OpenAI resource. -1. Expand the **Resource Management** section in the sidebar (menu at left) -1. Click the **Keys and Endpoint** option. -1. Click **Show Keys** - you should see the following: KEY 1, KEY 2 and Endpoint. -1. Use the **KEY 1** value for **apiKey** in appsettings.json under OpenAI. -1. Use the **Endpoint** value for **endpoint** in appsettings.json under OpenAI. - -![Terminal](./images/keys-and-endpoint.jpg) - -Next, we need to create deployments from the Azure OpenAI models. - -1. Click the **Model deployments** option in the sidebar (left menu) for Azure OpenAI resource. -1. In the destination page, click **Manage Deployments** -1. (Optional) You can directly navigate to the [Azure OpenAI Studio website](https://oai.azure.com). - -This will take you to the Azure OpenAI Studio website, where we'll find the other values as described below. - -#### 5.2 Get Azure OpenAI deployments: From Studio - -1. Navigate to [Azure OpenAI Studio](https://oai.azure.com) **from your resource** as described above. -2. Click the **Deployments** tab (sidebar, left) to view currently deployed models. -3. If your desired model is not deployed, use **Create new deployment** to deploy it. If using the new portal, use **Deploy model** button. -4. You will need a chat completion model (gpt-35-turbo model or similar)- deploy the model -5. Update appsettings.json deploymentName field with your model deployment name. - -![Terminal](./images/deploy-model.jpg) -![Terminal](./images/model-deployments.jpg) - -??? note "Optional" - The following prerequisites are optional but recommended to get the most out of the workshop: +5. Retrieve the OpenAI Endpoint URL, API Key and deployed model name then update newly created appsettings.json + + 1. Get Azure OpenAI access values: From Portal: + + The Azure OpenAI endpoint and key values will be found in the [Azure Portal](https://portal.azure.com) so let's start there. + 1. Go to the [Azure Portal](https://portal.azure.com). + 1. Go to the Azure OpenAI resource. + 1. Expand the **Resource Management** section in the sidebar (menu at left) + 1. Click the **Keys and Endpoint** option. + 1. Click **Show Keys** - you should see the following: KEY 1, KEY 2 and Endpoint. + 1. Use the **KEY 1** value for **apiKey** in appsettings.json under OpenAI. + 1. Use the **Endpoint** value for **endpoint** in appsettings.json under OpenAI. + + ![Terminal](./images/keys-and-endpoint.jpg) + + Next, we need to create deployments from the Azure OpenAI models. + + 1. Click the **Model deployments** option in the sidebar (left menu) for Azure OpenAI resource. + 1. In the destination page, click **Manage Deployments** + 1. (Optional) You can directly navigate to the [Azure OpenAI Studio website](https://oai.azure.com). + + This will take you to the Azure OpenAI Studio website, where we'll find the other values as described below. + + 1. Get Azure OpenAI deployments: From Studio - 1. **Azure CLI**: Install the [Azure Command-Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) to interact with Azure services and manage resources from the command line. + 1. Navigate to [Azure OpenAI Studio](https://oai.azure.com) **from your resource** as described above. + 2. Click the **Deployments** tab (sidebar, left) to view currently deployed models. + 3. If your desired model is not deployed, use **Create new deployment** to deploy it. If using the new portal, use **Deploy model** button. + 4. You will need a chat completion model (gpt-4o model or similar)- deploy the model + 5. Update appsettings.json deploymentName field with your model deployment name. + + ![Terminal](./images/deploy-model.jpg) - 1. **Azure Functions Core Tools**: Install the [Azure Functions Core Tools](https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local?tabs=windows%2Ccsharp%2Cbash#v2) to create, test, and deploy Azure Functions from your local development environment. - - 1. **Docker**: Install [Docker Desktop](https://www.docker.com/products/docker-desktop) to build and run containerized applications. - - 1. **Cognitive Services SDKs**: Install the SDKs for the Azure Cognitive Services you'll be using in the workshop, such as the [Azure OpenAI SDK](https://pypi.org/project/azure-cognitiveservices-openai/), based on your programming language and the services used during the workshop. By ensuring you have completed these prerequisites, you'll be well-prepared to dive into the Intelligent App Development Workshop and make the most of the hands-on learning experience. From 00090ddd8924d0bd6d5dd150dd6aad5a8571ad1d Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 8 Nov 2024 15:33:25 -0500 Subject: [PATCH 40/61] Fixed yaml syntax warnings --- .../create-deployable-app/azd-infra.md | 2 +- .../create-deployable-app/web-app.md | 2 ++ .../simple-ai-orchestration/index.md | 2 +- .../simple-ai-orchestration/lesson1.md | 10 ++++---- .../simple-ai-orchestration/lesson2.md | 16 ++++++++----- .../simple-ai-orchestration/lesson3.md | 20 ++++++++++++---- .../simple-ai-orchestration/pre-reqs.md | 23 +++++++++---------- 7 files changed, 45 insertions(+), 30 deletions(-) diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md index d3831f5..1ef9f52 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md @@ -41,7 +41,7 @@ services: ### `infra` directory -Within the `infra` directory you have the option to provide either `bicep` or `terraform templates +Within the `infra` directory you have the option to provide either `bicep` or `terraform` templates to deploy the required infrastructure for our application to run. In this example we use `bicep` templates which are organized as follows: diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md index ed0361d..6766f4a 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md @@ -16,9 +16,11 @@ The UI was created using React JS and a Node JS proxy to the API. Here is a high ### Build Web UI 1. Go to the frontend directory + ```bash cd workshop/frontend ``` + 1. Run `npm install` to get required dependencies 1. Run `npm run build` to build the React application diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md index 6425f32..e4f528b 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/index.md @@ -1,6 +1,6 @@ # Simple AI Orchestration using Semantic Kernel -This hands on workshop goes through the following lessons for creating a simple Semantic Kernel +This hands on workshop goes through the following lessons for creating a simple Semantic Kernel chatbot as a console application: 1. [Lesson 1: Create Simple Semantic Kernel chatbot](lesson1.md) diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md index 11a328f..4daea2e 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md @@ -13,7 +13,7 @@ In this lesson we will create a semantic kernel chatbot with a system prompt and 1. Open `Program.cs` and locate the **TODO** for each step and apply the following changes for each: 1. TODO: Step 1: add code to initialize kernel with chat completion: - + ```csharp IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); Kernel kernel = builder.Build(); @@ -51,12 +51,13 @@ In this lesson we will create a semantic kernel chatbot with a system prompt and 1. When prompted ask for financial advice: - ``` + ```txt Which stocks do you recommend buying for moderate growth? ``` You will receive a similar response: - + + ```txt Assistant > Ah, the magical world of stock picking! Imagine walking into a buffet, and instead of loading your plate with mystery meat, you're strategically choosing the tastiest, most promising dishes. Here are a few general menus to consider, with a sprinkle of fun: 1. **Tech Tango** - Think companies that dance to the tune of innovation! Look for firms diving into AI or cloud computing. They're like the cool kids at the financial disco. @@ -70,5 +71,4 @@ In this lesson we will create a semantic kernel chatbot with a system prompt and 5. **Financial Fiesta** - Banks or fintech companies can be like salsa on your stock tacos—adding a bit of spice and zing! Remember, always research like you're planning the perfect vacation and balance your choices like you balance a pizza with just the right amount of toppings. And of course, consult a real-world financial oracle before making any big moves. Bon appétit in the stock market buffet! - - + ``` diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md index c3f821e..3b0799b 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md @@ -32,7 +32,7 @@ In this lesson we will add chat history to our chat agent. var chatCompletionService = kernel.GetRequiredService(); ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); ``` - + TODO: Step 2b: **Remove** the `promptExecutionSettings` and `kernelArgs` initialization code ```csharp @@ -44,10 +44,10 @@ In this lesson we will add chat history to our chat agent. // Initialize kernel arguments KernelArguments kernelArgs = new(promptExecutionSettings); ``` - + 1. TODO: Step 3: Add code to initialize `fullMessage` variable and add user input to chat history: - ```csharp + ```csharp string fullMessage = ""; chatHistory.AddUserMessage(userInput); ``` @@ -80,11 +80,13 @@ In this lesson we will add chat history to our chat agent. 1. Introduce yourself and provide your year of birth: - ``` + ```txt My name is John and I was born in 1980 ``` + You will receive a similar response: - ``` + + ```txt Assistant > Ah, John, fresh from the 80s, where big hair and bigger dreams reigned! As you're jamming to your life’s mixtape, let's rewind and fast-forward through some financial wisdom: 1. **Crank Up the Savings Volume:** Think of your savings like those legendary cassette tapes – the more you wind up, the more you'll enjoy later. Aim to save 15-20% of your income! @@ -105,8 +107,10 @@ In this lesson we will add chat history to our chat agent. ```txt If I could go back in time to the year I was born, which stocks would have made me a millionare? ``` + You will receive a similar response: - ``` + + ```txt Assistant > Oh, if only we had a DeLorean stocked with hindsight! Let’s put on our leg warmers and moonwalk back to 1980. Here are some stocks that would've been music to your financial ears: 1. **Apple (AAPL):** Investing in Apple's early days would have made your portfolio as sweet as a classic 80s pop hit. The iRevolution was just around the corner! diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md index d608824..40878a8 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md @@ -19,18 +19,23 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr ```bash dotnet run ``` + At the prompt enter + ```bash What is the current date? ``` + Assistant will give a similar response: - ``` + + ```txt Assistant > I can't access today's date, but imagine it’s an eternal "Fri-yay," ready for financial fun! How can I help you on this hypothetical day? ``` + 1. Notice it does not provide a specific answer. We can use a Semantic Kernel Plugin to be able to fix that. - 1. In the `Plugins` directory from `Core.Utilities` directory review the file named - `TimeInformationPlugin.cs` which has the following content: +1. In the `Plugins` directory from `Core.Utilities` directory review the file named + `TimeInformationPlugin.cs` which has the following content: ```csharp using System.ComponentModel; @@ -77,8 +82,10 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr dotnet run What is the current date? ``` + Assistant response: - ``` + + ```txt Assistant > Today's date is October 4, 2024. Time flies like an arrow; fruit flies like a banana! ``` @@ -146,9 +153,12 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr ```bash dotnet run What is MSFT price? + ``` + Assistant response: - ``` + + ```txt Assistant > Hold onto your calculators! The price of MSFT is currently $417.63. Looks like it's trying to outshine the stars! ``` diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md index 60a3f5f..b131a70 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md @@ -15,7 +15,7 @@ Before attending the Intelligent App Development Workshop, please ensure you hav ## Initial Setup 1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. -2. Clone this repo using: +2. Clone this repo using: ```bash git clone https://github.com/Azure/intelligent-app-workshop.git @@ -45,26 +45,25 @@ Before attending the Intelligent App Development Workshop, please ensure you hav 1. Click **Show Keys** - you should see the following: KEY 1, KEY 2 and Endpoint. 1. Use the **KEY 1** value for **apiKey** in appsettings.json under OpenAI. 1. Use the **Endpoint** value for **endpoint** in appsettings.json under OpenAI. - + ![Terminal](./images/keys-and-endpoint.jpg) - + Next, we need to create deployments from the Azure OpenAI models. - + 1. Click the **Model deployments** option in the sidebar (left menu) for Azure OpenAI resource. 1. In the destination page, click **Manage Deployments** 1. (Optional) You can directly navigate to the [Azure OpenAI Studio website](https://oai.azure.com). - + This will take you to the Azure OpenAI Studio website, where we'll find the other values as described below. 1. Get Azure OpenAI deployments: From Studio - + 1. Navigate to [Azure OpenAI Studio](https://oai.azure.com) **from your resource** as described above. - 2. Click the **Deployments** tab (sidebar, left) to view currently deployed models. - 3. If your desired model is not deployed, use **Create new deployment** to deploy it. If using the new portal, use **Deploy model** button. - 4. You will need a chat completion model (gpt-4o model or similar)- deploy the model - 5. Update appsettings.json deploymentName field with your model deployment name. - - ![Terminal](./images/deploy-model.jpg) + 1. Click the **Deployments** tab (sidebar, left) to view currently deployed models. + 1. If your desired model is not deployed, use **Create new deployment** to deploy it. If using the new portal, use **Deploy model** button. + 1. You will need a chat completion model (gpt-4o model or similar)- deploy the model + 1. Update appsettings.json deploymentName field with your model deployment name. + ![Terminal](./images/deploy-model.jpg) By ensuring you have completed these prerequisites, you'll be well-prepared to dive into the Intelligent App Development Workshop and make the most of the hands-on learning experience. From 62677043cf6ff946955411850491d2bfb07ade64 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 8 Nov 2024 16:15:35 -0500 Subject: [PATCH 41/61] initial devcontainers version --- .devcontainer/devcontainer.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..b0068e0 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,11 @@ +{ + "customizations": { + "vscode": { + "extensions": [ + "ms-dotnettools.csdevkit", + "EditorConfig.EditorConfig", + "GitHub.copilot" + ] + } + } +} \ No newline at end of file From 3bdddbd919b2707a6095e91bb95532327995b677 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 8 Nov 2024 16:22:31 -0500 Subject: [PATCH 42/61] Added azd --- .devcontainer/devcontainer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b0068e0..a7df597 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,4 +1,7 @@ { + "features": { + "ghcr.io/azure/azure-dev/azd": {} + }, "customizations": { "vscode": { "extensions": [ @@ -8,4 +11,4 @@ ] } } -} \ No newline at end of file +} From 504979baa44f455fbe7061dce36cd507f8bdc460 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 8 Nov 2024 16:49:48 -0500 Subject: [PATCH 43/61] added missing version --- .devcontainer/devcontainer.json | 3 +-- .../simple-ai-orchestration/lesson1.md | 2 ++ .../simple-ai-orchestration/pre-reqs.md | 14 ++++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a7df597..c90083e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,6 @@ { "features": { - "ghcr.io/azure/azure-dev/azd": {} - }, + "ghcr.io/azure/azure-dev/azd:latest": {}, "customizations": { "vscode": { "extensions": [ diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md index 4daea2e..572c825 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md @@ -2,6 +2,8 @@ In this lesson we will create a semantic kernel chatbot with a system prompt and keeping track of chat history. +1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. + 1. Switch to Lesson 1 directory: ```bash diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md index b131a70..252ed68 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md @@ -2,15 +2,17 @@ Before attending the Intelligent App Development Workshop, please ensure you have the following prerequisites in place: -1. **Basic programming knowledge**: Familiarity with at least one programming language (e.g., Python, JavaScript, Java, or C#) and basic understanding of software development concepts. 1. **Azure account**: A Microsoft Azure account with an active subscription. If you don't have one, sign up for a [free trial](https://azure.microsoft.com/en-us/free/). 1. **Azure subscription with access enabled for the Azure OpenAI Service** - For more details, see the [Azure OpenAI Service documentation on how to get access](https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai). 1. **Azure OpenAI resource** - For this workshop, you'll need to deploy at least one model such as GPT 4. See the Azure OpenAI Service documentation for more details on [deploying models](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal) and [model availability](https://learn.microsoft.com/azure/ai-services/openai/concepts/models). -1. **Development environment**: A computer with your preferred development environment installed, such as Visual Studio Code, PyCharm, or another IDE that supports the programming language you'll be using in the workshop. -1. **Git**: Familiarity with Git and GitHub for version control. Ensure you have [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) installed on your computer. -1. **Azure CLI**: Install the [Azure Command-Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) to interact with Azure services and manage resources from the command line. -1. **.NET CLI**: .NET CLI is included when you install [.NET SDK](https://dotnet.microsoft.com/en-us/download) -1. **Docker**: Install [Docker Desktop](https://www.docker.com/products/docker-desktop) to build and run containerized applications. +1. **Development environment**: Either `Gihub CodeSpaces` or A computer with your preferred development environment installed, such as Visual Studio Code or another IDE that supports the programming language you'll be using in the workshop. If using `Github CodeSpaces` all prerequisites will be pre-installed. If using your local computer, the following pre-requisites are needed: + 1. **Git**: Ensure you have [Git](https://git-scm.com/downloads) installed on your computer. + 1. **Azure CLI**: Install the [Azure Command-Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) to interact with Azure services and manage resources from the command line. + 1. **.NET SDK**: install [.NET SDK](https://dotnet.microsoft.com/en-us/download) to build and run .NET projects. + 1. **Docker**: Install [Docker Desktop](https://www.docker.com/products/docker-desktop) to build and run containerized applications. + 1. **Node.Js**: Install [Node.Js](https://nodejs.org/en/download/package-manager) to build and run web application. + 1. **Azure Development CLI**: Install [azd](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) to be able to provision and deploy application to Azure. + 1. **bash/shell terminal**: the lessons assume bash/shell script syntax. If using Windows, either you can either using Git Bash (included when you install Git) or installing [WSL (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/install). ## Initial Setup From a1bce571f0d636d1eb8180d36b13a470a68351b4 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 8 Nov 2024 16:53:08 -0500 Subject: [PATCH 44/61] fixed syntax --- .devcontainer/devcontainer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c90083e..92e6124 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,6 +1,7 @@ { "features": { - "ghcr.io/azure/azure-dev/azd:latest": {}, + "ghcr.io/azure/azure-dev/azd:latest": {} + }, "customizations": { "vscode": { "extensions": [ From 667fae31fe0be122f77f7125b3da1ebb95a6a53b Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 8 Nov 2024 16:54:30 -0500 Subject: [PATCH 45/61] adding missing image --- .devcontainer/devcontainer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 92e6124..dffe5df 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,4 +1,5 @@ { + "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { "ghcr.io/azure/azure-dev/azd:latest": {} }, From f6e03db1b21d834d3630164970a6946d19eacf08 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Fri, 8 Nov 2024 16:59:08 -0500 Subject: [PATCH 46/61] removed azd --- .devcontainer/devcontainer.json | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index dffe5df..4f028db 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,14 +1,10 @@ { - "image": "mcr.microsoft.com/devcontainers/universal:2", - "features": { - "ghcr.io/azure/azure-dev/azd:latest": {} - }, - "customizations": { - "vscode": { - "extensions": [ - "ms-dotnettools.csdevkit", - "EditorConfig.EditorConfig", - "GitHub.copilot" + "image": "mcr.microsoft.com/devcontainers/universal:2", + "customizations": { + "vscode": { + "extensions": [ + "ms-dotnettools.csdevkit", + "GitHub.copilot" ] } } From 26c772981dd4f2e74e675f0ae4c4bc8c99cc892b Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Sun, 10 Nov 2024 11:44:08 -0500 Subject: [PATCH 47/61] Added back azd cli --- .devcontainer/devcontainer.json | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4f028db..dffe5df 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,10 +1,14 @@ { - "image": "mcr.microsoft.com/devcontainers/universal:2", - "customizations": { - "vscode": { - "extensions": [ - "ms-dotnettools.csdevkit", - "GitHub.copilot" + "image": "mcr.microsoft.com/devcontainers/universal:2", + "features": { + "ghcr.io/azure/azure-dev/azd:latest": {} + }, + "customizations": { + "vscode": { + "extensions": [ + "ms-dotnettools.csdevkit", + "EditorConfig.EditorConfig", + "GitHub.copilot" ] } } From b8b961b0d1e2ffc15cc80de0f80a479b8c016163 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Sun, 10 Nov 2024 12:15:26 -0500 Subject: [PATCH 48/61] Added github codespaces instructions --- .../simple-ai-orchestration/lesson3.md | 5 +-- .../simple-ai-orchestration/pre-reqs.md | 42 +++++++++++++------ 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md index 40878a8..178517b 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md @@ -137,10 +137,7 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr kernel.Plugins.AddFromObject(stockDataPlugin); ``` -1. Before we can run this, you need to get an API Key to be able to get stock prices from: - [https://polygon.io/dashboard/login](). You can sign up for a free API Key by creating a login. - -1. Once you have an apiKey, update the `appSettings.json` and paste it into this line: +1. Use the apiKey from polygon.io from the [pre-requisites](pre-reqs.md) and update the `appSettings.json` and paste it into this line: ```json "StockService": { diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md index 252ed68..bdb3aa7 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md @@ -5,7 +5,22 @@ Before attending the Intelligent App Development Workshop, please ensure you hav 1. **Azure account**: A Microsoft Azure account with an active subscription. If you don't have one, sign up for a [free trial](https://azure.microsoft.com/en-us/free/). 1. **Azure subscription with access enabled for the Azure OpenAI Service** - For more details, see the [Azure OpenAI Service documentation on how to get access](https://learn.microsoft.com/azure/ai-services/openai/overview#how-do-i-get-access-to-azure-openai). 1. **Azure OpenAI resource** - For this workshop, you'll need to deploy at least one model such as GPT 4. See the Azure OpenAI Service documentation for more details on [deploying models](https://learn.microsoft.com/azure/ai-services/openai/how-to/create-resource?pivots=web-portal) and [model availability](https://learn.microsoft.com/azure/ai-services/openai/concepts/models). -1. **Development environment**: Either `Gihub CodeSpaces` or A computer with your preferred development environment installed, such as Visual Studio Code or another IDE that supports the programming language you'll be using in the workshop. If using `Github CodeSpaces` all prerequisites will be pre-installed. If using your local computer, the following pre-requisites are needed: + +## Development Environment Setup + +You have the option of using [Github CodeSpaces](https://docs.github.com/en/codespaces/getting-started/quickstart) or your local development environment. + +### Using Github CodeSpaces (recommmended) + +If using Github CodeSpaces all prerequisites will be pre-installed, however you will need to create a fork as follows: + +1. Navigate to this link to create a new [fork](https://github.com/Azure/intelligent-app-workshop/fork) (must be logged into your github account). +1. Accept the default values and click on **"Create fork"** which will take you to the forked repository in the browser. +1. From your forked repository click on the **"<> Code"** button. Then click on the **"Create codespace on main"** button. + +### Using local development environment + +If you prefer using a computer with using a local development environment, the following pre-requisites need to be installed: 1. **Git**: Ensure you have [Git](https://git-scm.com/downloads) installed on your computer. 1. **Azure CLI**: Install the [Azure Command-Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) to interact with Azure services and manage resources from the command line. 1. **.NET SDK**: install [.NET SDK](https://dotnet.microsoft.com/en-us/download) to build and run .NET projects. @@ -14,28 +29,27 @@ Before attending the Intelligent App Development Workshop, please ensure you hav 1. **Azure Development CLI**: Install [azd](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) to be able to provision and deploy application to Azure. 1. **bash/shell terminal**: the lessons assume bash/shell script syntax. If using Windows, either you can either using Git Bash (included when you install Git) or installing [WSL (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/install). -## Initial Setup +Next you will need to clone this repo using: -1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. -2. Clone this repo using: +```bash +git clone https://github.com/Azure/intelligent-app-workshop.git +``` - ```bash - git clone https://github.com/Azure/intelligent-app-workshop.git - ``` +Change directory into cloned repo: -3. Change directory into cloned repo: +```bash +cd intelligent-app-workshop +``` - ```bash - cd intelligent-app-workshop - ``` +## Initial Setup -4. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): +1. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): ```bash cp workshop\dotnet\Lessons\appsettings.json.example workshop\dotnet\Lessons\Lesson1\appsettings.json ``` -5. Retrieve the OpenAI Endpoint URL, API Key and deployed model name then update newly created appsettings.json +1. Retrieve the OpenAI Endpoint URL, API Key and deployed model name then update newly created `appsettings.json` 1. Get Azure OpenAI access values: From Portal: @@ -68,4 +82,6 @@ Before attending the Intelligent App Development Workshop, please ensure you hav ![Terminal](./images/deploy-model.jpg) +1. Additionally we need to obtain an API Key to be able to get stock prices from [polygon.io](https://polygon.io/dashboard/login). You can sign up for a free API Key by creating a login. This value will be needed for [Lesson 3](lesson3.md). + By ensuring you have completed these prerequisites, you'll be well-prepared to dive into the Intelligent App Development Workshop and make the most of the hands-on learning experience. From b6df2624cab0601dbbd91613f1fcca255b654d1e Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 11 Nov 2024 17:42:34 +0000 Subject: [PATCH 49/61] updates to lesson code after review --- workshop/dotnet/Lessons/Lesson1/Program.cs | 2 +- workshop/dotnet/Lessons/Lesson2/Program.cs | 4 ++++ workshop/dotnet/Solutions/Lesson1/Program.cs | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/workshop/dotnet/Lessons/Lesson1/Program.cs b/workshop/dotnet/Lessons/Lesson1/Program.cs index d698de4..201e503 100644 --- a/workshop/dotnet/Lessons/Lesson1/Program.cs +++ b/workshop/dotnet/Lessons/Lesson1/Program.cs @@ -6,7 +6,7 @@ // TODO: Step 1 - Initialize the kernel with chat completion -// TODO: Step 2 - Add system propmpt +// TODO: Step 2 - Add system prompt // TODO: Step 3 - Initialize kernel arguments diff --git a/workshop/dotnet/Lessons/Lesson2/Program.cs b/workshop/dotnet/Lessons/Lesson2/Program.cs index 94214be..1bed785 100644 --- a/workshop/dotnet/Lessons/Lesson2/Program.cs +++ b/workshop/dotnet/Lessons/Lesson2/Program.cs @@ -4,6 +4,10 @@ // TODO: Step 1 - add ChatCompletion import +// Initialize the kernel with chat completion +IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); +Kernel kernel = builder.Build(); + // TODO: Step 2a - Get chatCompletionService and initialize chatHistory wiht system prompt // TODO: Step 2b - Remove the promptExecutionSettings and kernelArgs initialization code diff --git a/workshop/dotnet/Solutions/Lesson1/Program.cs b/workshop/dotnet/Solutions/Lesson1/Program.cs index d8ab397..9759507 100644 --- a/workshop/dotnet/Solutions/Lesson1/Program.cs +++ b/workshop/dotnet/Solutions/Lesson1/Program.cs @@ -27,7 +27,7 @@ if (userInput != null && userInput != terminationPhrase) { Console.Write("Assistant > "); - // TODO: Step 4 - Provide kernel arguments as a second parameter + // TODO: Step 4 - add a loop to invoke prompt asynchronously providing user input and kernel arguments await foreach (var response in kernel.InvokePromptStreamingAsync(userInput, kernelArgs)) { Console.Write(response); From aaa4fba2b5eaf140d488e7f1f583828d6fbd8efb Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 11 Nov 2024 13:55:13 -0500 Subject: [PATCH 50/61] updated instructions to include model deployment --- .../images/Keys and Endpoint.jpg | Bin 137299 -> 0 bytes .../simple-ai-orchestration/lesson1.md | 2 +- .../simple-ai-orchestration/lesson2.md | 8 +-- .../simple-ai-orchestration/lesson3.md | 12 +--- .../simple-ai-orchestration/pre-reqs.md | 66 +++++++++++------- 5 files changed, 49 insertions(+), 39 deletions(-) delete mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/Keys and Endpoint.jpg diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/Keys and Endpoint.jpg b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/Keys and Endpoint.jpg deleted file mode 100644 index ac44566ab17b636694a4a9ceec4a424a93761089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137299 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 diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md index 572c825..f5f4915 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson1.md @@ -7,7 +7,7 @@ In this lesson we will create a semantic kernel chatbot with a system prompt and 1. Switch to Lesson 1 directory: ```bash - cd Lessons\Lesson1 + cd workshop/dotnet/Lessons/Lesson1 ``` 1. Open the project in your favorite IDE or text editor. diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md index 3b0799b..44e1873 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson2.md @@ -2,6 +2,8 @@ In this lesson we will add chat history to our chat agent. +1. Ensure all [pre-requisites](pre-reqs.md) are met and installed. + 1. Switch to Lesson 2 directory: ```bash @@ -18,12 +20,10 @@ In this lesson we will add chat history to our chat agent. 1. Open `Program.cs` and locate the **TODO** for each step and apply the following changes for each: - 1. TODO: Step 1: add code to include the chat completion namespace & initialize kernel with chat completion: + 1. TODO: Step 1: add code to include the chat completion namespace ```csharp using Microsoft.SemanticKernel.ChatCompletion; - IKernelBuilder builder = KernelBuilderProvider.CreateKernelWithChatCompletion(); - Kernel kernel = builder.Build(); ``` 1. TODO: Step 2a: Add code to get `chatCompletionService` instance and to initialize `chatHistory` with system prompt @@ -33,7 +33,7 @@ In this lesson we will add chat history to our chat agent. ChatHistory chatHistory = new("You are a friendly financial advisor that only emits financial advice in a creative and funny tone"); ``` - TODO: Step 2b: **Remove** the `promptExecutionSettings` and `kernelArgs` initialization code + TODO: Step 2b: **Remove** the `promptExecutionSettings` and `kernelArgs` initialization code below ```csharp OpenAIPromptExecutionSettings promptExecutionSettings = new() diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md index 178517b..2035ecd 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/lesson3.md @@ -2,6 +2,8 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pricing. +1. Ensure all [pre-requisites](pre-reqs.md) are met and installed (including updating the StockService `apiKey` value in the `appSettings.json` file using the key from [polygon.io](https://polygon.io/dashboard)). + 1. Switch to Lesson 3 directory: ```bash @@ -54,7 +56,7 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr 1. Next locate TODO: Step 1 in `Program.cs` and add the following import line: ```csharp - using Core.Utiltiies.Plugins; + using Core.Utilities.Plugins; ``` 1. Next locate TODO: Step 2 in `Program.cs` and provide the following line to register the `TimeInformationPlugin`: @@ -137,14 +139,6 @@ In this lesson we will a semantic kernel plugins to be able to retrieve stock pr kernel.Plugins.AddFromObject(stockDataPlugin); ``` -1. Use the apiKey from polygon.io from the [pre-requisites](pre-reqs.md) and update the `appSettings.json` and paste it into this line: - - ```json - "StockService": { - "ApiKey": "" - } - ``` - 1. Next run program and ask stock pricing information: ```bash diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md index bdb3aa7..b615604 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md @@ -21,13 +21,14 @@ If using Github CodeSpaces all prerequisites will be pre-installed, however you ### Using local development environment If you prefer using a computer with using a local development environment, the following pre-requisites need to be installed: - 1. **Git**: Ensure you have [Git](https://git-scm.com/downloads) installed on your computer. - 1. **Azure CLI**: Install the [Azure Command-Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) to interact with Azure services and manage resources from the command line. - 1. **.NET SDK**: install [.NET SDK](https://dotnet.microsoft.com/en-us/download) to build and run .NET projects. - 1. **Docker**: Install [Docker Desktop](https://www.docker.com/products/docker-desktop) to build and run containerized applications. - 1. **Node.Js**: Install [Node.Js](https://nodejs.org/en/download/package-manager) to build and run web application. - 1. **Azure Development CLI**: Install [azd](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) to be able to provision and deploy application to Azure. - 1. **bash/shell terminal**: the lessons assume bash/shell script syntax. If using Windows, either you can either using Git Bash (included when you install Git) or installing [WSL (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/install). + +1. **Git**: Ensure you have [Git](https://git-scm.com/downloads) installed on your computer. +1. **Azure CLI**: Install the [Azure Command-Line Interface (CLI)](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) to interact with Azure services and manage resources from the command line. +1. **.NET SDK**: install [.NET SDK](https://dotnet.microsoft.com/en-us/download) to build and run .NET projects. +1. **Docker**: Install [Docker Desktop](https://www.docker.com/products/docker-desktop) to build and run containerized applications. +1. **Node.Js**: Install [Node.Js](https://nodejs.org/en/download/package-manager) to build and run web application. +1. **Azure Development CLI**: Install [azd](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) to be able to provision and deploy application to Azure. +1. **bash/shell terminal**: the lessons assume bash/shell script syntax. If using Windows, either you can either using Git Bash (included when you install Git) or installing [WSL (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/install). Next you will need to clone this repo using: @@ -46,23 +47,36 @@ cd intelligent-app-workshop 1. Copy and rename the file `appsettings.json.example` into the corresponding lesson directory as follows (example command for Lesson1): ```bash - cp workshop\dotnet\Lessons\appsettings.json.example workshop\dotnet\Lessons\Lesson1\appsettings.json + cp workshop/dotnet/Lessons/appsettings.json.example workshop/dotnet/Lessons/Lesson1/appsettings.json ``` -1. Retrieve the OpenAI Endpoint URL, API Key and deployed model name then update newly created `appsettings.json` +1. Create Azure OpenAI Service and retrieve the Endpoint URL, API Key and deployed model name then update newly created `appsettings.json` - 1. Get Azure OpenAI access values: From Portal: + 1. Get Azure OpenAI access values (from Azure Portal): - The Azure OpenAI endpoint and key values will be found in the [Azure Portal](https://portal.azure.com) so let's start there. + First we need to create a new Azure OpenAI Service, so let's start there. 1. Go to the [Azure Portal](https://portal.azure.com). - 1. Go to the Azure OpenAI resource. + 1. Click on [Create A Resource](https://ms.portal.azure.com/#create/hub) + 1. On the search bar type **Azure OpenAI** and hit enter + 1. Locate **Azure OpenAI** and click **Create** + 1. On the **Create Azure OpeanAI** page, provide the following information for the fields on the Basics tab: + * Subscription: The Azure subscription to used for your service. + * Resource group: The Azure resource group to contain your Azure OpenAI service resource. You can create a new group or use a pre-existing group. + * Region: The location of your instance. Different locations can introduce latency, but they don't affect the runtime availability of your resource. + * Name: A descriptive and unique name for your Azure AI Service resource, such as `aoai-intelligent-app-workshop-myid`. + * Pricing Tier: The pricing tier for the resource. Currently, only the `Standard S0` tier is available for the Azure AI Service. + * Check the box to acknowledge that you have read and understood all the Responsible AI notices. + 1. Click **Next**. + 1. Review default **Network** values and click **Next** + 1. On the **Tags** tab click **Next** + 1. Click **Create**. + 1. From the deployment page, wait for the deployment to complete and then click **Go to resource** 1. Expand the **Resource Management** section in the sidebar (menu at left) - 1. Click the **Keys and Endpoint** option. - 1. Click **Show Keys** - you should see the following: KEY 1, KEY 2 and Endpoint. - 1. Use the **KEY 1** value for **apiKey** in appsettings.json under OpenAI. - 1. Use the **Endpoint** value for **endpoint** in appsettings.json under OpenAI. + 1. Click the **Keys and Endpoint** option - you should see the following: KEY 1, KEY 2 and Endpoint. + 1. Copy the **KEY 1** value and paste it into the **apiKey** value within the `OpenAI` element in the `appsettings.json` file. + 1. Copy the **Endpoint** value and paste it as the **endpoint** value within the `OpenAI` element in the `appsettings.json` file. - ![Terminal](./images/keys-and-endpoint.jpg) + ![Azure Open AI Keys and Endpoint](./images/keys-and-endpoint.jpg) Next, we need to create deployments from the Azure OpenAI models. @@ -72,16 +86,18 @@ cd intelligent-app-workshop This will take you to the Azure OpenAI Studio website, where we'll find the other values as described below. - 1. Get Azure OpenAI deployments: From Studio + 1. Create and get Azure OpenAI deployment value (from Azure OpenAI Studio): 1. Navigate to [Azure OpenAI Studio](https://oai.azure.com) **from your resource** as described above. 1. Click the **Deployments** tab (sidebar, left) to view currently deployed models. - 1. If your desired model is not deployed, use **Create new deployment** to deploy it. If using the new portal, use **Deploy model** button. - 1. You will need a chat completion model (gpt-4o model or similar)- deploy the model - 1. Update appsettings.json deploymentName field with your model deployment name. - - ![Terminal](./images/deploy-model.jpg) - -1. Additionally we need to obtain an API Key to be able to get stock prices from [polygon.io](https://polygon.io/dashboard/login). You can sign up for a free API Key by creating a login. This value will be needed for [Lesson 3](lesson3.md). + 1. If your desired model is not deployed, click on **Deploy Model** then select to **Deploy Base Model**. + 1. You will need a chat completion model. For this workshop we recommend using `gpt-4o`. Select `gpt-4o` from the drop down and click **Confirm**. + 1. Accept the default `gpt-4o` values and click **Deploy** + ![Terminal](./images/deploy-model.jpg) + 1. Update `appsettings.json` deploymentName field with your model deployment name. + 1. Use the **Deployment Name** value (e.g. gpt-4o) as the **deploymentName** value within the `OpenAI` element in the `appsettings.json` file. + +1. Additionally, we need to obtain an API Key to be able to get stock prices from [polygon.io](https://polygon.io/dashboard/login). You can sign up for a free API Key by creating a login. This value will be needed for [Lesson 3](lesson3.md). + 1. Once logged in, from the [polygon.io Dashboard](https://polygon.io/dashboard) locate the **Keys** section. Copy the default key value and paste it as the **apiKey** value within the `StockService` element in the `appsettings.json` file. By ensuring you have completed these prerequisites, you'll be well-prepared to dive into the Intelligent App Development Workshop and make the most of the hands-on learning experience. From bd54c52331f4fdd27b71ea5e42d08b9a9c811d4c Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 11 Nov 2024 14:37:54 -0500 Subject: [PATCH 51/61] refactore plugins use from library --- .../App/backend/Controllers/ChatController.cs | 2 -- .../backend/Extensions/ServiceExtensions.cs | 2 +- .../App/backend/Plugins/StockDataPlugin.cs | 28 ------------------- .../backend/Plugins/TimeInformationPlugin.cs | 11 -------- 4 files changed, 1 insertion(+), 42 deletions(-) delete mode 100644 workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs delete mode 100644 workshop/dotnet/App/backend/Plugins/TimeInformationPlugin.cs diff --git a/workshop/dotnet/App/backend/Controllers/ChatController.cs b/workshop/dotnet/App/backend/Controllers/ChatController.cs index 0c8f887..8cbb12f 100644 --- a/workshop/dotnet/App/backend/Controllers/ChatController.cs +++ b/workshop/dotnet/App/backend/Controllers/ChatController.cs @@ -1,7 +1,5 @@ using Core.Utilities.Models; using Core.Utilities.Extensions; -// Add import for Plugins -using Plugins; // Add import required for StockService using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; diff --git a/workshop/dotnet/App/backend/Extensions/ServiceExtensions.cs b/workshop/dotnet/App/backend/Extensions/ServiceExtensions.cs index cd3e6f0..d92820b 100644 --- a/workshop/dotnet/App/backend/Extensions/ServiceExtensions.cs +++ b/workshop/dotnet/App/backend/Extensions/ServiceExtensions.cs @@ -1,7 +1,7 @@ using Core.Utilities.Config; using Core.Utilities.Models; // Add import for Plugins -using Plugins; +using Core.Utilities.Plugins; // Add import required for StockService using Core.Utilities.Services; using Microsoft.SemanticKernel; diff --git a/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs b/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs deleted file mode 100644 index 4ac67bd..0000000 --- a/workshop/dotnet/App/backend/Plugins/StockDataPlugin.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Core.Utilities.Services; -using Core.Utilities.Models; -using Core.Utilities.Extensions; - -using Microsoft.SemanticKernel; -using System.ComponentModel; - -namespace Plugins; - -public class StockDataPlugin(StocksService stockService) -{ - private readonly StocksService _stockService = stockService; - - [KernelFunction, Description("Gets stock price")] - public async Task GetStockPrice(string symbol) - { - string tabularData = (await _stockService.GetStockAggregate(symbol)).FormatStockData(); - return tabularData; - } - - [KernelFunction, Description("Gets stock price for a given date")] - public async Task GetStockPriceForDate(string symbol, DateTime date) - { - string tabularData = (await _stockService.GetStockAggregate(symbol, date)).FormatStockData(); - return tabularData; - } - -} \ No newline at end of file diff --git a/workshop/dotnet/App/backend/Plugins/TimeInformationPlugin.cs b/workshop/dotnet/App/backend/Plugins/TimeInformationPlugin.cs deleted file mode 100644 index 32beb09..0000000 --- a/workshop/dotnet/App/backend/Plugins/TimeInformationPlugin.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel; -using Microsoft.SemanticKernel; - -namespace Plugins; - -public class TimeInformationPlugin -{ - [KernelFunction]  - [Description("Retrieves the current time in UTC.")] - public string GetCurrentUtcTime() => DateTime.UtcNow.ToString("R"); -} \ No newline at end of file From 8e70fa6866cde45adccf48b05370c388b059cae7 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 11 Nov 2024 14:50:21 -0500 Subject: [PATCH 52/61] refactord backend project name --- workshop/dotnet/App/Dockerfile | 6 ++--- .../{MinimalApi.csproj => backend.csproj} | 0 workshop/dotnet/App/backend/backend.sln | 25 ------------------- 3 files changed, 3 insertions(+), 28 deletions(-) rename workshop/dotnet/App/backend/{MinimalApi.csproj => backend.csproj} (100%) delete mode 100644 workshop/dotnet/App/backend/backend.sln diff --git a/workshop/dotnet/App/Dockerfile b/workshop/dotnet/App/Dockerfile index 7bfda56..971339e 100644 --- a/workshop/dotnet/App/Dockerfile +++ b/workshop/dotnet/App/Dockerfile @@ -10,13 +10,13 @@ COPY ["../Directory.Packages.props", "."] COPY ["App/Directory.Build.props", "App/"] COPY ["App/backend/", "App/backend/"] COPY ["../../Core.Utilities/", "Core.Utilities/"] -RUN dotnet restore "App/backend/MinimalApi.csproj" +RUN dotnet restore "App/backend/backend.csproj" WORKDIR "/src/App/backend" FROM build AS publish -RUN dotnet publish "MinimalApi.csproj" -o /app +RUN dotnet publish "backend.csproj" -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . -ENTRYPOINT ["dotnet", "MinimalApi.dll"] \ No newline at end of file +ENTRYPOINT ["dotnet", "backend.dll"] \ No newline at end of file diff --git a/workshop/dotnet/App/backend/MinimalApi.csproj b/workshop/dotnet/App/backend/backend.csproj similarity index 100% rename from workshop/dotnet/App/backend/MinimalApi.csproj rename to workshop/dotnet/App/backend/backend.csproj diff --git a/workshop/dotnet/App/backend/backend.sln b/workshop/dotnet/App/backend/backend.sln deleted file mode 100644 index 6d3b094..0000000 --- a/workshop/dotnet/App/backend/backend.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.002.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MinimalApi", "MinimalApi.csproj", "{E399B9E6-E511-4F2B-B587-0DAE20A7B53D}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E399B9E6-E511-4F2B-B587-0DAE20A7B53D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E399B9E6-E511-4F2B-B587-0DAE20A7B53D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E399B9E6-E511-4F2B-B587-0DAE20A7B53D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E399B9E6-E511-4F2B-B587-0DAE20A7B53D}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {D4965937-77FF-4589-AD6E-49873F397625} - EndGlobalSection -EndGlobal From f5348da1670f116bf66b8775d0aab2758c6df8dc Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 11 Nov 2024 16:02:36 -0500 Subject: [PATCH 53/61] updates to documentation --- .../create-deployable-app/backend-api.md | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md index 58f7079..ae3c35c 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/backend-api.md @@ -7,13 +7,24 @@ you through the process followed to create the backend API from the Console appl ```bash mkdir -p workshop/dotnet/App/backend - cd workshop/dotnet/App/backend ``` 1. Next create a new SDK .NET project: ```bash - dotnet new webapi -n MinimialApi + cd workshop/dotnet/App/ + dotnet new webapi -n backend --no-openapi --force + cd backend + ``` + +1. Build project to confirm it is successful: + + ```txt + dotnet build + + Build succeeded. + 0 Warning(s) + 0 Error(s) ``` 1. Add the following nuget packages: @@ -23,7 +34,7 @@ you through the process followed to create the backend API from the Console appl dotnet add package Swashbuckle.AspNetCore ``` -1. Create a new `Program.cs` in the project directory. This file initializes and loads +1. Replace the contents of `Program.cs` in the project directory with the following code. This file initializes and loads the required services and configuration for the API, namely configuring CORS protection, enabling controllers for the API and exposing Swagger document: @@ -88,7 +99,7 @@ you through the process followed to create the backend API from the Console appl cd Extensions ``` -1. In the `Extensions` directory create a `ServiceExtensions.cs` class with the following code +1. In the `Extensions` directory create a `ServiceExtensions.cs` class with the following code to initialie the semantic kernel: ```csharp @@ -120,7 +131,7 @@ you through the process followed to create the backend API from the Console appl HttpClient httpClient = new(); StockDataPlugin stockDataPlugin = new(new StocksService(httpClient)); kernel.Plugins.AddFromObject(stockDataPlugin); - + return kernel; }); } @@ -142,8 +153,6 @@ you through the process followed to create the backend API from the Console appl ```csharp using Core.Utilities.Models; using Core.Utilities.Extensions; - // Add import for Plugins - using Plugins; // Add import required for StockService using Microsoft.SemanticKernel; using Microsoft.SemanticKernel.Connectors.OpenAI; @@ -206,6 +215,7 @@ you through the process followed to create the backend API from the Console appl return chatResponse; } + } ``` @@ -214,6 +224,8 @@ you through the process followed to create the backend API from the Console appl 1. To run API locally first copy valid `appsettings.json` from completed `Lessons/Lesson3` into `backend` directory: ```bash + #cd into backend directory + cd ../ cp ../../Lessons/Lesson3/appsettings.json . ``` @@ -226,7 +238,7 @@ you through the process followed to create the backend API from the Console appl Now listening on: http://localhost:5000 ``` -1. Application will start on default port (5000). Navigate to and it should redirect you to the swagger UI page. +1. Application will start on specified port (port may be different). Navigate to or corresponding [forwarded address](https://docs.github.com/en/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace) (if using Github CodeSpace) and it should redirect you to the swagger UI page. 1. You can either test the API using the "Try it out" feature from within Swagger UI, or via command line using `curl` command: From dfffeab4ddff1d78c8dbb8fb34630a68cd5c4264 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 11 Nov 2024 21:07:44 +0000 Subject: [PATCH 54/61] update after recreating project --- workshop/dotnet/App/backend/backend.csproj | 28 +++++++++++----------- workshop/dotnet/Directory.Packages.props | 1 + 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/workshop/dotnet/App/backend/backend.csproj b/workshop/dotnet/App/backend/backend.csproj index c44f99c..27cdbe1 100644 --- a/workshop/dotnet/App/backend/backend.csproj +++ b/workshop/dotnet/App/backend/backend.csproj @@ -1,14 +1,14 @@ - 0b9505af-93c5-4d5b-8ea5-a3b472deb0bc - - - - - Always - - - - - - - - + + + + net8.0 + enable + enable + + + + + + + + diff --git a/workshop/dotnet/Directory.Packages.props b/workshop/dotnet/Directory.Packages.props index b67ce80..ca00759 100644 --- a/workshop/dotnet/Directory.Packages.props +++ b/workshop/dotnet/Directory.Packages.props @@ -2,6 +2,7 @@ + From 5f23a55a84d23809e76e4d9106ee58850ebc8566 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Mon, 11 Nov 2024 17:39:57 -0500 Subject: [PATCH 55/61] Updates to using github codespaces for testing web app --- .../create-deployable-app/web-app.md | 28 ++++++++++++------- .../simple-ai-orchestration/pre-reqs.md | 6 ++-- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md index 6766f4a..e6bb9b2 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/web-app.md @@ -28,26 +28,34 @@ The UI was created using React JS and a Node JS proxy to the API. Here is a high ### Run Web UI 1. Create `.env` file in `frontend` directory and provide the following required values: - 1. `API_URL` - URL to the backend API 1. `PORT` - port where React app is running 1. `REACT_APP_PROXY_URL` - url to the Node JS proxy ```shell - PORT=3001 - REACT_APP_PROXY_URL=/api/chat + export PORT=3001 + export REACT_APP_PROXY_URL=/api/chat ``` -1. Start backend API using `dotnet run` +1. On a separate terminal export the following required variables for NodeJS proxy application + (note `API_URL` will be different if using Github Codespace, e.g. `https://awesome-journey-65pj9v9pw52rrrx-5020.app.github.dev/chat`): -1. On a separate terminal start React application using `npm start` + ```bash + export PORT=3001 + export API_URL=http://localhost:5000/chat + ``` + + 1. From `workshop/frontend` directory start the NodeJS proxy application using `node server.js` -1. On a separate terminal export the following required variables for NodeJS application: +1. On a separate terminal start backend API using: ```bash - PORT=3001 - API_URL=http://localhost:5000/chat + cd workshop/dotnet/App/backend/ + dotnet run ``` - 1. Start the NodeJS application using `node server.js` + 1. If testing from GitHub Codespace, the port forwarded for .NET application must have a port visibility of Public: + 1. To change this, click on the **PORTS** tab in Visual Studio Code and then right click running .NET application row and hover over **Port Visibility** and click **Public** + and click on **Public** + ![change-port-visibility](./../images/public-port.jpg) -1. Navigate to browser on and test the chat application. +1. Navigate to browser on or forwarded address (if using Github Codespace) and test the chat application. diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md index b615604..a134eda 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/pre-reqs.md @@ -8,11 +8,11 @@ Before attending the Intelligent App Development Workshop, please ensure you hav ## Development Environment Setup -You have the option of using [Github CodeSpaces](https://docs.github.com/en/codespaces/getting-started/quickstart) or your local development environment. +You have the option of using [Github Codespaces](https://docs.github.com/en/codespaces/getting-started/quickstart) or your local development environment. -### Using Github CodeSpaces (recommmended) +### Using Github Codespaces (recommmended) -If using Github CodeSpaces all prerequisites will be pre-installed, however you will need to create a fork as follows: +If using Github Codespaces all prerequisites will be pre-installed, however you will need to create a fork as follows: 1. Navigate to this link to create a new [fork](https://github.com/Azure/intelligent-app-workshop/fork) (must be logged into your github account). 1. Accept the default values and click on **"Create fork"** which will take you to the forked repository in the browser. From 81ff5eb38619e978dae13149236e7da4cd104744 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 12 Nov 2024 11:50:09 -0500 Subject: [PATCH 56/61] adding azure cli to devcontainers --- .devcontainer/devcontainer.json | 3 ++- .../create-deployable-app/azd-infra.md | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index dffe5df..9082da6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,8 @@ { "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { - "ghcr.io/azure/azure-dev/azd:latest": {} + "ghcr.io/azure/azure-dev/azd:latest": {}, + "ghcr.io/devcontainers/features/azure-cli:latest": {} }, "customizations": { "vscode": { diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md index 1ef9f52..3f36dd3 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md @@ -45,7 +45,7 @@ Within the `infra` directory you have the option to provide either `bicep` or `t to deploy the required infrastructure for our application to run. In this example we use `bicep` templates which are organized as follows: -* infra +* **infra** * `main.bicep` - contains the bicep parameters and modules to deploy * `main.paramters.json` - parameter values to be used during deployment * `abbreviations.json` - optional file to specify suffix abbreviations for each resource type @@ -53,11 +53,11 @@ use `bicep` templates which are organized as follows: * `api.bicep` - bicep template for backend application infrastructure * `web.bicep` - bicep templated for web application infrastructure * core - subdirectory with templates for core infrastructure components - * ai - subdirectory for AI related components - * host - subdirectory for container app, environment and registry components - * monitor - subdirectory for monitoring components (e.g. application insights) - * security - subdirectory for security components (e.g. keyvault) - * storage - subdirectory for storage components (e.g. storage account) + * **ai** - subdirectory for AI related components + * **host** - subdirectory for container app, environment and registry components + * **monitor** - subdirectory for monitoring components (e.g. application insights) + * **security** - subdirectory for security components (e.g. keyvault) + * **storage** - subdirectory for storage components (e.g. storage account) The `azd init` command can be used to generate a starter template, however the quickest way to generate an existing template is to find a template that uses similar components from @@ -68,7 +68,7 @@ to generate an existing template is to find a template that uses similar compone You can build, provision all resources and deploy by following these steps: 1. Switch to `workshop/donet` directory. -1. Ensure Docker desktip is running. +1. Ensure Docker desktop is running. 1. Run `azd auth login` to login to your Azure account. 1. Run `azd up` to provision Azure resources and deploy this sample to those resources. You will be prompted for the following parameters: From 20d6374f48c0fcb1e5d48ac707e0572fb03b5cc4 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 12 Nov 2024 12:49:50 -0500 Subject: [PATCH 57/61] adding specific azure-cli version --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9082da6..2ebfc3e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,7 +2,7 @@ "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { "ghcr.io/azure/azure-dev/azd:latest": {}, - "ghcr.io/devcontainers/features/azure-cli:latest": {} + "ghcr.io/devcontainers/features/azure-cli:1.2.5": {} }, "customizations": { "vscode": { From 3a14d3e7b2ce27211911ae685220004fb4ab0507 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 12 Nov 2024 13:03:56 -0500 Subject: [PATCH 58/61] using azurecli extension --- .devcontainer/devcontainer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 2ebfc3e..5c234b2 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,13 +1,13 @@ { "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { - "ghcr.io/azure/azure-dev/azd:latest": {}, - "ghcr.io/devcontainers/features/azure-cli:1.2.5": {} + "ghcr.io/azure/azure-dev/azd:latest": {} }, "customizations": { "vscode": { "extensions": [ "ms-dotnettools.csdevkit", + "ms-vscode.azurecli", "EditorConfig.EditorConfig", "GitHub.copilot" ] From c3a38cbda575dcdc47cae8893220708076d9d20c Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 12 Nov 2024 14:24:21 -0500 Subject: [PATCH 59/61] adding back azure cli --- .devcontainer/devcontainer.json | 4 ++-- .../create-deployable-app/azd-infra.md | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5c234b2..9082da6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,13 +1,13 @@ { "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { - "ghcr.io/azure/azure-dev/azd:latest": {} + "ghcr.io/azure/azure-dev/azd:latest": {}, + "ghcr.io/devcontainers/features/azure-cli:latest": {} }, "customizations": { "vscode": { "extensions": [ "ms-dotnettools.csdevkit", - "ms-vscode.azurecli", "EditorConfig.EditorConfig", "GitHub.copilot" ] diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md index 3f36dd3..e332e0c 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md @@ -80,10 +80,10 @@ You can build, provision all resources and deploy by following these steps: * 'openAiChatGptDeployment': e.g. gpt-4o * 'openAiEndpoint' * 'stockServiceApiKey' -1. After the application has been successfully deployed you will see the API - and Web Service URLs printed in the console. +1. After the application has been successfully deployed you will see the API and Web Service URLs printed in the console. Click the Web Service URL to interact with the application in your browser. - > NOTE: It may take a few minutes for the application to be fully deployed. + + **NOTE:** It may take a few minutes for the application to be fully deployed. ## Deployment removal From b5bd69c2edb1519608d84ea759acbe71ef232e36 Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 12 Nov 2024 17:08:42 -0500 Subject: [PATCH 60/61] added default proxy_url value --- workshop/frontend/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workshop/frontend/src/App.tsx b/workshop/frontend/src/App.tsx index ef7cf42..4b1bb91 100644 --- a/workshop/frontend/src/App.tsx +++ b/workshop/frontend/src/App.tsx @@ -56,7 +56,7 @@ function App() { const [inputMessage, setInputMessage] = useState(''); const [messageHistory, setMessageHistory] = useState([]); const [welcomeMessage, setWelcomeMessage] = useState({ message: 'You are a friendly financial advisor that only emits financial advice in a creative and funny tone', role: 'system' }); - const proxy_url = process.env.REACT_APP_PROXY_URL; + const proxy_url = process.env.REACT_APP_PROXY_URL || '/api/chat'; useEffect(() => { setMessageHistory([welcomeMessage]); }, []); From 2b382be7a5d2af8ecda7029278f36082ed1fca7c Mon Sep 17 00:00:00 2001 From: Jorge Balderas Date: Tue, 12 Nov 2024 17:09:13 -0500 Subject: [PATCH 61/61] formatting changes --- .../create-deployable-app/azd-infra.md | 10 +++++----- .../images/public-port.jpg | Bin 0 -> 60256 bytes 2 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/public-port.jpg diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md index e332e0c..b173324 100644 --- a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md +++ b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/create-deployable-app/azd-infra.md @@ -68,7 +68,7 @@ to generate an existing template is to find a template that uses similar compone You can build, provision all resources and deploy by following these steps: 1. Switch to `workshop/donet` directory. -1. Ensure Docker desktop is running. +1. Ensure Docker desktop is running (if not using Github Codespace). 1. Run `azd auth login` to login to your Azure account. 1. Run `azd up` to provision Azure resources and deploy this sample to those resources. You will be prompted for the following parameters: @@ -76,10 +76,10 @@ You can build, provision all resources and deploy by following these steps: * Select an Azure subscription to use from list * Select an Azure location to use: e.g. (US) East US 2 (eastus2) * Enter a value for the infrastructure parameters: - * 'openAIApiKey' - * 'openAiChatGptDeployment': e.g. gpt-4o - * 'openAiEndpoint' - * 'stockServiceApiKey' + * **openAIApiKey** + * **openAiChatGptDeployment**: e.g. gpt-4o + * **openAiEndpoint** + * **stockServiceApiKey** 1. After the application has been successfully deployed you will see the API and Web Service URLs printed in the console. Click the Web Service URL to interact with the application in your browser. diff --git a/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/public-port.jpg b/docs/wksp/05-semantic-kernel-workshop/simple-ai-orchestration/images/public-port.jpg new file mode 100644 index 0000000000000000000000000000000000000000..038b4be82e2477bd7c462f4efe295fd4d14202b1 GIT binary patch literal 60256 zcmeFYcT`hhwfsn-O+(}{{!$T z38)^6JiGT$$C8lUm0C0;F^`Djd2JVs?i7ks?1S6q`^2<#^bCw#+&sK|{NfUlQqnTA z$}dz@)n2N<(tE3KU}$7)Vr6Y(`_azc!QI2t%iG7-FElJXBJxXAbW-xSl+?8E=^6P2 zg+;|BrDf%H^$m?p(B_ub?w;Ph{(-@v;pv&#Uvu*di*N*TV{>bJ=lAX&`sDP_+4%+L z@8v&m;Q;XdJFNeS?0>;Ud4~%ZA0H2&@E^EvaJ}yYj}o8YvB*8DXF7zIt`FHoLx`xK zC+5|5-RBU~MbUh4n_u-o0L#9>fy<3b_!tKzdbMH}4i#u~f=*jB36rMTmil2qgsMTSvqF0+ zd2IrWVe6!TfgU~({zrkvxe=62wY+R(-!!e6zqF#kmDrr4N`$n0>>V?_a0}oJqjkZv zVlOGW1yn(90eJInZz0#dOP43|8PR7e6g{1cvkmn~nT8cHO=y~SdR%Ir#QvhPxVI$w zZ?vVA;+*jpV&j^{9eR=p>~mCqX119Ei_&SK_Xw!e~#&JZZvOKefL}jpMel*G~J|<8pHK ziGtaH(}Kd|7C?dV?>&U5aY9i~u9$16+AQO@={M8gex;Yryq}|J@TYvsyQU>2E%)p? zxJxa4$_&yQDA~Vi>R&~tHS=MTE9pf8Y^EefwHc4laYQ`UD)AYESy@&Rj&5;t`Dbi* zG_V*&n_yM$U^ufUqA*sRX(e$5=b)A%04yMRW&pp z)1wmjL4lTqTf^1YnX9O9MqIRRQBz)5`1=7OrQmM_vJkxP-XhOX@H>C4i~B;k@fVZH zY;j$Sl-N6=2kHRb&UaA}I7`)P@}Yee!0oM@My??)_tD=F6I5|B;?P+QY;g5#veMCd zHe+>nYj!83N^p*M2;}Mid0Kr$QgYbs>C$HcYa@)FMp_>uR|TB5p>=Yz!}FtS=QC$u z#JKy#S7vhQetz@JTY!nw-^V4v11K-~ljy^CJ@-OrXoLEpyjbxr)O*!FX?qpaWOK3! zmyF`E+4LM#T&U*$I@7G9;*7!5Y@Cw^=Pj&u3keDdZNwYJh(_uz$Clv-;WOHsEil!! zgsAvILOl}5eHN>PxhKIMq2N-k22_{AP(yPZBE1VdEnhxtxnt#4HA$K5-s7hhCR{RG z4SA0mSsd`Sa)glVRX7 zUqmx&KM=q@p>N^L0#I+$*6JSL0?6g6KeDc&22yp*w8I;&NWc_E^PVI$zf@vtOjRs7 z;}hkRqR9Ue(*%}tIMIAdwb@}HG`IgF$kUS%)WUOj!r~byJ;iYqxeKo12xI@6X-h@- zp)bn&{k&c%1nM&fMJ9~j(Jh{^auUD!Iek|YxeyE2^09^z=&k z(E~*6v*)ovf0Da~cxYxpibSaGY-9z!aDb9Mh;ZqQKqFA{#yG#NA%go+dyZo!7x@nw zQlg2`(AYNc&Yi=;4sDy<0xaeRB6Q5Z=aN@?DA4syJ2*J)M9|(0rf59!FpP@p7aO!r zeS$Oicd7N)wKn2B(%rslVeu*0GqGHg{CmKFC2u_M(!nN`@B6WaGXWa+h%&#xq3c_~ z{GWl*OpP%}%e#|TK)AdxDr4duTC$O7O88iOD`I*W&o*i39F&eQI9-m#Mn!P4D%u=I zpTa1A>-@gF_vO&(JuIbKci&Y;kh$&YqbyPnWahi-iOU<<8(nRy%=~CRYHEX$aL2sa zcI^WAyOMNgS6@y(Lu>*tV$c5M_JLbJ1egRXPZLqYPYE6s1Nh%O=kh*WpZ zG@P!YG2rU7a&?(YVla8KWFjN!yD_3$zPDqicb?=2!rZAPS6ix1OiwFlqB=M3@NbaW zM1&orD(FFg7)q&M;o)nvABOJb6nB05?4OD%!YhLl7LGTG;xQFV_8Im^?F*9fIM&yg z=S37lr%oM#>$#DgOqiHTAGcG4SEyp%$94O5mC{9xG6x7*LZFYB3x zj2LNa1F<#we7}aiVeF3*X?@fnd16LiR8Ne`AEdHG! zPq)(5v0fk15MjtL8l(PRME^;hw+q+;mVQBRvQP7zCJ8Ef=a&5fVLkWK5Y(+hQ;j&K zVX_$x=5KR9Uh#f?ZaFULbTz$GJt=2M*5J6?S>`R@9sQ?6Qi1$@qUStqm39U!+z8tD zh&n83qYC`~l4jH8wC)DArAqBm?ekZY6%XZ=QnB_<&EJ~)1gm28o^s0rmqBr=<36cK zuAt1GNEh?W*4*0MZcx5%t1}eKb|OC=eJ+m538AeAT^AJY$~tbS=A0wv554tve?<0* zMp-7QGt-Q}aO!#FA@}KI?E#ZjmDzQyaaGeTU?omz{6r*S{S@Y#aPhayPcGQB@sdo@ zdhM((xGYzGxWD_ zIL)3(ZugZ&2e79=(>i+dA!~(uOFF)-@#p2QKKdm1ZM7lc=GzdEIUedJk0Lrvt;Sz{ za&e@HV~nGQ%+87P%ZW0rzI!tE+0&omRRw{tG2!`3t2>3?z#u2`LDA=dazBHZXB<89 z0zq~cHO3Z-1(F4V6N@*Kp9%FnKOM6geb2i;WFu2)C(o6KN$7z`E^IVJnq-!8*evu}WV~BO+9nv_4BHTyqAo{Hhlj3jD;)LC;;QifH z1L%_xcZGGg>F+e5j@i%H+CNA$Z6#;AD89x5@_Pjr?10lB<|Qq1WUTV(U$dBc`PJQOh zGalX`4p5y+AoI!MD%a+ieEz9cQ!e>iK3;RNEo|P?`=0>x{RHmfI-Q?9=5GO%o?|a7 z#<;$IS4A^@@mR7e_Oy$A&H5r%%!WSUd#?Ep#xmj9v-DpEpcz@gEH50}I2M(5r#eob zN3r)*6fs?c+_k(V-mtT4hwj0}`2e#rpLn82ZIZQ1KSy^7Qohk9M!d)Q@HPK)FE7KR zEaLwBXl3HIf_Z#a?OdB-t7aaY+QSh zk=pZlvn|rnHW^AzF-+5PHfYFLh`dQ!eDjlKROGY!gw9L(5kto8v6Z-@thys;!`f!? zq@ZqD}PkXoL}SXk!TBZ&m&xYH&H(c#d|I z?A5B#JHfF=*n(N%=T&(3DwC%dz3r2HqQx)ksk$$J{^r+kj)EV4JJkS8=ZVp$7iiKB zsxm4pvFHuKtEHf$0Qs|ZLp~L`nmSoCF{IQNj~K(xtJg;2by{`HrhVcy!y6Qwy0U3e zz74%k~LDo06Mh=CfSHbqxIh|st-to0hyv&rR4F)eK;QDy?lRk-9!+eN z0nduVd>F zZ0aXy=S2Zrb|V|EJOs5vEabrS{Oko|M%mRicO*$+&K^)YTkk!s!4o*Qs5X#_KY2n| zY-ZBHlUkQvze-8BWxB+^%KD_pt}v`=(kUHM_#?ZtUej98b!fsd&V)H&{2m|lM&MVYq@b(M==Sf` zBbB%8AE@aFo_2LZw4^JedG~|&VLPS9!4}?Ic`Zm`Mvx-#1H9@Oo?ZeDC8&^;uR|;I~QVi31;YBc~utTy0fQLZ(G~K)%#rjwTF~mipXQM}oQYsO{v3 zY-~l35}djdI(k$Mt$;NAZxf9bSYi6^yq{m#a`0+k?`0_H7`%UHa%BSIPARHvv%r8 zUI{+|MDnWXVWhF(Xt-1zQjMfJDWoP`MHnlz_9gd^l27g}fKW;aYsQ9Z3t|tRyha9N znU`+?Xip)1^WDJXiIK7E<2G^Eo`&SCN?2=0aAvE8D`zmHydHRcB!L93UbqW4`&GWM zJXG@AfEJqe1=z-=zbknyx8X|9yjl9+F#k5oSU^FKR>ASzu@x-{(q@|e#KH6#ulE(s1?h@3slv* z&^WpU2+QS)Swz;*ln>`uNtekrB-P)IEf&V+(;v)&DLysKmM{7i9?iTn66;ctJA0M< z?##g_vQKtC2BLdv_Urhpq9OK08e{m#1p5!paMI1MqNA=eoR@QE0pTXUL}<87>e~yC zu8j{>vt>oz?gju=b}`|g1X_oRa<$SJ$e-rJ@C;~b<_kr`r1nGfj84RIjQI zTBvgVh%a}ylFO;Xf65sI6FZX6)ypx721A>TIfB*DbM<+qT?CaV@duTqiDo9sE_v4d zXT4v3mhqF%{FHfwt1e@bS|C&vD7d_ftHDQ*3SX7xV73a2(>E-6&tF9iB`EH?%Ou6T zpQEcGh!GhMIR&N1w7ud5inl!8Y zT1-gw?kNM+k<9moqY-ZqO?OMCbB3|CDp}iyGeY_e8m+57+0?vGCw;h81Mn$(G>P;uks}4w9m0nd(`-bQ|mnK{=X&t z`)3>-a_1n7;4OfR44wNFb$>1x!NyqHtOQrGxzbMAdd3OcyC^>R>vPq^Fd^ON8|M!> zP(cg#1QRLQLx?c-eXR-SS|RU+Zf3kU)g{NylT~v$9Y)>83qJW>8vJ?7oU1sOw)WAv zzuz6Ka&qKhL3azVdW^8Z#i;e&0!Xoz!hIb~y(U?g@*=yJWPRB?@B;EzTrD5H=_B4{ zk%IAY$wB?w7(q1gQm>njp9KykLoi5AIp|XF_XX}QIHc=)ubxYSymP<8{(;5kHPjo- zvAnNj6cY2tA|ePE%%M{=^AV*LJ=s%iKHimjoky_TiIoF()bzqIYsVG_zfQKKB*2q8kvdC)j?YZi%s5HX|H&C>j2V(r_a;bWH z<~X|XVq3#Mn=1Oe`u^`s!@m`vxn1~vxwF-V&2{VzPz@DhfeH6V_+JZaPdSBm^rr<| zdXoPbY7iSwq<7u?A@flH0AEc((wuwuB)}tPde`dMdMEHO$H-eilsJTG%_4I}cKh@Y z9+oyqM9rimVRWF*z`*2B(3}3ag$5mGvb~e!Z|~eabmfqI`#Fh7z;yf&8xlD*ldOU+Q_B581ceUZB z=WkI`2Y)5bL&4}ktUj6;u3>Wv2-BArbafoBCwSkzG3ql!yncwEoaG5&`E^4Spo+Rv zqJ2imCwZOXJ(Kzd6VL4JICtv#_~zxBf=8m1iC=%5(VQpr31fIwnkueLeVopPAHbp& ziR>~`it`A*`RTrx8Wkkf7EOO_{C$A4PMXx^6&lOw^)P55mlzAIz&LB=BCD&=uSg(l zxzrlf4jKBJ>WH>S&89wcZ>E)W%h}DEKmOJGv^+cG<>o)UB5oM{*KSMDx#_Yn#ok}K zQ{U@HZe`_4=bvN^eSZ)LHgRaW?%f-BuU}(D8*vMW_Slz(i~GlP&~EeoDhw8SV*C|g ze4}#aL@2)4NgSZu)Y{gR_A`hldV6}CMDB})S~CUd>EQ{xiyr@plUcMcxCgLlxCq0$ z1vnnxA3^sZ(U_tQK@A-gE2K=V^fw)y>&kNBhY1}i+OK_7Wp+9#Axn)dIHlQg5^$(_=| zih`-GKbDtQKvdTe+cNU|DXl*7hxM!O+3FCO4U{WNg=eD<%Y#dWg04np`-Fsi2g8MxxN?2J#U5`_xFOhYwwb^8s< zw@kMFYwyEv#2lOPOpV6v*YWb8;(!MU{m@H;4ojpx_H_Pse_#c*e;bZ3 z`S#!`?u;h|dzSpD&67qGCU3h zxX_r`m5j!}h9#)uzvIV%Q4vBa1Z*Xrshx}G%} z^(u+l4l@~Xjbs;a&tF?h*0Ci#Y+G$CI%}5Euq)w<>{(NlYq1YqZ);pokcExV-72=IOU*@Z>7(vo}Eg$cAjP^l00z`4QxESHk$m>iRTIj`3iApb{ur=#OVW0=jas(|bT9Tn=Iy!p|9|B75BEKZ!epf36?2rzf+xEy{=_$`3= z>M6>n4padCxR=Ue*G!mDGPe5Ha*AJEIJdEZdN>-8ViI zy)%0mradgz-~1GMH0@@rhK%2E{~p-{lioW(XIz~koe!%}t8&3HhKfY!t(DHIavx!} zX%FCtKT{hhqAlbI`^)fT;M-nZ-s(#R=aeXBo?gh3I|6%tH%tj7V$8|*T5rbM=RaUM zjn2lp_Rqe;2!DvYK*S>}8>(VXE;S{fwQIH-z0Ap8K4iZ$W6(UJZXI})A04nvbK?y%&^^n?e=chi!r+qmrvz``Y zW z*Md^-o}iL&n1pZ$j7l6#Z02waKwLySdf5FiEt6o%rrnnF2=6?Icpmbcbu5eVY+~{B zTobj{w-)9H>!qLx&}0QnA4m)~JSlmWtV5;2-ftxnuMbT9CcN^qUmdSxa7DVEwn-bGkrG+PXEHXx2)=Fs#2mxyDLd9Y0fx3Atl zu+K1iDN1o`qN}$J?~y<8b{uyL z!ocrU@m877!ESJiW&$mQGR2Rr?YXnk_@{0G85Sv95Dk#~Dcm_UM-e*dap-1&he;Bo z)3r+)(G6r@H#HM4Bns1Ygl`QoJx^|vx2-e_AjTxyAb|?F8~>Jw?Jwl`n+g3R5i5xc zIxSR@5{=))B?!E(3R+U2_BDTNKD!V71z60GI(5e zKGZWy_B($w_!HbT5YjNg@_Wc04eP1*@dJWi43)ma0DI}^TqIaplj6Ju^Vr4)&DtFtZT?7+w6il~Uwi5W z;#!=@LW_Gj@+=B z(QqCt`K>@sZrTn#OX0lvrO)m-3Y`A~A*>1-Rl==;*{wzGucynu&Y|yYsm(!l+Y8)G zL&f^rdg)IeI=z)yNsj9v2SG8QD>k0!PP*NkCupf?=XL>jZZr%*UpHM9pdeZ1F2}!Z zY#?n-CD~mU7agk}dm?78g0esg+yd?^3Scz)pZJFTZv95*#;Hce`D$bA+0BWQ1%@UN ziZ(p2!)Ur*y~5Ht6M`Ib$pXa6S3#G>`2y8CL5sewob|S}u`idzzUpgJeU&vB7IDhW zRR3#Syot?nX6rLv-YMfN)dzWG8tfMsn5{_x|8&d^3^L{({6#j*H}(|V+2Q3{XhW5j z|NQ`Mwg?DExGo>De3I(h@99rRR0rI0C?xi7*smj;KA;AACULlOm1U$TKf?xOy(e5yqjFqhWR|* zy}6q#76Kh<_L+Rbx$ZH9Z1~QyB^EICM7KW7W`tz0;hGKl<_KGs;R|QNc zHK?vNdzhNtt~CVQ z?xdj@+jXuRH0Mf@%CY0*p4jG%t*>H?tZ(yLJ#?7MIZQL{xY%txvd-!#N(0MDdHQ!| z_*O$qjsD_wvDI6|%c~&G*q2ODkQi|`3bPdfI>rMJHA4F>|9pmRZn4FR1!hO9KKf8_YIT=8_GO;ZG;a3R^S|Ha&mchk9pFvp z{(o{oNA9MEBL%0iOB&<5Jf1~!E5R~HO15#f!V#@O6*Q1&TlC6m3wPYz%EuYYPB*-# zE0q|%0$w;Fc>WsTjK_&0^IeO+Ve)DF=`|ibdGwxU2Fr)P1I|k#Y#2S`$ zPXQa-YjBP8^vRniH)95?EV+GYijUD?Si}ioHVA^{jUld8s%+oy;H1nK@EvP)i`nHjwLdQYol)Jw ztjIoBJSiT+oTTXswsz(o&f`z)>%fzHLM$cAJFWrXBkjxY`~tg9`4cFLJT`1W_o98M z=DVBB`P1~l^dzV>C#%m(2f22OJ7TfHkfqP`B7-z}kf1?E;m_}z=i9Z>)J8s3h=yNN zjUy~B=9MiNDt^rG4Aou~acoz=TU5ZIaR-iP$GE%D zj4VITj<8ep(jI&b-mfxC%sQ>DvPvz~`N2xxOJET9E z1MQ2vEh(qW!;uzYjPWVRm`piK#$An|CVN*`U&3_y4_*w0E_}_n&)(-X59sLZ-OaJ1 zKbcAomszyB^{1Rt*X-J$qr=`dwcANm;cVRZIls#2nP=6FTE9y!zFu0}%nbhgk*XiD znXG5Bgs!{R`8j2#T80|w&5+ma7|&|U=jHs&^t~uu>g$6ByT0z)NB1}gIdW7CJ5b#9 zmRxXkn))Gol6UX8I{rKq=dGlHhPgLHyqC-gY?c@kVCAOUF5z*5-ab9QrGln5(2fTmvb0Nby8&jtlqEqkIkC>- zuzETEYaPmcB$diAeNG6qd3~(t;!eL5npHCpl;8B{INbYm*Y6epFL>Z!a33Tt(-scS z;nT2H<^zYj+@qIf*hubs@Du4EMWcE4`%(zxw`5J#r}Mcj<7(bNa9&y#Sj$G?^kYiG z-QC%x^;gkhQKe)pjpx_b)z6sR+vE)G^*&PsMEA|N^Oa%jp3kFSaD1;TY`PG6r)nH@ zavb;l9s`4}o2c}5elb-C@98l4YNo?nNA}bk$Sb$4*pypavvMA3{3fi=d@&kw1S`>i@cGVCV59x_IbhInNi5aJQ$-OFxwmr=VhKb8}@RqnOlCY=E+ zW+THshg%yWhsE%l`cJs7-YPoQ#A_6qUewUbbZ5Qaq45o%0Fia{okJw%!Y%P7ONh$? z#iw6~e=84VEKf0T6tht!9JN;?_~PFMF{7#SUs-f)i$mH~73LOqnhI(OMej+#BKI?X=#RLz>AH|^o4v5syZ4=SjA_)GXkO6{klljN)_D`$ zO=DB~JIUOxwK5}o^x@KyCjNQ;it*N<1>Z>ahFjt(KeKy$^VGU4Wk9v;QpUVtBc$;d zsyS#>u4$$q49KcsbZleX~S_e@r4eLL^zoMStp-aKp&WXL*8o9&SG;ItJGgnnpDk2UEk3&{Q6~Gd{PDbGsn_!U`GNX zySUgg^W{9*YEGK2$?Cgh6JKt!#B|c=yd^(sHI5X{Y9fYmDc1Wn5AD)uFIUCEdVWP) zD+OwtPO*3esD48W zc9eG2&Ah z#R`{J>`ffeORMH9dtRw;x;Q@_kj@N$a_Yy~O(N9AnVyE-)y1Oxs!OVkg1hBdvt9G| z_zKM>Ys=vFQzQf9gB(f7x9WxOaYz_GDDyFkCJ~*q0vCgrZblSk(792EVBrQC@i9pS zusCSDqqC_tYm}ZL530Um;+rDHk_gPnV*ca^Vyi2OJyW8`w9a&0DmyUJra{(zH$Al2 zlT5v!8*@7Tj!sWf0F)8&cX{dZKXTdKoj;}O7xc% z*)?4>xlVY3@5j7tI2GQ6>dwUQVplFg-agE9eI&h};jsUfd_wg-W(2tt-^sqX1owgT z=R8I$RJHxB>8jkTUn$g%b<$560JCPDNw&n+;?&IsOib?$J7jCZXfXwvulv=;V( z(!5q~O*h_IRyYwawI~P)qwna3_n2fP6A(CJMhs^HjsQUzr{gn!ptK1vlFvDvJDtW{ zRhR0H{uiZ=HmEuBHKW7!Y&JTqdglyssj%t<(8xofGm;f^ZNi^(Krqgumn@#_JEMP}mp)g2ukagh zXAcPXun5VaK_~P;9`1KCq7VCSS`Zzqf*;?^ID3eJ94NDZJuE}n=|#_fzVD?;AU=?( zPUwc!T6_u6Mpbm117-U<;!BW$Zu1(oQ?{WgO<7WD-kfcnZ@gZ1;U>Msr5Ggu1nj8z zLt}#QeAs$qse`zon9xdxRqD`pEvW4xPr?W*jS>IB$#z?5);|J?FUvP&66vkJjX(X} z$hHXVnJ4*Zc}K^xI;3^-!%*$3eD#x_7UTm~9M5w_l{u;o@;H+ue5uKnc~_t=KPb}g z^6`7rIx2wwvgjcqG|~$q=;6lJ@1q!TjlX9B0DGGLHfy2s>WG*s4viX&yJSgmVCt&I zUng;%9F25N6??U;H|?exG`N!Qz&lwpuaNT3qkrG9`{>^B{u2h%=5QpOUWnN==KFAc zPxFD3+M|&9JO~I)cTkYO>t|j7vfQX>gV7mbo+~jZrhDcQ32ZisR3`POX}BG3^HV*w zdn*F4{`jbdO?t}wg76>|O{fZX)|$gI&NI$RqU4_}Vjvn(m5g@;QejJ2L;O^mY&b)V zj9~L8*8%(B`h;FhD;-!Z6m>q5$zs;P6xQ0=1ikN9+a5=|%lXD7@#R(*KaHE#6MLK? zBcJ2mR>SaPtb`3x&|sn`BkZ&380+f!+lCfbC>iJDCK)EWB#IT*&ovdl6NrL(SH}>S%vNKnqse}PsQHO8}`ye)MOOWysu%2k{uXJ#+u^&vJj)YEb z$iDEh(zVfizF6It{?Ol)y}aETOc`*$28Ky+U1y7wE$-ORrZKTFGd6oxYS(mW(@I2g zpUb#&iFZMg%H$b6UXuSC!uTokdYda?faYxDZ;wpDdvoXZe_ABII~{svGC11Q$3J6E z7KD$!e;+$cPdL28i8H3#ah=)8ZWQcDH~Arhg-2EUf!VUjo&oehoWf}xf-~Mg{q3P6 z(FiLA^BcnSDf6!4n;|9YGti>IAy&aoIA!CDiFVb3vV2`fbF)!F+zuIMjt21iBrPB| zME}Eenj-f|3C7{T$4%mnElNzeYt)@Rq&+$nY>YNd4_GOECe-&dHemd%`%_jul|agh zpuvny3sNkJf03zV?S?Sr-u&EWGC6~~_L+=TqF-TUt|a15g~wS&iwx}v?e8^1Ft);9 zZUIY5i)#z1%{OB=3pdj@3w1Z6SFDGf-b?Mr_28A0ozeXP6TrzZa8Ah%5-NhFm=EA7 zNOqGTQ||Hdt1e*aMZc~!du2@}piK|AV!Ag?V$FQ?Ud2}d?{10u>Ax(%$~%BsGdF(P zw}3zjRKX3Uoc7;crRzUR-K`2?qk)yLI%(10RvFYkJP;hEVp$>qKkj(eRe2r!F0+?0 z#_V+-Ic~YIiVnO9hIn|#bLJ%90@jqVy#MZ^B?sKXpohuT0|>2_LX2}irGrUR3sRdb zFo%J0#t`*GwX>mlDa@sc(=;uK{{Dk?)Gs;=0r@};oc*my0x zyuv`T|5HqJOXum+XTdQr`T(0Udqc0Un2{dYh)7F&TPkIz=|1W=zTxRXZ)(Z<+}x)$ z1JGt4{}nF(`w8&g&EM7a|D^u}%!@;%ox)qd#a){%v3a-U;RiPlL*qMkAiD(nC->%( z4Waf=*JJ(v5BRtF^56B~$w|(hBPG*a!^38>r}VGqW^t*eTnxN-c2@E6!m`7vz}@@N zNf}jV9kWCTReZO!$0#jw@_S;c^&2b{Iu;Dd%o(41DwhX>@#8?On~BCtBc7)|7P(Aa zJPB=Mce!mhkNw?(oaYwM8Hv&P=Lcn;+4rHy6DYTa-iF%aq) z=Np14Ft9$hkGZ;xO+OM%Ug5uFhib3X55}^IN)0yaK4ef5>2q(rsYk5QE-&?;m<^SQ zzs`k2K+Yd{vNz2lJPd8%747L#P9IeLthfJzVVKPK%~kQOlB8-oX9fqZp2JjZ@~CV6 z?5ZlBw(g&39L+d)9_!hkU6D9HaA>V+91T*9vKGH)7u^V`3Z)t(46s#KXSvVXm}g&R z2j>Y3V%zgeUb`;tJE|63Z-^t-8gY4P==QT;3MUC~^Wo0{dB{Ia&wppec`;RVJj0Dw zkkO*xG=6n($xu?Bmb%c#k}caROq0ViH2buIMvtKze1f;Osimpo#bc8DIlBE~$%Do| zgUkt94ik~>&WJS|#J@rgXx-8@b2wS?bKJN+Jn;?R@{{r& z26^3fVoC{T-m}jnJmR z1a0(wwHR^t_YIWjUY0Q}6WsnR-M(&-q-9hl&(h&Pr<$^%K=>?TUcE^+Zth$6!Sbqx zGqZcBJp1Fi#~eb`0AJTOo?;-!zjSXcRw8s-_wB)F{;HR|Fn$o(C6&1~ z&$Tlv8?1Yt(eB#&S~FEUJ>}*ZTGKBDs=n5lqvUU8;GK({{%7S)it@D$FjVh0FgwFG zO(7Pc?>2tpMT}jB92?3EC=XOo{5y~O@4Nz#C%Vr}!UklzIb)F|yzr)8>v9d<8k{}} zf>F}-`h83;8Bypg^92)pYZ9?bt+oNyx(J0leDI17P$u(pLisf&0U0wUrZc@>pBe}> z3=di>6(|3YDz~fiA{6+!kUuv5M;qR*k;Om9vfzLA7W%V&$nx%2+Qz1)opBvyp!Wb(%6` zi;HHkAAc+9?qk z+)XhJ_D?T~o|p0{brbwY9{jF#^j-hzk;y)!qRr3w^yC0^79crfUxI-Ci620+b`<%z z_pUxpoz}RR7j}GKFVbMwger??A7>V^m41VJXNFl>#NeHN1zBGRTu!b?-4VN>Oduyg zOVRm3>>}6?qY$LOG4u6bYl7$dhwH);b>1?`!_Gt4{KGes3_);_d|xb~B!L zlk!Rh7LA3i+2cjQC7FCxAH%6u7;0O3qVBthr09lbF{8)t%2!eCQq-*<&&_Tiw7Hh< zWW9c-yS1vZ!>WH-pUDV6X6pRV(H&RuNi_Ihhs^4i^HuaGycGf0{%3v-f2Qp7CU^C| zwPfWYZY<(&tXmG`HF;E{Gs9A?T&qJ09 zRu?xv=wr!l_`xpb3u2DYt@;We`y`h1OuEnVKZs(QA6#|pE6l{_%eU>ZS-I;xs-c>4 z`z1s0TfpTjzP(PK=6JJL18ToKjj;cXz4wf2s$JVfqo9aL2kD@6rT0!mq)V4BpcEm5 zUPG56y(1tXy-Sl4dhdet9%@39p3n>saOZsA7-zrl-g~XJf1EweH^yGSm?L9m^5mY+ zyytbd>jHWSsa;6ySQ8Q9pHc|uOIx~(ITJJB>2#9T-_WjUJWeyNj$p5C4?`?Mza$A+ zQ~1A+42|pK?-F0=G(lH9a= zw;OLxvGOUj|0fqko$^6ZT)*c-fC9i#2LJdY9M1Lf1(}A*Vd5?2!X8tdQ>=RyDKzsK z7hN^3{N|KSt7*z6ZkgkEOqfj5?@_(iip&vB3cpg=aeL03{T|W<_G41O%VS zx;;So%W4#*-jAwkNV={<Q*dTiBBR5~Uwb+CuwLzyd20&V!{(06@(=jS{| zjR$UFkV(Q8C89(4!uNNB&I1(jI$Vn#oVPPT!T@oR?Hq)mpGiI_HQ-5z$uysExgkfk zyXf~`7hDt+TX9?=(s|?66`;$Kllf0#iqZ>mE?D1{L7zD^r}sG8xFP5pdj2(vH_{E> zNikk+Xl$!3??rjo7E2ew4q}fUP7vml?l)L(9L6szys7n*DmBchUA5~VnLXb-QQ?EsCWmh|t4_KeFhWYwNA|fd^w%%2|Nv`MRS}eJ#X?w;Oeij`_#GZ$Q z{q8j|{x~T+3g_YI6R*#ZXI15Bg=|4xniE5rfJZz;Z`=-Jwscwo~?e%L5ZGBL)SK z%zpjAJJK}BXt_Bk9~ne=X#wouk!yPkF4_QP((OZh7+C@t*O;Q~S;foIPiL;R(Y>JNh+JP?gzNdO@t3kb z!F?u<3tvGuYNGX!jf0&;6}+E*M|#A%KB)GH6@^p@U&r#U7!?>6$LS`We769w*nQMc z#3TJj=#a6;5^IG(Q*wEGU_2Ye%K1$;0u>5N-cm7wTW%09g{8Yq4s5&sNxwuI}ebklZ^(r2;PA* z)4gBn2As%x{gYcE;A@yYjWWMT!Y0A`_#UCnyMOEMWgLBCis;0W=NMstCBM?BxEGZS zE4h~kTSvU9hfmVH0#rXyPa^U9Z-n|g>#O4e_`yD(B|jt-z zeN@+ooDR>hW3HY@N7juEVYgIC2I6nDHdu31TRo6#`bpb1Cga2@Hmpo&<+G#oKY*%p zroXr(_bZMrJ_<;he46o;G#5hMKq=ZQz0?RaHR_ldaA9RQ9OLx^k@G!A3%f6lBVJ0W z5fgycK+xuvnrUOM_?qQG7g~X)l&({j4?3Q;+4uwC=?>xBS)Y>F`h6MVo@Ci*_@%Ve z`vSZ7^{vW$jz1sZ6s#x~+kE_v%c4>r_f66OTipL^i14?Bg3|Xd?G>6nD6d03cow+7 zli}Q7cHE?aQF7Ye!9C12UxjBYskK_(l6v zw~X`F$hH8wjv8~^T`_#0sBDvge7lnL$qmkBeh^ZKXH z>wh@;|GUl*kd}lQLqc9VI5?UsP-)X`)d7CKTb1snW+hy5i%AfQQ}9HSdd;||6=ExIGk9%gEWmFGMK+_r<8`I+H1EkuxScg6F4z9yZ3^hIxTuj$ zK-nD1Bd4`P5Q@#kFi4dqC1h^!b(jfPxti^P{T7rzmEif$vAtXEUJ4y?It|yS=x}V0 zun0QM3nixBDa$o|#zgnlaR2Vf((6XwO3|y8R{<)aE1}Jw(l`RpUr1!-vt>R0x!;x{ z7zm`VHz&dPAT^^74n!VE3&3>?VJ3sl`f9s}_UW=-mkpOy6ki>mSP>4=R296wsd9wI zN6U(|qZ;b4K_e*yuP?QwA%*g5Mzp$H5zI_f?+}qHPvWj8_nlwo4ow#&qVq3!lH%`= z&H+2)97iiCus$sa!+^Zn=xX8V=q$5EL6nTAc+O3(xgfkYoipq~CleK8PlIp)eznc4 zo7Jx!{rGO`FfwqyuvGwZ6AI#mvmawuzSRb(KEpm!& zO#EMG&Hn>Vo%4OfK7M}yVLo2*M{QtispxjPj}HNYsyJ4*NtNumnHk>02RkM$4;S|r zXbDc-=ZSBVvLJ?C_e@}3pqR3&e|<;i7}P><=fibpo$8}Gw**%EqH5*sPRGgXttqIt zEaL94#x5zc{XP_d$CIKp`?Bw#csr~2I*4c8TYY`Guwz**X7Qpa!eT&MJvBOT5XGbr zc~iP}`1{qif8jay18qAa8L7~*RoHsKOG0A?x);dV)Zo}kC9=1w6Et@cB39BKQ8TvD z$93hf|I@7ezn#oqYexU)Tx$M*Tw1g=Kk96ZZj8&>tF1BkM zr>9N~Sw1qCaSyQTb9;G-chMWf1gtOt+N7?57?Xx+X&&y#f<1jTUxt{ebhDWwYpy0t zzs7QGUv^u@sd*@NDu}9&DQMIeyF-;C9fe=DcQ=J9P@t5R6i>GFwN@JM1JzP0Bb8F z`8{BU-i~oqLMhhoIUJTbaC|r;VI#T(UI~1O20v~uLYJsaODl2H7MFR^(=voc zt=aVsa$CPlY*H7F`v#yh{5qc%*sBYPsauo{&;0>coE!*~=A3*>DB}=E!xlZ4mIfS-3Y^#^-c^mBlJzBz zT7xLveH7Aq<3qC8!x)T&tck3_w%ZQrg74eq`1 zD-bya#`#HSlc5?TgvGZ&8`B~L(QGL#O>v4ZH0K?Bl)`|ZQS%;A{f3OdPtqb64uZGp zny=yzQq7$;CGN0+WoS3I(COiqVKKM3d)|zBfiBBv5OQFy6?jx?E5h3fMD^9yCS5?&O;*JuiV3 z01oOqIntjh_TCj-xEHW1B99O|G(ZGKv;@>R!el?eFQK2~7*u~NN3Fko+x2D1sRLAa z0>{PK>aT(9&ed$$PyIR>C$O8#AdWaYRQv-_X`HvOEHPrAcFdZR3dQ^U;pKy&BOtRl zPy_4#N!QmxZtu?oumoD{8Q-Krab0$0X=YLi9PS*EBwU5C+`n{-2&Y4{Zg*H98zXr! zOb8h%lkX;8?ccK;pHgYDqKokP$T$Uc`CMVLG3ap8{^fRpZiz zNyM>s_jo#8aEX)N##Yw=9;Jg=4gOaJ6?>ewuO19>3lh&26vh5@tdcCl{ZMa`G_Hsu z4mkt)see-=+-H5<66*4HvG)U|r3&>&7O8;)k~?shY@t;`aIY+VeJu*y%LW^H?~||; z;wZqV7Mp(Rjawx~ng9^r3>tfj9=O`xf7A5ru3G8OW*MRVjHJ^6H?xN7 zZP3L_nb#G`iXD!RwN%LX#uFATyV<;V&E=#u9%`t|nV!1)dsoh5_~tE#V(DLd>n2aF zw79OF3qyebBbce(V|~~}#%(v5Q7YK!IZtRQt1QB`wVTCJay_E}K}=v|OVub^XKvch ztyMSRSRoB(7K`fj-RrRuoA(P+}f&q5UL9$9*>@ zC@W8;YrBrA|A%{m(P*)e$!5+4CodYEG5=7f zb${WhxQ-<9)jQ6?vho_p7$IM82UFM_Z0cCMj=VA5g)X(hGa<#g`{5upkpJBS`iJhT z#H+e0g>6^jRjFR!^rcaA2Z}isCAu}tw7+|;r#Z*6z1f|}WYsuzkL`LTsByb0N06Z4Mx`LnxQTw=Aik|Q_c#@KS!m3xJSn7{ zNt5Z8%HeolC@3z=wM?(8$0dz-)a&-}YAFDWsodPt?N{ZMURrC+Nx3%JaT$RVsHF@4 zus=SkI&d;J?2a20V}3=$$!zd6a(Mmdcuc^gdcBo_Ky@B5Q=BSnSaHOXZ9@OHk0JBf zR_dh*3$D`up4sg9;6`}_YwY{!iud1@SsO(ku%4t_U2oO|3UT0M-F)2bS6w5qN#uQ+ ztU7H~mqG0So2kgV`^vERL9#PY%yd!wYP)Qv>*dk#RW;PX(y8TY4M72qN=Z4pG)Hu< zIVIMC*5!E9y-Q&AVs0y@3z=$z@nCP)!q{=0Hp?gEL&yEr;5DKn_mnzFhI`z$3NsUI zf;U_K2_CS`zg1b9p;tOa&k1cPnXfKfQ`yFS+AD|~zZE@vPn*Jq&e(zNhmWghN zu7|CAtBi248i717lWg8fO}xFn$G3HB)rq+B(MpNTX(fNDOGiCPNRiaAF;Ho`YQ>k~ zUVI2IU;RGk>d71@47-9!mV{R|169Y{d29ny&bb>baZm~~Lg)<7r`4P?6`8a&XSH#A zmPD&avBT#KVGmgFysGKln9+&SVuiL7p!o!IQ#t8*A%{pzE~|n(IiB810yX_3x9)F= zkW~cC*Uh110k+t~c7H%5p`YVR>)RR|URQqE-_+FoV&|MNAp;+C{VSz!p3^4S`^;C- z+H`rQ*6HtSf;!DnMZOW6`~G&>jva>gJ@saI>G(NI@_Q|@N6GVzCGCdsU8&^VADHK? z#JuKeSC(F0_{zQE>uvnvnMAU2r+Lh!TbNhc&4c>`XGKNjyKC|VZmj~irPs11w~GC5 z*6Z!^Uc~+o$26PaI#0=xOvQ_`UM{B}jy{;3VyQRJ)>&+u*1(;Xm!3rFTs`Wt$xbB6Om~DbW7LfMcxA`&UdQoM8wkiroV%&YpzvgX4C}D zMLyrvH%u}uZ~of){UPAleAQmLFM_nPpF+%2l*^+*T%*_z&Z*aRFSuj+BY@*QE75id zDzzn}eok~kgV*7}A?c1}nYPfnqaO*eI8FloLm>r&VCT z)@~&?(XRu^*!p|gvzF6T*E#9*nPW&2nj_lNW3nQtp)Q`*7^Iwn5hH zT6P1vGp)pzRMIf~nN%l_eOrg=)diozx`~SA^g3;8pq=@me=UI<__`y;Q#cdN0qTCJ zRK=yS)|2;mTdqV2A@fqoL@a86GlPUBQB3G_Xqao~^P_S7AESCLs82P~iVby-Ni`WW z8j|e1NYy$PvbwvL5+E|30(5bNTJwG?7O>q^E-rP82M)OnacX(b%LMYvoWJckD@%(x z&bC4%RZ$K5<-UV;+pU_F8B0IM7Sda#ZdUzg8_m3yC*}ee6f^1IOI%&+6#Hgfh0DpsGq9 zg70KYfTIWKBNdGmAIt+vl{x-9-P=LPfprHmv*+TSU=={Tl!fV9$NtbIQ@mq+wg9SLZ2l@3 z)G!w;Rhl2Bb{0Da($*6!ap|Hds9; zKS+D)dl_fb3j5)Q!`7o~6I19!1h;)|hVSo2>#aRw$$%6u`1_l*$5~#ba`saz>Bd{U zX+*9=t)Z{(EhYZgbLqz~+J#kxJB}6?$GXVO@EfVt4jnrerX(&JeSaZ-`I&Q^>Gc2p-wgj3JO;!Umq@J(^iYi}+q&*i3N}?d&pQ|uOPnfSNLEP0P=@wQ+jS%3Ns-F&b zUKhRS!U4GNMhz~#hpC?&B)@I(Ssgv~n_V;Eali0Lp1NKOM2j}ASx=0i*weuId%qux zHYSPd$AbLb+evUsYb*O4#T4hR-!aQRqqD6R`PzUmMzv9(LLfFmneI)3P?CZ-HU^M) z3q-WvAMDTOK)c}u`+2xjnl9MQ8~c25aLizR&6hM!#-HH$!#|3i|7k`Qn(rb6sUNzA z4^_hkMwCW&*@V!?1}z?8nK(;(q&K<4y<=jwUGGAm1y52KBx7>0WGGC2b_xlJ<2o2wG3Yn8>F0~ESnFaUb9_>V zY;T6n^q&gThNh0t*YrLRNlwINDqcUlUDGdfmV7+Q&tzuBaoGHh(In-d1(kwa zq~rv6=w!j_!4qq^U&9^E;4qx^IL0K%e- zvWXTURO*`$84SgyqcqF+YQo%43*?|ri9#v)SeRqz&j(e{_Kz3R-ZX{x8Duy%Q~uQd zEeV;*kDJEP4&EQKNpusUAc+ng#%yj>OH{K=%Q74O%E5)^JXkdTnX%eft{__g8SXGK zdKop*S0YunLuK(`aQKVFm=v~xyAU9Wtj0X;nIe3;f$T^ZO>v-aIH7EcdJ!UokZVpJ zi3icS)H{3s>;SJ2nv_9HZ--auk+;nSAlkt`BL^pG`ESdh44TG?wqM(%YMb~~bcZ-Y zikX~uBQ*dPfOXFtyuc6sc-=tC04jMzmfCfo0gBw*rdP+dOeEvWW7{n2lDUHz<5`XVw(qRYvzo;k?#=n*Irm4E>n?U9fTJ&f zt^TI8&C~&5j$ee!cMn95rR-FuJc?It#lqBmDrwM%>3 zxnBJU65p3$&p*&Id%T2bZnBLKP!n4`%2#34%JWM30k}VQUxp4_@h;RsGr?~Qg|V_A zX@jZ8sg>VW)XH{GLyF$2IWy8cT|f;i;x^2k0tE7&@c%GF`xaA$`~g@+$5Z~I#f0e3 z=FZhy&wLtBf&VC)+(;db;P1$5eSc=f4YU>l z0T+%h#QkPYt@K(>U5_b%5{x>*8nYH)DYctQjIL#|vAjnxcPq0CUTMw25_lt3~RUmmL4dMCl%htO?k2(y- zuvBY?v+2(G>$<;tSER62XA8BwzYwNM5pAf?N9D0!NWt}MR4bv%Hl&`HKcqkBYM%kT;%-nn_w07mIf7rQ~w%_**uC7 zuVFg2w02H}LFHT~K=~=D9G4Ppw+)4ouT-IPHT&y^jjvy=vVUt$oMG7$MkE!gBSgTR zlzwvRBAsw{D6)-dk&z-yI0NLsvt{J>r8r7F@l}bZgcJec&xH~!XHV^15LK@XhhlB^ zo@S&0qi_>)qE!?PO`mX%QSZhlF<Byf6vaQV)|_DGPURJq|2w%yxmly9)igDJSp zMYP5jjNojO;>PBgxMy0OcqAp4)mom^)V%$882qrB=9lgTX{y?Y$_JEab-ryad%^Y! zB)sQjVR_)9tkZQV{Y#q;uWFM$YWPDTO7oDd2u;;Blug`Uc3mBzI-kT0UO@K94$sVHEA3g#A_W(2%!mtTg^gtreJVHWcOvYEo>v~_CJrs=V~M#zyf_=T zMk&{Q&sZcXbM6OBt}-L_!o%$y&Q_Q&1{J5FgwGs~nZHDr`~G;8%w5E$Kc+dXl?U*u z((Pg*JtqzeB&m=#&x0BD`&tVp^@0Rjmp*w|*-lb z1K4Vwb-uE8dLqKTsd;Ie$&XeL0aCIemxv!+RHVBd_bG4>qRHZunlu7C`HQ@bIZWe2`%K zQdcLy?do%99?f-;hl>A*;eo5;s7I@d%F@p==|MqxuBSrfVPQJ-_aiQA{c>?qrO(R! z<|eX;>iU7T10l%mSw3m&jm!FSiE5s+A@$S>;hEUdiGQiE9owxG8RXkHDRbE6(sZ z97sd3qlCTqaJWX?RkPwKdoC?4K7OMJT1_bgx}P&K1q^4r{sUk*#&G-T-jA)aGw?|* z?O>d)ho&8P%5C}DKE3;f?CnsHsL99NXFr@@=rTqky}Eug-SZ$Ibkmt>6Y^k+&z;Jh zg)$N3@Ab83gg9|C+1~uL`+3y$6B7Sajig{q+T>cr+)tr7cxS+j5IGoCb-2@%M36b# z9%hJ0RZKouIy@@)5G884Ri64BAF!TavQZ85>c{SOh3q1m!hXk$*^WlCB{}9Vo59N_ zgCy)PU%v;89W=|Br4;3wGU%6GKi@SYnB}fNra|wX`L>&wHcz?-mDv6PI2eTrKFC10 z+Qk1*KPbTY>8R3;BO+6MkX8gL=rInAl7?JSMf$0it$`l<_(=*h1xrPP(;9y!rzexP zhW6rqxLLn+7BckegbqfWSIRkgbP}LV%$gczt>@eaJL{XU4XCDlp+c8Z9Hv7?dKYTj zyz4~bRY}Je1<^`qHzdqgje)#xRc4x3#P_=O#%yeTw0PyMsdOZ_HKX{~?+G2$%HM`d z9x5=ReT$qzfpraORli{EX;C}zn)4zK?r0OaW*3%0!ezN^@8F6ERx`3EhU+v!VO$Ma z#0T%o`r#|Y1~VeZHA)^uW_!k;Uk)i>x%HGzzI5SSwI*Yy+rp7SkCUQ^H*~P=33r@` zq9byVg`~@@jg!w+T*{>LeKW(}cv5@67?gk&h~y#GVAF$)0#g`p$#PW|$O%!N>06#t zqs0ATqK8GRVdtk5WvDVW!{VTwXU>ZWSm#Y@{g6kjSMTEhG2d}Iw9hczjfwj0&@+?lu@P+=w^Qw+QUF58;i zf;5G$9m@U~cGW|=p!;o>Z*IOxt9+9=|9wFf?jWsFw$u&!28n{r>9x;T#FQ;P5&V+o z9V_-_c)@IEni<+MuCe%1(e3E>r>K1zMIXl41kJo{6y*J?S5AX7@S0dec|K9>x2 z_3#!+>{tYEXy+r3K>A%qj=46af~8eW8%LN;xcp^+an&NAv6O zu}<)|$@ycuLhqn8dwr_voLoR67hlsB!=4SWD(5BbuItH!r@q{Y0q{3=)?=yHFnSxr zBt;$RpfYs!+}zaGdejS^{?3%GwkJc*i=XgUnmpD$JyVWo8O$+)9Vy??(MCwD+K&r+ zbtT$Yr}q2Yl=>5ST(EEtzEwl=xTRP!*S&YUj}?_=%IOe%2RC_WOF2~g?=Xx5M zRat-WzUaKMT#fd&@+5ZxFq7j;z5=KGbJCcY81lS=+nJ28vW-lsLwS{nHqnfRy5dzx zn&Ff~74C1;($6Zjay8~BtWNK7LG9sB&MGTyF1}9i$#U)8+Jx1&2HstPq@R~x))PpO zoxVLWQ>+)l--3NJEU0B35Ij;%Qs!DEc8?witlJ5bmVnPCznS5fU`7^w`fA29!|gD7 zv$9jW$>6Gt38(ETPvZ{Vc>%QTt5&sQDqIN){_`lH$ZDeS`rU#E)`) z^N#T?%T39-ITg6p?rJa?Ls_~i-JpZxR#+cIw&+>G)gmA9)&K0*!r`0G$pqz$A`0#u z+^9|rn@>O%_$DY1J6vLsx@QhlsXbxK8UOsFL4Vnc+k26E!_H;YP0xxh`##b$4@EFQ z3k<8T=DJpT)2wFr=(v{ur%S51I8Ip?N8Fw2;*KZiw3qP+rw~UB5LF;QQQwINGcr_o z_hhbsU**Bw9gCt!9fpw2oo&4B>g-!WG-3%}-47%{=bx;aw5mV9l1k6}7{u}fD7uXL z>W&+86$kCCH1=bg6N$e513#?_ z;dm^DWt()gulD0Y%%vGl?$j8u=n^P*g~h#6RD47iW0{R#ZG~#=%6Ygei$BZDf%a=5 z`a~Se1C7?C%^aB#va5(1aeOo_Om-QYax%r=B`QZx3J224KDA}!o$@2hhdA#UJZ7Ys z(#Ur5P%}KVZt_guKUo?LJA56)6Bpc%~GQ@r2+y3{*CeK^TkMT`@&p`85fgf%ktt82LZ5YffSrVTa8c=EU5$=98j)pB?!Dl8pReL8bH&Q8-xNjZ{FBJy zMR}8B^1Y8b;Dq@=kR};AElya4z$r z9o0S`(I!%1Dqm!(o)6O5C3uveOm_6ll5}{QGC}OiaCvHM0;Yg^N5WTANJEolUbuQu zs=I@5($ByRaeWxzx=QTtrK#4AUr}AZO?F_()7%OeDhZ;oh@sBv1uzQf-NZn%xZqny z?L6DxT0T{Mlve(AMIOt&v?HtBNk%Dlms=u+eK{#_48Kad({9DfO4J2y-s^0u{YwYp z{;OutlV^2u^Yj7VMZA==6M_t9KV!Si2=z^q-nOBkWheBE?nZyAM@Ezo0!5e=3T!H6 zH8OKp>(&bm^nDc65PDg*O~j~lPeE=+dq=-xj$vpsQHByPODRhU8t(jm=-8hJrL@i$ zh7m)mD5lu`KoR#$ESN(|+k0ER4Za=JgyQB3FmW>EI`<_(#>Z$MH^7LROYA@n_cn~) zD!K9;eXiH}{BDWc?N|FJTP|xEk#FJ^Met@B=*{aG!qPXY89>G*k=qVZ-B`Ig7mU02Ik?&=^hx|D=S4{>AKG|IP`Auhah4Fxf%5ew8 z3PDXg+kZ>cd~JY^e>){If>rw?T->AGfIq_T9`2I-;n@aDqTgzVos2w+BDKs}0=vGPQfcuU-lru?d5?1FC+URZ`q#@}zp8!*SQmzGB{ znM}N!!qBY)32hxp*G$1!t6udZ44268GnNid`IGP6@2Mf{i{pQRGWFUJZAI`!N;<{z zZq(6+Ws20Ndb+&QnR{?J{N?={tVG8l&atEPR;`;3+HJ$J6&@eaG9SZpSic{gWsB9u zEHUk}s%r_`ip-#Txzs@B%l|%T)S%w9f9RSq3%<4(D36i}HDj(rjm`w%`#<~xFmlk? zc-gMn?O})@3 zC;y#+4ZN+DD6MPk^h2Azr(+~6ZB z_D?=xhoEN2>e5-V)Ux2AG2&bU0>MH`^`}f6i3izCH(6~mC`-85#|l3xf3_b@Gv_9m zhjtrshEM?~Tq+-mj$W+SKO^K{DV<_&Y|dESr7CusewFdeh)qa@n%>h(xp6O z4%)@8ok)`<_of6Rk_$06LNauQ%Z`g?iG>PZ$2W9a@eu9{r2Rfono;iJJxFpDNRFA0 znKwacBE||(Hb&DPgz_5G?s+AkiCxczjMsb=q}`-WJTL2N)b&;}$xxumwU`L%NZ;G(}{y<$US3vKrh;bCEImd0XmirF? zgk>}z$2Kwj#&-J0GQkW2PtSoj7~qCpX+ipL0_O3*Tmw5h9qcDjiT-WqAg127DA+eG zw5%~4l^c{ClU;#_)9!k{A6N&(#HV2s@Pyb2L&g5L3mJ7qin`IW^oD!Y#9>*6j)^w6 zG&=)nOuWE#w2U8)a;@l4zK~@dlEv8qO z`IjR)rVZZ!lfE5hp3|5Mpll~R+t20?KrRdT2XMFe4`9PR@b9bJKQxau!=IKW z^oC2B3RIR*`P^&Y>Yx2O&MhV+oD}k$YV-cXw)ZYK6K-aaWdUPXM2!{b*4}`};U?-{ zawhCid$$)fm5wm~oTqwWLZp``L>EJf8&P0}7>9llY;P_R=}$KrRjs#;W@hTUC$BNv z|C2E$v3fVB8^EhayI3ejDfS0ISKZ_Qv}w0Am=(TOr!$>6AF6_iPHwi>rn(ST4w-ga z3BIg^ezce5dIs~}HGl$xjd|md1?H$n*}T)o9$7;ArofTfYqO%4_=P1sL5sebflK_!(b!T&iz|EBXz>8k20`s5({Wz&)O|*|_qWIf=O8s_8 zS7@f1IM7X33 zeFTBz7sH>!lmkM0Q-i#;IF zxgGbPny(Y43Bri(%FC@a5dLR68(UfqBOcu0H$~p zR)?{^76hB!Z>*&akHl7DiposYL4~`X4&K67nS;QDRW+W@&v%lac*liqh;Lfq4BA%v zV{xh_-(#@xnWSP0LX*I*5meR?TS^CRz5u0JP^FDzWdMjtTaKcCY7NV=P;QuUPw-%b zs@{U;VB47pPPn+(mCBc;IfYAeENy|GXIjw8Vlhq&{5kaZcbaOs2xvF z0h(PCy%0oPLnjirtM-{D;hkS>v_PAHdLM;2*%dMc|pe-eyV}e2v^LfP5xkrEmqBHP=hy{B2P;CYYK; z38&F+r%%@dq)OoFV#%pS9-hV7ZY;Z2wFIB{hs0esruh`%EI1K2EN!YD8y+x=Xyu|p^3Gq&X-qB=XyAR@XY z2@^PkZnC0=xo(Fdai_gC8w1b-SeiBY)_ol1dedlW-75DnT#?T7KGKbr% zlXE`rB9VJ%!144qQ$26I3%pdC+mDVDS-Y$BI(1<$cSV96-|~z4rh@@tQlO{YxZG5y zC|3B#2fc9{5_tIx>l{dxFns3pffG)D0BqQn3j~*WDRw+BJn~)pAQhdxe6dV$LP6Sg3(Q*kyBP{@sjB0Ezp#NyQbHh#61ccf z-uM&Cz|6vTVBamqrt|zzwq5j^-8oSQ=x^O^uh0M_J^m%>x~A z%Y>J~;`44K4_nC;jhiDnI89X6`N+@~r^=~sW<>XSy78rjyj?lPSt)H7NaM0FFzis!&N}hn8ew3M zwnJ`~;B=4K-AO-*@(1=FGDc>;`(^oeU?%xBVM*$FdfF63LF%sA6gSldaP*Y069F2m zHHo3KE;a+5EDlz;>?NzX?j5@}PWA*#P!>cxE;M|kCh@ZJ+fV@bYDNXx?zYLp`RHtk zve{?zQ1r&`F01JBzHq&kx@+$7XLm3Wzq!)7w5S~MM{HuoDKOY=5Sq5(6dv$2(853S zn%PuT^WYeIbQ&LCFwL?$k zp0OrS>hl*+mm+RTE9Oka`gG93Dkv(=iMSA=mX_2d!EB>XjmN;|{onSveq&hY=2MOvSKv>5bua{c`;shho(0nnaIe=^ zFuG$Fj{LnoIvDTAQHf4qWYEeTct*ErYGEg8lD zIUm&V0J5Vr>pm*fC)tr#w)Sj4UNAJAdqd$@LMbT{P=x*!j;J@#}V{iY2&3khB2f|m11|#_b77;W7%uDEKt;tG< z4Dq7xQFENLZ!Cvl(lxYs5|?ta&|k2%L+w1Y!Qf$;Ep16CRFh!ej9pz*SB=i!#lxI! zawBn@%6{UJ0?SiF6+8my3mjX#;TFE$5p0R`;hypNY8ryG9$lH?E49Q!S;f8m9L_ZQ zwdFyAz{9tAmvIj$8kz8<{XzF)rqN7&3B7@IY9Q7O^`6R}=T0ADK3{feeo6dFj~!6ruF5Cf8!g7n8*8H+~my<#FXi0KUI0ZK#8en6DMPkljo zc)OY5aph)Pz5Dmi(Ge`zatF5+-_Pif=CBt>cE{mcNevK&NWlk#4=eoSE3h}-v?S*2#&Gb$sHnd}yS6R;)%$Li zt?R+>!jCS0_XCMB+Ur)ePGk@#1LW1(Ghh8#d+P?OhXTor=X4*Jn^|O(Dm{z`yG4;Z zAI~(&?QR8;M_*yHA$yVmiOg#tNVT&E`hBs^#qxI+gu` z?S!*6b)?Ek{n(Oocfa)eKKx?%=ST8!EM>9pdgo$qUp6z+tP>GyqB++FEHVVu?CFz_ z77YLRRz5=O5VVlrNOu38noV5#s0vm@Fn)m6D+v4EpflQ~9mlXpD*OQ~SkZPQilp4$ zb@a}@v(2m+{(N-%E4@vnZwfZo?G&Dfjz%0u=A(lfwb4_A(hIib?|te_z7$4gNX7Ip z-xtw;!+G>D3>((i=-=eu(wpwDip&5TnA;i|rE5?MMHLqYOei5}6s3}K9Vr2?(p@JW zO(y2aOw2S=YK_v^#8}2 z{)WpM+o(J!v&*?gZ0?*?--zWTs-Tv>fLpMsv#2n3ZRyF_keX-T%;!g;# zIdQ)R6SkgScz!;zX`;UX1hy(-uSk=!e9jWA3A}!ZVL_VrYK8%cc!irq za8U{vF;Ho`gA3(M!ZP(rG+p?~Fe&sUJH6i^2=P%iAirY_$#j6tEyQ|tn-jCQqg|Qg z<}eaozLn@rtg?gqQVK|)o#?|gzl32|WC2^Fi#!KJD*M2N>ty+2Y9a7_qB{ z^qT~oQIaox`}fAbzOJOoC=83laSQ3rCC)Cbu7uxY%2K0c*ETfbD^*bAyk=Ip;++@R<>rv<-eGnz} zV@+;8*8Acj8^HSQ#P_)Y6O7W+^&?#VVww%JY;go?%Bh_B+LL+|fP#gGfK%FkrBA@M z3nalvPGDq^I9<0-rZEg~y6Zy|mDZLS4<5HZSK~E26(haM%2L@0|1PJ#%O7 zoxAV;gJBJrFJ5NZ7s6RtIRV4daiL(-FG&4&eKNSxA(aCt%6{x?MciaZbaJa6 zW0LcHqa&CFt7cWx^4!glH9_){U^^vWGxqxB &R-M?vQMpf*!fj3qYO`1^ZLIK< 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 aUNOt3Ggj>e(w-uJQ!xJ`bxGyN{Qm-=3u|`( literal 0 HcmV?d00001