diff --git a/.gitignore b/.gitignore index 824a26c..c661872 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,8 @@ local.properties .settings/ .loadpath .recommenders +obj/ +ZTest/ # External tool builders .externalToolBuilders/ @@ -195,4 +197,5 @@ dependency-reduced-pom.xml README.html *.iml .idea -.exercism \ No newline at end of file +.exercism +/src/.vs diff --git a/README.md b/README.md index 50f27e6..c15cd2f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +# Wrapper around the leetcode data scrapping + +How to start server: +``` +cd /src/Backend +dotnet run --ApplicationSettings:CosmosDbPrimaryKey --ApplicationInsights:ConnectionString +``` + +--- + # Leetcode Companywise Interview Questions ![leetcode-companywise-interview-questions](https://socialify.git.ci/snehasishroy/leetcode-companywise-interview-questions/image?description=1&font=JetBrains+Mono&forks=1&language=1&name=1&owner=1&pattern=Solid&stargazers=1&theme=Dark) diff --git a/build-image.zsh b/build-image.zsh new file mode 100755 index 0000000..bfcb925 --- /dev/null +++ b/build-image.zsh @@ -0,0 +1,2 @@ +VERSION="latest" +docker build -t lcw-backend:$VERSION -f dockerfile . \ No newline at end of file diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..9f2efda --- /dev/null +++ b/dockerfile @@ -0,0 +1,23 @@ +# Use official .NET 8 SDK image for build +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +WORKDIR /src + +# Copy everything else and build +COPY ./src ./ +WORKDIR /src +RUN dotnet restore + +WORKDIR /src/Backend +RUN dotnet build + +# Expose ports (change as needed) +EXPOSE 80 +EXPOSE 443 +EXPOSE 5164 + +# Set environment variables for production +# ENV ASPNETCORE_URLS="http://+:80;https://+:443" +ENV ASPNETCORE_ENVIRONMENT=Development + +# Start the application +ENTRYPOINT ["dotnet", "run", "--profile", "container"] \ No newline at end of file diff --git a/1kosmos/all.csv b/leetcode/1kosmos/all.csv similarity index 100% rename from 1kosmos/all.csv rename to leetcode/1kosmos/all.csv diff --git a/1kosmos/more-than-six-months.csv b/leetcode/1kosmos/more-than-six-months.csv similarity index 100% rename from 1kosmos/more-than-six-months.csv rename to leetcode/1kosmos/more-than-six-months.csv diff --git a/6sense/all.csv b/leetcode/6sense/all.csv similarity index 100% rename from 6sense/all.csv rename to leetcode/6sense/all.csv diff --git a/6sense/more-than-six-months.csv b/leetcode/6sense/more-than-six-months.csv similarity index 100% rename from 6sense/more-than-six-months.csv rename to leetcode/6sense/more-than-six-months.csv diff --git a/6sense/six-months.csv b/leetcode/6sense/six-months.csv similarity index 100% rename from 6sense/six-months.csv rename to leetcode/6sense/six-months.csv diff --git a/accelya/all.csv b/leetcode/accelya/all.csv similarity index 100% rename from accelya/all.csv rename to leetcode/accelya/all.csv diff --git a/accelya/more-than-six-months.csv b/leetcode/accelya/more-than-six-months.csv similarity index 100% rename from accelya/more-than-six-months.csv rename to leetcode/accelya/more-than-six-months.csv diff --git a/accenture/all.csv b/leetcode/accenture/all.csv similarity index 100% rename from accenture/all.csv rename to leetcode/accenture/all.csv diff --git a/accenture/more-than-six-months.csv b/leetcode/accenture/more-than-six-months.csv similarity index 100% rename from accenture/more-than-six-months.csv rename to leetcode/accenture/more-than-six-months.csv diff --git a/accenture/six-months.csv b/leetcode/accenture/six-months.csv similarity index 100% rename from accenture/six-months.csv rename to leetcode/accenture/six-months.csv diff --git a/accolite/all.csv b/leetcode/accolite/all.csv similarity index 100% rename from accolite/all.csv rename to leetcode/accolite/all.csv diff --git a/accolite/more-than-six-months.csv b/leetcode/accolite/more-than-six-months.csv similarity index 100% rename from accolite/more-than-six-months.csv rename to leetcode/accolite/more-than-six-months.csv diff --git a/accolite/six-months.csv b/leetcode/accolite/six-months.csv similarity index 100% rename from accolite/six-months.csv rename to leetcode/accolite/six-months.csv diff --git a/accolite/thirty-days.csv b/leetcode/accolite/thirty-days.csv similarity index 100% rename from accolite/thirty-days.csv rename to leetcode/accolite/thirty-days.csv diff --git a/accolite/three-months.csv b/leetcode/accolite/three-months.csv similarity index 100% rename from accolite/three-months.csv rename to leetcode/accolite/three-months.csv diff --git a/acko/all.csv b/leetcode/acko/all.csv similarity index 100% rename from acko/all.csv rename to leetcode/acko/all.csv diff --git a/acko/more-than-six-months.csv b/leetcode/acko/more-than-six-months.csv similarity index 100% rename from acko/more-than-six-months.csv rename to leetcode/acko/more-than-six-months.csv diff --git a/acorns/all.csv b/leetcode/acorns/all.csv similarity index 100% rename from acorns/all.csv rename to leetcode/acorns/all.csv diff --git a/activision/all.csv b/leetcode/activision/all.csv similarity index 100% rename from activision/all.csv rename to leetcode/activision/all.csv diff --git a/activision/more-than-six-months.csv b/leetcode/activision/more-than-six-months.csv similarity index 100% rename from activision/more-than-six-months.csv rename to leetcode/activision/more-than-six-months.csv diff --git a/activision/six-months.csv b/leetcode/activision/six-months.csv similarity index 100% rename from activision/six-months.csv rename to leetcode/activision/six-months.csv diff --git a/addepar/all.csv b/leetcode/addepar/all.csv similarity index 100% rename from addepar/all.csv rename to leetcode/addepar/all.csv diff --git a/addepar/more-than-six-months.csv b/leetcode/addepar/more-than-six-months.csv similarity index 100% rename from addepar/more-than-six-months.csv rename to leetcode/addepar/more-than-six-months.csv diff --git a/adobe/all.csv b/leetcode/adobe/all.csv similarity index 100% rename from adobe/all.csv rename to leetcode/adobe/all.csv diff --git a/adobe/more-than-six-months.csv b/leetcode/adobe/more-than-six-months.csv similarity index 100% rename from adobe/more-than-six-months.csv rename to leetcode/adobe/more-than-six-months.csv diff --git a/adobe/six-months.csv b/leetcode/adobe/six-months.csv similarity index 100% rename from adobe/six-months.csv rename to leetcode/adobe/six-months.csv diff --git a/adobe/thirty-days.csv b/leetcode/adobe/thirty-days.csv similarity index 100% rename from adobe/thirty-days.csv rename to leetcode/adobe/thirty-days.csv diff --git a/adobe/three-months.csv b/leetcode/adobe/three-months.csv similarity index 100% rename from adobe/three-months.csv rename to leetcode/adobe/three-months.csv diff --git a/adp/all.csv b/leetcode/adp/all.csv similarity index 100% rename from adp/all.csv rename to leetcode/adp/all.csv diff --git a/adp/six-months.csv b/leetcode/adp/six-months.csv similarity index 100% rename from adp/six-months.csv rename to leetcode/adp/six-months.csv diff --git a/aetion/all.csv b/leetcode/aetion/all.csv similarity index 100% rename from aetion/all.csv rename to leetcode/aetion/all.csv diff --git a/aetion/more-than-six-months.csv b/leetcode/aetion/more-than-six-months.csv similarity index 100% rename from aetion/more-than-six-months.csv rename to leetcode/aetion/more-than-six-months.csv diff --git a/affinity/all.csv b/leetcode/affinity/all.csv similarity index 100% rename from affinity/all.csv rename to leetcode/affinity/all.csv diff --git a/affinity/more-than-six-months.csv b/leetcode/affinity/more-than-six-months.csv similarity index 100% rename from affinity/more-than-six-months.csv rename to leetcode/affinity/more-than-six-months.csv diff --git a/affirm/all.csv b/leetcode/affirm/all.csv similarity index 100% rename from affirm/all.csv rename to leetcode/affirm/all.csv diff --git a/affirm/more-than-six-months.csv b/leetcode/affirm/more-than-six-months.csv similarity index 100% rename from affirm/more-than-six-months.csv rename to leetcode/affirm/more-than-six-months.csv diff --git a/affirm/six-months.csv b/leetcode/affirm/six-months.csv similarity index 100% rename from affirm/six-months.csv rename to leetcode/affirm/six-months.csv diff --git a/affirm/three-months.csv b/leetcode/affirm/three-months.csv similarity index 100% rename from affirm/three-months.csv rename to leetcode/affirm/three-months.csv diff --git a/agoda/all.csv b/leetcode/agoda/all.csv similarity index 100% rename from agoda/all.csv rename to leetcode/agoda/all.csv diff --git a/agoda/more-than-six-months.csv b/leetcode/agoda/more-than-six-months.csv similarity index 100% rename from agoda/more-than-six-months.csv rename to leetcode/agoda/more-than-six-months.csv diff --git a/agoda/six-months.csv b/leetcode/agoda/six-months.csv similarity index 100% rename from agoda/six-months.csv rename to leetcode/agoda/six-months.csv diff --git a/agoda/three-months.csv b/leetcode/agoda/three-months.csv similarity index 100% rename from agoda/three-months.csv rename to leetcode/agoda/three-months.csv diff --git a/airbnb/all.csv b/leetcode/airbnb/all.csv similarity index 100% rename from airbnb/all.csv rename to leetcode/airbnb/all.csv diff --git a/airbnb/more-than-six-months.csv b/leetcode/airbnb/more-than-six-months.csv similarity index 100% rename from airbnb/more-than-six-months.csv rename to leetcode/airbnb/more-than-six-months.csv diff --git a/airbnb/six-months.csv b/leetcode/airbnb/six-months.csv similarity index 100% rename from airbnb/six-months.csv rename to leetcode/airbnb/six-months.csv diff --git a/airbnb/thirty-days.csv b/leetcode/airbnb/thirty-days.csv similarity index 100% rename from airbnb/thirty-days.csv rename to leetcode/airbnb/thirty-days.csv diff --git a/airbnb/three-months.csv b/leetcode/airbnb/three-months.csv similarity index 100% rename from airbnb/three-months.csv rename to leetcode/airbnb/three-months.csv diff --git a/airbus/all.csv b/leetcode/airbus/all.csv similarity index 100% rename from airbus/all.csv rename to leetcode/airbus/all.csv diff --git a/airbus/more-than-six-months.csv b/leetcode/airbus/more-than-six-months.csv similarity index 100% rename from airbus/more-than-six-months.csv rename to leetcode/airbus/more-than-six-months.csv diff --git a/airbus/six-months.csv b/leetcode/airbus/six-months.csv similarity index 100% rename from airbus/six-months.csv rename to leetcode/airbus/six-months.csv diff --git a/airbus/three-months.csv b/leetcode/airbus/three-months.csv similarity index 100% rename from airbus/three-months.csv rename to leetcode/airbus/three-months.csv diff --git a/airtel/all.csv b/leetcode/airtel/all.csv similarity index 100% rename from airtel/all.csv rename to leetcode/airtel/all.csv diff --git a/airtel/more-than-six-months.csv b/leetcode/airtel/more-than-six-months.csv similarity index 100% rename from airtel/more-than-six-months.csv rename to leetcode/airtel/more-than-six-months.csv diff --git a/airtel/six-months.csv b/leetcode/airtel/six-months.csv similarity index 100% rename from airtel/six-months.csv rename to leetcode/airtel/six-months.csv diff --git a/airwallex/all.csv b/leetcode/airwallex/all.csv similarity index 100% rename from airwallex/all.csv rename to leetcode/airwallex/all.csv diff --git a/airwallex/more-than-six-months.csv b/leetcode/airwallex/more-than-six-months.csv similarity index 100% rename from airwallex/more-than-six-months.csv rename to leetcode/airwallex/more-than-six-months.csv diff --git a/akamai/all.csv b/leetcode/akamai/all.csv similarity index 100% rename from akamai/all.csv rename to leetcode/akamai/all.csv diff --git a/akamai/more-than-six-months.csv b/leetcode/akamai/more-than-six-months.csv similarity index 100% rename from akamai/more-than-six-months.csv rename to leetcode/akamai/more-than-six-months.csv diff --git a/akuna-capital/all.csv b/leetcode/akuna-capital/all.csv similarity index 100% rename from akuna-capital/all.csv rename to leetcode/akuna-capital/all.csv diff --git a/akuna-capital/more-than-six-months.csv b/leetcode/akuna-capital/more-than-six-months.csv similarity index 100% rename from akuna-capital/more-than-six-months.csv rename to leetcode/akuna-capital/more-than-six-months.csv diff --git a/akuna-capital/six-months.csv b/leetcode/akuna-capital/six-months.csv similarity index 100% rename from akuna-capital/six-months.csv rename to leetcode/akuna-capital/six-months.csv diff --git a/akuna-capital/three-months.csv b/leetcode/akuna-capital/three-months.csv similarity index 100% rename from akuna-capital/three-months.csv rename to leetcode/akuna-capital/three-months.csv diff --git a/alibaba/all.csv b/leetcode/alibaba/all.csv similarity index 100% rename from alibaba/all.csv rename to leetcode/alibaba/all.csv diff --git a/alibaba/more-than-six-months.csv b/leetcode/alibaba/more-than-six-months.csv similarity index 100% rename from alibaba/more-than-six-months.csv rename to leetcode/alibaba/more-than-six-months.csv diff --git a/allincall/all.csv b/leetcode/allincall/all.csv similarity index 100% rename from allincall/all.csv rename to leetcode/allincall/all.csv diff --git a/allincall/more-than-six-months.csv b/leetcode/allincall/more-than-six-months.csv similarity index 100% rename from allincall/more-than-six-months.csv rename to leetcode/allincall/more-than-six-months.csv diff --git a/alphagrep/all.csv b/leetcode/alphagrep/all.csv similarity index 100% rename from alphagrep/all.csv rename to leetcode/alphagrep/all.csv diff --git a/alphagrep/more-than-six-months.csv b/leetcode/alphagrep/more-than-six-months.csv similarity index 100% rename from alphagrep/more-than-six-months.csv rename to leetcode/alphagrep/more-than-six-months.csv diff --git a/alphonso/all.csv b/leetcode/alphonso/all.csv similarity index 100% rename from alphonso/all.csv rename to leetcode/alphonso/all.csv diff --git a/alphonso/more-than-six-months.csv b/leetcode/alphonso/more-than-six-months.csv similarity index 100% rename from alphonso/more-than-six-months.csv rename to leetcode/alphonso/more-than-six-months.csv diff --git a/alten/all.csv b/leetcode/alten/all.csv similarity index 100% rename from alten/all.csv rename to leetcode/alten/all.csv diff --git a/altimetrik/all.csv b/leetcode/altimetrik/all.csv similarity index 100% rename from altimetrik/all.csv rename to leetcode/altimetrik/all.csv diff --git a/altimetrik/more-than-six-months.csv b/leetcode/altimetrik/more-than-six-months.csv similarity index 100% rename from altimetrik/more-than-six-months.csv rename to leetcode/altimetrik/more-than-six-months.csv diff --git a/amadeus/all.csv b/leetcode/amadeus/all.csv similarity index 100% rename from amadeus/all.csv rename to leetcode/amadeus/all.csv diff --git a/amadeus/more-than-six-months.csv b/leetcode/amadeus/more-than-six-months.csv similarity index 100% rename from amadeus/more-than-six-months.csv rename to leetcode/amadeus/more-than-six-months.csv diff --git a/amazon/all.csv b/leetcode/amazon/all.csv similarity index 100% rename from amazon/all.csv rename to leetcode/amazon/all.csv diff --git a/amazon/more-than-six-months.csv b/leetcode/amazon/more-than-six-months.csv similarity index 100% rename from amazon/more-than-six-months.csv rename to leetcode/amazon/more-than-six-months.csv diff --git a/amazon/six-months.csv b/leetcode/amazon/six-months.csv similarity index 100% rename from amazon/six-months.csv rename to leetcode/amazon/six-months.csv diff --git a/amazon/thirty-days.csv b/leetcode/amazon/thirty-days.csv similarity index 100% rename from amazon/thirty-days.csv rename to leetcode/amazon/thirty-days.csv diff --git a/amazon/three-months.csv b/leetcode/amazon/three-months.csv similarity index 100% rename from amazon/three-months.csv rename to leetcode/amazon/three-months.csv diff --git a/amd/all.csv b/leetcode/amd/all.csv similarity index 100% rename from amd/all.csv rename to leetcode/amd/all.csv diff --git a/amd/more-than-six-months.csv b/leetcode/amd/more-than-six-months.csv similarity index 100% rename from amd/more-than-six-months.csv rename to leetcode/amd/more-than-six-months.csv diff --git a/amd/six-months.csv b/leetcode/amd/six-months.csv similarity index 100% rename from amd/six-months.csv rename to leetcode/amd/six-months.csv diff --git a/amdocs/all.csv b/leetcode/amdocs/all.csv similarity index 100% rename from amdocs/all.csv rename to leetcode/amdocs/all.csv diff --git a/amdocs/more-than-six-months.csv b/leetcode/amdocs/more-than-six-months.csv similarity index 100% rename from amdocs/more-than-six-months.csv rename to leetcode/amdocs/more-than-six-months.csv diff --git a/american-airlines/all.csv b/leetcode/american-airlines/all.csv similarity index 100% rename from american-airlines/all.csv rename to leetcode/american-airlines/all.csv diff --git a/american-express/all.csv b/leetcode/american-express/all.csv similarity index 100% rename from american-express/all.csv rename to leetcode/american-express/all.csv diff --git a/american-express/more-than-six-months.csv b/leetcode/american-express/more-than-six-months.csv similarity index 100% rename from american-express/more-than-six-months.csv rename to leetcode/american-express/more-than-six-months.csv diff --git a/american-express/six-months.csv b/leetcode/american-express/six-months.csv similarity index 100% rename from american-express/six-months.csv rename to leetcode/american-express/six-months.csv diff --git a/american-express/three-months.csv b/leetcode/american-express/three-months.csv similarity index 100% rename from american-express/three-months.csv rename to leetcode/american-express/three-months.csv diff --git a/amplitude/all.csv b/leetcode/amplitude/all.csv similarity index 100% rename from amplitude/all.csv rename to leetcode/amplitude/all.csv diff --git a/analytics-quotient/all.csv b/leetcode/analytics-quotient/all.csv similarity index 100% rename from analytics-quotient/all.csv rename to leetcode/analytics-quotient/all.csv diff --git a/analytics-quotient/more-than-six-months.csv b/leetcode/analytics-quotient/more-than-six-months.csv similarity index 100% rename from analytics-quotient/more-than-six-months.csv rename to leetcode/analytics-quotient/more-than-six-months.csv diff --git a/andela/all.csv b/leetcode/andela/all.csv similarity index 100% rename from andela/all.csv rename to leetcode/andela/all.csv diff --git a/andela/more-than-six-months.csv b/leetcode/andela/more-than-six-months.csv similarity index 100% rename from andela/more-than-six-months.csv rename to leetcode/andela/more-than-six-months.csv diff --git a/anduril/all.csv b/leetcode/anduril/all.csv similarity index 100% rename from anduril/all.csv rename to leetcode/anduril/all.csv diff --git a/anduril/more-than-six-months.csv b/leetcode/anduril/more-than-six-months.csv similarity index 100% rename from anduril/more-than-six-months.csv rename to leetcode/anduril/more-than-six-months.csv diff --git a/anduril/six-months.csv b/leetcode/anduril/six-months.csv similarity index 100% rename from anduril/six-months.csv rename to leetcode/anduril/six-months.csv diff --git a/anduril/thirty-days.csv b/leetcode/anduril/thirty-days.csv similarity index 100% rename from anduril/thirty-days.csv rename to leetcode/anduril/thirty-days.csv diff --git a/anduril/three-months.csv b/leetcode/anduril/three-months.csv similarity index 100% rename from anduril/three-months.csv rename to leetcode/anduril/three-months.csv diff --git a/anthropic/all.csv b/leetcode/anthropic/all.csv similarity index 100% rename from anthropic/all.csv rename to leetcode/anthropic/all.csv diff --git a/anthropic/more-than-six-months.csv b/leetcode/anthropic/more-than-six-months.csv similarity index 100% rename from anthropic/more-than-six-months.csv rename to leetcode/anthropic/more-than-six-months.csv diff --git a/anthropic/six-months.csv b/leetcode/anthropic/six-months.csv similarity index 100% rename from anthropic/six-months.csv rename to leetcode/anthropic/six-months.csv diff --git a/anthropic/thirty-days.csv b/leetcode/anthropic/thirty-days.csv similarity index 100% rename from anthropic/thirty-days.csv rename to leetcode/anthropic/thirty-days.csv diff --git a/anthropic/three-months.csv b/leetcode/anthropic/three-months.csv similarity index 100% rename from anthropic/three-months.csv rename to leetcode/anthropic/three-months.csv diff --git a/anyscale/all.csv b/leetcode/anyscale/all.csv similarity index 100% rename from anyscale/all.csv rename to leetcode/anyscale/all.csv diff --git a/anyscale/more-than-six-months.csv b/leetcode/anyscale/more-than-six-months.csv similarity index 100% rename from anyscale/more-than-six-months.csv rename to leetcode/anyscale/more-than-six-months.csv diff --git a/anyscale/six-months.csv b/leetcode/anyscale/six-months.csv similarity index 100% rename from anyscale/six-months.csv rename to leetcode/anyscale/six-months.csv diff --git a/aon/all.csv b/leetcode/aon/all.csv similarity index 100% rename from aon/all.csv rename to leetcode/aon/all.csv diff --git a/aon/more-than-six-months.csv b/leetcode/aon/more-than-six-months.csv similarity index 100% rename from aon/more-than-six-months.csv rename to leetcode/aon/more-than-six-months.csv diff --git a/apna/all.csv b/leetcode/apna/all.csv similarity index 100% rename from apna/all.csv rename to leetcode/apna/all.csv diff --git a/apna/more-than-six-months.csv b/leetcode/apna/more-than-six-months.csv similarity index 100% rename from apna/more-than-six-months.csv rename to leetcode/apna/more-than-six-months.csv diff --git a/apolloio/all.csv b/leetcode/apolloio/all.csv similarity index 100% rename from apolloio/all.csv rename to leetcode/apolloio/all.csv diff --git a/apolloio/more-than-six-months.csv b/leetcode/apolloio/more-than-six-months.csv similarity index 100% rename from apolloio/more-than-six-months.csv rename to leetcode/apolloio/more-than-six-months.csv diff --git a/appdynamics/all.csv b/leetcode/appdynamics/all.csv similarity index 100% rename from appdynamics/all.csv rename to leetcode/appdynamics/all.csv diff --git a/appdynamics/more-than-six-months.csv b/leetcode/appdynamics/more-than-six-months.csv similarity index 100% rename from appdynamics/more-than-six-months.csv rename to leetcode/appdynamics/more-than-six-months.csv diff --git a/appfolio/all.csv b/leetcode/appfolio/all.csv similarity index 100% rename from appfolio/all.csv rename to leetcode/appfolio/all.csv diff --git a/appfolio/more-than-six-months.csv b/leetcode/appfolio/more-than-six-months.csv similarity index 100% rename from appfolio/more-than-six-months.csv rename to leetcode/appfolio/more-than-six-months.csv diff --git a/apple/all.csv b/leetcode/apple/all.csv similarity index 100% rename from apple/all.csv rename to leetcode/apple/all.csv diff --git a/apple/more-than-six-months.csv b/leetcode/apple/more-than-six-months.csv similarity index 100% rename from apple/more-than-six-months.csv rename to leetcode/apple/more-than-six-months.csv diff --git a/apple/six-months.csv b/leetcode/apple/six-months.csv similarity index 100% rename from apple/six-months.csv rename to leetcode/apple/six-months.csv diff --git a/apple/thirty-days.csv b/leetcode/apple/thirty-days.csv similarity index 100% rename from apple/thirty-days.csv rename to leetcode/apple/thirty-days.csv diff --git a/apple/three-months.csv b/leetcode/apple/three-months.csv similarity index 100% rename from apple/three-months.csv rename to leetcode/apple/three-months.csv diff --git a/applied-intuition/all.csv b/leetcode/applied-intuition/all.csv similarity index 100% rename from applied-intuition/all.csv rename to leetcode/applied-intuition/all.csv diff --git a/applied-intuition/more-than-six-months.csv b/leetcode/applied-intuition/more-than-six-months.csv similarity index 100% rename from applied-intuition/more-than-six-months.csv rename to leetcode/applied-intuition/more-than-six-months.csv diff --git a/applied-intuition/six-months.csv b/leetcode/applied-intuition/six-months.csv similarity index 100% rename from applied-intuition/six-months.csv rename to leetcode/applied-intuition/six-months.csv diff --git a/applied-intuition/thirty-days.csv b/leetcode/applied-intuition/thirty-days.csv similarity index 100% rename from applied-intuition/thirty-days.csv rename to leetcode/applied-intuition/thirty-days.csv diff --git a/applied-intuition/three-months.csv b/leetcode/applied-intuition/three-months.csv similarity index 100% rename from applied-intuition/three-months.csv rename to leetcode/applied-intuition/three-months.csv diff --git a/applovin/all.csv b/leetcode/applovin/all.csv similarity index 100% rename from applovin/all.csv rename to leetcode/applovin/all.csv diff --git a/applovin/more-than-six-months.csv b/leetcode/applovin/more-than-six-months.csv similarity index 100% rename from applovin/more-than-six-months.csv rename to leetcode/applovin/more-than-six-months.csv diff --git a/appviewx/all.csv b/leetcode/appviewx/all.csv similarity index 100% rename from appviewx/all.csv rename to leetcode/appviewx/all.csv diff --git a/appviewx/more-than-six-months.csv b/leetcode/appviewx/more-than-six-months.csv similarity index 100% rename from appviewx/more-than-six-months.csv rename to leetcode/appviewx/more-than-six-months.csv diff --git a/aqr-capital-management-llc/all.csv b/leetcode/aqr-capital-management-llc/all.csv similarity index 100% rename from aqr-capital-management-llc/all.csv rename to leetcode/aqr-capital-management-llc/all.csv diff --git a/aqr-capital-management-llc/more-than-six-months.csv b/leetcode/aqr-capital-management-llc/more-than-six-months.csv similarity index 100% rename from aqr-capital-management-llc/more-than-six-months.csv rename to leetcode/aqr-capital-management-llc/more-than-six-months.csv diff --git a/arcesium/all.csv b/leetcode/arcesium/all.csv similarity index 100% rename from arcesium/all.csv rename to leetcode/arcesium/all.csv diff --git a/arcesium/more-than-six-months.csv b/leetcode/arcesium/more-than-six-months.csv similarity index 100% rename from arcesium/more-than-six-months.csv rename to leetcode/arcesium/more-than-six-months.csv diff --git a/argo-ai/all.csv b/leetcode/argo-ai/all.csv similarity index 100% rename from argo-ai/all.csv rename to leetcode/argo-ai/all.csv diff --git a/argo-ai/six-months.csv b/leetcode/argo-ai/six-months.csv similarity index 100% rename from argo-ai/six-months.csv rename to leetcode/argo-ai/six-months.csv diff --git a/argo-ai/three-months.csv b/leetcode/argo-ai/three-months.csv similarity index 100% rename from argo-ai/three-months.csv rename to leetcode/argo-ai/three-months.csv diff --git a/arista-networks/all.csv b/leetcode/arista-networks/all.csv similarity index 100% rename from arista-networks/all.csv rename to leetcode/arista-networks/all.csv diff --git a/arista-networks/more-than-six-months.csv b/leetcode/arista-networks/more-than-six-months.csv similarity index 100% rename from arista-networks/more-than-six-months.csv rename to leetcode/arista-networks/more-than-six-months.csv diff --git a/arista-networks/six-months.csv b/leetcode/arista-networks/six-months.csv similarity index 100% rename from arista-networks/six-months.csv rename to leetcode/arista-networks/six-months.csv diff --git a/arista-networks/three-months.csv b/leetcode/arista-networks/three-months.csv similarity index 100% rename from arista-networks/three-months.csv rename to leetcode/arista-networks/three-months.csv diff --git a/arm/all.csv b/leetcode/arm/all.csv similarity index 100% rename from arm/all.csv rename to leetcode/arm/all.csv diff --git a/arm/more-than-six-months.csv b/leetcode/arm/more-than-six-months.csv similarity index 100% rename from arm/more-than-six-months.csv rename to leetcode/arm/more-than-six-months.csv diff --git a/asana/all.csv b/leetcode/asana/all.csv similarity index 100% rename from asana/all.csv rename to leetcode/asana/all.csv diff --git a/asana/more-than-six-months.csv b/leetcode/asana/more-than-six-months.csv similarity index 100% rename from asana/more-than-six-months.csv rename to leetcode/asana/more-than-six-months.csv diff --git a/asana/six-months.csv b/leetcode/asana/six-months.csv similarity index 100% rename from asana/six-months.csv rename to leetcode/asana/six-months.csv diff --git a/ascend/all.csv b/leetcode/ascend/all.csv similarity index 100% rename from ascend/all.csv rename to leetcode/ascend/all.csv diff --git a/ascend/more-than-six-months.csv b/leetcode/ascend/more-than-six-months.csv similarity index 100% rename from ascend/more-than-six-months.csv rename to leetcode/ascend/more-than-six-months.csv diff --git a/asus/all.csv b/leetcode/asus/all.csv similarity index 100% rename from asus/all.csv rename to leetcode/asus/all.csv diff --git a/asus/more-than-six-months.csv b/leetcode/asus/more-than-six-months.csv similarity index 100% rename from asus/more-than-six-months.csv rename to leetcode/asus/more-than-six-months.csv diff --git a/at-t/all.csv b/leetcode/at-t/all.csv similarity index 100% rename from at-t/all.csv rename to leetcode/at-t/all.csv diff --git a/at-t/six-months.csv b/leetcode/at-t/six-months.csv similarity index 100% rename from at-t/six-months.csv rename to leetcode/at-t/six-months.csv diff --git a/athenahealth/all.csv b/leetcode/athenahealth/all.csv similarity index 100% rename from athenahealth/all.csv rename to leetcode/athenahealth/all.csv diff --git a/athenahealth/more-than-six-months.csv b/leetcode/athenahealth/more-than-six-months.csv similarity index 100% rename from athenahealth/more-than-six-months.csv rename to leetcode/athenahealth/more-than-six-months.csv diff --git a/athenahealth/six-months.csv b/leetcode/athenahealth/six-months.csv similarity index 100% rename from athenahealth/six-months.csv rename to leetcode/athenahealth/six-months.csv diff --git a/athenahealth/three-months.csv b/leetcode/athenahealth/three-months.csv similarity index 100% rename from athenahealth/three-months.csv rename to leetcode/athenahealth/three-months.csv diff --git a/atlassian/all.csv b/leetcode/atlassian/all.csv similarity index 100% rename from atlassian/all.csv rename to leetcode/atlassian/all.csv diff --git a/atlassian/more-than-six-months.csv b/leetcode/atlassian/more-than-six-months.csv similarity index 100% rename from atlassian/more-than-six-months.csv rename to leetcode/atlassian/more-than-six-months.csv diff --git a/atlassian/six-months.csv b/leetcode/atlassian/six-months.csv similarity index 100% rename from atlassian/six-months.csv rename to leetcode/atlassian/six-months.csv diff --git a/atlassian/thirty-days.csv b/leetcode/atlassian/thirty-days.csv similarity index 100% rename from atlassian/thirty-days.csv rename to leetcode/atlassian/thirty-days.csv diff --git a/atlassian/three-months.csv b/leetcode/atlassian/three-months.csv similarity index 100% rename from atlassian/three-months.csv rename to leetcode/atlassian/three-months.csv diff --git a/attentive/all.csv b/leetcode/attentive/all.csv similarity index 100% rename from attentive/all.csv rename to leetcode/attentive/all.csv diff --git a/attentive/more-than-six-months.csv b/leetcode/attentive/more-than-six-months.csv similarity index 100% rename from attentive/more-than-six-months.csv rename to leetcode/attentive/more-than-six-months.csv diff --git a/attentive/six-months.csv b/leetcode/attentive/six-months.csv similarity index 100% rename from attentive/six-months.csv rename to leetcode/attentive/six-months.csv diff --git a/attentive/three-months.csv b/leetcode/attentive/three-months.csv similarity index 100% rename from attentive/three-months.csv rename to leetcode/attentive/three-months.csv diff --git a/audible/all.csv b/leetcode/audible/all.csv similarity index 100% rename from audible/all.csv rename to leetcode/audible/all.csv diff --git a/audible/more-than-six-months.csv b/leetcode/audible/more-than-six-months.csv similarity index 100% rename from audible/more-than-six-months.csv rename to leetcode/audible/more-than-six-months.csv diff --git a/auriga/all.csv b/leetcode/auriga/all.csv similarity index 100% rename from auriga/all.csv rename to leetcode/auriga/all.csv diff --git a/auriga/more-than-six-months.csv b/leetcode/auriga/more-than-six-months.csv similarity index 100% rename from auriga/more-than-six-months.csv rename to leetcode/auriga/more-than-six-months.csv diff --git a/aurora/all.csv b/leetcode/aurora/all.csv similarity index 100% rename from aurora/all.csv rename to leetcode/aurora/all.csv diff --git a/aurora/more-than-six-months.csv b/leetcode/aurora/more-than-six-months.csv similarity index 100% rename from aurora/more-than-six-months.csv rename to leetcode/aurora/more-than-six-months.csv diff --git a/aurora/six-months.csv b/leetcode/aurora/six-months.csv similarity index 100% rename from aurora/six-months.csv rename to leetcode/aurora/six-months.csv diff --git a/aurora/three-months.csv b/leetcode/aurora/three-months.csv similarity index 100% rename from aurora/three-months.csv rename to leetcode/aurora/three-months.csv diff --git a/autodesk/all.csv b/leetcode/autodesk/all.csv similarity index 100% rename from autodesk/all.csv rename to leetcode/autodesk/all.csv diff --git a/autodesk/more-than-six-months.csv b/leetcode/autodesk/more-than-six-months.csv similarity index 100% rename from autodesk/more-than-six-months.csv rename to leetcode/autodesk/more-than-six-months.csv diff --git a/autodesk/six-months.csv b/leetcode/autodesk/six-months.csv similarity index 100% rename from autodesk/six-months.csv rename to leetcode/autodesk/six-months.csv diff --git a/autodesk/thirty-days.csv b/leetcode/autodesk/thirty-days.csv similarity index 100% rename from autodesk/thirty-days.csv rename to leetcode/autodesk/thirty-days.csv diff --git a/autodesk/three-months.csv b/leetcode/autodesk/three-months.csv similarity index 100% rename from autodesk/three-months.csv rename to leetcode/autodesk/three-months.csv diff --git a/avalara/all.csv b/leetcode/avalara/all.csv similarity index 100% rename from avalara/all.csv rename to leetcode/avalara/all.csv diff --git a/avalara/more-than-six-months.csv b/leetcode/avalara/more-than-six-months.csv similarity index 100% rename from avalara/more-than-six-months.csv rename to leetcode/avalara/more-than-six-months.csv diff --git a/avito/all.csv b/leetcode/avito/all.csv similarity index 100% rename from avito/all.csv rename to leetcode/avito/all.csv diff --git a/avito/more-than-six-months.csv b/leetcode/avito/more-than-six-months.csv similarity index 100% rename from avito/more-than-six-months.csv rename to leetcode/avito/more-than-six-months.csv diff --git a/avito/six-months.csv b/leetcode/avito/six-months.csv similarity index 100% rename from avito/six-months.csv rename to leetcode/avito/six-months.csv diff --git a/axis-bank/all.csv b/leetcode/axis-bank/all.csv similarity index 100% rename from axis-bank/all.csv rename to leetcode/axis-bank/all.csv diff --git a/axis-bank/six-months.csv b/leetcode/axis-bank/six-months.csv similarity index 100% rename from axis-bank/six-months.csv rename to leetcode/axis-bank/six-months.csv diff --git a/axon/all.csv b/leetcode/axon/all.csv similarity index 100% rename from axon/all.csv rename to leetcode/axon/all.csv diff --git a/axon/more-than-six-months.csv b/leetcode/axon/more-than-six-months.csv similarity index 100% rename from axon/more-than-six-months.csv rename to leetcode/axon/more-than-six-months.csv diff --git a/axon/six-months.csv b/leetcode/axon/six-months.csv similarity index 100% rename from axon/six-months.csv rename to leetcode/axon/six-months.csv diff --git a/axon/thirty-days.csv b/leetcode/axon/thirty-days.csv similarity index 100% rename from axon/thirty-days.csv rename to leetcode/axon/thirty-days.csv diff --git a/axon/three-months.csv b/leetcode/axon/three-months.csv similarity index 100% rename from axon/three-months.csv rename to leetcode/axon/three-months.csv diff --git a/baidu/all.csv b/leetcode/baidu/all.csv similarity index 100% rename from baidu/all.csv rename to leetcode/baidu/all.csv diff --git a/baidu/more-than-six-months.csv b/leetcode/baidu/more-than-six-months.csv similarity index 100% rename from baidu/more-than-six-months.csv rename to leetcode/baidu/more-than-six-months.csv diff --git a/bank-of-america/all.csv b/leetcode/bank-of-america/all.csv similarity index 100% rename from bank-of-america/all.csv rename to leetcode/bank-of-america/all.csv diff --git a/bank-of-america/more-than-six-months.csv b/leetcode/bank-of-america/more-than-six-months.csv similarity index 100% rename from bank-of-america/more-than-six-months.csv rename to leetcode/bank-of-america/more-than-six-months.csv diff --git a/barclays/all.csv b/leetcode/barclays/all.csv similarity index 100% rename from barclays/all.csv rename to leetcode/barclays/all.csv diff --git a/barclays/more-than-six-months.csv b/leetcode/barclays/more-than-six-months.csv similarity index 100% rename from barclays/more-than-six-months.csv rename to leetcode/barclays/more-than-six-months.csv diff --git a/barclays/six-months.csv b/leetcode/barclays/six-months.csv similarity index 100% rename from barclays/six-months.csv rename to leetcode/barclays/six-months.csv diff --git a/bcg/all.csv b/leetcode/bcg/all.csv similarity index 100% rename from bcg/all.csv rename to leetcode/bcg/all.csv diff --git a/bcg/six-months.csv b/leetcode/bcg/six-months.csv similarity index 100% rename from bcg/six-months.csv rename to leetcode/bcg/six-months.csv diff --git a/bentley-systems/all.csv b/leetcode/bentley-systems/all.csv similarity index 100% rename from bentley-systems/all.csv rename to leetcode/bentley-systems/all.csv diff --git a/bentley-systems/more-than-six-months.csv b/leetcode/bentley-systems/more-than-six-months.csv similarity index 100% rename from bentley-systems/more-than-six-months.csv rename to leetcode/bentley-systems/more-than-six-months.csv diff --git a/bharatpe/all.csv b/leetcode/bharatpe/all.csv similarity index 100% rename from bharatpe/all.csv rename to leetcode/bharatpe/all.csv diff --git a/bharatpe/more-than-six-months.csv b/leetcode/bharatpe/more-than-six-months.csv similarity index 100% rename from bharatpe/more-than-six-months.csv rename to leetcode/bharatpe/more-than-six-months.csv diff --git a/bidgely/all.csv b/leetcode/bidgely/all.csv similarity index 100% rename from bidgely/all.csv rename to leetcode/bidgely/all.csv diff --git a/bidgely/more-than-six-months.csv b/leetcode/bidgely/more-than-six-months.csv similarity index 100% rename from bidgely/more-than-six-months.csv rename to leetcode/bidgely/more-than-six-months.csv diff --git a/billcom/all.csv b/leetcode/billcom/all.csv similarity index 100% rename from billcom/all.csv rename to leetcode/billcom/all.csv diff --git a/billcom/more-than-six-months.csv b/leetcode/billcom/more-than-six-months.csv similarity index 100% rename from billcom/more-than-six-months.csv rename to leetcode/billcom/more-than-six-months.csv diff --git a/bitgo/all.csv b/leetcode/bitgo/all.csv similarity index 100% rename from bitgo/all.csv rename to leetcode/bitgo/all.csv diff --git a/bitgo/more-than-six-months.csv b/leetcode/bitgo/more-than-six-months.csv similarity index 100% rename from bitgo/more-than-six-months.csv rename to leetcode/bitgo/more-than-six-months.csv diff --git a/bitgo/six-months.csv b/leetcode/bitgo/six-months.csv similarity index 100% rename from bitgo/six-months.csv rename to leetcode/bitgo/six-months.csv diff --git a/bitgo/three-months.csv b/leetcode/bitgo/three-months.csv similarity index 100% rename from bitgo/three-months.csv rename to leetcode/bitgo/three-months.csv diff --git a/blackbuck/all.csv b/leetcode/blackbuck/all.csv similarity index 100% rename from blackbuck/all.csv rename to leetcode/blackbuck/all.csv diff --git a/blackbuck/more-than-six-months.csv b/leetcode/blackbuck/more-than-six-months.csv similarity index 100% rename from blackbuck/more-than-six-months.csv rename to leetcode/blackbuck/more-than-six-months.csv diff --git a/blackrock/all.csv b/leetcode/blackrock/all.csv similarity index 100% rename from blackrock/all.csv rename to leetcode/blackrock/all.csv diff --git a/blackrock/more-than-six-months.csv b/leetcode/blackrock/more-than-six-months.csv similarity index 100% rename from blackrock/more-than-six-months.csv rename to leetcode/blackrock/more-than-six-months.csv diff --git a/blackrock/six-months.csv b/leetcode/blackrock/six-months.csv similarity index 100% rename from blackrock/six-months.csv rename to leetcode/blackrock/six-months.csv diff --git a/blackrock/three-months.csv b/leetcode/blackrock/three-months.csv similarity index 100% rename from blackrock/three-months.csv rename to leetcode/blackrock/three-months.csv diff --git a/blackstone/all.csv b/leetcode/blackstone/all.csv similarity index 100% rename from blackstone/all.csv rename to leetcode/blackstone/all.csv diff --git a/blackstone/more-than-six-months.csv b/leetcode/blackstone/more-than-six-months.csv similarity index 100% rename from blackstone/more-than-six-months.csv rename to leetcode/blackstone/more-than-six-months.csv diff --git a/blend/all.csv b/leetcode/blend/all.csv similarity index 100% rename from blend/all.csv rename to leetcode/blend/all.csv diff --git a/blend/more-than-six-months.csv b/leetcode/blend/more-than-six-months.csv similarity index 100% rename from blend/more-than-six-months.csv rename to leetcode/blend/more-than-six-months.csv diff --git a/blend/six-months.csv b/leetcode/blend/six-months.csv similarity index 100% rename from blend/six-months.csv rename to leetcode/blend/six-months.csv diff --git a/blinkit/all.csv b/leetcode/blinkit/all.csv similarity index 100% rename from blinkit/all.csv rename to leetcode/blinkit/all.csv diff --git a/blinkit/more-than-six-months.csv b/leetcode/blinkit/more-than-six-months.csv similarity index 100% rename from blinkit/more-than-six-months.csv rename to leetcode/blinkit/more-than-six-months.csv diff --git a/blizzard/all.csv b/leetcode/blizzard/all.csv similarity index 100% rename from blizzard/all.csv rename to leetcode/blizzard/all.csv diff --git a/blizzard/more-than-six-months.csv b/leetcode/blizzard/more-than-six-months.csv similarity index 100% rename from blizzard/more-than-six-months.csv rename to leetcode/blizzard/more-than-six-months.csv diff --git a/bloomberg/all.csv b/leetcode/bloomberg/all.csv similarity index 100% rename from bloomberg/all.csv rename to leetcode/bloomberg/all.csv diff --git a/bloomberg/more-than-six-months.csv b/leetcode/bloomberg/more-than-six-months.csv similarity index 100% rename from bloomberg/more-than-six-months.csv rename to leetcode/bloomberg/more-than-six-months.csv diff --git a/bloomberg/six-months.csv b/leetcode/bloomberg/six-months.csv similarity index 100% rename from bloomberg/six-months.csv rename to leetcode/bloomberg/six-months.csv diff --git a/bloomberg/thirty-days.csv b/leetcode/bloomberg/thirty-days.csv similarity index 100% rename from bloomberg/thirty-days.csv rename to leetcode/bloomberg/thirty-days.csv diff --git a/bloomberg/three-months.csv b/leetcode/bloomberg/three-months.csv similarity index 100% rename from bloomberg/three-months.csv rename to leetcode/bloomberg/three-months.csv diff --git a/bloomreach/all.csv b/leetcode/bloomreach/all.csv similarity index 100% rename from bloomreach/all.csv rename to leetcode/bloomreach/all.csv diff --git a/bloomreach/more-than-six-months.csv b/leetcode/bloomreach/more-than-six-months.csv similarity index 100% rename from bloomreach/more-than-six-months.csv rename to leetcode/bloomreach/more-than-six-months.csv diff --git a/blue-origin/all.csv b/leetcode/blue-origin/all.csv similarity index 100% rename from blue-origin/all.csv rename to leetcode/blue-origin/all.csv diff --git a/blue-origin/more-than-six-months.csv b/leetcode/blue-origin/more-than-six-months.csv similarity index 100% rename from blue-origin/more-than-six-months.csv rename to leetcode/blue-origin/more-than-six-months.csv diff --git a/blue-yonder/all.csv b/leetcode/blue-yonder/all.csv similarity index 100% rename from blue-yonder/all.csv rename to leetcode/blue-yonder/all.csv diff --git a/blue-yonder/more-than-six-months.csv b/leetcode/blue-yonder/more-than-six-months.csv similarity index 100% rename from blue-yonder/more-than-six-months.csv rename to leetcode/blue-yonder/more-than-six-months.csv diff --git a/bnp-paribas/all.csv b/leetcode/bnp-paribas/all.csv similarity index 100% rename from bnp-paribas/all.csv rename to leetcode/bnp-paribas/all.csv diff --git a/bnp-paribas/more-than-six-months.csv b/leetcode/bnp-paribas/more-than-six-months.csv similarity index 100% rename from bnp-paribas/more-than-six-months.csv rename to leetcode/bnp-paribas/more-than-six-months.csv diff --git a/bny-mellon/all.csv b/leetcode/bny-mellon/all.csv similarity index 100% rename from bny-mellon/all.csv rename to leetcode/bny-mellon/all.csv diff --git a/bny-mellon/more-than-six-months.csv b/leetcode/bny-mellon/more-than-six-months.csv similarity index 100% rename from bny-mellon/more-than-six-months.csv rename to leetcode/bny-mellon/more-than-six-months.csv diff --git a/bny-mellon/six-months.csv b/leetcode/bny-mellon/six-months.csv similarity index 100% rename from bny-mellon/six-months.csv rename to leetcode/bny-mellon/six-months.csv diff --git a/boeing/all.csv b/leetcode/boeing/all.csv similarity index 100% rename from boeing/all.csv rename to leetcode/boeing/all.csv diff --git a/boeing/more-than-six-months.csv b/leetcode/boeing/more-than-six-months.csv similarity index 100% rename from boeing/more-than-six-months.csv rename to leetcode/boeing/more-than-six-months.csv diff --git a/bolt/all.csv b/leetcode/bolt/all.csv similarity index 100% rename from bolt/all.csv rename to leetcode/bolt/all.csv diff --git a/bolt/more-than-six-months.csv b/leetcode/bolt/more-than-six-months.csv similarity index 100% rename from bolt/more-than-six-months.csv rename to leetcode/bolt/more-than-six-months.csv diff --git a/bolt/six-months.csv b/leetcode/bolt/six-months.csv similarity index 100% rename from bolt/six-months.csv rename to leetcode/bolt/six-months.csv diff --git a/bookingcom/all.csv b/leetcode/bookingcom/all.csv similarity index 100% rename from bookingcom/all.csv rename to leetcode/bookingcom/all.csv diff --git a/bookingcom/more-than-six-months.csv b/leetcode/bookingcom/more-than-six-months.csv similarity index 100% rename from bookingcom/more-than-six-months.csv rename to leetcode/bookingcom/more-than-six-months.csv diff --git a/bookingcom/six-months.csv b/leetcode/bookingcom/six-months.csv similarity index 100% rename from bookingcom/six-months.csv rename to leetcode/bookingcom/six-months.csv diff --git a/bosch/all.csv b/leetcode/bosch/all.csv similarity index 100% rename from bosch/all.csv rename to leetcode/bosch/all.csv diff --git a/bosch/more-than-six-months.csv b/leetcode/bosch/more-than-six-months.csv similarity index 100% rename from bosch/more-than-six-months.csv rename to leetcode/bosch/more-than-six-months.csv diff --git a/box/all.csv b/leetcode/box/all.csv similarity index 100% rename from box/all.csv rename to leetcode/box/all.csv diff --git a/box/more-than-six-months.csv b/leetcode/box/more-than-six-months.csv similarity index 100% rename from box/more-than-six-months.csv rename to leetcode/box/more-than-six-months.csv diff --git a/box/six-months.csv b/leetcode/box/six-months.csv similarity index 100% rename from box/six-months.csv rename to leetcode/box/six-months.csv diff --git a/box/three-months.csv b/leetcode/box/three-months.csv similarity index 100% rename from box/three-months.csv rename to leetcode/box/three-months.csv diff --git a/bp/all.csv b/leetcode/bp/all.csv similarity index 100% rename from bp/all.csv rename to leetcode/bp/all.csv diff --git a/bp/more-than-six-months.csv b/leetcode/bp/more-than-six-months.csv similarity index 100% rename from bp/more-than-six-months.csv rename to leetcode/bp/more-than-six-months.csv diff --git a/braze/all.csv b/leetcode/braze/all.csv similarity index 100% rename from braze/all.csv rename to leetcode/braze/all.csv diff --git a/braze/more-than-six-months.csv b/leetcode/braze/more-than-six-months.csv similarity index 100% rename from braze/more-than-six-months.csv rename to leetcode/braze/more-than-six-months.csv diff --git a/brex/all.csv b/leetcode/brex/all.csv similarity index 100% rename from brex/all.csv rename to leetcode/brex/all.csv diff --git a/brex/more-than-six-months.csv b/leetcode/brex/more-than-six-months.csv similarity index 100% rename from brex/more-than-six-months.csv rename to leetcode/brex/more-than-six-months.csv diff --git a/bridgewater-associates/all.csv b/leetcode/bridgewater-associates/all.csv similarity index 100% rename from bridgewater-associates/all.csv rename to leetcode/bridgewater-associates/all.csv diff --git a/bridgewater-associates/more-than-six-months.csv b/leetcode/bridgewater-associates/more-than-six-months.csv similarity index 100% rename from bridgewater-associates/more-than-six-months.csv rename to leetcode/bridgewater-associates/more-than-six-months.csv diff --git a/brillio/all.csv b/leetcode/brillio/all.csv similarity index 100% rename from brillio/all.csv rename to leetcode/brillio/all.csv diff --git a/broadcom/all.csv b/leetcode/broadcom/all.csv similarity index 100% rename from broadcom/all.csv rename to leetcode/broadcom/all.csv diff --git a/broadcom/more-than-six-months.csv b/leetcode/broadcom/more-than-six-months.csv similarity index 100% rename from broadcom/more-than-six-months.csv rename to leetcode/broadcom/more-than-six-months.csv diff --git a/browserstack/all.csv b/leetcode/browserstack/all.csv similarity index 100% rename from browserstack/all.csv rename to leetcode/browserstack/all.csv diff --git a/bt-group/all.csv b/leetcode/bt-group/all.csv similarity index 100% rename from bt-group/all.csv rename to leetcode/bt-group/all.csv diff --git a/bt-group/more-than-six-months.csv b/leetcode/bt-group/more-than-six-months.csv similarity index 100% rename from bt-group/more-than-six-months.csv rename to leetcode/bt-group/more-than-six-months.csv diff --git a/buyhatke/all.csv b/leetcode/buyhatke/all.csv similarity index 100% rename from buyhatke/all.csv rename to leetcode/buyhatke/all.csv diff --git a/buyhatke/more-than-six-months.csv b/leetcode/buyhatke/more-than-six-months.csv similarity index 100% rename from buyhatke/more-than-six-months.csv rename to leetcode/buyhatke/more-than-six-months.csv diff --git a/bytedance/all.csv b/leetcode/bytedance/all.csv similarity index 100% rename from bytedance/all.csv rename to leetcode/bytedance/all.csv diff --git a/bytedance/more-than-six-months.csv b/leetcode/bytedance/more-than-six-months.csv similarity index 100% rename from bytedance/more-than-six-months.csv rename to leetcode/bytedance/more-than-six-months.csv diff --git a/bytedance/six-months.csv b/leetcode/bytedance/six-months.csv similarity index 100% rename from bytedance/six-months.csv rename to leetcode/bytedance/six-months.csv diff --git a/bytedance/three-months.csv b/leetcode/bytedance/three-months.csv similarity index 100% rename from bytedance/three-months.csv rename to leetcode/bytedance/three-months.csv diff --git a/c3-ai/all.csv b/leetcode/c3-ai/all.csv similarity index 100% rename from c3-ai/all.csv rename to leetcode/c3-ai/all.csv diff --git a/c3-ai/six-months.csv b/leetcode/c3-ai/six-months.csv similarity index 100% rename from c3-ai/six-months.csv rename to leetcode/c3-ai/six-months.csv diff --git a/c3-ai/three-months.csv b/leetcode/c3-ai/three-months.csv similarity index 100% rename from c3-ai/three-months.csv rename to leetcode/c3-ai/three-months.csv diff --git a/caastle/all.csv b/leetcode/caastle/all.csv similarity index 100% rename from caastle/all.csv rename to leetcode/caastle/all.csv diff --git a/caastle/more-than-six-months.csv b/leetcode/caastle/more-than-six-months.csv similarity index 100% rename from caastle/more-than-six-months.csv rename to leetcode/caastle/more-than-six-months.csv diff --git a/cadence/all.csv b/leetcode/cadence/all.csv similarity index 100% rename from cadence/all.csv rename to leetcode/cadence/all.csv diff --git a/cadence/more-than-six-months.csv b/leetcode/cadence/more-than-six-months.csv similarity index 100% rename from cadence/more-than-six-months.csv rename to leetcode/cadence/more-than-six-months.csv diff --git a/cadence/six-months.csv b/leetcode/cadence/six-months.csv similarity index 100% rename from cadence/six-months.csv rename to leetcode/cadence/six-months.csv diff --git a/canonical/all.csv b/leetcode/canonical/all.csv similarity index 100% rename from canonical/all.csv rename to leetcode/canonical/all.csv diff --git a/canonical/more-than-six-months.csv b/leetcode/canonical/more-than-six-months.csv similarity index 100% rename from canonical/more-than-six-months.csv rename to leetcode/canonical/more-than-six-months.csv diff --git a/canonical/six-months.csv b/leetcode/canonical/six-months.csv similarity index 100% rename from canonical/six-months.csv rename to leetcode/canonical/six-months.csv diff --git a/canva/all.csv b/leetcode/canva/all.csv similarity index 100% rename from canva/all.csv rename to leetcode/canva/all.csv diff --git a/canva/more-than-six-months.csv b/leetcode/canva/more-than-six-months.csv similarity index 100% rename from canva/more-than-six-months.csv rename to leetcode/canva/more-than-six-months.csv diff --git a/canva/six-months.csv b/leetcode/canva/six-months.csv similarity index 100% rename from canva/six-months.csv rename to leetcode/canva/six-months.csv diff --git a/capgemini/all.csv b/leetcode/capgemini/all.csv similarity index 100% rename from capgemini/all.csv rename to leetcode/capgemini/all.csv diff --git a/capgemini/more-than-six-months.csv b/leetcode/capgemini/more-than-six-months.csv similarity index 100% rename from capgemini/more-than-six-months.csv rename to leetcode/capgemini/more-than-six-months.csv diff --git a/capgemini/six-months.csv b/leetcode/capgemini/six-months.csv similarity index 100% rename from capgemini/six-months.csv rename to leetcode/capgemini/six-months.csv diff --git a/capgemini/three-months.csv b/leetcode/capgemini/three-months.csv similarity index 100% rename from capgemini/three-months.csv rename to leetcode/capgemini/three-months.csv diff --git a/capital-one/all.csv b/leetcode/capital-one/all.csv similarity index 100% rename from capital-one/all.csv rename to leetcode/capital-one/all.csv diff --git a/capital-one/more-than-six-months.csv b/leetcode/capital-one/more-than-six-months.csv similarity index 100% rename from capital-one/more-than-six-months.csv rename to leetcode/capital-one/more-than-six-months.csv diff --git a/capital-one/six-months.csv b/leetcode/capital-one/six-months.csv similarity index 100% rename from capital-one/six-months.csv rename to leetcode/capital-one/six-months.csv diff --git a/capital-one/thirty-days.csv b/leetcode/capital-one/thirty-days.csv similarity index 100% rename from capital-one/thirty-days.csv rename to leetcode/capital-one/thirty-days.csv diff --git a/capital-one/three-months.csv b/leetcode/capital-one/three-months.csv similarity index 100% rename from capital-one/three-months.csv rename to leetcode/capital-one/three-months.csv diff --git a/careem/all.csv b/leetcode/careem/all.csv similarity index 100% rename from careem/all.csv rename to leetcode/careem/all.csv diff --git a/careem/more-than-six-months.csv b/leetcode/careem/more-than-six-months.csv similarity index 100% rename from careem/more-than-six-months.csv rename to leetcode/careem/more-than-six-months.csv diff --git a/careem/six-months.csv b/leetcode/careem/six-months.csv similarity index 100% rename from careem/six-months.csv rename to leetcode/careem/six-months.csv diff --git a/careem/thirty-days.csv b/leetcode/careem/thirty-days.csv similarity index 100% rename from careem/thirty-days.csv rename to leetcode/careem/thirty-days.csv diff --git a/careem/three-months.csv b/leetcode/careem/three-months.csv similarity index 100% rename from careem/three-months.csv rename to leetcode/careem/three-months.csv diff --git a/cars24/all.csv b/leetcode/cars24/all.csv similarity index 100% rename from cars24/all.csv rename to leetcode/cars24/all.csv diff --git a/cars24/more-than-six-months.csv b/leetcode/cars24/more-than-six-months.csv similarity index 100% rename from cars24/more-than-six-months.csv rename to leetcode/cars24/more-than-six-months.csv diff --git a/carwale/all.csv b/leetcode/carwale/all.csv similarity index 100% rename from carwale/all.csv rename to leetcode/carwale/all.csv diff --git a/carwale/more-than-six-months.csv b/leetcode/carwale/more-than-six-months.csv similarity index 100% rename from carwale/more-than-six-months.csv rename to leetcode/carwale/more-than-six-months.csv diff --git a/cashfree/all.csv b/leetcode/cashfree/all.csv similarity index 100% rename from cashfree/all.csv rename to leetcode/cashfree/all.csv diff --git a/cashfree/more-than-six-months.csv b/leetcode/cashfree/more-than-six-months.csv similarity index 100% rename from cashfree/more-than-six-months.csv rename to leetcode/cashfree/more-than-six-months.csv diff --git a/caterpillar/all.csv b/leetcode/caterpillar/all.csv similarity index 100% rename from caterpillar/all.csv rename to leetcode/caterpillar/all.csv diff --git a/cedcoss/all.csv b/leetcode/cedcoss/all.csv similarity index 100% rename from cedcoss/all.csv rename to leetcode/cedcoss/all.csv diff --git a/cedcoss/more-than-six-months.csv b/leetcode/cedcoss/more-than-six-months.csv similarity index 100% rename from cedcoss/more-than-six-months.csv rename to leetcode/cedcoss/more-than-six-months.csv diff --git a/celigo/all.csv b/leetcode/celigo/all.csv similarity index 100% rename from celigo/all.csv rename to leetcode/celigo/all.csv diff --git a/celigo/more-than-six-months.csv b/leetcode/celigo/more-than-six-months.csv similarity index 100% rename from celigo/more-than-six-months.csv rename to leetcode/celigo/more-than-six-months.csv diff --git a/chalo/all.csv b/leetcode/chalo/all.csv similarity index 100% rename from chalo/all.csv rename to leetcode/chalo/all.csv diff --git a/chalo/more-than-six-months.csv b/leetcode/chalo/more-than-six-months.csv similarity index 100% rename from chalo/more-than-six-months.csv rename to leetcode/chalo/more-than-six-months.csv diff --git a/chargebee/all.csv b/leetcode/chargebee/all.csv similarity index 100% rename from chargebee/all.csv rename to leetcode/chargebee/all.csv diff --git a/chargebee/six-months.csv b/leetcode/chargebee/six-months.csv similarity index 100% rename from chargebee/six-months.csv rename to leetcode/chargebee/six-months.csv diff --git a/chewy/all.csv b/leetcode/chewy/all.csv similarity index 100% rename from chewy/all.csv rename to leetcode/chewy/all.csv diff --git a/chewy/more-than-six-months.csv b/leetcode/chewy/more-than-six-months.csv similarity index 100% rename from chewy/more-than-six-months.csv rename to leetcode/chewy/more-than-six-months.csv diff --git a/chime/all.csv b/leetcode/chime/all.csv similarity index 100% rename from chime/all.csv rename to leetcode/chime/all.csv diff --git a/chime/more-than-six-months.csv b/leetcode/chime/more-than-six-months.csv similarity index 100% rename from chime/more-than-six-months.csv rename to leetcode/chime/more-than-six-months.csv diff --git a/chronus/all.csv b/leetcode/chronus/all.csv similarity index 100% rename from chronus/all.csv rename to leetcode/chronus/all.csv diff --git a/chronus/more-than-six-months.csv b/leetcode/chronus/more-than-six-months.csv similarity index 100% rename from chronus/more-than-six-months.csv rename to leetcode/chronus/more-than-six-months.csv diff --git a/chubb/all.csv b/leetcode/chubb/all.csv similarity index 100% rename from chubb/all.csv rename to leetcode/chubb/all.csv diff --git a/chubb/more-than-six-months.csv b/leetcode/chubb/more-than-six-months.csv similarity index 100% rename from chubb/more-than-six-months.csv rename to leetcode/chubb/more-than-six-months.csv diff --git a/ciena/all.csv b/leetcode/ciena/all.csv similarity index 100% rename from ciena/all.csv rename to leetcode/ciena/all.csv diff --git a/ciena/more-than-six-months.csv b/leetcode/ciena/more-than-six-months.csv similarity index 100% rename from ciena/more-than-six-months.csv rename to leetcode/ciena/more-than-six-months.csv diff --git a/circle/all.csv b/leetcode/circle/all.csv similarity index 100% rename from circle/all.csv rename to leetcode/circle/all.csv diff --git a/circle/more-than-six-months.csv b/leetcode/circle/more-than-six-months.csv similarity index 100% rename from circle/more-than-six-months.csv rename to leetcode/circle/more-than-six-months.csv diff --git a/cisco/all.csv b/leetcode/cisco/all.csv similarity index 100% rename from cisco/all.csv rename to leetcode/cisco/all.csv diff --git a/cisco/more-than-six-months.csv b/leetcode/cisco/more-than-six-months.csv similarity index 100% rename from cisco/more-than-six-months.csv rename to leetcode/cisco/more-than-six-months.csv diff --git a/cisco/six-months.csv b/leetcode/cisco/six-months.csv similarity index 100% rename from cisco/six-months.csv rename to leetcode/cisco/six-months.csv diff --git a/cisco/thirty-days.csv b/leetcode/cisco/thirty-days.csv similarity index 100% rename from cisco/thirty-days.csv rename to leetcode/cisco/thirty-days.csv diff --git a/cisco/three-months.csv b/leetcode/cisco/three-months.csv similarity index 100% rename from cisco/three-months.csv rename to leetcode/cisco/three-months.csv diff --git a/citadel/all.csv b/leetcode/citadel/all.csv similarity index 100% rename from citadel/all.csv rename to leetcode/citadel/all.csv diff --git a/citadel/more-than-six-months.csv b/leetcode/citadel/more-than-six-months.csv similarity index 100% rename from citadel/more-than-six-months.csv rename to leetcode/citadel/more-than-six-months.csv diff --git a/citadel/six-months.csv b/leetcode/citadel/six-months.csv similarity index 100% rename from citadel/six-months.csv rename to leetcode/citadel/six-months.csv diff --git a/citadel/thirty-days.csv b/leetcode/citadel/thirty-days.csv similarity index 100% rename from citadel/thirty-days.csv rename to leetcode/citadel/thirty-days.csv diff --git a/citadel/three-months.csv b/leetcode/citadel/three-months.csv similarity index 100% rename from citadel/three-months.csv rename to leetcode/citadel/three-months.csv diff --git a/citi/all.csv b/leetcode/citi/all.csv similarity index 100% rename from citi/all.csv rename to leetcode/citi/all.csv diff --git a/citi/more-than-six-months.csv b/leetcode/citi/more-than-six-months.csv similarity index 100% rename from citi/more-than-six-months.csv rename to leetcode/citi/more-than-six-months.csv diff --git a/citrix/all.csv b/leetcode/citrix/all.csv similarity index 100% rename from citrix/all.csv rename to leetcode/citrix/all.csv diff --git a/citrix/more-than-six-months.csv b/leetcode/citrix/more-than-six-months.csv similarity index 100% rename from citrix/more-than-six-months.csv rename to leetcode/citrix/more-than-six-months.csv diff --git a/clari/all.csv b/leetcode/clari/all.csv similarity index 100% rename from clari/all.csv rename to leetcode/clari/all.csv diff --git a/clari/more-than-six-months.csv b/leetcode/clari/more-than-six-months.csv similarity index 100% rename from clari/more-than-six-months.csv rename to leetcode/clari/more-than-six-months.csv diff --git a/cleartax/all.csv b/leetcode/cleartax/all.csv similarity index 100% rename from cleartax/all.csv rename to leetcode/cleartax/all.csv diff --git a/cleartax/more-than-six-months.csv b/leetcode/cleartax/more-than-six-months.csv similarity index 100% rename from cleartax/more-than-six-months.csv rename to leetcode/cleartax/more-than-six-months.csv diff --git a/cleartrip/all.csv b/leetcode/cleartrip/all.csv similarity index 100% rename from cleartrip/all.csv rename to leetcode/cleartrip/all.csv diff --git a/cleartrip/more-than-six-months.csv b/leetcode/cleartrip/more-than-six-months.csv similarity index 100% rename from cleartrip/more-than-six-months.csv rename to leetcode/cleartrip/more-than-six-months.csv diff --git a/cleartrip/six-months.csv b/leetcode/cleartrip/six-months.csv similarity index 100% rename from cleartrip/six-months.csv rename to leetcode/cleartrip/six-months.csv diff --git a/cloudera/all.csv b/leetcode/cloudera/all.csv similarity index 100% rename from cloudera/all.csv rename to leetcode/cloudera/all.csv diff --git a/cloudera/more-than-six-months.csv b/leetcode/cloudera/more-than-six-months.csv similarity index 100% rename from cloudera/more-than-six-months.csv rename to leetcode/cloudera/more-than-six-months.csv diff --git a/cloudflare/all.csv b/leetcode/cloudflare/all.csv similarity index 100% rename from cloudflare/all.csv rename to leetcode/cloudflare/all.csv diff --git a/cloudflare/more-than-six-months.csv b/leetcode/cloudflare/more-than-six-months.csv similarity index 100% rename from cloudflare/more-than-six-months.csv rename to leetcode/cloudflare/more-than-six-months.csv diff --git a/cloudflare/six-months.csv b/leetcode/cloudflare/six-months.csv similarity index 100% rename from cloudflare/six-months.csv rename to leetcode/cloudflare/six-months.csv diff --git a/cloudflare/thirty-days.csv b/leetcode/cloudflare/thirty-days.csv similarity index 100% rename from cloudflare/thirty-days.csv rename to leetcode/cloudflare/thirty-days.csv diff --git a/cloudflare/three-months.csv b/leetcode/cloudflare/three-months.csv similarity index 100% rename from cloudflare/three-months.csv rename to leetcode/cloudflare/three-months.csv diff --git a/clumio/all.csv b/leetcode/clumio/all.csv similarity index 100% rename from clumio/all.csv rename to leetcode/clumio/all.csv diff --git a/clumio/more-than-six-months.csv b/leetcode/clumio/more-than-six-months.csv similarity index 100% rename from clumio/more-than-six-months.csv rename to leetcode/clumio/more-than-six-months.csv diff --git a/clutter/all.csv b/leetcode/clutter/all.csv similarity index 100% rename from clutter/all.csv rename to leetcode/clutter/all.csv diff --git a/clutter/more-than-six-months.csv b/leetcode/clutter/more-than-six-months.csv similarity index 100% rename from clutter/more-than-six-months.csv rename to leetcode/clutter/more-than-six-months.csv diff --git a/cme-group/all.csv b/leetcode/cme-group/all.csv similarity index 100% rename from cme-group/all.csv rename to leetcode/cme-group/all.csv diff --git a/cme-group/more-than-six-months.csv b/leetcode/cme-group/more-than-six-months.csv similarity index 100% rename from cme-group/more-than-six-months.csv rename to leetcode/cme-group/more-than-six-months.csv diff --git a/cme-group/six-months.csv b/leetcode/cme-group/six-months.csv similarity index 100% rename from cme-group/six-months.csv rename to leetcode/cme-group/six-months.csv diff --git a/cme-group/thirty-days.csv b/leetcode/cme-group/thirty-days.csv similarity index 100% rename from cme-group/thirty-days.csv rename to leetcode/cme-group/thirty-days.csv diff --git a/cme-group/three-months.csv b/leetcode/cme-group/three-months.csv similarity index 100% rename from cme-group/three-months.csv rename to leetcode/cme-group/three-months.csv diff --git a/cockroach-labs/all.csv b/leetcode/cockroach-labs/all.csv similarity index 100% rename from cockroach-labs/all.csv rename to leetcode/cockroach-labs/all.csv diff --git a/cockroach-labs/more-than-six-months.csv b/leetcode/cockroach-labs/more-than-six-months.csv similarity index 100% rename from cockroach-labs/more-than-six-months.csv rename to leetcode/cockroach-labs/more-than-six-months.csv diff --git a/cockroach-labs/six-months.csv b/leetcode/cockroach-labs/six-months.csv similarity index 100% rename from cockroach-labs/six-months.csv rename to leetcode/cockroach-labs/six-months.csv diff --git a/cockroach-labs/thirty-days.csv b/leetcode/cockroach-labs/thirty-days.csv similarity index 100% rename from cockroach-labs/thirty-days.csv rename to leetcode/cockroach-labs/thirty-days.csv diff --git a/cockroach-labs/three-months.csv b/leetcode/cockroach-labs/three-months.csv similarity index 100% rename from cockroach-labs/three-months.csv rename to leetcode/cockroach-labs/three-months.csv diff --git a/code-studio/all.csv b/leetcode/code-studio/all.csv similarity index 100% rename from code-studio/all.csv rename to leetcode/code-studio/all.csv diff --git a/code-studio/more-than-six-months.csv b/leetcode/code-studio/more-than-six-months.csv similarity index 100% rename from code-studio/more-than-six-months.csv rename to leetcode/code-studio/more-than-six-months.csv diff --git a/codingmart/all.csv b/leetcode/codingmart/all.csv similarity index 100% rename from codingmart/all.csv rename to leetcode/codingmart/all.csv diff --git a/codingmart/more-than-six-months.csv b/leetcode/codingmart/more-than-six-months.csv similarity index 100% rename from codingmart/more-than-six-months.csv rename to leetcode/codingmart/more-than-six-months.csv diff --git a/cognizant/all.csv b/leetcode/cognizant/all.csv similarity index 100% rename from cognizant/all.csv rename to leetcode/cognizant/all.csv diff --git a/cognizant/more-than-six-months.csv b/leetcode/cognizant/more-than-six-months.csv similarity index 100% rename from cognizant/more-than-six-months.csv rename to leetcode/cognizant/more-than-six-months.csv diff --git a/cognizant/six-months.csv b/leetcode/cognizant/six-months.csv similarity index 100% rename from cognizant/six-months.csv rename to leetcode/cognizant/six-months.csv diff --git a/cognizant/three-months.csv b/leetcode/cognizant/three-months.csv similarity index 100% rename from cognizant/three-months.csv rename to leetcode/cognizant/three-months.csv diff --git a/cohesity/all.csv b/leetcode/cohesity/all.csv similarity index 100% rename from cohesity/all.csv rename to leetcode/cohesity/all.csv diff --git a/cohesity/more-than-six-months.csv b/leetcode/cohesity/more-than-six-months.csv similarity index 100% rename from cohesity/more-than-six-months.csv rename to leetcode/cohesity/more-than-six-months.csv diff --git a/cohesity/six-months.csv b/leetcode/cohesity/six-months.csv similarity index 100% rename from cohesity/six-months.csv rename to leetcode/cohesity/six-months.csv diff --git a/cohesity/thirty-days.csv b/leetcode/cohesity/thirty-days.csv similarity index 100% rename from cohesity/thirty-days.csv rename to leetcode/cohesity/thirty-days.csv diff --git a/cohesity/three-months.csv b/leetcode/cohesity/three-months.csv similarity index 100% rename from cohesity/three-months.csv rename to leetcode/cohesity/three-months.csv diff --git a/coinbase/all.csv b/leetcode/coinbase/all.csv similarity index 100% rename from coinbase/all.csv rename to leetcode/coinbase/all.csv diff --git a/coinbase/more-than-six-months.csv b/leetcode/coinbase/more-than-six-months.csv similarity index 100% rename from coinbase/more-than-six-months.csv rename to leetcode/coinbase/more-than-six-months.csv diff --git a/coinbase/six-months.csv b/leetcode/coinbase/six-months.csv similarity index 100% rename from coinbase/six-months.csv rename to leetcode/coinbase/six-months.csv diff --git a/coinbase/thirty-days.csv b/leetcode/coinbase/thirty-days.csv similarity index 100% rename from coinbase/thirty-days.csv rename to leetcode/coinbase/thirty-days.csv diff --git a/coinbase/three-months.csv b/leetcode/coinbase/three-months.csv similarity index 100% rename from coinbase/three-months.csv rename to leetcode/coinbase/three-months.csv diff --git a/coindcx/all.csv b/leetcode/coindcx/all.csv similarity index 100% rename from coindcx/all.csv rename to leetcode/coindcx/all.csv diff --git a/coindcx/more-than-six-months.csv b/leetcode/coindcx/more-than-six-months.csv similarity index 100% rename from coindcx/more-than-six-months.csv rename to leetcode/coindcx/more-than-six-months.csv diff --git a/coindcx/six-months.csv b/leetcode/coindcx/six-months.csv similarity index 100% rename from coindcx/six-months.csv rename to leetcode/coindcx/six-months.csv diff --git a/comcast/all.csv b/leetcode/comcast/all.csv similarity index 100% rename from comcast/all.csv rename to leetcode/comcast/all.csv diff --git a/comcast/more-than-six-months.csv b/leetcode/comcast/more-than-six-months.csv similarity index 100% rename from comcast/more-than-six-months.csv rename to leetcode/comcast/more-than-six-months.csv diff --git a/comcast/six-months.csv b/leetcode/comcast/six-months.csv similarity index 100% rename from comcast/six-months.csv rename to leetcode/comcast/six-months.csv diff --git a/commvault/all.csv b/leetcode/commvault/all.csv similarity index 100% rename from commvault/all.csv rename to leetcode/commvault/all.csv diff --git a/commvault/more-than-six-months.csv b/leetcode/commvault/more-than-six-months.csv similarity index 100% rename from commvault/more-than-six-months.csv rename to leetcode/commvault/more-than-six-months.csv diff --git a/compass/all.csv b/leetcode/compass/all.csv similarity index 100% rename from compass/all.csv rename to leetcode/compass/all.csv diff --git a/compass/more-than-six-months.csv b/leetcode/compass/more-than-six-months.csv similarity index 100% rename from compass/more-than-six-months.csv rename to leetcode/compass/more-than-six-months.csv diff --git a/compass/six-months.csv b/leetcode/compass/six-months.csv similarity index 100% rename from compass/six-months.csv rename to leetcode/compass/six-months.csv diff --git a/confluent/all.csv b/leetcode/confluent/all.csv similarity index 100% rename from confluent/all.csv rename to leetcode/confluent/all.csv diff --git a/confluent/more-than-six-months.csv b/leetcode/confluent/more-than-six-months.csv similarity index 100% rename from confluent/more-than-six-months.csv rename to leetcode/confluent/more-than-six-months.csv diff --git a/confluent/six-months.csv b/leetcode/confluent/six-months.csv similarity index 100% rename from confluent/six-months.csv rename to leetcode/confluent/six-months.csv diff --git a/confluent/thirty-days.csv b/leetcode/confluent/thirty-days.csv similarity index 100% rename from confluent/thirty-days.csv rename to leetcode/confluent/thirty-days.csv diff --git a/confluent/three-months.csv b/leetcode/confluent/three-months.csv similarity index 100% rename from confluent/three-months.csv rename to leetcode/confluent/three-months.csv diff --git a/consultadd/all.csv b/leetcode/consultadd/all.csv similarity index 100% rename from consultadd/all.csv rename to leetcode/consultadd/all.csv diff --git a/consultadd/more-than-six-months.csv b/leetcode/consultadd/more-than-six-months.csv similarity index 100% rename from consultadd/more-than-six-months.csv rename to leetcode/consultadd/more-than-six-months.csv diff --git a/couchbase/all.csv b/leetcode/couchbase/all.csv similarity index 100% rename from couchbase/all.csv rename to leetcode/couchbase/all.csv diff --git a/couchbase/more-than-six-months.csv b/leetcode/couchbase/more-than-six-months.csv similarity index 100% rename from couchbase/more-than-six-months.csv rename to leetcode/couchbase/more-than-six-months.csv diff --git a/couchbase/six-months.csv b/leetcode/couchbase/six-months.csv similarity index 100% rename from couchbase/six-months.csv rename to leetcode/couchbase/six-months.csv diff --git a/coupang/all.csv b/leetcode/coupang/all.csv similarity index 100% rename from coupang/all.csv rename to leetcode/coupang/all.csv diff --git a/coupang/more-than-six-months.csv b/leetcode/coupang/more-than-six-months.csv similarity index 100% rename from coupang/more-than-six-months.csv rename to leetcode/coupang/more-than-six-months.csv diff --git a/coupang/six-months.csv b/leetcode/coupang/six-months.csv similarity index 100% rename from coupang/six-months.csv rename to leetcode/coupang/six-months.csv diff --git a/coupang/three-months.csv b/leetcode/coupang/three-months.csv similarity index 100% rename from coupang/three-months.csv rename to leetcode/coupang/three-months.csv diff --git a/coursera/all.csv b/leetcode/coursera/all.csv similarity index 100% rename from coursera/all.csv rename to leetcode/coursera/all.csv diff --git a/coursera/more-than-six-months.csv b/leetcode/coursera/more-than-six-months.csv similarity index 100% rename from coursera/more-than-six-months.csv rename to leetcode/coursera/more-than-six-months.csv diff --git a/coursera/six-months.csv b/leetcode/coursera/six-months.csv similarity index 100% rename from coursera/six-months.csv rename to leetcode/coursera/six-months.csv diff --git a/coursera/three-months.csv b/leetcode/coursera/three-months.csv similarity index 100% rename from coursera/three-months.csv rename to leetcode/coursera/three-months.csv diff --git a/coveo/all.csv b/leetcode/coveo/all.csv similarity index 100% rename from coveo/all.csv rename to leetcode/coveo/all.csv diff --git a/coveo/more-than-six-months.csv b/leetcode/coveo/more-than-six-months.csv similarity index 100% rename from coveo/more-than-six-months.csv rename to leetcode/coveo/more-than-six-months.csv diff --git a/cred/all.csv b/leetcode/cred/all.csv similarity index 100% rename from cred/all.csv rename to leetcode/cred/all.csv diff --git a/cred/six-months.csv b/leetcode/cred/six-months.csv similarity index 100% rename from cred/six-months.csv rename to leetcode/cred/six-months.csv diff --git a/cred/thirty-days.csv b/leetcode/cred/thirty-days.csv similarity index 100% rename from cred/thirty-days.csv rename to leetcode/cred/thirty-days.csv diff --git a/cred/three-months.csv b/leetcode/cred/three-months.csv similarity index 100% rename from cred/three-months.csv rename to leetcode/cred/three-months.csv diff --git a/credit-karma/all.csv b/leetcode/credit-karma/all.csv similarity index 100% rename from credit-karma/all.csv rename to leetcode/credit-karma/all.csv diff --git a/credit-karma/more-than-six-months.csv b/leetcode/credit-karma/more-than-six-months.csv similarity index 100% rename from credit-karma/more-than-six-months.csv rename to leetcode/credit-karma/more-than-six-months.csv diff --git a/criteo/all.csv b/leetcode/criteo/all.csv similarity index 100% rename from criteo/all.csv rename to leetcode/criteo/all.csv diff --git a/criteo/more-than-six-months.csv b/leetcode/criteo/more-than-six-months.csv similarity index 100% rename from criteo/more-than-six-months.csv rename to leetcode/criteo/more-than-six-months.csv diff --git a/criteo/six-months.csv b/leetcode/criteo/six-months.csv similarity index 100% rename from criteo/six-months.csv rename to leetcode/criteo/six-months.csv diff --git a/criteo/three-months.csv b/leetcode/criteo/three-months.csv similarity index 100% rename from criteo/three-months.csv rename to leetcode/criteo/three-months.csv diff --git a/crowdstrike/all.csv b/leetcode/crowdstrike/all.csv similarity index 100% rename from crowdstrike/all.csv rename to leetcode/crowdstrike/all.csv diff --git a/crowdstrike/more-than-six-months.csv b/leetcode/crowdstrike/more-than-six-months.csv similarity index 100% rename from crowdstrike/more-than-six-months.csv rename to leetcode/crowdstrike/more-than-six-months.csv diff --git a/crowdstrike/six-months.csv b/leetcode/crowdstrike/six-months.csv similarity index 100% rename from crowdstrike/six-months.csv rename to leetcode/crowdstrike/six-months.csv diff --git a/crowdstrike/three-months.csv b/leetcode/crowdstrike/three-months.csv similarity index 100% rename from crowdstrike/three-months.csv rename to leetcode/crowdstrike/three-months.csv diff --git a/cruise-automation/all.csv b/leetcode/cruise-automation/all.csv similarity index 100% rename from cruise-automation/all.csv rename to leetcode/cruise-automation/all.csv diff --git a/cruise-automation/more-than-six-months.csv b/leetcode/cruise-automation/more-than-six-months.csv similarity index 100% rename from cruise-automation/more-than-six-months.csv rename to leetcode/cruise-automation/more-than-six-months.csv diff --git a/cruise-automation/six-months.csv b/leetcode/cruise-automation/six-months.csv similarity index 100% rename from cruise-automation/six-months.csv rename to leetcode/cruise-automation/six-months.csv diff --git a/ctc/all.csv b/leetcode/ctc/all.csv similarity index 100% rename from ctc/all.csv rename to leetcode/ctc/all.csv diff --git a/ctc/more-than-six-months.csv b/leetcode/ctc/more-than-six-months.csv similarity index 100% rename from ctc/more-than-six-months.csv rename to leetcode/ctc/more-than-six-months.csv diff --git a/curefit/all.csv b/leetcode/curefit/all.csv similarity index 100% rename from curefit/all.csv rename to leetcode/curefit/all.csv diff --git a/curefit/more-than-six-months.csv b/leetcode/curefit/more-than-six-months.csv similarity index 100% rename from curefit/more-than-six-months.csv rename to leetcode/curefit/more-than-six-months.csv diff --git a/cvent/all.csv b/leetcode/cvent/all.csv similarity index 100% rename from cvent/all.csv rename to leetcode/cvent/all.csv diff --git a/cvent/more-than-six-months.csv b/leetcode/cvent/more-than-six-months.csv similarity index 100% rename from cvent/more-than-six-months.csv rename to leetcode/cvent/more-than-six-months.csv diff --git a/cyntexa/all.csv b/leetcode/cyntexa/all.csv similarity index 100% rename from cyntexa/all.csv rename to leetcode/cyntexa/all.csv diff --git a/cyntexa/more-than-six-months.csv b/leetcode/cyntexa/more-than-six-months.csv similarity index 100% rename from cyntexa/more-than-six-months.csv rename to leetcode/cyntexa/more-than-six-months.csv diff --git a/cyware/all.csv b/leetcode/cyware/all.csv similarity index 100% rename from cyware/all.csv rename to leetcode/cyware/all.csv diff --git a/cyware/more-than-six-months.csv b/leetcode/cyware/more-than-six-months.csv similarity index 100% rename from cyware/more-than-six-months.csv rename to leetcode/cyware/more-than-six-months.csv diff --git a/dailyhunt/all.csv b/leetcode/dailyhunt/all.csv similarity index 100% rename from dailyhunt/all.csv rename to leetcode/dailyhunt/all.csv diff --git a/dailyhunt/more-than-six-months.csv b/leetcode/dailyhunt/more-than-six-months.csv similarity index 100% rename from dailyhunt/more-than-six-months.csv rename to leetcode/dailyhunt/more-than-six-months.csv diff --git a/darwinbox/all.csv b/leetcode/darwinbox/all.csv similarity index 100% rename from darwinbox/all.csv rename to leetcode/darwinbox/all.csv diff --git a/darwinbox/more-than-six-months.csv b/leetcode/darwinbox/more-than-six-months.csv similarity index 100% rename from darwinbox/more-than-six-months.csv rename to leetcode/darwinbox/more-than-six-months.csv diff --git a/darwinbox/six-months.csv b/leetcode/darwinbox/six-months.csv similarity index 100% rename from darwinbox/six-months.csv rename to leetcode/darwinbox/six-months.csv diff --git a/darwinbox/thirty-days.csv b/leetcode/darwinbox/thirty-days.csv similarity index 100% rename from darwinbox/thirty-days.csv rename to leetcode/darwinbox/thirty-days.csv diff --git a/darwinbox/three-months.csv b/leetcode/darwinbox/three-months.csv similarity index 100% rename from darwinbox/three-months.csv rename to leetcode/darwinbox/three-months.csv diff --git a/dassault-sysetmes/all.csv b/leetcode/dassault-sysetmes/all.csv similarity index 100% rename from dassault-sysetmes/all.csv rename to leetcode/dassault-sysetmes/all.csv diff --git a/dassault-sysetmes/more-than-six-months.csv b/leetcode/dassault-sysetmes/more-than-six-months.csv similarity index 100% rename from dassault-sysetmes/more-than-six-months.csv rename to leetcode/dassault-sysetmes/more-than-six-months.csv diff --git a/databricks/all.csv b/leetcode/databricks/all.csv similarity index 100% rename from databricks/all.csv rename to leetcode/databricks/all.csv diff --git a/databricks/more-than-six-months.csv b/leetcode/databricks/more-than-six-months.csv similarity index 100% rename from databricks/more-than-six-months.csv rename to leetcode/databricks/more-than-six-months.csv diff --git a/databricks/six-months.csv b/leetcode/databricks/six-months.csv similarity index 100% rename from databricks/six-months.csv rename to leetcode/databricks/six-months.csv diff --git a/databricks/thirty-days.csv b/leetcode/databricks/thirty-days.csv similarity index 100% rename from databricks/thirty-days.csv rename to leetcode/databricks/thirty-days.csv diff --git a/databricks/three-months.csv b/leetcode/databricks/three-months.csv similarity index 100% rename from databricks/three-months.csv rename to leetcode/databricks/three-months.csv diff --git a/datadog/all.csv b/leetcode/datadog/all.csv similarity index 100% rename from datadog/all.csv rename to leetcode/datadog/all.csv diff --git a/datadog/more-than-six-months.csv b/leetcode/datadog/more-than-six-months.csv similarity index 100% rename from datadog/more-than-six-months.csv rename to leetcode/datadog/more-than-six-months.csv diff --git a/datadog/six-months.csv b/leetcode/datadog/six-months.csv similarity index 100% rename from datadog/six-months.csv rename to leetcode/datadog/six-months.csv diff --git a/datadog/three-months.csv b/leetcode/datadog/three-months.csv similarity index 100% rename from datadog/three-months.csv rename to leetcode/datadog/three-months.csv diff --git a/dataminr/all.csv b/leetcode/dataminr/all.csv similarity index 100% rename from dataminr/all.csv rename to leetcode/dataminr/all.csv diff --git a/dataminr/more-than-six-months.csv b/leetcode/dataminr/more-than-six-months.csv similarity index 100% rename from dataminr/more-than-six-months.csv rename to leetcode/dataminr/more-than-six-months.csv diff --git a/de-shaw/all.csv b/leetcode/de-shaw/all.csv similarity index 100% rename from de-shaw/all.csv rename to leetcode/de-shaw/all.csv diff --git a/de-shaw/more-than-six-months.csv b/leetcode/de-shaw/more-than-six-months.csv similarity index 100% rename from de-shaw/more-than-six-months.csv rename to leetcode/de-shaw/more-than-six-months.csv diff --git a/de-shaw/six-months.csv b/leetcode/de-shaw/six-months.csv similarity index 100% rename from de-shaw/six-months.csv rename to leetcode/de-shaw/six-months.csv diff --git a/de-shaw/thirty-days.csv b/leetcode/de-shaw/thirty-days.csv similarity index 100% rename from de-shaw/thirty-days.csv rename to leetcode/de-shaw/thirty-days.csv diff --git a/de-shaw/three-months.csv b/leetcode/de-shaw/three-months.csv similarity index 100% rename from de-shaw/three-months.csv rename to leetcode/de-shaw/three-months.csv diff --git a/deepmind/all.csv b/leetcode/deepmind/all.csv similarity index 100% rename from deepmind/all.csv rename to leetcode/deepmind/all.csv diff --git a/deepmind/more-than-six-months.csv b/leetcode/deepmind/more-than-six-months.csv similarity index 100% rename from deepmind/more-than-six-months.csv rename to leetcode/deepmind/more-than-six-months.csv diff --git a/delhivery/all.csv b/leetcode/delhivery/all.csv similarity index 100% rename from delhivery/all.csv rename to leetcode/delhivery/all.csv diff --git a/delhivery/more-than-six-months.csv b/leetcode/delhivery/more-than-six-months.csv similarity index 100% rename from delhivery/more-than-six-months.csv rename to leetcode/delhivery/more-than-six-months.csv diff --git a/deliveroo/all.csv b/leetcode/deliveroo/all.csv similarity index 100% rename from deliveroo/all.csv rename to leetcode/deliveroo/all.csv diff --git a/deliveroo/more-than-six-months.csv b/leetcode/deliveroo/more-than-six-months.csv similarity index 100% rename from deliveroo/more-than-six-months.csv rename to leetcode/deliveroo/more-than-six-months.csv diff --git a/dell/all.csv b/leetcode/dell/all.csv similarity index 100% rename from dell/all.csv rename to leetcode/dell/all.csv diff --git a/dell/more-than-six-months.csv b/leetcode/dell/more-than-six-months.csv similarity index 100% rename from dell/more-than-six-months.csv rename to leetcode/dell/more-than-six-months.csv diff --git a/dell/six-months.csv b/leetcode/dell/six-months.csv similarity index 100% rename from dell/six-months.csv rename to leetcode/dell/six-months.csv diff --git a/dell/three-months.csv b/leetcode/dell/three-months.csv similarity index 100% rename from dell/three-months.csv rename to leetcode/dell/three-months.csv diff --git a/deloitte/all.csv b/leetcode/deloitte/all.csv similarity index 100% rename from deloitte/all.csv rename to leetcode/deloitte/all.csv diff --git a/deloitte/more-than-six-months.csv b/leetcode/deloitte/more-than-six-months.csv similarity index 100% rename from deloitte/more-than-six-months.csv rename to leetcode/deloitte/more-than-six-months.csv diff --git a/deloitte/six-months.csv b/leetcode/deloitte/six-months.csv similarity index 100% rename from deloitte/six-months.csv rename to leetcode/deloitte/six-months.csv diff --git a/deloitte/thirty-days.csv b/leetcode/deloitte/thirty-days.csv similarity index 100% rename from deloitte/thirty-days.csv rename to leetcode/deloitte/thirty-days.csv diff --git a/deloitte/three-months.csv b/leetcode/deloitte/three-months.csv similarity index 100% rename from deloitte/three-months.csv rename to leetcode/deloitte/three-months.csv diff --git a/deltax/all.csv b/leetcode/deltax/all.csv similarity index 100% rename from deltax/all.csv rename to leetcode/deltax/all.csv diff --git a/deltax/more-than-six-months.csv b/leetcode/deltax/more-than-six-months.csv similarity index 100% rename from deltax/more-than-six-months.csv rename to leetcode/deltax/more-than-six-months.csv diff --git a/deutsche-bank/all.csv b/leetcode/deutsche-bank/all.csv similarity index 100% rename from deutsche-bank/all.csv rename to leetcode/deutsche-bank/all.csv diff --git a/deutsche-bank/more-than-six-months.csv b/leetcode/deutsche-bank/more-than-six-months.csv similarity index 100% rename from deutsche-bank/more-than-six-months.csv rename to leetcode/deutsche-bank/more-than-six-months.csv diff --git a/devrev/all.csv b/leetcode/devrev/all.csv similarity index 100% rename from devrev/all.csv rename to leetcode/devrev/all.csv diff --git a/devrev/more-than-six-months.csv b/leetcode/devrev/more-than-six-months.csv similarity index 100% rename from devrev/more-than-six-months.csv rename to leetcode/devrev/more-than-six-months.csv diff --git a/devsinc/all.csv b/leetcode/devsinc/all.csv similarity index 100% rename from devsinc/all.csv rename to leetcode/devsinc/all.csv diff --git a/devsinc/more-than-six-months.csv b/leetcode/devsinc/more-than-six-months.csv similarity index 100% rename from devsinc/more-than-six-months.csv rename to leetcode/devsinc/more-than-six-months.csv diff --git a/devtron/all.csv b/leetcode/devtron/all.csv similarity index 100% rename from devtron/all.csv rename to leetcode/devtron/all.csv diff --git a/devtron/more-than-six-months.csv b/leetcode/devtron/more-than-six-months.csv similarity index 100% rename from devtron/more-than-six-months.csv rename to leetcode/devtron/more-than-six-months.csv diff --git a/dialpad/all.csv b/leetcode/dialpad/all.csv similarity index 100% rename from dialpad/all.csv rename to leetcode/dialpad/all.csv diff --git a/dialpad/six-months.csv b/leetcode/dialpad/six-months.csv similarity index 100% rename from dialpad/six-months.csv rename to leetcode/dialpad/six-months.csv diff --git a/didi/all.csv b/leetcode/didi/all.csv similarity index 100% rename from didi/all.csv rename to leetcode/didi/all.csv diff --git a/didi/more-than-six-months.csv b/leetcode/didi/more-than-six-months.csv similarity index 100% rename from didi/more-than-six-months.csv rename to leetcode/didi/more-than-six-months.csv diff --git a/directi/all.csv b/leetcode/directi/all.csv similarity index 100% rename from directi/all.csv rename to leetcode/directi/all.csv diff --git a/directi/more-than-six-months.csv b/leetcode/directi/more-than-six-months.csv similarity index 100% rename from directi/more-than-six-months.csv rename to leetcode/directi/more-than-six-months.csv diff --git a/discord/all.csv b/leetcode/discord/all.csv similarity index 100% rename from discord/all.csv rename to leetcode/discord/all.csv diff --git a/discord/more-than-six-months.csv b/leetcode/discord/more-than-six-months.csv similarity index 100% rename from discord/more-than-six-months.csv rename to leetcode/discord/more-than-six-months.csv diff --git a/disney/all.csv b/leetcode/disney/all.csv similarity index 100% rename from disney/all.csv rename to leetcode/disney/all.csv diff --git a/disney/more-than-six-months.csv b/leetcode/disney/more-than-six-months.csv similarity index 100% rename from disney/more-than-six-months.csv rename to leetcode/disney/more-than-six-months.csv diff --git a/disney/six-months.csv b/leetcode/disney/six-months.csv similarity index 100% rename from disney/six-months.csv rename to leetcode/disney/six-months.csv diff --git a/dji/all.csv b/leetcode/dji/all.csv similarity index 100% rename from dji/all.csv rename to leetcode/dji/all.csv diff --git a/docusign/all.csv b/leetcode/docusign/all.csv similarity index 100% rename from docusign/all.csv rename to leetcode/docusign/all.csv diff --git a/docusign/more-than-six-months.csv b/leetcode/docusign/more-than-six-months.csv similarity index 100% rename from docusign/more-than-six-months.csv rename to leetcode/docusign/more-than-six-months.csv diff --git a/docusign/six-months.csv b/leetcode/docusign/six-months.csv similarity index 100% rename from docusign/six-months.csv rename to leetcode/docusign/six-months.csv diff --git a/docusign/thirty-days.csv b/leetcode/docusign/thirty-days.csv similarity index 100% rename from docusign/thirty-days.csv rename to leetcode/docusign/thirty-days.csv diff --git a/docusign/three-months.csv b/leetcode/docusign/three-months.csv similarity index 100% rename from docusign/three-months.csv rename to leetcode/docusign/three-months.csv diff --git a/doordash/all.csv b/leetcode/doordash/all.csv similarity index 100% rename from doordash/all.csv rename to leetcode/doordash/all.csv diff --git a/doordash/more-than-six-months.csv b/leetcode/doordash/more-than-six-months.csv similarity index 100% rename from doordash/more-than-six-months.csv rename to leetcode/doordash/more-than-six-months.csv diff --git a/doordash/six-months.csv b/leetcode/doordash/six-months.csv similarity index 100% rename from doordash/six-months.csv rename to leetcode/doordash/six-months.csv diff --git a/doordash/thirty-days.csv b/leetcode/doordash/thirty-days.csv similarity index 100% rename from doordash/thirty-days.csv rename to leetcode/doordash/thirty-days.csv diff --git a/doordash/three-months.csv b/leetcode/doordash/three-months.csv similarity index 100% rename from doordash/three-months.csv rename to leetcode/doordash/three-months.csv diff --git a/dp-world/all.csv b/leetcode/dp-world/all.csv similarity index 100% rename from dp-world/all.csv rename to leetcode/dp-world/all.csv diff --git a/dp-world/more-than-six-months.csv b/leetcode/dp-world/more-than-six-months.csv similarity index 100% rename from dp-world/more-than-six-months.csv rename to leetcode/dp-world/more-than-six-months.csv diff --git a/dp-world/six-months.csv b/leetcode/dp-world/six-months.csv similarity index 100% rename from dp-world/six-months.csv rename to leetcode/dp-world/six-months.csv diff --git a/drawbridge/all.csv b/leetcode/drawbridge/all.csv similarity index 100% rename from drawbridge/all.csv rename to leetcode/drawbridge/all.csv diff --git a/drawbridge/more-than-six-months.csv b/leetcode/drawbridge/more-than-six-months.csv similarity index 100% rename from drawbridge/more-than-six-months.csv rename to leetcode/drawbridge/more-than-six-months.csv diff --git a/dream11/all.csv b/leetcode/dream11/all.csv similarity index 100% rename from dream11/all.csv rename to leetcode/dream11/all.csv diff --git a/dream11/more-than-six-months.csv b/leetcode/dream11/more-than-six-months.csv similarity index 100% rename from dream11/more-than-six-months.csv rename to leetcode/dream11/more-than-six-months.csv diff --git a/dream11/six-months.csv b/leetcode/dream11/six-months.csv similarity index 100% rename from dream11/six-months.csv rename to leetcode/dream11/six-months.csv diff --git a/dream11/three-months.csv b/leetcode/dream11/three-months.csv similarity index 100% rename from dream11/three-months.csv rename to leetcode/dream11/three-months.csv diff --git a/dropbox/all.csv b/leetcode/dropbox/all.csv similarity index 100% rename from dropbox/all.csv rename to leetcode/dropbox/all.csv diff --git a/dropbox/more-than-six-months.csv b/leetcode/dropbox/more-than-six-months.csv similarity index 100% rename from dropbox/more-than-six-months.csv rename to leetcode/dropbox/more-than-six-months.csv diff --git a/dropbox/six-months.csv b/leetcode/dropbox/six-months.csv similarity index 100% rename from dropbox/six-months.csv rename to leetcode/dropbox/six-months.csv diff --git a/dropbox/three-months.csv b/leetcode/dropbox/three-months.csv similarity index 100% rename from dropbox/three-months.csv rename to leetcode/dropbox/three-months.csv diff --git a/druva/all.csv b/leetcode/druva/all.csv similarity index 100% rename from druva/all.csv rename to leetcode/druva/all.csv diff --git a/druva/more-than-six-months.csv b/leetcode/druva/more-than-six-months.csv similarity index 100% rename from druva/more-than-six-months.csv rename to leetcode/druva/more-than-six-months.csv diff --git a/drw/all.csv b/leetcode/drw/all.csv similarity index 100% rename from drw/all.csv rename to leetcode/drw/all.csv diff --git a/drw/more-than-six-months.csv b/leetcode/drw/more-than-six-months.csv similarity index 100% rename from drw/more-than-six-months.csv rename to leetcode/drw/more-than-six-months.csv diff --git a/drw/six-months.csv b/leetcode/drw/six-months.csv similarity index 100% rename from drw/six-months.csv rename to leetcode/drw/six-months.csv diff --git a/dtcc/all.csv b/leetcode/dtcc/all.csv similarity index 100% rename from dtcc/all.csv rename to leetcode/dtcc/all.csv diff --git a/dtcc/more-than-six-months.csv b/leetcode/dtcc/more-than-six-months.csv similarity index 100% rename from dtcc/more-than-six-months.csv rename to leetcode/dtcc/more-than-six-months.csv diff --git a/dunzo/all.csv b/leetcode/dunzo/all.csv similarity index 100% rename from dunzo/all.csv rename to leetcode/dunzo/all.csv diff --git a/dunzo/more-than-six-months.csv b/leetcode/dunzo/more-than-six-months.csv similarity index 100% rename from dunzo/more-than-six-months.csv rename to leetcode/dunzo/more-than-six-months.csv diff --git a/duolingo/all.csv b/leetcode/duolingo/all.csv similarity index 100% rename from duolingo/all.csv rename to leetcode/duolingo/all.csv diff --git a/duolingo/more-than-six-months.csv b/leetcode/duolingo/more-than-six-months.csv similarity index 100% rename from duolingo/more-than-six-months.csv rename to leetcode/duolingo/more-than-six-months.csv diff --git a/duolingo/six-months.csv b/leetcode/duolingo/six-months.csv similarity index 100% rename from duolingo/six-months.csv rename to leetcode/duolingo/six-months.csv diff --git a/dxc/all.csv b/leetcode/dxc/all.csv similarity index 100% rename from dxc/all.csv rename to leetcode/dxc/all.csv diff --git a/dxc/more-than-six-months.csv b/leetcode/dxc/more-than-six-months.csv similarity index 100% rename from dxc/more-than-six-months.csv rename to leetcode/dxc/more-than-six-months.csv diff --git a/earnin/all.csv b/leetcode/earnin/all.csv similarity index 100% rename from earnin/all.csv rename to leetcode/earnin/all.csv diff --git a/earnin/more-than-six-months.csv b/leetcode/earnin/more-than-six-months.csv similarity index 100% rename from earnin/more-than-six-months.csv rename to leetcode/earnin/more-than-six-months.csv diff --git a/ebay/all.csv b/leetcode/ebay/all.csv similarity index 100% rename from ebay/all.csv rename to leetcode/ebay/all.csv diff --git a/ebay/more-than-six-months.csv b/leetcode/ebay/more-than-six-months.csv similarity index 100% rename from ebay/more-than-six-months.csv rename to leetcode/ebay/more-than-six-months.csv diff --git a/ebay/six-months.csv b/leetcode/ebay/six-months.csv similarity index 100% rename from ebay/six-months.csv rename to leetcode/ebay/six-months.csv diff --git a/ebay/thirty-days.csv b/leetcode/ebay/thirty-days.csv similarity index 100% rename from ebay/thirty-days.csv rename to leetcode/ebay/thirty-days.csv diff --git a/ebay/three-months.csv b/leetcode/ebay/three-months.csv similarity index 100% rename from ebay/three-months.csv rename to leetcode/ebay/three-months.csv diff --git a/edelweiss/all.csv b/leetcode/edelweiss/all.csv similarity index 100% rename from edelweiss/all.csv rename to leetcode/edelweiss/all.csv diff --git a/edelweiss/more-than-six-months.csv b/leetcode/edelweiss/more-than-six-months.csv similarity index 100% rename from edelweiss/more-than-six-months.csv rename to leetcode/edelweiss/more-than-six-months.csv diff --git a/elbit/all.csv b/leetcode/elbit/all.csv similarity index 100% rename from elbit/all.csv rename to leetcode/elbit/all.csv diff --git a/elbit/more-than-six-months.csv b/leetcode/elbit/more-than-six-months.csv similarity index 100% rename from elbit/more-than-six-months.csv rename to leetcode/elbit/more-than-six-months.csv diff --git a/electronic-arts/all.csv b/leetcode/electronic-arts/all.csv similarity index 100% rename from electronic-arts/all.csv rename to leetcode/electronic-arts/all.csv diff --git a/electronic-arts/more-than-six-months.csv b/leetcode/electronic-arts/more-than-six-months.csv similarity index 100% rename from electronic-arts/more-than-six-months.csv rename to leetcode/electronic-arts/more-than-six-months.csv diff --git a/elitmus/all.csv b/leetcode/elitmus/all.csv similarity index 100% rename from elitmus/all.csv rename to leetcode/elitmus/all.csv diff --git a/elitmus/more-than-six-months.csv b/leetcode/elitmus/more-than-six-months.csv similarity index 100% rename from elitmus/more-than-six-months.csv rename to leetcode/elitmus/more-than-six-months.csv diff --git a/envoy/all.csv b/leetcode/envoy/all.csv similarity index 100% rename from envoy/all.csv rename to leetcode/envoy/all.csv diff --git a/envoy/more-than-six-months.csv b/leetcode/envoy/more-than-six-months.csv similarity index 100% rename from envoy/more-than-six-months.csv rename to leetcode/envoy/more-than-six-months.csv diff --git a/epam-systems/all.csv b/leetcode/epam-systems/all.csv similarity index 100% rename from epam-systems/all.csv rename to leetcode/epam-systems/all.csv diff --git a/epam-systems/more-than-six-months.csv b/leetcode/epam-systems/more-than-six-months.csv similarity index 100% rename from epam-systems/more-than-six-months.csv rename to leetcode/epam-systems/more-than-six-months.csv diff --git a/epam-systems/six-months.csv b/leetcode/epam-systems/six-months.csv similarity index 100% rename from epam-systems/six-months.csv rename to leetcode/epam-systems/six-months.csv diff --git a/epam-systems/three-months.csv b/leetcode/epam-systems/three-months.csv similarity index 100% rename from epam-systems/three-months.csv rename to leetcode/epam-systems/three-months.csv diff --git a/epic-games/all.csv b/leetcode/epic-games/all.csv similarity index 100% rename from epic-games/all.csv rename to leetcode/epic-games/all.csv diff --git a/epic-games/more-than-six-months.csv b/leetcode/epic-games/more-than-six-months.csv similarity index 100% rename from epic-games/more-than-six-months.csv rename to leetcode/epic-games/more-than-six-months.csv diff --git a/epic-systems/all.csv b/leetcode/epic-systems/all.csv similarity index 100% rename from epic-systems/all.csv rename to leetcode/epic-systems/all.csv diff --git a/epic-systems/more-than-six-months.csv b/leetcode/epic-systems/more-than-six-months.csv similarity index 100% rename from epic-systems/more-than-six-months.csv rename to leetcode/epic-systems/more-than-six-months.csv diff --git a/epic-systems/six-months.csv b/leetcode/epic-systems/six-months.csv similarity index 100% rename from epic-systems/six-months.csv rename to leetcode/epic-systems/six-months.csv diff --git a/epic-systems/three-months.csv b/leetcode/epic-systems/three-months.csv similarity index 100% rename from epic-systems/three-months.csv rename to leetcode/epic-systems/three-months.csv diff --git a/epifi/all.csv b/leetcode/epifi/all.csv similarity index 100% rename from epifi/all.csv rename to leetcode/epifi/all.csv diff --git a/ericsson/all.csv b/leetcode/ericsson/all.csv similarity index 100% rename from ericsson/all.csv rename to leetcode/ericsson/all.csv diff --git a/ericsson/more-than-six-months.csv b/leetcode/ericsson/more-than-six-months.csv similarity index 100% rename from ericsson/more-than-six-months.csv rename to leetcode/ericsson/more-than-six-months.csv diff --git a/etsy/all.csv b/leetcode/etsy/all.csv similarity index 100% rename from etsy/all.csv rename to leetcode/etsy/all.csv diff --git a/etsy/more-than-six-months.csv b/leetcode/etsy/more-than-six-months.csv similarity index 100% rename from etsy/more-than-six-months.csv rename to leetcode/etsy/more-than-six-months.csv diff --git a/etsy/six-months.csv b/leetcode/etsy/six-months.csv similarity index 100% rename from etsy/six-months.csv rename to leetcode/etsy/six-months.csv diff --git a/expedia/all.csv b/leetcode/expedia/all.csv similarity index 100% rename from expedia/all.csv rename to leetcode/expedia/all.csv diff --git a/expedia/more-than-six-months.csv b/leetcode/expedia/more-than-six-months.csv similarity index 100% rename from expedia/more-than-six-months.csv rename to leetcode/expedia/more-than-six-months.csv diff --git a/expedia/six-months.csv b/leetcode/expedia/six-months.csv similarity index 100% rename from expedia/six-months.csv rename to leetcode/expedia/six-months.csv diff --git a/ey/all.csv b/leetcode/ey/all.csv similarity index 100% rename from ey/all.csv rename to leetcode/ey/all.csv diff --git a/ey/more-than-six-months.csv b/leetcode/ey/more-than-six-months.csv similarity index 100% rename from ey/more-than-six-months.csv rename to leetcode/ey/more-than-six-months.csv diff --git a/f5-networks/all.csv b/leetcode/f5-networks/all.csv similarity index 100% rename from f5-networks/all.csv rename to leetcode/f5-networks/all.csv diff --git a/f5-networks/more-than-six-months.csv b/leetcode/f5-networks/more-than-six-months.csv similarity index 100% rename from f5-networks/more-than-six-months.csv rename to leetcode/f5-networks/more-than-six-months.csv diff --git a/facebook/all.csv b/leetcode/facebook/all.csv similarity index 100% rename from facebook/all.csv rename to leetcode/facebook/all.csv diff --git a/facebook/more-than-six-months.csv b/leetcode/facebook/more-than-six-months.csv similarity index 100% rename from facebook/more-than-six-months.csv rename to leetcode/facebook/more-than-six-months.csv diff --git a/facebook/six-months.csv b/leetcode/facebook/six-months.csv similarity index 100% rename from facebook/six-months.csv rename to leetcode/facebook/six-months.csv diff --git a/facebook/thirty-days.csv b/leetcode/facebook/thirty-days.csv similarity index 100% rename from facebook/thirty-days.csv rename to leetcode/facebook/thirty-days.csv diff --git a/facebook/three-months.csv b/leetcode/facebook/three-months.csv similarity index 100% rename from facebook/three-months.csv rename to leetcode/facebook/three-months.csv diff --git a/factset/all.csv b/leetcode/factset/all.csv similarity index 100% rename from factset/all.csv rename to leetcode/factset/all.csv diff --git a/factset/more-than-six-months.csv b/leetcode/factset/more-than-six-months.csv similarity index 100% rename from factset/more-than-six-months.csv rename to leetcode/factset/more-than-six-months.csv diff --git a/factwise/all.csv b/leetcode/factwise/all.csv similarity index 100% rename from factwise/all.csv rename to leetcode/factwise/all.csv diff --git a/faire/all.csv b/leetcode/faire/all.csv similarity index 100% rename from faire/all.csv rename to leetcode/faire/all.csv diff --git a/faire/more-than-six-months.csv b/leetcode/faire/more-than-six-months.csv similarity index 100% rename from faire/more-than-six-months.csv rename to leetcode/faire/more-than-six-months.csv diff --git a/faire/six-months.csv b/leetcode/faire/six-months.csv similarity index 100% rename from faire/six-months.csv rename to leetcode/faire/six-months.csv diff --git a/faire/thirty-days.csv b/leetcode/faire/thirty-days.csv similarity index 100% rename from faire/thirty-days.csv rename to leetcode/faire/thirty-days.csv diff --git a/faire/three-months.csv b/leetcode/faire/three-months.csv similarity index 100% rename from faire/three-months.csv rename to leetcode/faire/three-months.csv diff --git a/fallible/all.csv b/leetcode/fallible/all.csv similarity index 100% rename from fallible/all.csv rename to leetcode/fallible/all.csv diff --git a/fallible/more-than-six-months.csv b/leetcode/fallible/more-than-six-months.csv similarity index 100% rename from fallible/more-than-six-months.csv rename to leetcode/fallible/more-than-six-months.csv diff --git a/fastenal/all.csv b/leetcode/fastenal/all.csv similarity index 100% rename from fastenal/all.csv rename to leetcode/fastenal/all.csv diff --git a/fastenal/more-than-six-months.csv b/leetcode/fastenal/more-than-six-months.csv similarity index 100% rename from fastenal/more-than-six-months.csv rename to leetcode/fastenal/more-than-six-months.csv diff --git a/fico/all.csv b/leetcode/fico/all.csv similarity index 100% rename from fico/all.csv rename to leetcode/fico/all.csv diff --git a/fico/more-than-six-months.csv b/leetcode/fico/more-than-six-months.csv similarity index 100% rename from fico/more-than-six-months.csv rename to leetcode/fico/more-than-six-months.csv diff --git a/fidelity/all.csv b/leetcode/fidelity/all.csv similarity index 100% rename from fidelity/all.csv rename to leetcode/fidelity/all.csv diff --git a/fidelity/more-than-six-months.csv b/leetcode/fidelity/more-than-six-months.csv similarity index 100% rename from fidelity/more-than-six-months.csv rename to leetcode/fidelity/more-than-six-months.csv diff --git a/fidessa/all.csv b/leetcode/fidessa/all.csv similarity index 100% rename from fidessa/all.csv rename to leetcode/fidessa/all.csv diff --git a/fiverr/all.csv b/leetcode/fiverr/all.csv similarity index 100% rename from fiverr/all.csv rename to leetcode/fiverr/all.csv diff --git a/fiverr/more-than-six-months.csv b/leetcode/fiverr/more-than-six-months.csv similarity index 100% rename from fiverr/more-than-six-months.csv rename to leetcode/fiverr/more-than-six-months.csv diff --git a/flatiron-health/all.csv b/leetcode/flatiron-health/all.csv similarity index 100% rename from flatiron-health/all.csv rename to leetcode/flatiron-health/all.csv diff --git a/flatiron-health/more-than-six-months.csv b/leetcode/flatiron-health/more-than-six-months.csv similarity index 100% rename from flatiron-health/more-than-six-months.csv rename to leetcode/flatiron-health/more-than-six-months.csv diff --git a/flatiron-health/six-months.csv b/leetcode/flatiron-health/six-months.csv similarity index 100% rename from flatiron-health/six-months.csv rename to leetcode/flatiron-health/six-months.csv diff --git a/flatiron-health/thirty-days.csv b/leetcode/flatiron-health/thirty-days.csv similarity index 100% rename from flatiron-health/thirty-days.csv rename to leetcode/flatiron-health/thirty-days.csv diff --git a/flatiron-health/three-months.csv b/leetcode/flatiron-health/three-months.csv similarity index 100% rename from flatiron-health/three-months.csv rename to leetcode/flatiron-health/three-months.csv diff --git a/fleetx/all.csv b/leetcode/fleetx/all.csv similarity index 100% rename from fleetx/all.csv rename to leetcode/fleetx/all.csv diff --git a/fleetx/more-than-six-months.csv b/leetcode/fleetx/more-than-six-months.csv similarity index 100% rename from fleetx/more-than-six-months.csv rename to leetcode/fleetx/more-than-six-months.csv diff --git a/flexera/all.csv b/leetcode/flexera/all.csv similarity index 100% rename from flexera/all.csv rename to leetcode/flexera/all.csv diff --git a/flexera/more-than-six-months.csv b/leetcode/flexera/more-than-six-months.csv similarity index 100% rename from flexera/more-than-six-months.csv rename to leetcode/flexera/more-than-six-months.csv diff --git a/flexport/all.csv b/leetcode/flexport/all.csv similarity index 100% rename from flexport/all.csv rename to leetcode/flexport/all.csv diff --git a/flexport/more-than-six-months.csv b/leetcode/flexport/more-than-six-months.csv similarity index 100% rename from flexport/more-than-six-months.csv rename to leetcode/flexport/more-than-six-months.csv diff --git a/flexport/six-months.csv b/leetcode/flexport/six-months.csv similarity index 100% rename from flexport/six-months.csv rename to leetcode/flexport/six-months.csv diff --git a/flexport/three-months.csv b/leetcode/flexport/three-months.csv similarity index 100% rename from flexport/three-months.csv rename to leetcode/flexport/three-months.csv diff --git a/flipkart/all.csv b/leetcode/flipkart/all.csv similarity index 100% rename from flipkart/all.csv rename to leetcode/flipkart/all.csv diff --git a/flipkart/more-than-six-months.csv b/leetcode/flipkart/more-than-six-months.csv similarity index 100% rename from flipkart/more-than-six-months.csv rename to leetcode/flipkart/more-than-six-months.csv diff --git a/flipkart/six-months.csv b/leetcode/flipkart/six-months.csv similarity index 100% rename from flipkart/six-months.csv rename to leetcode/flipkart/six-months.csv diff --git a/flipkart/three-months.csv b/leetcode/flipkart/three-months.csv similarity index 100% rename from flipkart/three-months.csv rename to leetcode/flipkart/three-months.csv diff --git a/ford/all.csv b/leetcode/ford/all.csv similarity index 100% rename from ford/all.csv rename to leetcode/ford/all.csv diff --git a/ford/more-than-six-months.csv b/leetcode/ford/more-than-six-months.csv similarity index 100% rename from ford/more-than-six-months.csv rename to leetcode/ford/more-than-six-months.csv diff --git a/fortinet/all.csv b/leetcode/fortinet/all.csv similarity index 100% rename from fortinet/all.csv rename to leetcode/fortinet/all.csv diff --git a/fortinet/more-than-six-months.csv b/leetcode/fortinet/more-than-six-months.csv similarity index 100% rename from fortinet/more-than-six-months.csv rename to leetcode/fortinet/more-than-six-months.csv diff --git a/fortinet/six-months.csv b/leetcode/fortinet/six-months.csv similarity index 100% rename from fortinet/six-months.csv rename to leetcode/fortinet/six-months.csv diff --git a/fortinet/three-months.csv b/leetcode/fortinet/three-months.csv similarity index 100% rename from fortinet/three-months.csv rename to leetcode/fortinet/three-months.csv diff --git a/forusall/all.csv b/leetcode/forusall/all.csv similarity index 100% rename from forusall/all.csv rename to leetcode/forusall/all.csv diff --git a/forusall/more-than-six-months.csv b/leetcode/forusall/more-than-six-months.csv similarity index 100% rename from forusall/more-than-six-months.csv rename to leetcode/forusall/more-than-six-months.csv diff --git a/fourkites/all.csv b/leetcode/fourkites/all.csv similarity index 100% rename from fourkites/all.csv rename to leetcode/fourkites/all.csv diff --git a/fourkites/more-than-six-months.csv b/leetcode/fourkites/more-than-six-months.csv similarity index 100% rename from fourkites/more-than-six-months.csv rename to leetcode/fourkites/more-than-six-months.csv diff --git a/fpt/all.csv b/leetcode/fpt/all.csv similarity index 100% rename from fpt/all.csv rename to leetcode/fpt/all.csv diff --git a/fpt/more-than-six-months.csv b/leetcode/fpt/more-than-six-months.csv similarity index 100% rename from fpt/more-than-six-months.csv rename to leetcode/fpt/more-than-six-months.csv diff --git a/fractal-analytics/all.csv b/leetcode/fractal-analytics/all.csv similarity index 100% rename from fractal-analytics/all.csv rename to leetcode/fractal-analytics/all.csv diff --git a/fractal-analytics/more-than-six-months.csv b/leetcode/fractal-analytics/more-than-six-months.csv similarity index 100% rename from fractal-analytics/more-than-six-months.csv rename to leetcode/fractal-analytics/more-than-six-months.csv diff --git a/fractal-analytics/six-months.csv b/leetcode/fractal-analytics/six-months.csv similarity index 100% rename from fractal-analytics/six-months.csv rename to leetcode/fractal-analytics/six-months.csv diff --git a/fractal-analytics/thirty-days.csv b/leetcode/fractal-analytics/thirty-days.csv similarity index 100% rename from fractal-analytics/thirty-days.csv rename to leetcode/fractal-analytics/thirty-days.csv diff --git a/fractal-analytics/three-months.csv b/leetcode/fractal-analytics/three-months.csv similarity index 100% rename from fractal-analytics/three-months.csv rename to leetcode/fractal-analytics/three-months.csv diff --git a/freecharge/all.csv b/leetcode/freecharge/all.csv similarity index 100% rename from freecharge/all.csv rename to leetcode/freecharge/all.csv diff --git a/freecharge/more-than-six-months.csv b/leetcode/freecharge/more-than-six-months.csv similarity index 100% rename from freecharge/more-than-six-months.csv rename to leetcode/freecharge/more-than-six-months.csv diff --git a/freecharge/six-months.csv b/leetcode/freecharge/six-months.csv similarity index 100% rename from freecharge/six-months.csv rename to leetcode/freecharge/six-months.csv diff --git a/freshworks/all.csv b/leetcode/freshworks/all.csv similarity index 100% rename from freshworks/all.csv rename to leetcode/freshworks/all.csv diff --git a/freshworks/more-than-six-months.csv b/leetcode/freshworks/more-than-six-months.csv similarity index 100% rename from freshworks/more-than-six-months.csv rename to leetcode/freshworks/more-than-six-months.csv diff --git a/fynd/all.csv b/leetcode/fynd/all.csv similarity index 100% rename from fynd/all.csv rename to leetcode/fynd/all.csv diff --git a/gainsight/all.csv b/leetcode/gainsight/all.csv similarity index 100% rename from gainsight/all.csv rename to leetcode/gainsight/all.csv diff --git a/gainsight/more-than-six-months.csv b/leetcode/gainsight/more-than-six-months.csv similarity index 100% rename from gainsight/more-than-six-months.csv rename to leetcode/gainsight/more-than-six-months.csv diff --git a/gameskraft/all.csv b/leetcode/gameskraft/all.csv similarity index 100% rename from gameskraft/all.csv rename to leetcode/gameskraft/all.csv diff --git a/gameskraft/more-than-six-months.csv b/leetcode/gameskraft/more-than-six-months.csv similarity index 100% rename from gameskraft/more-than-six-months.csv rename to leetcode/gameskraft/more-than-six-months.csv diff --git a/garena/all.csv b/leetcode/garena/all.csv similarity index 100% rename from garena/all.csv rename to leetcode/garena/all.csv diff --git a/garena/more-than-six-months.csv b/leetcode/garena/more-than-six-months.csv similarity index 100% rename from garena/more-than-six-months.csv rename to leetcode/garena/more-than-six-months.csv diff --git a/garmin/all.csv b/leetcode/garmin/all.csv similarity index 100% rename from garmin/all.csv rename to leetcode/garmin/all.csv diff --git a/garmin/more-than-six-months.csv b/leetcode/garmin/more-than-six-months.csv similarity index 100% rename from garmin/more-than-six-months.csv rename to leetcode/garmin/more-than-six-months.csv diff --git a/garmin/six-months.csv b/leetcode/garmin/six-months.csv similarity index 100% rename from garmin/six-months.csv rename to leetcode/garmin/six-months.csv diff --git a/garmin/three-months.csv b/leetcode/garmin/three-months.csv similarity index 100% rename from garmin/three-months.csv rename to leetcode/garmin/three-months.csv diff --git a/gartner/all.csv b/leetcode/gartner/all.csv similarity index 100% rename from gartner/all.csv rename to leetcode/gartner/all.csv diff --git a/gartner/more-than-six-months.csv b/leetcode/gartner/more-than-six-months.csv similarity index 100% rename from gartner/more-than-six-months.csv rename to leetcode/gartner/more-than-six-months.csv diff --git a/gartner/six-months.csv b/leetcode/gartner/six-months.csv similarity index 100% rename from gartner/six-months.csv rename to leetcode/gartner/six-months.csv diff --git a/ge-digital/all.csv b/leetcode/ge-digital/all.csv similarity index 100% rename from ge-digital/all.csv rename to leetcode/ge-digital/all.csv diff --git a/ge-digital/more-than-six-months.csv b/leetcode/ge-digital/more-than-six-months.csv similarity index 100% rename from ge-digital/more-than-six-months.csv rename to leetcode/ge-digital/more-than-six-months.csv diff --git a/ge-healthcare/all.csv b/leetcode/ge-healthcare/all.csv similarity index 100% rename from ge-healthcare/all.csv rename to leetcode/ge-healthcare/all.csv diff --git a/ge-healthcare/more-than-six-months.csv b/leetcode/ge-healthcare/more-than-six-months.csv similarity index 100% rename from ge-healthcare/more-than-six-months.csv rename to leetcode/ge-healthcare/more-than-six-months.csv diff --git a/geico/all.csv b/leetcode/geico/all.csv similarity index 100% rename from geico/all.csv rename to leetcode/geico/all.csv diff --git a/geico/more-than-six-months.csv b/leetcode/geico/more-than-six-months.csv similarity index 100% rename from geico/more-than-six-months.csv rename to leetcode/geico/more-than-six-months.csv diff --git a/geico/six-months.csv b/leetcode/geico/six-months.csv similarity index 100% rename from geico/six-months.csv rename to leetcode/geico/six-months.csv diff --git a/geico/three-months.csv b/leetcode/geico/three-months.csv similarity index 100% rename from geico/three-months.csv rename to leetcode/geico/three-months.csv diff --git a/general-electric/all.csv b/leetcode/general-electric/all.csv similarity index 100% rename from general-electric/all.csv rename to leetcode/general-electric/all.csv diff --git a/general-electric/more-than-six-months.csv b/leetcode/general-electric/more-than-six-months.csv similarity index 100% rename from general-electric/more-than-six-months.csv rename to leetcode/general-electric/more-than-six-months.csv diff --git a/general-motors/all.csv b/leetcode/general-motors/all.csv similarity index 100% rename from general-motors/all.csv rename to leetcode/general-motors/all.csv diff --git a/general-motors/more-than-six-months.csv b/leetcode/general-motors/more-than-six-months.csv similarity index 100% rename from general-motors/more-than-six-months.csv rename to leetcode/general-motors/more-than-six-months.csv diff --git a/general-motors/six-months.csv b/leetcode/general-motors/six-months.csv similarity index 100% rename from general-motors/six-months.csv rename to leetcode/general-motors/six-months.csv diff --git a/general-motors/thirty-days.csv b/leetcode/general-motors/thirty-days.csv similarity index 100% rename from general-motors/thirty-days.csv rename to leetcode/general-motors/thirty-days.csv diff --git a/general-motors/three-months.csv b/leetcode/general-motors/three-months.csv similarity index 100% rename from general-motors/three-months.csv rename to leetcode/general-motors/three-months.csv diff --git a/genpact/all.csv b/leetcode/genpact/all.csv similarity index 100% rename from genpact/all.csv rename to leetcode/genpact/all.csv diff --git a/genpact/more-than-six-months.csv b/leetcode/genpact/more-than-six-months.csv similarity index 100% rename from genpact/more-than-six-months.csv rename to leetcode/genpact/more-than-six-months.csv diff --git a/gilt-groupe/all.csv b/leetcode/gilt-groupe/all.csv similarity index 100% rename from gilt-groupe/all.csv rename to leetcode/gilt-groupe/all.csv diff --git a/gilt-groupe/more-than-six-months.csv b/leetcode/gilt-groupe/more-than-six-months.csv similarity index 100% rename from gilt-groupe/more-than-six-months.csv rename to leetcode/gilt-groupe/more-than-six-months.csv diff --git a/github/all.csv b/leetcode/github/all.csv similarity index 100% rename from github/all.csv rename to leetcode/github/all.csv diff --git a/github/six-months.csv b/leetcode/github/six-months.csv similarity index 100% rename from github/six-months.csv rename to leetcode/github/six-months.csv diff --git a/glassdoor/all.csv b/leetcode/glassdoor/all.csv similarity index 100% rename from glassdoor/all.csv rename to leetcode/glassdoor/all.csv diff --git a/glassdoor/more-than-six-months.csv b/leetcode/glassdoor/more-than-six-months.csv similarity index 100% rename from glassdoor/more-than-six-months.csv rename to leetcode/glassdoor/more-than-six-months.csv diff --git a/globallogic/all.csv b/leetcode/globallogic/all.csv similarity index 100% rename from globallogic/all.csv rename to leetcode/globallogic/all.csv diff --git a/globallogic/more-than-six-months.csv b/leetcode/globallogic/more-than-six-months.csv similarity index 100% rename from globallogic/more-than-six-months.csv rename to leetcode/globallogic/more-than-six-months.csv diff --git a/globallogic/six-months.csv b/leetcode/globallogic/six-months.csv similarity index 100% rename from globallogic/six-months.csv rename to leetcode/globallogic/six-months.csv diff --git a/globant/all.csv b/leetcode/globant/all.csv similarity index 100% rename from globant/all.csv rename to leetcode/globant/all.csv diff --git a/globant/more-than-six-months.csv b/leetcode/globant/more-than-six-months.csv similarity index 100% rename from globant/more-than-six-months.csv rename to leetcode/globant/more-than-six-months.csv diff --git a/glovo/all.csv b/leetcode/glovo/all.csv similarity index 100% rename from glovo/all.csv rename to leetcode/glovo/all.csv diff --git a/glovo/six-months.csv b/leetcode/glovo/six-months.csv similarity index 100% rename from glovo/six-months.csv rename to leetcode/glovo/six-months.csv diff --git a/godaddy/all.csv b/leetcode/godaddy/all.csv similarity index 100% rename from godaddy/all.csv rename to leetcode/godaddy/all.csv diff --git a/godaddy/more-than-six-months.csv b/leetcode/godaddy/more-than-six-months.csv similarity index 100% rename from godaddy/more-than-six-months.csv rename to leetcode/godaddy/more-than-six-months.csv diff --git a/gojek/all.csv b/leetcode/gojek/all.csv similarity index 100% rename from gojek/all.csv rename to leetcode/gojek/all.csv diff --git a/gojek/more-than-six-months.csv b/leetcode/gojek/more-than-six-months.csv similarity index 100% rename from gojek/more-than-six-months.csv rename to leetcode/gojek/more-than-six-months.csv diff --git a/goldman-sachs/all.csv b/leetcode/goldman-sachs/all.csv similarity index 100% rename from goldman-sachs/all.csv rename to leetcode/goldman-sachs/all.csv diff --git a/goldman-sachs/more-than-six-months.csv b/leetcode/goldman-sachs/more-than-six-months.csv similarity index 100% rename from goldman-sachs/more-than-six-months.csv rename to leetcode/goldman-sachs/more-than-six-months.csv diff --git a/goldman-sachs/six-months.csv b/leetcode/goldman-sachs/six-months.csv similarity index 100% rename from goldman-sachs/six-months.csv rename to leetcode/goldman-sachs/six-months.csv diff --git a/goldman-sachs/thirty-days.csv b/leetcode/goldman-sachs/thirty-days.csv similarity index 100% rename from goldman-sachs/thirty-days.csv rename to leetcode/goldman-sachs/thirty-days.csv diff --git a/goldman-sachs/three-months.csv b/leetcode/goldman-sachs/three-months.csv similarity index 100% rename from goldman-sachs/three-months.csv rename to leetcode/goldman-sachs/three-months.csv diff --git a/google/all.csv b/leetcode/google/all.csv similarity index 100% rename from google/all.csv rename to leetcode/google/all.csv diff --git a/google/more-than-six-months.csv b/leetcode/google/more-than-six-months.csv similarity index 100% rename from google/more-than-six-months.csv rename to leetcode/google/more-than-six-months.csv diff --git a/google/six-months.csv b/leetcode/google/six-months.csv similarity index 100% rename from google/six-months.csv rename to leetcode/google/six-months.csv diff --git a/google/thirty-days.csv b/leetcode/google/thirty-days.csv similarity index 100% rename from google/thirty-days.csv rename to leetcode/google/thirty-days.csv diff --git a/google/three-months.csv b/leetcode/google/three-months.csv similarity index 100% rename from google/three-months.csv rename to leetcode/google/three-months.csv diff --git a/gopuff/all.csv b/leetcode/gopuff/all.csv similarity index 100% rename from gopuff/all.csv rename to leetcode/gopuff/all.csv diff --git a/gopuff/six-months.csv b/leetcode/gopuff/six-months.csv similarity index 100% rename from gopuff/six-months.csv rename to leetcode/gopuff/six-months.csv diff --git a/grab/all.csv b/leetcode/grab/all.csv similarity index 100% rename from grab/all.csv rename to leetcode/grab/all.csv diff --git a/grab/more-than-six-months.csv b/leetcode/grab/more-than-six-months.csv similarity index 100% rename from grab/more-than-six-months.csv rename to leetcode/grab/more-than-six-months.csv diff --git a/grab/six-months.csv b/leetcode/grab/six-months.csv similarity index 100% rename from grab/six-months.csv rename to leetcode/grab/six-months.csv diff --git a/grab/thirty-days.csv b/leetcode/grab/thirty-days.csv similarity index 100% rename from grab/thirty-days.csv rename to leetcode/grab/thirty-days.csv diff --git a/grab/three-months.csv b/leetcode/grab/three-months.csv similarity index 100% rename from grab/three-months.csv rename to leetcode/grab/three-months.csv diff --git a/grammarly/all.csv b/leetcode/grammarly/all.csv similarity index 100% rename from grammarly/all.csv rename to leetcode/grammarly/all.csv diff --git a/grammarly/more-than-six-months.csv b/leetcode/grammarly/more-than-six-months.csv similarity index 100% rename from grammarly/more-than-six-months.csv rename to leetcode/grammarly/more-than-six-months.csv diff --git a/grammarly/six-months.csv b/leetcode/grammarly/six-months.csv similarity index 100% rename from grammarly/six-months.csv rename to leetcode/grammarly/six-months.csv diff --git a/grammarly/thirty-days.csv b/leetcode/grammarly/thirty-days.csv similarity index 100% rename from grammarly/thirty-days.csv rename to leetcode/grammarly/thirty-days.csv diff --git a/grammarly/three-months.csv b/leetcode/grammarly/three-months.csv similarity index 100% rename from grammarly/three-months.csv rename to leetcode/grammarly/three-months.csv diff --git a/graviton/all.csv b/leetcode/graviton/all.csv similarity index 100% rename from graviton/all.csv rename to leetcode/graviton/all.csv diff --git a/graviton/more-than-six-months.csv b/leetcode/graviton/more-than-six-months.csv similarity index 100% rename from graviton/more-than-six-months.csv rename to leetcode/graviton/more-than-six-months.csv diff --git a/grid-dynamics/all.csv b/leetcode/grid-dynamics/all.csv similarity index 100% rename from grid-dynamics/all.csv rename to leetcode/grid-dynamics/all.csv diff --git a/grid-dynamics/more-than-six-months.csv b/leetcode/grid-dynamics/more-than-six-months.csv similarity index 100% rename from grid-dynamics/more-than-six-months.csv rename to leetcode/grid-dynamics/more-than-six-months.csv diff --git a/groupon/all.csv b/leetcode/groupon/all.csv similarity index 100% rename from groupon/all.csv rename to leetcode/groupon/all.csv diff --git a/groupon/more-than-six-months.csv b/leetcode/groupon/more-than-six-months.csv similarity index 100% rename from groupon/more-than-six-months.csv rename to leetcode/groupon/more-than-six-months.csv diff --git a/groww/all.csv b/leetcode/groww/all.csv similarity index 100% rename from groww/all.csv rename to leetcode/groww/all.csv diff --git a/groww/more-than-six-months.csv b/leetcode/groww/more-than-six-months.csv similarity index 100% rename from groww/more-than-six-months.csv rename to leetcode/groww/more-than-six-months.csv diff --git a/grubhub/all.csv b/leetcode/grubhub/all.csv similarity index 100% rename from grubhub/all.csv rename to leetcode/grubhub/all.csv diff --git a/grubhub/more-than-six-months.csv b/leetcode/grubhub/more-than-six-months.csv similarity index 100% rename from grubhub/more-than-six-months.csv rename to leetcode/grubhub/more-than-six-months.csv diff --git a/gsa-capital/all.csv b/leetcode/gsa-capital/all.csv similarity index 100% rename from gsa-capital/all.csv rename to leetcode/gsa-capital/all.csv diff --git a/gsa-capital/more-than-six-months.csv b/leetcode/gsa-capital/more-than-six-months.csv similarity index 100% rename from gsa-capital/more-than-six-months.csv rename to leetcode/gsa-capital/more-than-six-months.csv diff --git a/gsn-games/all.csv b/leetcode/gsn-games/all.csv similarity index 100% rename from gsn-games/all.csv rename to leetcode/gsn-games/all.csv diff --git a/gsn-games/more-than-six-months.csv b/leetcode/gsn-games/more-than-six-months.csv similarity index 100% rename from gsn-games/more-than-six-months.csv rename to leetcode/gsn-games/more-than-six-months.csv diff --git a/guidewire/all.csv b/leetcode/guidewire/all.csv similarity index 100% rename from guidewire/all.csv rename to leetcode/guidewire/all.csv diff --git a/guidewire/more-than-six-months.csv b/leetcode/guidewire/more-than-six-months.csv similarity index 100% rename from guidewire/more-than-six-months.csv rename to leetcode/guidewire/more-than-six-months.csv diff --git a/guidewire/six-months.csv b/leetcode/guidewire/six-months.csv similarity index 100% rename from guidewire/six-months.csv rename to leetcode/guidewire/six-months.csv diff --git a/guidewire/thirty-days.csv b/leetcode/guidewire/thirty-days.csv similarity index 100% rename from guidewire/thirty-days.csv rename to leetcode/guidewire/thirty-days.csv diff --git a/guidewire/three-months.csv b/leetcode/guidewire/three-months.csv similarity index 100% rename from guidewire/three-months.csv rename to leetcode/guidewire/three-months.csv diff --git a/gusto/all.csv b/leetcode/gusto/all.csv similarity index 100% rename from gusto/all.csv rename to leetcode/gusto/all.csv diff --git a/gusto/more-than-six-months.csv b/leetcode/gusto/more-than-six-months.csv similarity index 100% rename from gusto/more-than-six-months.csv rename to leetcode/gusto/more-than-six-months.csv diff --git a/gusto/six-months.csv b/leetcode/gusto/six-months.csv similarity index 100% rename from gusto/six-months.csv rename to leetcode/gusto/six-months.csv diff --git a/gusto/three-months.csv b/leetcode/gusto/three-months.csv similarity index 100% rename from gusto/three-months.csv rename to leetcode/gusto/three-months.csv diff --git a/harman/all.csv b/leetcode/harman/all.csv similarity index 100% rename from harman/all.csv rename to leetcode/harman/all.csv diff --git a/harman/more-than-six-months.csv b/leetcode/harman/more-than-six-months.csv similarity index 100% rename from harman/more-than-six-months.csv rename to leetcode/harman/more-than-six-months.csv diff --git a/harness/all.csv b/leetcode/harness/all.csv similarity index 100% rename from harness/all.csv rename to leetcode/harness/all.csv diff --git a/harness/more-than-six-months.csv b/leetcode/harness/more-than-six-months.csv similarity index 100% rename from harness/more-than-six-months.csv rename to leetcode/harness/more-than-six-months.csv diff --git a/hashedin/all.csv b/leetcode/hashedin/all.csv similarity index 100% rename from hashedin/all.csv rename to leetcode/hashedin/all.csv diff --git a/hashedin/more-than-six-months.csv b/leetcode/hashedin/more-than-six-months.csv similarity index 100% rename from hashedin/more-than-six-months.csv rename to leetcode/hashedin/more-than-six-months.csv diff --git a/hashedin/six-months.csv b/leetcode/hashedin/six-months.csv similarity index 100% rename from hashedin/six-months.csv rename to leetcode/hashedin/six-months.csv diff --git a/hashedin/three-months.csv b/leetcode/hashedin/three-months.csv similarity index 100% rename from hashedin/three-months.csv rename to leetcode/hashedin/three-months.csv diff --git a/hbo/all.csv b/leetcode/hbo/all.csv similarity index 100% rename from hbo/all.csv rename to leetcode/hbo/all.csv diff --git a/hbo/more-than-six-months.csv b/leetcode/hbo/more-than-six-months.csv similarity index 100% rename from hbo/more-than-six-months.csv rename to leetcode/hbo/more-than-six-months.csv diff --git a/hcl/all.csv b/leetcode/hcl/all.csv similarity index 100% rename from hcl/all.csv rename to leetcode/hcl/all.csv diff --git a/hcl/more-than-six-months.csv b/leetcode/hcl/more-than-six-months.csv similarity index 100% rename from hcl/more-than-six-months.csv rename to leetcode/hcl/more-than-six-months.csv diff --git a/hcl/six-months.csv b/leetcode/hcl/six-months.csv similarity index 100% rename from hcl/six-months.csv rename to leetcode/hcl/six-months.csv diff --git a/heb/all.csv b/leetcode/heb/all.csv similarity index 100% rename from heb/all.csv rename to leetcode/heb/all.csv diff --git a/heb/more-than-six-months.csv b/leetcode/heb/more-than-six-months.csv similarity index 100% rename from heb/more-than-six-months.csv rename to leetcode/heb/more-than-six-months.csv diff --git a/helix/all.csv b/leetcode/helix/all.csv similarity index 100% rename from helix/all.csv rename to leetcode/helix/all.csv diff --git a/helix/more-than-six-months.csv b/leetcode/helix/more-than-six-months.csv similarity index 100% rename from helix/more-than-six-months.csv rename to leetcode/helix/more-than-six-months.csv diff --git a/hertz/all.csv b/leetcode/hertz/all.csv similarity index 100% rename from hertz/all.csv rename to leetcode/hertz/all.csv diff --git a/hertz/more-than-six-months.csv b/leetcode/hertz/more-than-six-months.csv similarity index 100% rename from hertz/more-than-six-months.csv rename to leetcode/hertz/more-than-six-months.csv diff --git a/highspot/all.csv b/leetcode/highspot/all.csv similarity index 100% rename from highspot/all.csv rename to leetcode/highspot/all.csv diff --git a/highspot/more-than-six-months.csv b/leetcode/highspot/more-than-six-months.csv similarity index 100% rename from highspot/more-than-six-months.csv rename to leetcode/highspot/more-than-six-months.csv diff --git a/hilabs/all.csv b/leetcode/hilabs/all.csv similarity index 100% rename from hilabs/all.csv rename to leetcode/hilabs/all.csv diff --git a/hilabs/more-than-six-months.csv b/leetcode/hilabs/more-than-six-months.csv similarity index 100% rename from hilabs/more-than-six-months.csv rename to leetcode/hilabs/more-than-six-months.csv diff --git a/hive/all.csv b/leetcode/hive/all.csv similarity index 100% rename from hive/all.csv rename to leetcode/hive/all.csv diff --git a/hive/more-than-six-months.csv b/leetcode/hive/more-than-six-months.csv similarity index 100% rename from hive/more-than-six-months.csv rename to leetcode/hive/more-than-six-months.csv diff --git a/hiver/all.csv b/leetcode/hiver/all.csv similarity index 100% rename from hiver/all.csv rename to leetcode/hiver/all.csv diff --git a/hiver/more-than-six-months.csv b/leetcode/hiver/more-than-six-months.csv similarity index 100% rename from hiver/more-than-six-months.csv rename to leetcode/hiver/more-than-six-months.csv diff --git a/honey/all.csv b/leetcode/honey/all.csv similarity index 100% rename from honey/all.csv rename to leetcode/honey/all.csv diff --git a/honeywell/all.csv b/leetcode/honeywell/all.csv similarity index 100% rename from honeywell/all.csv rename to leetcode/honeywell/all.csv diff --git a/honeywell/more-than-six-months.csv b/leetcode/honeywell/more-than-six-months.csv similarity index 100% rename from honeywell/more-than-six-months.csv rename to leetcode/honeywell/more-than-six-months.csv diff --git a/hopper/all.csv b/leetcode/hopper/all.csv similarity index 100% rename from hopper/all.csv rename to leetcode/hopper/all.csv diff --git a/hopper/six-months.csv b/leetcode/hopper/six-months.csv similarity index 100% rename from hopper/six-months.csv rename to leetcode/hopper/six-months.csv diff --git a/hopper/three-months.csv b/leetcode/hopper/three-months.csv similarity index 100% rename from hopper/three-months.csv rename to leetcode/hopper/three-months.csv diff --git a/hotstar/all.csv b/leetcode/hotstar/all.csv similarity index 100% rename from hotstar/all.csv rename to leetcode/hotstar/all.csv diff --git a/hotstar/more-than-six-months.csv b/leetcode/hotstar/more-than-six-months.csv similarity index 100% rename from hotstar/more-than-six-months.csv rename to leetcode/hotstar/more-than-six-months.csv diff --git a/houzz/all.csv b/leetcode/houzz/all.csv similarity index 100% rename from houzz/all.csv rename to leetcode/houzz/all.csv diff --git a/houzz/more-than-six-months.csv b/leetcode/houzz/more-than-six-months.csv similarity index 100% rename from houzz/more-than-six-months.csv rename to leetcode/houzz/more-than-six-months.csv diff --git a/hp/all.csv b/leetcode/hp/all.csv similarity index 100% rename from hp/all.csv rename to leetcode/hp/all.csv diff --git a/hp/more-than-six-months.csv b/leetcode/hp/more-than-six-months.csv similarity index 100% rename from hp/more-than-six-months.csv rename to leetcode/hp/more-than-six-months.csv diff --git a/hpe/all.csv b/leetcode/hpe/all.csv similarity index 100% rename from hpe/all.csv rename to leetcode/hpe/all.csv diff --git a/hpe/more-than-six-months.csv b/leetcode/hpe/more-than-six-months.csv similarity index 100% rename from hpe/more-than-six-months.csv rename to leetcode/hpe/more-than-six-months.csv diff --git a/hrt/all.csv b/leetcode/hrt/all.csv similarity index 100% rename from hrt/all.csv rename to leetcode/hrt/all.csv diff --git a/hrt/more-than-six-months.csv b/leetcode/hrt/more-than-six-months.csv similarity index 100% rename from hrt/more-than-six-months.csv rename to leetcode/hrt/more-than-six-months.csv diff --git a/hsbc/all.csv b/leetcode/hsbc/all.csv similarity index 100% rename from hsbc/all.csv rename to leetcode/hsbc/all.csv diff --git a/hsbc/more-than-six-months.csv b/leetcode/hsbc/more-than-six-months.csv similarity index 100% rename from hsbc/more-than-six-months.csv rename to leetcode/hsbc/more-than-six-months.csv diff --git a/hsbc/six-months.csv b/leetcode/hsbc/six-months.csv similarity index 100% rename from hsbc/six-months.csv rename to leetcode/hsbc/six-months.csv diff --git a/hsbc/three-months.csv b/leetcode/hsbc/three-months.csv similarity index 100% rename from hsbc/three-months.csv rename to leetcode/hsbc/three-months.csv diff --git a/huawei/all.csv b/leetcode/huawei/all.csv similarity index 100% rename from huawei/all.csv rename to leetcode/huawei/all.csv diff --git a/huawei/more-than-six-months.csv b/leetcode/huawei/more-than-six-months.csv similarity index 100% rename from huawei/more-than-six-months.csv rename to leetcode/huawei/more-than-six-months.csv diff --git a/hubspot/all.csv b/leetcode/hubspot/all.csv similarity index 100% rename from hubspot/all.csv rename to leetcode/hubspot/all.csv diff --git a/hubspot/more-than-six-months.csv b/leetcode/hubspot/more-than-six-months.csv similarity index 100% rename from hubspot/more-than-six-months.csv rename to leetcode/hubspot/more-than-six-months.csv diff --git a/hubspot/six-months.csv b/leetcode/hubspot/six-months.csv similarity index 100% rename from hubspot/six-months.csv rename to leetcode/hubspot/six-months.csv diff --git a/hubspot/three-months.csv b/leetcode/hubspot/three-months.csv similarity index 100% rename from hubspot/three-months.csv rename to leetcode/hubspot/three-months.csv diff --git a/hulu/all.csv b/leetcode/hulu/all.csv similarity index 100% rename from hulu/all.csv rename to leetcode/hulu/all.csv diff --git a/hulu/more-than-six-months.csv b/leetcode/hulu/more-than-six-months.csv similarity index 100% rename from hulu/more-than-six-months.csv rename to leetcode/hulu/more-than-six-months.csv diff --git a/hyperverge/all.csv b/leetcode/hyperverge/all.csv similarity index 100% rename from hyperverge/all.csv rename to leetcode/hyperverge/all.csv diff --git a/hyperverge/more-than-six-months.csv b/leetcode/hyperverge/more-than-six-months.csv similarity index 100% rename from hyperverge/more-than-six-months.csv rename to leetcode/hyperverge/more-than-six-months.csv diff --git a/ibm/all.csv b/leetcode/ibm/all.csv similarity index 100% rename from ibm/all.csv rename to leetcode/ibm/all.csv diff --git a/ibm/more-than-six-months.csv b/leetcode/ibm/more-than-six-months.csv similarity index 100% rename from ibm/more-than-six-months.csv rename to leetcode/ibm/more-than-six-months.csv diff --git a/ibm/six-months.csv b/leetcode/ibm/six-months.csv similarity index 100% rename from ibm/six-months.csv rename to leetcode/ibm/six-months.csv diff --git a/ibm/thirty-days.csv b/leetcode/ibm/thirty-days.csv similarity index 100% rename from ibm/thirty-days.csv rename to leetcode/ibm/thirty-days.csv diff --git a/ibm/three-months.csv b/leetcode/ibm/three-months.csv similarity index 100% rename from ibm/three-months.csv rename to leetcode/ibm/three-months.csv diff --git a/iit-bombay/all.csv b/leetcode/iit-bombay/all.csv similarity index 100% rename from iit-bombay/all.csv rename to leetcode/iit-bombay/all.csv diff --git a/iit-bombay/more-than-six-months.csv b/leetcode/iit-bombay/more-than-six-months.csv similarity index 100% rename from iit-bombay/more-than-six-months.csv rename to leetcode/iit-bombay/more-than-six-months.csv diff --git a/imc/all.csv b/leetcode/imc/all.csv similarity index 100% rename from imc/all.csv rename to leetcode/imc/all.csv diff --git a/imc/more-than-six-months.csv b/leetcode/imc/more-than-six-months.csv similarity index 100% rename from imc/more-than-six-months.csv rename to leetcode/imc/more-than-six-months.csv diff --git a/impact-analytics/all.csv b/leetcode/impact-analytics/all.csv similarity index 100% rename from impact-analytics/all.csv rename to leetcode/impact-analytics/all.csv diff --git a/impact-analytics/more-than-six-months.csv b/leetcode/impact-analytics/more-than-six-months.csv similarity index 100% rename from impact-analytics/more-than-six-months.csv rename to leetcode/impact-analytics/more-than-six-months.csv diff --git a/increff/all.csv b/leetcode/increff/all.csv similarity index 100% rename from increff/all.csv rename to leetcode/increff/all.csv diff --git a/increff/more-than-six-months.csv b/leetcode/increff/more-than-six-months.csv similarity index 100% rename from increff/more-than-six-months.csv rename to leetcode/increff/more-than-six-months.csv diff --git a/indeed/all.csv b/leetcode/indeed/all.csv similarity index 100% rename from indeed/all.csv rename to leetcode/indeed/all.csv diff --git a/indeed/more-than-six-months.csv b/leetcode/indeed/more-than-six-months.csv similarity index 100% rename from indeed/more-than-six-months.csv rename to leetcode/indeed/more-than-six-months.csv diff --git a/indmoney/all.csv b/leetcode/indmoney/all.csv similarity index 100% rename from indmoney/all.csv rename to leetcode/indmoney/all.csv diff --git a/indmoney/more-than-six-months.csv b/leetcode/indmoney/more-than-six-months.csv similarity index 100% rename from indmoney/more-than-six-months.csv rename to leetcode/indmoney/more-than-six-months.csv diff --git a/info-edge/all.csv b/leetcode/info-edge/all.csv similarity index 100% rename from info-edge/all.csv rename to leetcode/info-edge/all.csv diff --git a/info-edge/more-than-six-months.csv b/leetcode/info-edge/more-than-six-months.csv similarity index 100% rename from info-edge/more-than-six-months.csv rename to leetcode/info-edge/more-than-six-months.csv diff --git a/info-edge/six-months.csv b/leetcode/info-edge/six-months.csv similarity index 100% rename from info-edge/six-months.csv rename to leetcode/info-edge/six-months.csv diff --git a/informatica/all.csv b/leetcode/informatica/all.csv similarity index 100% rename from informatica/all.csv rename to leetcode/informatica/all.csv diff --git a/informatica/more-than-six-months.csv b/leetcode/informatica/more-than-six-months.csv similarity index 100% rename from informatica/more-than-six-months.csv rename to leetcode/informatica/more-than-six-months.csv diff --git a/infosys/all.csv b/leetcode/infosys/all.csv similarity index 100% rename from infosys/all.csv rename to leetcode/infosys/all.csv diff --git a/infosys/more-than-six-months.csv b/leetcode/infosys/more-than-six-months.csv similarity index 100% rename from infosys/more-than-six-months.csv rename to leetcode/infosys/more-than-six-months.csv diff --git a/infosys/six-months.csv b/leetcode/infosys/six-months.csv similarity index 100% rename from infosys/six-months.csv rename to leetcode/infosys/six-months.csv diff --git a/infosys/thirty-days.csv b/leetcode/infosys/thirty-days.csv similarity index 100% rename from infosys/thirty-days.csv rename to leetcode/infosys/thirty-days.csv diff --git a/infosys/three-months.csv b/leetcode/infosys/three-months.csv similarity index 100% rename from infosys/three-months.csv rename to leetcode/infosys/three-months.csv diff --git a/inmobi/all.csv b/leetcode/inmobi/all.csv similarity index 100% rename from inmobi/all.csv rename to leetcode/inmobi/all.csv diff --git a/inmobi/more-than-six-months.csv b/leetcode/inmobi/more-than-six-months.csv similarity index 100% rename from inmobi/more-than-six-months.csv rename to leetcode/inmobi/more-than-six-months.csv diff --git a/innovaccer/all.csv b/leetcode/innovaccer/all.csv similarity index 100% rename from innovaccer/all.csv rename to leetcode/innovaccer/all.csv diff --git a/innovaccer/more-than-six-months.csv b/leetcode/innovaccer/more-than-six-months.csv similarity index 100% rename from innovaccer/more-than-six-months.csv rename to leetcode/innovaccer/more-than-six-months.csv diff --git a/innovaccer/six-months.csv b/leetcode/innovaccer/six-months.csv similarity index 100% rename from innovaccer/six-months.csv rename to leetcode/innovaccer/six-months.csv diff --git a/instabase/all.csv b/leetcode/instabase/all.csv similarity index 100% rename from instabase/all.csv rename to leetcode/instabase/all.csv diff --git a/instabase/more-than-six-months.csv b/leetcode/instabase/more-than-six-months.csv similarity index 100% rename from instabase/more-than-six-months.csv rename to leetcode/instabase/more-than-six-months.csv diff --git a/instacart/all.csv b/leetcode/instacart/all.csv similarity index 100% rename from instacart/all.csv rename to leetcode/instacart/all.csv diff --git a/instacart/more-than-six-months.csv b/leetcode/instacart/more-than-six-months.csv similarity index 100% rename from instacart/more-than-six-months.csv rename to leetcode/instacart/more-than-six-months.csv diff --git a/instacart/six-months.csv b/leetcode/instacart/six-months.csv similarity index 100% rename from instacart/six-months.csv rename to leetcode/instacart/six-months.csv diff --git a/instacart/thirty-days.csv b/leetcode/instacart/thirty-days.csv similarity index 100% rename from instacart/thirty-days.csv rename to leetcode/instacart/thirty-days.csv diff --git a/instacart/three-months.csv b/leetcode/instacart/three-months.csv similarity index 100% rename from instacart/three-months.csv rename to leetcode/instacart/three-months.csv diff --git a/intel/all.csv b/leetcode/intel/all.csv similarity index 100% rename from intel/all.csv rename to leetcode/intel/all.csv diff --git a/intel/more-than-six-months.csv b/leetcode/intel/more-than-six-months.csv similarity index 100% rename from intel/more-than-six-months.csv rename to leetcode/intel/more-than-six-months.csv diff --git a/intel/six-months.csv b/leetcode/intel/six-months.csv similarity index 100% rename from intel/six-months.csv rename to leetcode/intel/six-months.csv diff --git a/interactive-brokers/all.csv b/leetcode/interactive-brokers/all.csv similarity index 100% rename from interactive-brokers/all.csv rename to leetcode/interactive-brokers/all.csv diff --git a/interactive-brokers/more-than-six-months.csv b/leetcode/interactive-brokers/more-than-six-months.csv similarity index 100% rename from interactive-brokers/more-than-six-months.csv rename to leetcode/interactive-brokers/more-than-six-months.csv diff --git a/intercom/all.csv b/leetcode/intercom/all.csv similarity index 100% rename from intercom/all.csv rename to leetcode/intercom/all.csv diff --git a/intercom/more-than-six-months.csv b/leetcode/intercom/more-than-six-months.csv similarity index 100% rename from intercom/more-than-six-months.csv rename to leetcode/intercom/more-than-six-months.csv diff --git a/intercom/six-months.csv b/leetcode/intercom/six-months.csv similarity index 100% rename from intercom/six-months.csv rename to leetcode/intercom/six-months.csv diff --git a/intuit/all.csv b/leetcode/intuit/all.csv similarity index 100% rename from intuit/all.csv rename to leetcode/intuit/all.csv diff --git a/intuit/more-than-six-months.csv b/leetcode/intuit/more-than-six-months.csv similarity index 100% rename from intuit/more-than-six-months.csv rename to leetcode/intuit/more-than-six-months.csv diff --git a/intuit/six-months.csv b/leetcode/intuit/six-months.csv similarity index 100% rename from intuit/six-months.csv rename to leetcode/intuit/six-months.csv diff --git a/intuit/thirty-days.csv b/leetcode/intuit/thirty-days.csv similarity index 100% rename from intuit/thirty-days.csv rename to leetcode/intuit/thirty-days.csv diff --git a/intuit/three-months.csv b/leetcode/intuit/three-months.csv similarity index 100% rename from intuit/three-months.csv rename to leetcode/intuit/three-months.csv diff --git a/ion/all.csv b/leetcode/ion/all.csv similarity index 100% rename from ion/all.csv rename to leetcode/ion/all.csv diff --git a/ion/more-than-six-months.csv b/leetcode/ion/more-than-six-months.csv similarity index 100% rename from ion/more-than-six-months.csv rename to leetcode/ion/more-than-six-months.csv diff --git a/ivp/all.csv b/leetcode/ivp/all.csv similarity index 100% rename from ivp/all.csv rename to leetcode/ivp/all.csv diff --git a/ivp/more-than-six-months.csv b/leetcode/ivp/more-than-six-months.csv similarity index 100% rename from ivp/more-than-six-months.csv rename to leetcode/ivp/more-than-six-months.csv diff --git a/ixigo/all.csv b/leetcode/ixigo/all.csv similarity index 100% rename from ixigo/all.csv rename to leetcode/ixigo/all.csv diff --git a/ixigo/more-than-six-months.csv b/leetcode/ixigo/more-than-six-months.csv similarity index 100% rename from ixigo/more-than-six-months.csv rename to leetcode/ixigo/more-than-six-months.csv diff --git a/ixl/all.csv b/leetcode/ixl/all.csv similarity index 100% rename from ixl/all.csv rename to leetcode/ixl/all.csv diff --git a/ixl/more-than-six-months.csv b/leetcode/ixl/more-than-six-months.csv similarity index 100% rename from ixl/more-than-six-months.csv rename to leetcode/ixl/more-than-six-months.csv diff --git a/ixl/six-months.csv b/leetcode/ixl/six-months.csv similarity index 100% rename from ixl/six-months.csv rename to leetcode/ixl/six-months.csv diff --git a/ixl/three-months.csv b/leetcode/ixl/three-months.csv similarity index 100% rename from ixl/three-months.csv rename to leetcode/ixl/three-months.csv diff --git a/jane-street/all.csv b/leetcode/jane-street/all.csv similarity index 100% rename from jane-street/all.csv rename to leetcode/jane-street/all.csv diff --git a/jane-street/more-than-six-months.csv b/leetcode/jane-street/more-than-six-months.csv similarity index 100% rename from jane-street/more-than-six-months.csv rename to leetcode/jane-street/more-than-six-months.csv diff --git a/jd/all.csv b/leetcode/jd/all.csv similarity index 100% rename from jd/all.csv rename to leetcode/jd/all.csv diff --git a/jd/six-months.csv b/leetcode/jd/six-months.csv similarity index 100% rename from jd/six-months.csv rename to leetcode/jd/six-months.csv diff --git a/jeavio/all.csv b/leetcode/jeavio/all.csv similarity index 100% rename from jeavio/all.csv rename to leetcode/jeavio/all.csv diff --git a/jeavio/more-than-six-months.csv b/leetcode/jeavio/more-than-six-months.csv similarity index 100% rename from jeavio/more-than-six-months.csv rename to leetcode/jeavio/more-than-six-months.csv diff --git a/jetbrains/all.csv b/leetcode/jetbrains/all.csv similarity index 100% rename from jetbrains/all.csv rename to leetcode/jetbrains/all.csv diff --git a/jetbrains/more-than-six-months.csv b/leetcode/jetbrains/more-than-six-months.csv similarity index 100% rename from jetbrains/more-than-six-months.csv rename to leetcode/jetbrains/more-than-six-months.csv diff --git a/jingchi/all.csv b/leetcode/jingchi/all.csv similarity index 100% rename from jingchi/all.csv rename to leetcode/jingchi/all.csv diff --git a/jingchi/more-than-six-months.csv b/leetcode/jingchi/more-than-six-months.csv similarity index 100% rename from jingchi/more-than-six-months.csv rename to leetcode/jingchi/more-than-six-months.csv diff --git a/jio/all.csv b/leetcode/jio/all.csv similarity index 100% rename from jio/all.csv rename to leetcode/jio/all.csv diff --git a/jio/more-than-six-months.csv b/leetcode/jio/more-than-six-months.csv similarity index 100% rename from jio/more-than-six-months.csv rename to leetcode/jio/more-than-six-months.csv diff --git a/josh-technology/all.csv b/leetcode/josh-technology/all.csv similarity index 100% rename from josh-technology/all.csv rename to leetcode/josh-technology/all.csv diff --git a/josh-technology/more-than-six-months.csv b/leetcode/josh-technology/more-than-six-months.csv similarity index 100% rename from josh-technology/more-than-six-months.csv rename to leetcode/josh-technology/more-than-six-months.csv diff --git a/josh-technology/six-months.csv b/leetcode/josh-technology/six-months.csv similarity index 100% rename from josh-technology/six-months.csv rename to leetcode/josh-technology/six-months.csv diff --git a/josh-technology/thirty-days.csv b/leetcode/josh-technology/thirty-days.csv similarity index 100% rename from josh-technology/thirty-days.csv rename to leetcode/josh-technology/thirty-days.csv diff --git a/josh-technology/three-months.csv b/leetcode/josh-technology/three-months.csv similarity index 100% rename from josh-technology/three-months.csv rename to leetcode/josh-technology/three-months.csv diff --git a/jpmorgan/all.csv b/leetcode/jpmorgan/all.csv similarity index 100% rename from jpmorgan/all.csv rename to leetcode/jpmorgan/all.csv diff --git a/jpmorgan/more-than-six-months.csv b/leetcode/jpmorgan/more-than-six-months.csv similarity index 100% rename from jpmorgan/more-than-six-months.csv rename to leetcode/jpmorgan/more-than-six-months.csv diff --git a/jpmorgan/six-months.csv b/leetcode/jpmorgan/six-months.csv similarity index 100% rename from jpmorgan/six-months.csv rename to leetcode/jpmorgan/six-months.csv diff --git a/jpmorgan/thirty-days.csv b/leetcode/jpmorgan/thirty-days.csv similarity index 100% rename from jpmorgan/thirty-days.csv rename to leetcode/jpmorgan/thirty-days.csv diff --git a/jpmorgan/three-months.csv b/leetcode/jpmorgan/three-months.csv similarity index 100% rename from jpmorgan/three-months.csv rename to leetcode/jpmorgan/three-months.csv diff --git a/jtg/all.csv b/leetcode/jtg/all.csv similarity index 100% rename from jtg/all.csv rename to leetcode/jtg/all.csv diff --git a/jtg/more-than-six-months.csv b/leetcode/jtg/more-than-six-months.csv similarity index 100% rename from jtg/more-than-six-months.csv rename to leetcode/jtg/more-than-six-months.csv diff --git a/jump-trading/all.csv b/leetcode/jump-trading/all.csv similarity index 100% rename from jump-trading/all.csv rename to leetcode/jump-trading/all.csv diff --git a/jump-trading/more-than-six-months.csv b/leetcode/jump-trading/more-than-six-months.csv similarity index 100% rename from jump-trading/more-than-six-months.csv rename to leetcode/jump-trading/more-than-six-months.csv diff --git a/jump-trading/six-months.csv b/leetcode/jump-trading/six-months.csv similarity index 100% rename from jump-trading/six-months.csv rename to leetcode/jump-trading/six-months.csv diff --git a/junglee-games/all.csv b/leetcode/junglee-games/all.csv similarity index 100% rename from junglee-games/all.csv rename to leetcode/junglee-games/all.csv diff --git a/junglee-games/more-than-six-months.csv b/leetcode/junglee-games/more-than-six-months.csv similarity index 100% rename from junglee-games/more-than-six-months.csv rename to leetcode/junglee-games/more-than-six-months.csv diff --git a/juniper/all.csv b/leetcode/juniper/all.csv similarity index 100% rename from juniper/all.csv rename to leetcode/juniper/all.csv diff --git a/juniper/more-than-six-months.csv b/leetcode/juniper/more-than-six-months.csv similarity index 100% rename from juniper/more-than-six-months.csv rename to leetcode/juniper/more-than-six-months.csv diff --git a/juspay/all.csv b/leetcode/juspay/all.csv similarity index 100% rename from juspay/all.csv rename to leetcode/juspay/all.csv diff --git a/juspay/more-than-six-months.csv b/leetcode/juspay/more-than-six-months.csv similarity index 100% rename from juspay/more-than-six-months.csv rename to leetcode/juspay/more-than-six-months.csv diff --git a/juspay/six-months.csv b/leetcode/juspay/six-months.csv similarity index 100% rename from juspay/six-months.csv rename to leetcode/juspay/six-months.csv diff --git a/juspay/three-months.csv b/leetcode/juspay/three-months.csv similarity index 100% rename from juspay/three-months.csv rename to leetcode/juspay/three-months.csv diff --git a/justworks/all.csv b/leetcode/justworks/all.csv similarity index 100% rename from justworks/all.csv rename to leetcode/justworks/all.csv diff --git a/justworks/more-than-six-months.csv b/leetcode/justworks/more-than-six-months.csv similarity index 100% rename from justworks/more-than-six-months.csv rename to leetcode/justworks/more-than-six-months.csv diff --git a/kakao/all.csv b/leetcode/kakao/all.csv similarity index 100% rename from kakao/all.csv rename to leetcode/kakao/all.csv diff --git a/kakao/more-than-six-months.csv b/leetcode/kakao/more-than-six-months.csv similarity index 100% rename from kakao/more-than-six-months.csv rename to leetcode/kakao/more-than-six-months.csv diff --git a/karat/all.csv b/leetcode/karat/all.csv similarity index 100% rename from karat/all.csv rename to leetcode/karat/all.csv diff --git a/karat/more-than-six-months.csv b/leetcode/karat/more-than-six-months.csv similarity index 100% rename from karat/more-than-six-months.csv rename to leetcode/karat/more-than-six-months.csv diff --git a/karat/six-months.csv b/leetcode/karat/six-months.csv similarity index 100% rename from karat/six-months.csv rename to leetcode/karat/six-months.csv diff --git a/karat/thirty-days.csv b/leetcode/karat/thirty-days.csv similarity index 100% rename from karat/thirty-days.csv rename to leetcode/karat/thirty-days.csv diff --git a/karat/three-months.csv b/leetcode/karat/three-months.csv similarity index 100% rename from karat/three-months.csv rename to leetcode/karat/three-months.csv diff --git a/keeptruckin/all.csv b/leetcode/keeptruckin/all.csv similarity index 100% rename from keeptruckin/all.csv rename to leetcode/keeptruckin/all.csv diff --git a/keeptruckin/more-than-six-months.csv b/leetcode/keeptruckin/more-than-six-months.csv similarity index 100% rename from keeptruckin/more-than-six-months.csv rename to leetcode/keeptruckin/more-than-six-months.csv diff --git a/keeptruckin/six-months.csv b/leetcode/keeptruckin/six-months.csv similarity index 100% rename from keeptruckin/six-months.csv rename to leetcode/keeptruckin/six-months.csv diff --git a/keeptruckin/three-months.csv b/leetcode/keeptruckin/three-months.csv similarity index 100% rename from keeptruckin/three-months.csv rename to leetcode/keeptruckin/three-months.csv diff --git a/kla-tencor/all.csv b/leetcode/kla-tencor/all.csv similarity index 100% rename from kla-tencor/all.csv rename to leetcode/kla-tencor/all.csv diff --git a/kla-tencor/more-than-six-months.csv b/leetcode/kla-tencor/more-than-six-months.csv similarity index 100% rename from kla-tencor/more-than-six-months.csv rename to leetcode/kla-tencor/more-than-six-months.csv diff --git a/kla-tencor/six-months.csv b/leetcode/kla-tencor/six-months.csv similarity index 100% rename from kla-tencor/six-months.csv rename to leetcode/kla-tencor/six-months.csv diff --git a/kla/all.csv b/leetcode/kla/all.csv similarity index 100% rename from kla/all.csv rename to leetcode/kla/all.csv diff --git a/kla/more-than-six-months.csv b/leetcode/kla/more-than-six-months.csv similarity index 100% rename from kla/more-than-six-months.csv rename to leetcode/kla/more-than-six-months.csv diff --git a/kla/six-months.csv b/leetcode/kla/six-months.csv similarity index 100% rename from kla/six-months.csv rename to leetcode/kla/six-months.csv diff --git a/kla/thirty-days.csv b/leetcode/kla/thirty-days.csv similarity index 100% rename from kla/thirty-days.csv rename to leetcode/kla/thirty-days.csv diff --git a/kla/three-months.csv b/leetcode/kla/three-months.csv similarity index 100% rename from kla/three-months.csv rename to leetcode/kla/three-months.csv diff --git a/komprise/all.csv b/leetcode/komprise/all.csv similarity index 100% rename from komprise/all.csv rename to leetcode/komprise/all.csv diff --git a/komprise/more-than-six-months.csv b/leetcode/komprise/more-than-six-months.csv similarity index 100% rename from komprise/more-than-six-months.csv rename to leetcode/komprise/more-than-six-months.csv diff --git a/kotak-mahindra-bank/all.csv b/leetcode/kotak-mahindra-bank/all.csv similarity index 100% rename from kotak-mahindra-bank/all.csv rename to leetcode/kotak-mahindra-bank/all.csv diff --git a/kotak-mahindra-bank/more-than-six-months.csv b/leetcode/kotak-mahindra-bank/more-than-six-months.csv similarity index 100% rename from kotak-mahindra-bank/more-than-six-months.csv rename to leetcode/kotak-mahindra-bank/more-than-six-months.csv diff --git a/kpit/all.csv b/leetcode/kpit/all.csv similarity index 100% rename from kpit/all.csv rename to leetcode/kpit/all.csv diff --git a/kpit/more-than-six-months.csv b/leetcode/kpit/more-than-six-months.csv similarity index 100% rename from kpit/more-than-six-months.csv rename to leetcode/kpit/more-than-six-months.csv diff --git a/kpmg/all.csv b/leetcode/kpmg/all.csv similarity index 100% rename from kpmg/all.csv rename to leetcode/kpmg/all.csv diff --git a/kpmg/six-months.csv b/leetcode/kpmg/six-months.csv similarity index 100% rename from kpmg/six-months.csv rename to leetcode/kpmg/six-months.csv diff --git a/lacework/all.csv b/leetcode/lacework/all.csv similarity index 100% rename from lacework/all.csv rename to leetcode/lacework/all.csv diff --git a/lacework/more-than-six-months.csv b/leetcode/lacework/more-than-six-months.csv similarity index 100% rename from lacework/more-than-six-months.csv rename to leetcode/lacework/more-than-six-months.csv diff --git a/larsen-toubro/all.csv b/leetcode/larsen-toubro/all.csv similarity index 100% rename from larsen-toubro/all.csv rename to leetcode/larsen-toubro/all.csv diff --git a/larsen-toubro/more-than-six-months.csv b/leetcode/larsen-toubro/more-than-six-months.csv similarity index 100% rename from larsen-toubro/more-than-six-months.csv rename to leetcode/larsen-toubro/more-than-six-months.csv diff --git a/leap-motion/all.csv b/leetcode/leap-motion/all.csv similarity index 100% rename from leap-motion/all.csv rename to leetcode/leap-motion/all.csv diff --git a/leap-motion/more-than-six-months.csv b/leetcode/leap-motion/more-than-six-months.csv similarity index 100% rename from leap-motion/more-than-six-months.csv rename to leetcode/leap-motion/more-than-six-months.csv diff --git a/lendingkart/all.csv b/leetcode/lendingkart/all.csv similarity index 100% rename from lendingkart/all.csv rename to leetcode/lendingkart/all.csv diff --git a/lenskart/all.csv b/leetcode/lenskart/all.csv similarity index 100% rename from lenskart/all.csv rename to leetcode/lenskart/all.csv diff --git a/lenskart/more-than-six-months.csv b/leetcode/lenskart/more-than-six-months.csv similarity index 100% rename from lenskart/more-than-six-months.csv rename to leetcode/lenskart/more-than-six-months.csv diff --git a/lg-electronics/all.csv b/leetcode/lg-electronics/all.csv similarity index 100% rename from lg-electronics/all.csv rename to leetcode/lg-electronics/all.csv diff --git a/lg-electronics/more-than-six-months.csv b/leetcode/lg-electronics/more-than-six-months.csv similarity index 100% rename from lg-electronics/more-than-six-months.csv rename to leetcode/lg-electronics/more-than-six-months.csv diff --git a/lg-electronics/six-months.csv b/leetcode/lg-electronics/six-months.csv similarity index 100% rename from lg-electronics/six-months.csv rename to leetcode/lg-electronics/six-months.csv diff --git a/licious/all.csv b/leetcode/licious/all.csv similarity index 100% rename from licious/all.csv rename to leetcode/licious/all.csv diff --git a/licious/more-than-six-months.csv b/leetcode/licious/more-than-six-months.csv similarity index 100% rename from licious/more-than-six-months.csv rename to leetcode/licious/more-than-six-months.csv diff --git a/liftoff/all.csv b/leetcode/liftoff/all.csv similarity index 100% rename from liftoff/all.csv rename to leetcode/liftoff/all.csv diff --git a/liftoff/more-than-six-months.csv b/leetcode/liftoff/more-than-six-months.csv similarity index 100% rename from liftoff/more-than-six-months.csv rename to leetcode/liftoff/more-than-six-months.csv diff --git a/liftoff/six-months.csv b/leetcode/liftoff/six-months.csv similarity index 100% rename from liftoff/six-months.csv rename to leetcode/liftoff/six-months.csv diff --git a/liftoff/three-months.csv b/leetcode/liftoff/three-months.csv similarity index 100% rename from liftoff/three-months.csv rename to leetcode/liftoff/three-months.csv diff --git a/lime/all.csv b/leetcode/lime/all.csv similarity index 100% rename from lime/all.csv rename to leetcode/lime/all.csv diff --git a/lime/more-than-six-months.csv b/leetcode/lime/more-than-six-months.csv similarity index 100% rename from lime/more-than-six-months.csv rename to leetcode/lime/more-than-six-months.csv diff --git a/lime/six-months.csv b/leetcode/lime/six-months.csv similarity index 100% rename from lime/six-months.csv rename to leetcode/lime/six-months.csv diff --git a/line/all.csv b/leetcode/line/all.csv similarity index 100% rename from line/all.csv rename to leetcode/line/all.csv diff --git a/line/more-than-six-months.csv b/leetcode/line/more-than-six-months.csv similarity index 100% rename from line/more-than-six-months.csv rename to leetcode/line/more-than-six-months.csv diff --git a/line/six-months.csv b/leetcode/line/six-months.csv similarity index 100% rename from line/six-months.csv rename to leetcode/line/six-months.csv diff --git a/line/three-months.csv b/leetcode/line/three-months.csv similarity index 100% rename from line/three-months.csv rename to leetcode/line/three-months.csv diff --git a/linkedin/all.csv b/leetcode/linkedin/all.csv similarity index 100% rename from linkedin/all.csv rename to leetcode/linkedin/all.csv diff --git a/linkedin/more-than-six-months.csv b/leetcode/linkedin/more-than-six-months.csv similarity index 100% rename from linkedin/more-than-six-months.csv rename to leetcode/linkedin/more-than-six-months.csv diff --git a/linkedin/six-months.csv b/leetcode/linkedin/six-months.csv similarity index 100% rename from linkedin/six-months.csv rename to leetcode/linkedin/six-months.csv diff --git a/linkedin/thirty-days.csv b/leetcode/linkedin/thirty-days.csv similarity index 100% rename from linkedin/thirty-days.csv rename to leetcode/linkedin/thirty-days.csv diff --git a/linkedin/three-months.csv b/leetcode/linkedin/three-months.csv similarity index 100% rename from linkedin/three-months.csv rename to leetcode/linkedin/three-months.csv diff --git a/liveramp/all.csv b/leetcode/liveramp/all.csv similarity index 100% rename from liveramp/all.csv rename to leetcode/liveramp/all.csv diff --git a/liveramp/more-than-six-months.csv b/leetcode/liveramp/more-than-six-months.csv similarity index 100% rename from liveramp/more-than-six-months.csv rename to leetcode/liveramp/more-than-six-months.csv diff --git a/livspace/all.csv b/leetcode/livspace/all.csv similarity index 100% rename from livspace/all.csv rename to leetcode/livspace/all.csv diff --git a/livspace/six-months.csv b/leetcode/livspace/six-months.csv similarity index 100% rename from livspace/six-months.csv rename to leetcode/livspace/six-months.csv diff --git a/livspace/three-months.csv b/leetcode/livspace/three-months.csv similarity index 100% rename from livspace/three-months.csv rename to leetcode/livspace/three-months.csv diff --git a/lowe/all.csv b/leetcode/lowe/all.csv similarity index 100% rename from lowe/all.csv rename to leetcode/lowe/all.csv diff --git a/lowe/more-than-six-months.csv b/leetcode/lowe/more-than-six-months.csv similarity index 100% rename from lowe/more-than-six-months.csv rename to leetcode/lowe/more-than-six-months.csv diff --git a/lti/all.csv b/leetcode/lti/all.csv similarity index 100% rename from lti/all.csv rename to leetcode/lti/all.csv diff --git a/lti/more-than-six-months.csv b/leetcode/lti/more-than-six-months.csv similarity index 100% rename from lti/more-than-six-months.csv rename to leetcode/lti/more-than-six-months.csv diff --git a/lucid/all.csv b/leetcode/lucid/all.csv similarity index 100% rename from lucid/all.csv rename to leetcode/lucid/all.csv diff --git a/lucid/more-than-six-months.csv b/leetcode/lucid/more-than-six-months.csv similarity index 100% rename from lucid/more-than-six-months.csv rename to leetcode/lucid/more-than-six-months.csv diff --git a/lucid/six-months.csv b/leetcode/lucid/six-months.csv similarity index 100% rename from lucid/six-months.csv rename to leetcode/lucid/six-months.csv diff --git a/lucid/thirty-days.csv b/leetcode/lucid/thirty-days.csv similarity index 100% rename from lucid/thirty-days.csv rename to leetcode/lucid/thirty-days.csv diff --git a/lucid/three-months.csv b/leetcode/lucid/three-months.csv similarity index 100% rename from lucid/three-months.csv rename to leetcode/lucid/three-months.csv diff --git a/luxoft/all.csv b/leetcode/luxoft/all.csv similarity index 100% rename from luxoft/all.csv rename to leetcode/luxoft/all.csv diff --git a/luxoft/more-than-six-months.csv b/leetcode/luxoft/more-than-six-months.csv similarity index 100% rename from luxoft/more-than-six-months.csv rename to leetcode/luxoft/more-than-six-months.csv diff --git a/luxoft/six-months.csv b/leetcode/luxoft/six-months.csv similarity index 100% rename from luxoft/six-months.csv rename to leetcode/luxoft/six-months.csv diff --git a/lyft/all.csv b/leetcode/lyft/all.csv similarity index 100% rename from lyft/all.csv rename to leetcode/lyft/all.csv diff --git a/lyft/more-than-six-months.csv b/leetcode/lyft/more-than-six-months.csv similarity index 100% rename from lyft/more-than-six-months.csv rename to leetcode/lyft/more-than-six-months.csv diff --git a/lyft/six-months.csv b/leetcode/lyft/six-months.csv similarity index 100% rename from lyft/six-months.csv rename to leetcode/lyft/six-months.csv diff --git a/lyft/thirty-days.csv b/leetcode/lyft/thirty-days.csv similarity index 100% rename from lyft/thirty-days.csv rename to leetcode/lyft/thirty-days.csv diff --git a/lyft/three-months.csv b/leetcode/lyft/three-months.csv similarity index 100% rename from lyft/three-months.csv rename to leetcode/lyft/three-months.csv diff --git a/machine-zone/all.csv b/leetcode/machine-zone/all.csv similarity index 100% rename from machine-zone/all.csv rename to leetcode/machine-zone/all.csv diff --git a/machine-zone/more-than-six-months.csv b/leetcode/machine-zone/more-than-six-months.csv similarity index 100% rename from machine-zone/more-than-six-months.csv rename to leetcode/machine-zone/more-than-six-months.csv diff --git a/machinezone/all.csv b/leetcode/machinezone/all.csv similarity index 100% rename from machinezone/all.csv rename to leetcode/machinezone/all.csv diff --git a/machinezone/more-than-six-months.csv b/leetcode/machinezone/more-than-six-months.csv similarity index 100% rename from machinezone/more-than-six-months.csv rename to leetcode/machinezone/more-than-six-months.csv diff --git a/maersk/all.csv b/leetcode/maersk/all.csv similarity index 100% rename from maersk/all.csv rename to leetcode/maersk/all.csv diff --git a/maersk/more-than-six-months.csv b/leetcode/maersk/more-than-six-months.csv similarity index 100% rename from maersk/more-than-six-months.csv rename to leetcode/maersk/more-than-six-months.csv diff --git a/makemytrip/all.csv b/leetcode/makemytrip/all.csv similarity index 100% rename from makemytrip/all.csv rename to leetcode/makemytrip/all.csv diff --git a/makemytrip/more-than-six-months.csv b/leetcode/makemytrip/more-than-six-months.csv similarity index 100% rename from makemytrip/more-than-six-months.csv rename to leetcode/makemytrip/more-than-six-months.csv diff --git a/mapbox/all.csv b/leetcode/mapbox/all.csv similarity index 100% rename from mapbox/all.csv rename to leetcode/mapbox/all.csv diff --git a/maq-software/all.csv b/leetcode/maq-software/all.csv similarity index 100% rename from maq-software/all.csv rename to leetcode/maq-software/all.csv diff --git a/maq-software/more-than-six-months.csv b/leetcode/maq-software/more-than-six-months.csv similarity index 100% rename from maq-software/more-than-six-months.csv rename to leetcode/maq-software/more-than-six-months.csv diff --git a/marqeta/all.csv b/leetcode/marqeta/all.csv similarity index 100% rename from marqeta/all.csv rename to leetcode/marqeta/all.csv diff --git a/marqeta/more-than-six-months.csv b/leetcode/marqeta/more-than-six-months.csv similarity index 100% rename from marqeta/more-than-six-months.csv rename to leetcode/marqeta/more-than-six-months.csv diff --git a/marqeta/six-months.csv b/leetcode/marqeta/six-months.csv similarity index 100% rename from marqeta/six-months.csv rename to leetcode/marqeta/six-months.csv diff --git a/marqeta/thirty-days.csv b/leetcode/marqeta/thirty-days.csv similarity index 100% rename from marqeta/thirty-days.csv rename to leetcode/marqeta/thirty-days.csv diff --git a/marqeta/three-months.csv b/leetcode/marqeta/three-months.csv similarity index 100% rename from marqeta/three-months.csv rename to leetcode/marqeta/three-months.csv diff --git a/mastercard/all.csv b/leetcode/mastercard/all.csv similarity index 100% rename from mastercard/all.csv rename to leetcode/mastercard/all.csv diff --git a/mastercard/more-than-six-months.csv b/leetcode/mastercard/more-than-six-months.csv similarity index 100% rename from mastercard/more-than-six-months.csv rename to leetcode/mastercard/more-than-six-months.csv diff --git a/mastercard/six-months.csv b/leetcode/mastercard/six-months.csv similarity index 100% rename from mastercard/six-months.csv rename to leetcode/mastercard/six-months.csv diff --git a/mastercard/three-months.csv b/leetcode/mastercard/three-months.csv similarity index 100% rename from mastercard/three-months.csv rename to leetcode/mastercard/three-months.csv diff --git a/mathworks/all.csv b/leetcode/mathworks/all.csv similarity index 100% rename from mathworks/all.csv rename to leetcode/mathworks/all.csv diff --git a/mathworks/more-than-six-months.csv b/leetcode/mathworks/more-than-six-months.csv similarity index 100% rename from mathworks/more-than-six-months.csv rename to leetcode/mathworks/more-than-six-months.csv diff --git a/mathworks/six-months.csv b/leetcode/mathworks/six-months.csv similarity index 100% rename from mathworks/six-months.csv rename to leetcode/mathworks/six-months.csv diff --git a/mathworks/three-months.csv b/leetcode/mathworks/three-months.csv similarity index 100% rename from mathworks/three-months.csv rename to leetcode/mathworks/three-months.csv diff --git a/mcafee/all.csv b/leetcode/mcafee/all.csv similarity index 100% rename from mcafee/all.csv rename to leetcode/mcafee/all.csv diff --git a/mcafee/more-than-six-months.csv b/leetcode/mcafee/more-than-six-months.csv similarity index 100% rename from mcafee/more-than-six-months.csv rename to leetcode/mcafee/more-than-six-months.csv diff --git a/mckinsey/all.csv b/leetcode/mckinsey/all.csv similarity index 100% rename from mckinsey/all.csv rename to leetcode/mckinsey/all.csv diff --git a/mckinsey/more-than-six-months.csv b/leetcode/mckinsey/more-than-six-months.csv similarity index 100% rename from mckinsey/more-than-six-months.csv rename to leetcode/mckinsey/more-than-six-months.csv diff --git a/medianet/all.csv b/leetcode/medianet/all.csv similarity index 100% rename from medianet/all.csv rename to leetcode/medianet/all.csv diff --git a/medianet/more-than-six-months.csv b/leetcode/medianet/more-than-six-months.csv similarity index 100% rename from medianet/more-than-six-months.csv rename to leetcode/medianet/more-than-six-months.csv diff --git a/medianet/six-months.csv b/leetcode/medianet/six-months.csv similarity index 100% rename from medianet/six-months.csv rename to leetcode/medianet/six-months.csv diff --git a/medianet/thirty-days.csv b/leetcode/medianet/thirty-days.csv similarity index 100% rename from medianet/thirty-days.csv rename to leetcode/medianet/thirty-days.csv diff --git a/medianet/three-months.csv b/leetcode/medianet/three-months.csv similarity index 100% rename from medianet/three-months.csv rename to leetcode/medianet/three-months.csv diff --git a/meesho/all.csv b/leetcode/meesho/all.csv similarity index 100% rename from meesho/all.csv rename to leetcode/meesho/all.csv diff --git a/meesho/more-than-six-months.csv b/leetcode/meesho/more-than-six-months.csv similarity index 100% rename from meesho/more-than-six-months.csv rename to leetcode/meesho/more-than-six-months.csv diff --git a/meesho/six-months.csv b/leetcode/meesho/six-months.csv similarity index 100% rename from meesho/six-months.csv rename to leetcode/meesho/six-months.csv diff --git a/meesho/thirty-days.csv b/leetcode/meesho/thirty-days.csv similarity index 100% rename from meesho/thirty-days.csv rename to leetcode/meesho/thirty-days.csv diff --git a/meesho/three-months.csv b/leetcode/meesho/three-months.csv similarity index 100% rename from meesho/three-months.csv rename to leetcode/meesho/three-months.csv diff --git a/meituan/all.csv b/leetcode/meituan/all.csv similarity index 100% rename from meituan/all.csv rename to leetcode/meituan/all.csv diff --git a/meituan/more-than-six-months.csv b/leetcode/meituan/more-than-six-months.csv similarity index 100% rename from meituan/more-than-six-months.csv rename to leetcode/meituan/more-than-six-months.csv diff --git a/mercari/all.csv b/leetcode/mercari/all.csv similarity index 100% rename from mercari/all.csv rename to leetcode/mercari/all.csv diff --git a/mercari/more-than-six-months.csv b/leetcode/mercari/more-than-six-months.csv similarity index 100% rename from mercari/more-than-six-months.csv rename to leetcode/mercari/more-than-six-months.csv diff --git a/micro1/all.csv b/leetcode/micro1/all.csv similarity index 100% rename from micro1/all.csv rename to leetcode/micro1/all.csv diff --git a/micro1/more-than-six-months.csv b/leetcode/micro1/more-than-six-months.csv similarity index 100% rename from micro1/more-than-six-months.csv rename to leetcode/micro1/more-than-six-months.csv diff --git a/microsoft/all.csv b/leetcode/microsoft/all.csv similarity index 100% rename from microsoft/all.csv rename to leetcode/microsoft/all.csv diff --git a/microsoft/more-than-six-months.csv b/leetcode/microsoft/more-than-six-months.csv similarity index 100% rename from microsoft/more-than-six-months.csv rename to leetcode/microsoft/more-than-six-months.csv diff --git a/microsoft/six-months.csv b/leetcode/microsoft/six-months.csv similarity index 100% rename from microsoft/six-months.csv rename to leetcode/microsoft/six-months.csv diff --git a/microsoft/thirty-days.csv b/leetcode/microsoft/thirty-days.csv similarity index 100% rename from microsoft/thirty-days.csv rename to leetcode/microsoft/thirty-days.csv diff --git a/microsoft/three-months.csv b/leetcode/microsoft/three-months.csv similarity index 100% rename from microsoft/three-months.csv rename to leetcode/microsoft/three-months.csv diff --git a/microstrategy/all.csv b/leetcode/microstrategy/all.csv similarity index 100% rename from microstrategy/all.csv rename to leetcode/microstrategy/all.csv diff --git a/microstrategy/more-than-six-months.csv b/leetcode/microstrategy/more-than-six-months.csv similarity index 100% rename from microstrategy/more-than-six-months.csv rename to leetcode/microstrategy/more-than-six-months.csv diff --git a/millennium/all.csv b/leetcode/millennium/all.csv similarity index 100% rename from millennium/all.csv rename to leetcode/millennium/all.csv diff --git a/millennium/more-than-six-months.csv b/leetcode/millennium/more-than-six-months.csv similarity index 100% rename from millennium/more-than-six-months.csv rename to leetcode/millennium/more-than-six-months.csv diff --git a/millennium/six-months.csv b/leetcode/millennium/six-months.csv similarity index 100% rename from millennium/six-months.csv rename to leetcode/millennium/six-months.csv diff --git a/mindtickle/all.csv b/leetcode/mindtickle/all.csv similarity index 100% rename from mindtickle/all.csv rename to leetcode/mindtickle/all.csv diff --git a/mindtickle/more-than-six-months.csv b/leetcode/mindtickle/more-than-six-months.csv similarity index 100% rename from mindtickle/more-than-six-months.csv rename to leetcode/mindtickle/more-than-six-months.csv diff --git a/mindtree/all.csv b/leetcode/mindtree/all.csv similarity index 100% rename from mindtree/all.csv rename to leetcode/mindtree/all.csv diff --git a/mindtree/more-than-six-months.csv b/leetcode/mindtree/more-than-six-months.csv similarity index 100% rename from mindtree/more-than-six-months.csv rename to leetcode/mindtree/more-than-six-months.csv diff --git a/miro/all.csv b/leetcode/miro/all.csv similarity index 100% rename from miro/all.csv rename to leetcode/miro/all.csv diff --git a/miro/more-than-six-months.csv b/leetcode/miro/more-than-six-months.csv similarity index 100% rename from miro/more-than-six-months.csv rename to leetcode/miro/more-than-six-months.csv diff --git a/mishipay/all.csv b/leetcode/mishipay/all.csv similarity index 100% rename from mishipay/all.csv rename to leetcode/mishipay/all.csv diff --git a/mishipay/more-than-six-months.csv b/leetcode/mishipay/more-than-six-months.csv similarity index 100% rename from mishipay/more-than-six-months.csv rename to leetcode/mishipay/more-than-six-months.csv diff --git a/mitsogo/all.csv b/leetcode/mitsogo/all.csv similarity index 100% rename from mitsogo/all.csv rename to leetcode/mitsogo/all.csv diff --git a/mitsogo/more-than-six-months.csv b/leetcode/mitsogo/more-than-six-months.csv similarity index 100% rename from mitsogo/more-than-six-months.csv rename to leetcode/mitsogo/more-than-six-months.csv diff --git a/mixpanel/all.csv b/leetcode/mixpanel/all.csv similarity index 100% rename from mixpanel/all.csv rename to leetcode/mixpanel/all.csv diff --git a/mixpanel/more-than-six-months.csv b/leetcode/mixpanel/more-than-six-months.csv similarity index 100% rename from mixpanel/more-than-six-months.csv rename to leetcode/mixpanel/more-than-six-months.csv diff --git a/mixpanel/six-months.csv b/leetcode/mixpanel/six-months.csv similarity index 100% rename from mixpanel/six-months.csv rename to leetcode/mixpanel/six-months.csv diff --git a/mixpanel/three-months.csv b/leetcode/mixpanel/three-months.csv similarity index 100% rename from mixpanel/three-months.csv rename to leetcode/mixpanel/three-months.csv diff --git a/mobileye/all.csv b/leetcode/mobileye/all.csv similarity index 100% rename from mobileye/all.csv rename to leetcode/mobileye/all.csv diff --git a/mobileye/more-than-six-months.csv b/leetcode/mobileye/more-than-six-months.csv similarity index 100% rename from mobileye/more-than-six-months.csv rename to leetcode/mobileye/more-than-six-months.csv diff --git a/mobisy/all.csv b/leetcode/mobisy/all.csv similarity index 100% rename from mobisy/all.csv rename to leetcode/mobisy/all.csv diff --git a/mobisy/more-than-six-months.csv b/leetcode/mobisy/more-than-six-months.csv similarity index 100% rename from mobisy/more-than-six-months.csv rename to leetcode/mobisy/more-than-six-months.csv diff --git a/moengage/all.csv b/leetcode/moengage/all.csv similarity index 100% rename from moengage/all.csv rename to leetcode/moengage/all.csv diff --git a/moengage/more-than-six-months.csv b/leetcode/moengage/more-than-six-months.csv similarity index 100% rename from moengage/more-than-six-months.csv rename to leetcode/moengage/more-than-six-months.csv diff --git a/moloco/all.csv b/leetcode/moloco/all.csv similarity index 100% rename from moloco/all.csv rename to leetcode/moloco/all.csv diff --git a/moloco/more-than-six-months.csv b/leetcode/moloco/more-than-six-months.csv similarity index 100% rename from moloco/more-than-six-months.csv rename to leetcode/moloco/more-than-six-months.csv diff --git a/moloco/six-months.csv b/leetcode/moloco/six-months.csv similarity index 100% rename from moloco/six-months.csv rename to leetcode/moloco/six-months.csv diff --git a/moneylion/all.csv b/leetcode/moneylion/all.csv similarity index 100% rename from moneylion/all.csv rename to leetcode/moneylion/all.csv diff --git a/moneylion/more-than-six-months.csv b/leetcode/moneylion/more-than-six-months.csv similarity index 100% rename from moneylion/more-than-six-months.csv rename to leetcode/moneylion/more-than-six-months.csv diff --git a/mongodb/all.csv b/leetcode/mongodb/all.csv similarity index 100% rename from mongodb/all.csv rename to leetcode/mongodb/all.csv diff --git a/mongodb/more-than-six-months.csv b/leetcode/mongodb/more-than-six-months.csv similarity index 100% rename from mongodb/more-than-six-months.csv rename to leetcode/mongodb/more-than-six-months.csv diff --git a/mongodb/six-months.csv b/leetcode/mongodb/six-months.csv similarity index 100% rename from mongodb/six-months.csv rename to leetcode/mongodb/six-months.csv diff --git a/mongodb/three-months.csv b/leetcode/mongodb/three-months.csv similarity index 100% rename from mongodb/three-months.csv rename to leetcode/mongodb/three-months.csv diff --git a/morgan-stanley/all.csv b/leetcode/morgan-stanley/all.csv similarity index 100% rename from morgan-stanley/all.csv rename to leetcode/morgan-stanley/all.csv diff --git a/morgan-stanley/more-than-six-months.csv b/leetcode/morgan-stanley/more-than-six-months.csv similarity index 100% rename from morgan-stanley/more-than-six-months.csv rename to leetcode/morgan-stanley/more-than-six-months.csv diff --git a/morgan-stanley/six-months.csv b/leetcode/morgan-stanley/six-months.csv similarity index 100% rename from morgan-stanley/six-months.csv rename to leetcode/morgan-stanley/six-months.csv diff --git a/morgan-stanley/three-months.csv b/leetcode/morgan-stanley/three-months.csv similarity index 100% rename from morgan-stanley/three-months.csv rename to leetcode/morgan-stanley/three-months.csv diff --git a/motorola/all.csv b/leetcode/motorola/all.csv similarity index 100% rename from motorola/all.csv rename to leetcode/motorola/all.csv diff --git a/motorola/more-than-six-months.csv b/leetcode/motorola/more-than-six-months.csv similarity index 100% rename from motorola/more-than-six-months.csv rename to leetcode/motorola/more-than-six-months.csv diff --git a/mountblue/all.csv b/leetcode/mountblue/all.csv similarity index 100% rename from mountblue/all.csv rename to leetcode/mountblue/all.csv diff --git a/mountblue/more-than-six-months.csv b/leetcode/mountblue/more-than-six-months.csv similarity index 100% rename from mountblue/more-than-six-months.csv rename to leetcode/mountblue/more-than-six-months.csv diff --git a/moveworks/all.csv b/leetcode/moveworks/all.csv similarity index 100% rename from moveworks/all.csv rename to leetcode/moveworks/all.csv diff --git a/moveworks/more-than-six-months.csv b/leetcode/moveworks/more-than-six-months.csv similarity index 100% rename from moveworks/more-than-six-months.csv rename to leetcode/moveworks/more-than-six-months.csv diff --git a/moveworks/six-months.csv b/leetcode/moveworks/six-months.csv similarity index 100% rename from moveworks/six-months.csv rename to leetcode/moveworks/six-months.csv diff --git a/moveworks/three-months.csv b/leetcode/moveworks/three-months.csv similarity index 100% rename from moveworks/three-months.csv rename to leetcode/moveworks/three-months.csv diff --git a/msci/all.csv b/leetcode/msci/all.csv similarity index 100% rename from msci/all.csv rename to leetcode/msci/all.csv diff --git a/msci/more-than-six-months.csv b/leetcode/msci/more-than-six-months.csv similarity index 100% rename from msci/more-than-six-months.csv rename to leetcode/msci/more-than-six-months.csv diff --git a/mts/all.csv b/leetcode/mts/all.csv similarity index 100% rename from mts/all.csv rename to leetcode/mts/all.csv diff --git a/mts/more-than-six-months.csv b/leetcode/mts/more-than-six-months.csv similarity index 100% rename from mts/more-than-six-months.csv rename to leetcode/mts/more-than-six-months.csv diff --git a/murex/all.csv b/leetcode/murex/all.csv similarity index 100% rename from murex/all.csv rename to leetcode/murex/all.csv diff --git a/murex/more-than-six-months.csv b/leetcode/murex/more-than-six-months.csv similarity index 100% rename from murex/more-than-six-months.csv rename to leetcode/murex/more-than-six-months.csv diff --git a/mykaarma/all.csv b/leetcode/mykaarma/all.csv similarity index 100% rename from mykaarma/all.csv rename to leetcode/mykaarma/all.csv diff --git a/mykaarma/more-than-six-months.csv b/leetcode/mykaarma/more-than-six-months.csv similarity index 100% rename from mykaarma/more-than-six-months.csv rename to leetcode/mykaarma/more-than-six-months.csv diff --git a/myntra/all.csv b/leetcode/myntra/all.csv similarity index 100% rename from myntra/all.csv rename to leetcode/myntra/all.csv diff --git a/myntra/more-than-six-months.csv b/leetcode/myntra/more-than-six-months.csv similarity index 100% rename from myntra/more-than-six-months.csv rename to leetcode/myntra/more-than-six-months.csv diff --git a/myntra/six-months.csv b/leetcode/myntra/six-months.csv similarity index 100% rename from myntra/six-months.csv rename to leetcode/myntra/six-months.csv diff --git a/nagarro/all.csv b/leetcode/nagarro/all.csv similarity index 100% rename from nagarro/all.csv rename to leetcode/nagarro/all.csv diff --git a/nagarro/more-than-six-months.csv b/leetcode/nagarro/more-than-six-months.csv similarity index 100% rename from nagarro/more-than-six-months.csv rename to leetcode/nagarro/more-than-six-months.csv diff --git a/national-instruments/all.csv b/leetcode/national-instruments/all.csv similarity index 100% rename from national-instruments/all.csv rename to leetcode/national-instruments/all.csv diff --git a/national-instruments/more-than-six-months.csv b/leetcode/national-instruments/more-than-six-months.csv similarity index 100% rename from national-instruments/more-than-six-months.csv rename to leetcode/national-instruments/more-than-six-months.csv diff --git a/national-payments-coorperation-india/all.csv b/leetcode/national-payments-coorperation-india/all.csv similarity index 100% rename from national-payments-coorperation-india/all.csv rename to leetcode/national-payments-coorperation-india/all.csv diff --git a/national-payments-coorperation-india/more-than-six-months.csv b/leetcode/national-payments-coorperation-india/more-than-six-months.csv similarity index 100% rename from national-payments-coorperation-india/more-than-six-months.csv rename to leetcode/national-payments-coorperation-india/more-than-six-months.csv diff --git a/navan/all.csv b/leetcode/navan/all.csv similarity index 100% rename from navan/all.csv rename to leetcode/navan/all.csv diff --git a/navan/more-than-six-months.csv b/leetcode/navan/more-than-six-months.csv similarity index 100% rename from navan/more-than-six-months.csv rename to leetcode/navan/more-than-six-months.csv diff --git a/navan/six-months.csv b/leetcode/navan/six-months.csv similarity index 100% rename from navan/six-months.csv rename to leetcode/navan/six-months.csv diff --git a/navan/three-months.csv b/leetcode/navan/three-months.csv similarity index 100% rename from navan/three-months.csv rename to leetcode/navan/three-months.csv diff --git a/naver/all.csv b/leetcode/naver/all.csv similarity index 100% rename from naver/all.csv rename to leetcode/naver/all.csv diff --git a/naver/more-than-six-months.csv b/leetcode/naver/more-than-six-months.csv similarity index 100% rename from naver/more-than-six-months.csv rename to leetcode/naver/more-than-six-months.csv diff --git a/navi/all.csv b/leetcode/navi/all.csv similarity index 100% rename from navi/all.csv rename to leetcode/navi/all.csv diff --git a/navi/more-than-six-months.csv b/leetcode/navi/more-than-six-months.csv similarity index 100% rename from navi/more-than-six-months.csv rename to leetcode/navi/more-than-six-months.csv diff --git a/ncr/all.csv b/leetcode/ncr/all.csv similarity index 100% rename from ncr/all.csv rename to leetcode/ncr/all.csv diff --git a/ncr/more-than-six-months.csv b/leetcode/ncr/more-than-six-months.csv similarity index 100% rename from ncr/more-than-six-months.csv rename to leetcode/ncr/more-than-six-months.csv diff --git a/nerdwallet/all.csv b/leetcode/nerdwallet/all.csv similarity index 100% rename from nerdwallet/all.csv rename to leetcode/nerdwallet/all.csv diff --git a/netapp/all.csv b/leetcode/netapp/all.csv similarity index 100% rename from netapp/all.csv rename to leetcode/netapp/all.csv diff --git a/netapp/more-than-six-months.csv b/leetcode/netapp/more-than-six-months.csv similarity index 100% rename from netapp/more-than-six-months.csv rename to leetcode/netapp/more-than-six-months.csv diff --git a/netapp/six-months.csv b/leetcode/netapp/six-months.csv similarity index 100% rename from netapp/six-months.csv rename to leetcode/netapp/six-months.csv diff --git a/netcracker-technology/all.csv b/leetcode/netcracker-technology/all.csv similarity index 100% rename from netcracker-technology/all.csv rename to leetcode/netcracker-technology/all.csv diff --git a/netcracker-technology/six-months.csv b/leetcode/netcracker-technology/six-months.csv similarity index 100% rename from netcracker-technology/six-months.csv rename to leetcode/netcracker-technology/six-months.csv diff --git a/netcracker-technology/three-months.csv b/leetcode/netcracker-technology/three-months.csv similarity index 100% rename from netcracker-technology/three-months.csv rename to leetcode/netcracker-technology/three-months.csv diff --git a/netease/all.csv b/leetcode/netease/all.csv similarity index 100% rename from netease/all.csv rename to leetcode/netease/all.csv diff --git a/netease/more-than-six-months.csv b/leetcode/netease/more-than-six-months.csv similarity index 100% rename from netease/more-than-six-months.csv rename to leetcode/netease/more-than-six-months.csv diff --git a/netflix/all.csv b/leetcode/netflix/all.csv similarity index 100% rename from netflix/all.csv rename to leetcode/netflix/all.csv diff --git a/netflix/more-than-six-months.csv b/leetcode/netflix/more-than-six-months.csv similarity index 100% rename from netflix/more-than-six-months.csv rename to leetcode/netflix/more-than-six-months.csv diff --git a/netflix/six-months.csv b/leetcode/netflix/six-months.csv similarity index 100% rename from netflix/six-months.csv rename to leetcode/netflix/six-months.csv diff --git a/netflix/thirty-days.csv b/leetcode/netflix/thirty-days.csv similarity index 100% rename from netflix/thirty-days.csv rename to leetcode/netflix/thirty-days.csv diff --git a/netflix/three-months.csv b/leetcode/netflix/three-months.csv similarity index 100% rename from netflix/three-months.csv rename to leetcode/netflix/three-months.csv diff --git a/netskope/all.csv b/leetcode/netskope/all.csv similarity index 100% rename from netskope/all.csv rename to leetcode/netskope/all.csv diff --git a/netskope/more-than-six-months.csv b/leetcode/netskope/more-than-six-months.csv similarity index 100% rename from netskope/more-than-six-months.csv rename to leetcode/netskope/more-than-six-months.csv diff --git a/netskope/six-months.csv b/leetcode/netskope/six-months.csv similarity index 100% rename from netskope/six-months.csv rename to leetcode/netskope/six-months.csv diff --git a/netsuite/all.csv b/leetcode/netsuite/all.csv similarity index 100% rename from netsuite/all.csv rename to leetcode/netsuite/all.csv diff --git a/netsuite/more-than-six-months.csv b/leetcode/netsuite/more-than-six-months.csv similarity index 100% rename from netsuite/more-than-six-months.csv rename to leetcode/netsuite/more-than-six-months.csv diff --git a/newsbreak/all.csv b/leetcode/newsbreak/all.csv similarity index 100% rename from newsbreak/all.csv rename to leetcode/newsbreak/all.csv diff --git a/newsbreak/six-months.csv b/leetcode/newsbreak/six-months.csv similarity index 100% rename from newsbreak/six-months.csv rename to leetcode/newsbreak/six-months.csv diff --git a/newsbreak/three-months.csv b/leetcode/newsbreak/three-months.csv similarity index 100% rename from newsbreak/three-months.csv rename to leetcode/newsbreak/three-months.csv diff --git a/nextdoor/all.csv b/leetcode/nextdoor/all.csv similarity index 100% rename from nextdoor/all.csv rename to leetcode/nextdoor/all.csv diff --git a/nextdoor/more-than-six-months.csv b/leetcode/nextdoor/more-than-six-months.csv similarity index 100% rename from nextdoor/more-than-six-months.csv rename to leetcode/nextdoor/more-than-six-months.csv diff --git a/nextdoor/six-months.csv b/leetcode/nextdoor/six-months.csv similarity index 100% rename from nextdoor/six-months.csv rename to leetcode/nextdoor/six-months.csv diff --git a/nextjump/all.csv b/leetcode/nextjump/all.csv similarity index 100% rename from nextjump/all.csv rename to leetcode/nextjump/all.csv diff --git a/nextjump/more-than-six-months.csv b/leetcode/nextjump/more-than-six-months.csv similarity index 100% rename from nextjump/more-than-six-months.csv rename to leetcode/nextjump/more-than-six-months.csv diff --git a/nference/all.csv b/leetcode/nference/all.csv similarity index 100% rename from nference/all.csv rename to leetcode/nference/all.csv diff --git a/nference/more-than-six-months.csv b/leetcode/nference/more-than-six-months.csv similarity index 100% rename from nference/more-than-six-months.csv rename to leetcode/nference/more-than-six-months.csv diff --git a/niantic/all.csv b/leetcode/niantic/all.csv similarity index 100% rename from niantic/all.csv rename to leetcode/niantic/all.csv diff --git a/niantic/more-than-six-months.csv b/leetcode/niantic/more-than-six-months.csv similarity index 100% rename from niantic/more-than-six-months.csv rename to leetcode/niantic/more-than-six-months.csv diff --git a/nielsen/all.csv b/leetcode/nielsen/all.csv similarity index 100% rename from nielsen/all.csv rename to leetcode/nielsen/all.csv diff --git a/nielsen/more-than-six-months.csv b/leetcode/nielsen/more-than-six-months.csv similarity index 100% rename from nielsen/more-than-six-months.csv rename to leetcode/nielsen/more-than-six-months.csv diff --git a/nike/all.csv b/leetcode/nike/all.csv similarity index 100% rename from nike/all.csv rename to leetcode/nike/all.csv diff --git a/nike/more-than-six-months.csv b/leetcode/nike/more-than-six-months.csv similarity index 100% rename from nike/more-than-six-months.csv rename to leetcode/nike/more-than-six-months.csv diff --git a/nike/six-months.csv b/leetcode/nike/six-months.csv similarity index 100% rename from nike/six-months.csv rename to leetcode/nike/six-months.csv diff --git a/nike/thirty-days.csv b/leetcode/nike/thirty-days.csv similarity index 100% rename from nike/thirty-days.csv rename to leetcode/nike/thirty-days.csv diff --git a/nike/three-months.csv b/leetcode/nike/three-months.csv similarity index 100% rename from nike/three-months.csv rename to leetcode/nike/three-months.csv diff --git a/ninjacart/all.csv b/leetcode/ninjacart/all.csv similarity index 100% rename from ninjacart/all.csv rename to leetcode/ninjacart/all.csv diff --git a/ninjacart/more-than-six-months.csv b/leetcode/ninjacart/more-than-six-months.csv similarity index 100% rename from ninjacart/more-than-six-months.csv rename to leetcode/ninjacart/more-than-six-months.csv diff --git a/nokia/all.csv b/leetcode/nokia/all.csv similarity index 100% rename from nokia/all.csv rename to leetcode/nokia/all.csv diff --git a/nokia/more-than-six-months.csv b/leetcode/nokia/more-than-six-months.csv similarity index 100% rename from nokia/more-than-six-months.csv rename to leetcode/nokia/more-than-six-months.csv diff --git a/nordstrom/all.csv b/leetcode/nordstrom/all.csv similarity index 100% rename from nordstrom/all.csv rename to leetcode/nordstrom/all.csv diff --git a/nordstrom/more-than-six-months.csv b/leetcode/nordstrom/more-than-six-months.csv similarity index 100% rename from nordstrom/more-than-six-months.csv rename to leetcode/nordstrom/more-than-six-months.csv diff --git a/nordstrom/six-months.csv b/leetcode/nordstrom/six-months.csv similarity index 100% rename from nordstrom/six-months.csv rename to leetcode/nordstrom/six-months.csv diff --git a/nordstrom/three-months.csv b/leetcode/nordstrom/three-months.csv similarity index 100% rename from nordstrom/three-months.csv rename to leetcode/nordstrom/three-months.csv diff --git a/notion/all.csv b/leetcode/notion/all.csv similarity index 100% rename from notion/all.csv rename to leetcode/notion/all.csv diff --git a/notion/more-than-six-months.csv b/leetcode/notion/more-than-six-months.csv similarity index 100% rename from notion/more-than-six-months.csv rename to leetcode/notion/more-than-six-months.csv diff --git a/npci/all.csv b/leetcode/npci/all.csv similarity index 100% rename from npci/all.csv rename to leetcode/npci/all.csv diff --git a/npci/more-than-six-months.csv b/leetcode/npci/more-than-six-months.csv similarity index 100% rename from npci/more-than-six-months.csv rename to leetcode/npci/more-than-six-months.csv diff --git a/nuro/all.csv b/leetcode/nuro/all.csv similarity index 100% rename from nuro/all.csv rename to leetcode/nuro/all.csv diff --git a/nuro/more-than-six-months.csv b/leetcode/nuro/more-than-six-months.csv similarity index 100% rename from nuro/more-than-six-months.csv rename to leetcode/nuro/more-than-six-months.csv diff --git a/nuro/six-months.csv b/leetcode/nuro/six-months.csv similarity index 100% rename from nuro/six-months.csv rename to leetcode/nuro/six-months.csv diff --git a/nuro/thirty-days.csv b/leetcode/nuro/thirty-days.csv similarity index 100% rename from nuro/thirty-days.csv rename to leetcode/nuro/thirty-days.csv diff --git a/nuro/three-months.csv b/leetcode/nuro/three-months.csv similarity index 100% rename from nuro/three-months.csv rename to leetcode/nuro/three-months.csv diff --git a/nutanix/all.csv b/leetcode/nutanix/all.csv similarity index 100% rename from nutanix/all.csv rename to leetcode/nutanix/all.csv diff --git a/nutanix/more-than-six-months.csv b/leetcode/nutanix/more-than-six-months.csv similarity index 100% rename from nutanix/more-than-six-months.csv rename to leetcode/nutanix/more-than-six-months.csv diff --git a/nutanix/six-months.csv b/leetcode/nutanix/six-months.csv similarity index 100% rename from nutanix/six-months.csv rename to leetcode/nutanix/six-months.csv diff --git a/nutanix/thirty-days.csv b/leetcode/nutanix/thirty-days.csv similarity index 100% rename from nutanix/thirty-days.csv rename to leetcode/nutanix/thirty-days.csv diff --git a/nutanix/three-months.csv b/leetcode/nutanix/three-months.csv similarity index 100% rename from nutanix/three-months.csv rename to leetcode/nutanix/three-months.csv diff --git a/nvidia/all.csv b/leetcode/nvidia/all.csv similarity index 100% rename from nvidia/all.csv rename to leetcode/nvidia/all.csv diff --git a/nvidia/more-than-six-months.csv b/leetcode/nvidia/more-than-six-months.csv similarity index 100% rename from nvidia/more-than-six-months.csv rename to leetcode/nvidia/more-than-six-months.csv diff --git a/nvidia/six-months.csv b/leetcode/nvidia/six-months.csv similarity index 100% rename from nvidia/six-months.csv rename to leetcode/nvidia/six-months.csv diff --git a/nvidia/thirty-days.csv b/leetcode/nvidia/thirty-days.csv similarity index 100% rename from nvidia/thirty-days.csv rename to leetcode/nvidia/thirty-days.csv diff --git a/nvidia/three-months.csv b/leetcode/nvidia/three-months.csv similarity index 100% rename from nvidia/three-months.csv rename to leetcode/nvidia/three-months.csv diff --git a/nykaa/all.csv b/leetcode/nykaa/all.csv similarity index 100% rename from nykaa/all.csv rename to leetcode/nykaa/all.csv diff --git a/nykaa/more-than-six-months.csv b/leetcode/nykaa/more-than-six-months.csv similarity index 100% rename from nykaa/more-than-six-months.csv rename to leetcode/nykaa/more-than-six-months.csv diff --git a/nykaa/six-months.csv b/leetcode/nykaa/six-months.csv similarity index 100% rename from nykaa/six-months.csv rename to leetcode/nykaa/six-months.csv diff --git a/observeai/all.csv b/leetcode/observeai/all.csv similarity index 100% rename from observeai/all.csv rename to leetcode/observeai/all.csv diff --git a/observeai/more-than-six-months.csv b/leetcode/observeai/more-than-six-months.csv similarity index 100% rename from observeai/more-than-six-months.csv rename to leetcode/observeai/more-than-six-months.csv diff --git a/observeai/six-months.csv b/leetcode/observeai/six-months.csv similarity index 100% rename from observeai/six-months.csv rename to leetcode/observeai/six-months.csv diff --git a/odoo/all.csv b/leetcode/odoo/all.csv similarity index 100% rename from odoo/all.csv rename to leetcode/odoo/all.csv diff --git a/odoo/more-than-six-months.csv b/leetcode/odoo/more-than-six-months.csv similarity index 100% rename from odoo/more-than-six-months.csv rename to leetcode/odoo/more-than-six-months.csv diff --git a/okta/all.csv b/leetcode/okta/all.csv similarity index 100% rename from okta/all.csv rename to leetcode/okta/all.csv diff --git a/okta/more-than-six-months.csv b/leetcode/okta/more-than-six-months.csv similarity index 100% rename from okta/more-than-six-months.csv rename to leetcode/okta/more-than-six-months.csv diff --git a/okx/all.csv b/leetcode/okx/all.csv similarity index 100% rename from okx/all.csv rename to leetcode/okx/all.csv diff --git a/okx/more-than-six-months.csv b/leetcode/okx/more-than-six-months.csv similarity index 100% rename from okx/more-than-six-months.csv rename to leetcode/okx/more-than-six-months.csv diff --git a/ola/all.csv b/leetcode/ola/all.csv similarity index 100% rename from ola/all.csv rename to leetcode/ola/all.csv diff --git a/ola/more-than-six-months.csv b/leetcode/ola/more-than-six-months.csv similarity index 100% rename from ola/more-than-six-months.csv rename to leetcode/ola/more-than-six-months.csv diff --git a/olx/all.csv b/leetcode/olx/all.csv similarity index 100% rename from olx/all.csv rename to leetcode/olx/all.csv diff --git a/olx/six-months.csv b/leetcode/olx/six-months.csv similarity index 100% rename from olx/six-months.csv rename to leetcode/olx/six-months.csv diff --git a/openai/all.csv b/leetcode/openai/all.csv similarity index 100% rename from openai/all.csv rename to leetcode/openai/all.csv diff --git a/openai/more-than-six-months.csv b/leetcode/openai/more-than-six-months.csv similarity index 100% rename from openai/more-than-six-months.csv rename to leetcode/openai/more-than-six-months.csv diff --git a/openai/six-months.csv b/leetcode/openai/six-months.csv similarity index 100% rename from openai/six-months.csv rename to leetcode/openai/six-months.csv diff --git a/openai/three-months.csv b/leetcode/openai/three-months.csv similarity index 100% rename from openai/three-months.csv rename to leetcode/openai/three-months.csv diff --git a/opendoor/all.csv b/leetcode/opendoor/all.csv similarity index 100% rename from opendoor/all.csv rename to leetcode/opendoor/all.csv diff --git a/opendoor/more-than-six-months.csv b/leetcode/opendoor/more-than-six-months.csv similarity index 100% rename from opendoor/more-than-six-months.csv rename to leetcode/opendoor/more-than-six-months.csv diff --git a/opentext/all.csv b/leetcode/opentext/all.csv similarity index 100% rename from opentext/all.csv rename to leetcode/opentext/all.csv diff --git a/opentext/more-than-six-months.csv b/leetcode/opentext/more-than-six-months.csv similarity index 100% rename from opentext/more-than-six-months.csv rename to leetcode/opentext/more-than-six-months.csv diff --git a/oppo/all.csv b/leetcode/oppo/all.csv similarity index 100% rename from oppo/all.csv rename to leetcode/oppo/all.csv diff --git a/optiver/all.csv b/leetcode/optiver/all.csv similarity index 100% rename from optiver/all.csv rename to leetcode/optiver/all.csv diff --git a/optiver/more-than-six-months.csv b/leetcode/optiver/more-than-six-months.csv similarity index 100% rename from optiver/more-than-six-months.csv rename to leetcode/optiver/more-than-six-months.csv diff --git a/optum/all.csv b/leetcode/optum/all.csv similarity index 100% rename from optum/all.csv rename to leetcode/optum/all.csv diff --git a/optum/more-than-six-months.csv b/leetcode/optum/more-than-six-months.csv similarity index 100% rename from optum/more-than-six-months.csv rename to leetcode/optum/more-than-six-months.csv diff --git a/oracle/all.csv b/leetcode/oracle/all.csv similarity index 100% rename from oracle/all.csv rename to leetcode/oracle/all.csv diff --git a/oracle/more-than-six-months.csv b/leetcode/oracle/more-than-six-months.csv similarity index 100% rename from oracle/more-than-six-months.csv rename to leetcode/oracle/more-than-six-months.csv diff --git a/oracle/six-months.csv b/leetcode/oracle/six-months.csv similarity index 100% rename from oracle/six-months.csv rename to leetcode/oracle/six-months.csv diff --git a/oracle/thirty-days.csv b/leetcode/oracle/thirty-days.csv similarity index 100% rename from oracle/thirty-days.csv rename to leetcode/oracle/thirty-days.csv diff --git a/oracle/three-months.csv b/leetcode/oracle/three-months.csv similarity index 100% rename from oracle/three-months.csv rename to leetcode/oracle/three-months.csv diff --git a/oscar-health/all.csv b/leetcode/oscar-health/all.csv similarity index 100% rename from oscar-health/all.csv rename to leetcode/oscar-health/all.csv diff --git a/oscar-health/more-than-six-months.csv b/leetcode/oscar-health/more-than-six-months.csv similarity index 100% rename from oscar-health/more-than-six-months.csv rename to leetcode/oscar-health/more-than-six-months.csv diff --git a/oscar-health/six-months.csv b/leetcode/oscar-health/six-months.csv similarity index 100% rename from oscar-health/six-months.csv rename to leetcode/oscar-health/six-months.csv diff --git a/oscar-health/thirty-days.csv b/leetcode/oscar-health/thirty-days.csv similarity index 100% rename from oscar-health/thirty-days.csv rename to leetcode/oscar-health/thirty-days.csv diff --git a/oscar-health/three-months.csv b/leetcode/oscar-health/three-months.csv similarity index 100% rename from oscar-health/three-months.csv rename to leetcode/oscar-health/three-months.csv diff --git a/otterai/all.csv b/leetcode/otterai/all.csv similarity index 100% rename from otterai/all.csv rename to leetcode/otterai/all.csv diff --git a/otterai/more-than-six-months.csv b/leetcode/otterai/more-than-six-months.csv similarity index 100% rename from otterai/more-than-six-months.csv rename to leetcode/otterai/more-than-six-months.csv diff --git a/oyo/all.csv b/leetcode/oyo/all.csv similarity index 100% rename from oyo/all.csv rename to leetcode/oyo/all.csv diff --git a/oyo/more-than-six-months.csv b/leetcode/oyo/more-than-six-months.csv similarity index 100% rename from oyo/more-than-six-months.csv rename to leetcode/oyo/more-than-six-months.csv diff --git a/oyo/six-months.csv b/leetcode/oyo/six-months.csv similarity index 100% rename from oyo/six-months.csv rename to leetcode/oyo/six-months.csv diff --git a/oyo/three-months.csv b/leetcode/oyo/three-months.csv similarity index 100% rename from oyo/three-months.csv rename to leetcode/oyo/three-months.csv diff --git a/ozon/all.csv b/leetcode/ozon/all.csv similarity index 100% rename from ozon/all.csv rename to leetcode/ozon/all.csv diff --git a/ozon/more-than-six-months.csv b/leetcode/ozon/more-than-six-months.csv similarity index 100% rename from ozon/more-than-six-months.csv rename to leetcode/ozon/more-than-six-months.csv diff --git a/ozon/six-months.csv b/leetcode/ozon/six-months.csv similarity index 100% rename from ozon/six-months.csv rename to leetcode/ozon/six-months.csv diff --git a/ozon/three-months.csv b/leetcode/ozon/three-months.csv similarity index 100% rename from ozon/three-months.csv rename to leetcode/ozon/three-months.csv diff --git a/palantir-technologies/all.csv b/leetcode/palantir-technologies/all.csv similarity index 100% rename from palantir-technologies/all.csv rename to leetcode/palantir-technologies/all.csv diff --git a/palantir-technologies/more-than-six-months.csv b/leetcode/palantir-technologies/more-than-six-months.csv similarity index 100% rename from palantir-technologies/more-than-six-months.csv rename to leetcode/palantir-technologies/more-than-six-months.csv diff --git a/palantir-technologies/six-months.csv b/leetcode/palantir-technologies/six-months.csv similarity index 100% rename from palantir-technologies/six-months.csv rename to leetcode/palantir-technologies/six-months.csv diff --git a/palantir-technologies/three-months.csv b/leetcode/palantir-technologies/three-months.csv similarity index 100% rename from palantir-technologies/three-months.csv rename to leetcode/palantir-technologies/three-months.csv diff --git a/palo-alto-networks/all.csv b/leetcode/palo-alto-networks/all.csv similarity index 100% rename from palo-alto-networks/all.csv rename to leetcode/palo-alto-networks/all.csv diff --git a/palo-alto-networks/more-than-six-months.csv b/leetcode/palo-alto-networks/more-than-six-months.csv similarity index 100% rename from palo-alto-networks/more-than-six-months.csv rename to leetcode/palo-alto-networks/more-than-six-months.csv diff --git a/palo-alto-networks/six-months.csv b/leetcode/palo-alto-networks/six-months.csv similarity index 100% rename from palo-alto-networks/six-months.csv rename to leetcode/palo-alto-networks/six-months.csv diff --git a/palo-alto-networks/three-months.csv b/leetcode/palo-alto-networks/three-months.csv similarity index 100% rename from palo-alto-networks/three-months.csv rename to leetcode/palo-alto-networks/three-months.csv diff --git a/park/all.csv b/leetcode/park/all.csv similarity index 100% rename from park/all.csv rename to leetcode/park/all.csv diff --git a/park/more-than-six-months.csv b/leetcode/park/more-than-six-months.csv similarity index 100% rename from park/more-than-six-months.csv rename to leetcode/park/more-than-six-months.csv diff --git a/patreon/all.csv b/leetcode/patreon/all.csv similarity index 100% rename from patreon/all.csv rename to leetcode/patreon/all.csv diff --git a/patreon/more-than-six-months.csv b/leetcode/patreon/more-than-six-months.csv similarity index 100% rename from patreon/more-than-six-months.csv rename to leetcode/patreon/more-than-six-months.csv diff --git a/patreon/six-months.csv b/leetcode/patreon/six-months.csv similarity index 100% rename from patreon/six-months.csv rename to leetcode/patreon/six-months.csv diff --git a/paycom/all.csv b/leetcode/paycom/all.csv similarity index 100% rename from paycom/all.csv rename to leetcode/paycom/all.csv diff --git a/paycom/more-than-six-months.csv b/leetcode/paycom/more-than-six-months.csv similarity index 100% rename from paycom/more-than-six-months.csv rename to leetcode/paycom/more-than-six-months.csv diff --git a/paypal/all.csv b/leetcode/paypal/all.csv similarity index 100% rename from paypal/all.csv rename to leetcode/paypal/all.csv diff --git a/paypal/more-than-six-months.csv b/leetcode/paypal/more-than-six-months.csv similarity index 100% rename from paypal/more-than-six-months.csv rename to leetcode/paypal/more-than-six-months.csv diff --git a/paypal/six-months.csv b/leetcode/paypal/six-months.csv similarity index 100% rename from paypal/six-months.csv rename to leetcode/paypal/six-months.csv diff --git a/paypal/thirty-days.csv b/leetcode/paypal/thirty-days.csv similarity index 100% rename from paypal/thirty-days.csv rename to leetcode/paypal/thirty-days.csv diff --git a/paypal/three-months.csv b/leetcode/paypal/three-months.csv similarity index 100% rename from paypal/three-months.csv rename to leetcode/paypal/three-months.csv diff --git a/paypay/all.csv b/leetcode/paypay/all.csv similarity index 100% rename from paypay/all.csv rename to leetcode/paypay/all.csv diff --git a/paypay/more-than-six-months.csv b/leetcode/paypay/more-than-six-months.csv similarity index 100% rename from paypay/more-than-six-months.csv rename to leetcode/paypay/more-than-six-months.csv diff --git a/paypay/six-months.csv b/leetcode/paypay/six-months.csv similarity index 100% rename from paypay/six-months.csv rename to leetcode/paypay/six-months.csv diff --git a/paypay/three-months.csv b/leetcode/paypay/three-months.csv similarity index 100% rename from paypay/three-months.csv rename to leetcode/paypay/three-months.csv diff --git a/paytm/all.csv b/leetcode/paytm/all.csv similarity index 100% rename from paytm/all.csv rename to leetcode/paytm/all.csv diff --git a/paytm/more-than-six-months.csv b/leetcode/paytm/more-than-six-months.csv similarity index 100% rename from paytm/more-than-six-months.csv rename to leetcode/paytm/more-than-six-months.csv diff --git a/paytm/six-months.csv b/leetcode/paytm/six-months.csv similarity index 100% rename from paytm/six-months.csv rename to leetcode/paytm/six-months.csv diff --git a/payu/all.csv b/leetcode/payu/all.csv similarity index 100% rename from payu/all.csv rename to leetcode/payu/all.csv diff --git a/payu/more-than-six-months.csv b/leetcode/payu/more-than-six-months.csv similarity index 100% rename from payu/more-than-six-months.csv rename to leetcode/payu/more-than-six-months.csv diff --git a/peak6/all.csv b/leetcode/peak6/all.csv similarity index 100% rename from peak6/all.csv rename to leetcode/peak6/all.csv diff --git a/pega/all.csv b/leetcode/pega/all.csv similarity index 100% rename from pega/all.csv rename to leetcode/pega/all.csv diff --git a/peloton/all.csv b/leetcode/peloton/all.csv similarity index 100% rename from peloton/all.csv rename to leetcode/peloton/all.csv diff --git a/peloton/more-than-six-months.csv b/leetcode/peloton/more-than-six-months.csv similarity index 100% rename from peloton/more-than-six-months.csv rename to leetcode/peloton/more-than-six-months.csv diff --git a/persistent-systems/all.csv b/leetcode/persistent-systems/all.csv similarity index 100% rename from persistent-systems/all.csv rename to leetcode/persistent-systems/all.csv diff --git a/persistent-systems/more-than-six-months.csv b/leetcode/persistent-systems/more-than-six-months.csv similarity index 100% rename from persistent-systems/more-than-six-months.csv rename to leetcode/persistent-systems/more-than-six-months.csv diff --git a/persistent-systems/six-months.csv b/leetcode/persistent-systems/six-months.csv similarity index 100% rename from persistent-systems/six-months.csv rename to leetcode/persistent-systems/six-months.csv diff --git a/philips/all.csv b/leetcode/philips/all.csv similarity index 100% rename from philips/all.csv rename to leetcode/philips/all.csv diff --git a/philips/six-months.csv b/leetcode/philips/six-months.csv similarity index 100% rename from philips/six-months.csv rename to leetcode/philips/six-months.csv diff --git a/phonepe/all.csv b/leetcode/phonepe/all.csv similarity index 100% rename from phonepe/all.csv rename to leetcode/phonepe/all.csv diff --git a/phonepe/more-than-six-months.csv b/leetcode/phonepe/more-than-six-months.csv similarity index 100% rename from phonepe/more-than-six-months.csv rename to leetcode/phonepe/more-than-six-months.csv diff --git a/phonepe/six-months.csv b/leetcode/phonepe/six-months.csv similarity index 100% rename from phonepe/six-months.csv rename to leetcode/phonepe/six-months.csv diff --git a/phonepe/thirty-days.csv b/leetcode/phonepe/thirty-days.csv similarity index 100% rename from phonepe/thirty-days.csv rename to leetcode/phonepe/thirty-days.csv diff --git a/phonepe/three-months.csv b/leetcode/phonepe/three-months.csv similarity index 100% rename from phonepe/three-months.csv rename to leetcode/phonepe/three-months.csv diff --git a/pickrr/all.csv b/leetcode/pickrr/all.csv similarity index 100% rename from pickrr/all.csv rename to leetcode/pickrr/all.csv diff --git a/pickrr/more-than-six-months.csv b/leetcode/pickrr/more-than-six-months.csv similarity index 100% rename from pickrr/more-than-six-months.csv rename to leetcode/pickrr/more-than-six-months.csv diff --git a/pinterest/all.csv b/leetcode/pinterest/all.csv similarity index 100% rename from pinterest/all.csv rename to leetcode/pinterest/all.csv diff --git a/pinterest/more-than-six-months.csv b/leetcode/pinterest/more-than-six-months.csv similarity index 100% rename from pinterest/more-than-six-months.csv rename to leetcode/pinterest/more-than-six-months.csv diff --git a/pinterest/six-months.csv b/leetcode/pinterest/six-months.csv similarity index 100% rename from pinterest/six-months.csv rename to leetcode/pinterest/six-months.csv diff --git a/pinterest/thirty-days.csv b/leetcode/pinterest/thirty-days.csv similarity index 100% rename from pinterest/thirty-days.csv rename to leetcode/pinterest/thirty-days.csv diff --git a/pinterest/three-months.csv b/leetcode/pinterest/three-months.csv similarity index 100% rename from pinterest/three-months.csv rename to leetcode/pinterest/three-months.csv diff --git a/plaid/all.csv b/leetcode/plaid/all.csv similarity index 100% rename from plaid/all.csv rename to leetcode/plaid/all.csv diff --git a/plaid/six-months.csv b/leetcode/plaid/six-months.csv similarity index 100% rename from plaid/six-months.csv rename to leetcode/plaid/six-months.csv diff --git a/plaid/three-months.csv b/leetcode/plaid/three-months.csv similarity index 100% rename from plaid/three-months.csv rename to leetcode/plaid/three-months.csv diff --git a/pocket-gems/all.csv b/leetcode/pocket-gems/all.csv similarity index 100% rename from pocket-gems/all.csv rename to leetcode/pocket-gems/all.csv diff --git a/pocket-gems/more-than-six-months.csv b/leetcode/pocket-gems/more-than-six-months.csv similarity index 100% rename from pocket-gems/more-than-six-months.csv rename to leetcode/pocket-gems/more-than-six-months.csv diff --git a/point72/all.csv b/leetcode/point72/all.csv similarity index 100% rename from point72/all.csv rename to leetcode/point72/all.csv diff --git a/point72/more-than-six-months.csv b/leetcode/point72/more-than-six-months.csv similarity index 100% rename from point72/more-than-six-months.csv rename to leetcode/point72/more-than-six-months.csv diff --git a/polar/all.csv b/leetcode/polar/all.csv similarity index 100% rename from polar/all.csv rename to leetcode/polar/all.csv diff --git a/polar/more-than-six-months.csv b/leetcode/polar/more-than-six-months.csv similarity index 100% rename from polar/more-than-six-months.csv rename to leetcode/polar/more-than-six-months.csv diff --git a/ponyai/all.csv b/leetcode/ponyai/all.csv similarity index 100% rename from ponyai/all.csv rename to leetcode/ponyai/all.csv diff --git a/ponyai/more-than-six-months.csv b/leetcode/ponyai/more-than-six-months.csv similarity index 100% rename from ponyai/more-than-six-months.csv rename to leetcode/ponyai/more-than-six-months.csv diff --git a/pornhub/all.csv b/leetcode/pornhub/all.csv similarity index 100% rename from pornhub/all.csv rename to leetcode/pornhub/all.csv diff --git a/pornhub/more-than-six-months.csv b/leetcode/pornhub/more-than-six-months.csv similarity index 100% rename from pornhub/more-than-six-months.csv rename to leetcode/pornhub/more-than-six-months.csv diff --git a/porter/all.csv b/leetcode/porter/all.csv similarity index 100% rename from porter/all.csv rename to leetcode/porter/all.csv diff --git a/porter/more-than-six-months.csv b/leetcode/porter/more-than-six-months.csv similarity index 100% rename from porter/more-than-six-months.csv rename to leetcode/porter/more-than-six-months.csv diff --git a/poshmark/all.csv b/leetcode/poshmark/all.csv similarity index 100% rename from poshmark/all.csv rename to leetcode/poshmark/all.csv diff --git a/poshmark/more-than-six-months.csv b/leetcode/poshmark/more-than-six-months.csv similarity index 100% rename from poshmark/more-than-six-months.csv rename to leetcode/poshmark/more-than-six-months.csv diff --git a/postman/all.csv b/leetcode/postman/all.csv similarity index 100% rename from postman/all.csv rename to leetcode/postman/all.csv diff --git a/postmates/all.csv b/leetcode/postmates/all.csv similarity index 100% rename from postmates/all.csv rename to leetcode/postmates/all.csv diff --git a/postmates/more-than-six-months.csv b/leetcode/postmates/more-than-six-months.csv similarity index 100% rename from postmates/more-than-six-months.csv rename to leetcode/postmates/more-than-six-months.csv diff --git a/poynt/all.csv b/leetcode/poynt/all.csv similarity index 100% rename from poynt/all.csv rename to leetcode/poynt/all.csv diff --git a/poynt/more-than-six-months.csv b/leetcode/poynt/more-than-six-months.csv similarity index 100% rename from poynt/more-than-six-months.csv rename to leetcode/poynt/more-than-six-months.csv diff --git a/practo/all.csv b/leetcode/practo/all.csv similarity index 100% rename from practo/all.csv rename to leetcode/practo/all.csv diff --git a/practo/more-than-six-months.csv b/leetcode/practo/more-than-six-months.csv similarity index 100% rename from practo/more-than-six-months.csv rename to leetcode/practo/more-than-six-months.csv diff --git a/publicis-sapient/all.csv b/leetcode/publicis-sapient/all.csv similarity index 100% rename from publicis-sapient/all.csv rename to leetcode/publicis-sapient/all.csv diff --git a/publicis-sapient/more-than-six-months.csv b/leetcode/publicis-sapient/more-than-six-months.csv similarity index 100% rename from publicis-sapient/more-than-six-months.csv rename to leetcode/publicis-sapient/more-than-six-months.csv diff --git a/publicis-sapient/six-months.csv b/leetcode/publicis-sapient/six-months.csv similarity index 100% rename from publicis-sapient/six-months.csv rename to leetcode/publicis-sapient/six-months.csv diff --git a/pubmatic/all.csv b/leetcode/pubmatic/all.csv similarity index 100% rename from pubmatic/all.csv rename to leetcode/pubmatic/all.csv diff --git a/pubmatic/more-than-six-months.csv b/leetcode/pubmatic/more-than-six-months.csv similarity index 100% rename from pubmatic/more-than-six-months.csv rename to leetcode/pubmatic/more-than-six-months.csv diff --git a/pure-storage/all.csv b/leetcode/pure-storage/all.csv similarity index 100% rename from pure-storage/all.csv rename to leetcode/pure-storage/all.csv diff --git a/pure-storage/more-than-six-months.csv b/leetcode/pure-storage/more-than-six-months.csv similarity index 100% rename from pure-storage/more-than-six-months.csv rename to leetcode/pure-storage/more-than-six-months.csv diff --git a/pure-storage/six-months.csv b/leetcode/pure-storage/six-months.csv similarity index 100% rename from pure-storage/six-months.csv rename to leetcode/pure-storage/six-months.csv diff --git a/pure-storage/three-months.csv b/leetcode/pure-storage/three-months.csv similarity index 100% rename from pure-storage/three-months.csv rename to leetcode/pure-storage/three-months.csv diff --git a/pure/all.csv b/leetcode/pure/all.csv similarity index 100% rename from pure/all.csv rename to leetcode/pure/all.csv diff --git a/pure/six-months.csv b/leetcode/pure/six-months.csv similarity index 100% rename from pure/six-months.csv rename to leetcode/pure/six-months.csv diff --git a/purplle/all.csv b/leetcode/purplle/all.csv similarity index 100% rename from purplle/all.csv rename to leetcode/purplle/all.csv diff --git a/purplle/more-than-six-months.csv b/leetcode/purplle/more-than-six-months.csv similarity index 100% rename from purplle/more-than-six-months.csv rename to leetcode/purplle/more-than-six-months.csv diff --git a/pwc/all.csv b/leetcode/pwc/all.csv similarity index 100% rename from pwc/all.csv rename to leetcode/pwc/all.csv diff --git a/pwc/more-than-six-months.csv b/leetcode/pwc/more-than-six-months.csv similarity index 100% rename from pwc/more-than-six-months.csv rename to leetcode/pwc/more-than-six-months.csv diff --git a/pwc/six-months.csv b/leetcode/pwc/six-months.csv similarity index 100% rename from pwc/six-months.csv rename to leetcode/pwc/six-months.csv diff --git a/qburst/all.csv b/leetcode/qburst/all.csv similarity index 100% rename from qburst/all.csv rename to leetcode/qburst/all.csv diff --git a/qburst/more-than-six-months.csv b/leetcode/qburst/more-than-six-months.csv similarity index 100% rename from qburst/more-than-six-months.csv rename to leetcode/qburst/more-than-six-months.csv diff --git a/qualcomm/all.csv b/leetcode/qualcomm/all.csv similarity index 100% rename from qualcomm/all.csv rename to leetcode/qualcomm/all.csv diff --git a/qualcomm/more-than-six-months.csv b/leetcode/qualcomm/more-than-six-months.csv similarity index 100% rename from qualcomm/more-than-six-months.csv rename to leetcode/qualcomm/more-than-six-months.csv diff --git a/qualcomm/six-months.csv b/leetcode/qualcomm/six-months.csv similarity index 100% rename from qualcomm/six-months.csv rename to leetcode/qualcomm/six-months.csv diff --git a/qualcomm/three-months.csv b/leetcode/qualcomm/three-months.csv similarity index 100% rename from qualcomm/three-months.csv rename to leetcode/qualcomm/three-months.csv diff --git a/qualtrics/all.csv b/leetcode/qualtrics/all.csv similarity index 100% rename from qualtrics/all.csv rename to leetcode/qualtrics/all.csv diff --git a/qualtrics/more-than-six-months.csv b/leetcode/qualtrics/more-than-six-months.csv similarity index 100% rename from qualtrics/more-than-six-months.csv rename to leetcode/qualtrics/more-than-six-months.csv diff --git a/qualtrics/six-months.csv b/leetcode/qualtrics/six-months.csv similarity index 100% rename from qualtrics/six-months.csv rename to leetcode/qualtrics/six-months.csv diff --git a/qualys/all.csv b/leetcode/qualys/all.csv similarity index 100% rename from qualys/all.csv rename to leetcode/qualys/all.csv diff --git a/qualys/more-than-six-months.csv b/leetcode/qualys/more-than-six-months.csv similarity index 100% rename from qualys/more-than-six-months.csv rename to leetcode/qualys/more-than-six-months.csv diff --git a/quantcast/all.csv b/leetcode/quantcast/all.csv similarity index 100% rename from quantcast/all.csv rename to leetcode/quantcast/all.csv diff --git a/quantcast/six-months.csv b/leetcode/quantcast/six-months.csv similarity index 100% rename from quantcast/six-months.csv rename to leetcode/quantcast/six-months.csv diff --git a/quantcast/three-months.csv b/leetcode/quantcast/three-months.csv similarity index 100% rename from quantcast/three-months.csv rename to leetcode/quantcast/three-months.csv diff --git a/quince/all.csv b/leetcode/quince/all.csv similarity index 100% rename from quince/all.csv rename to leetcode/quince/all.csv diff --git a/quince/more-than-six-months.csv b/leetcode/quince/more-than-six-months.csv similarity index 100% rename from quince/more-than-six-months.csv rename to leetcode/quince/more-than-six-months.csv diff --git a/quince/six-months.csv b/leetcode/quince/six-months.csv similarity index 100% rename from quince/six-months.csv rename to leetcode/quince/six-months.csv diff --git a/quince/thirty-days.csv b/leetcode/quince/thirty-days.csv similarity index 100% rename from quince/thirty-days.csv rename to leetcode/quince/thirty-days.csv diff --git a/quince/three-months.csv b/leetcode/quince/three-months.csv similarity index 100% rename from quince/three-months.csv rename to leetcode/quince/three-months.csv diff --git a/qumulo/all.csv b/leetcode/qumulo/all.csv similarity index 100% rename from qumulo/all.csv rename to leetcode/qumulo/all.csv diff --git a/qumulo/more-than-six-months.csv b/leetcode/qumulo/more-than-six-months.csv similarity index 100% rename from qumulo/more-than-six-months.csv rename to leetcode/qumulo/more-than-six-months.csv diff --git a/quora/all.csv b/leetcode/quora/all.csv similarity index 100% rename from quora/all.csv rename to leetcode/quora/all.csv diff --git a/quora/more-than-six-months.csv b/leetcode/quora/more-than-six-months.csv similarity index 100% rename from quora/more-than-six-months.csv rename to leetcode/quora/more-than-six-months.csv diff --git a/quora/six-months.csv b/leetcode/quora/six-months.csv similarity index 100% rename from quora/six-months.csv rename to leetcode/quora/six-months.csv diff --git a/quora/three-months.csv b/leetcode/quora/three-months.csv similarity index 100% rename from quora/three-months.csv rename to leetcode/quora/three-months.csv diff --git a/rackspace/all.csv b/leetcode/rackspace/all.csv similarity index 100% rename from rackspace/all.csv rename to leetcode/rackspace/all.csv diff --git a/rackspace/more-than-six-months.csv b/leetcode/rackspace/more-than-six-months.csv similarity index 100% rename from rackspace/more-than-six-months.csv rename to leetcode/rackspace/more-than-six-months.csv diff --git a/radius/all.csv b/leetcode/radius/all.csv similarity index 100% rename from radius/all.csv rename to leetcode/radius/all.csv diff --git a/radius/more-than-six-months.csv b/leetcode/radius/more-than-six-months.csv similarity index 100% rename from radius/more-than-six-months.csv rename to leetcode/radius/more-than-six-months.csv diff --git a/rakuten/all.csv b/leetcode/rakuten/all.csv similarity index 100% rename from rakuten/all.csv rename to leetcode/rakuten/all.csv diff --git a/rakuten/more-than-six-months.csv b/leetcode/rakuten/more-than-six-months.csv similarity index 100% rename from rakuten/more-than-six-months.csv rename to leetcode/rakuten/more-than-six-months.csv diff --git a/rakuten/six-months.csv b/leetcode/rakuten/six-months.csv similarity index 100% rename from rakuten/six-months.csv rename to leetcode/rakuten/six-months.csv diff --git a/rakuten/thirty-days.csv b/leetcode/rakuten/thirty-days.csv similarity index 100% rename from rakuten/thirty-days.csv rename to leetcode/rakuten/thirty-days.csv diff --git a/rakuten/three-months.csv b/leetcode/rakuten/three-months.csv similarity index 100% rename from rakuten/three-months.csv rename to leetcode/rakuten/three-months.csv diff --git a/ramp-2/all.csv b/leetcode/ramp-2/all.csv similarity index 100% rename from ramp-2/all.csv rename to leetcode/ramp-2/all.csv diff --git a/ramp-2/more-than-six-months.csv b/leetcode/ramp-2/more-than-six-months.csv similarity index 100% rename from ramp-2/more-than-six-months.csv rename to leetcode/ramp-2/more-than-six-months.csv diff --git a/ramp-2/six-months.csv b/leetcode/ramp-2/six-months.csv similarity index 100% rename from ramp-2/six-months.csv rename to leetcode/ramp-2/six-months.csv diff --git a/ramp-2/three-months.csv b/leetcode/ramp-2/three-months.csv similarity index 100% rename from ramp-2/three-months.csv rename to leetcode/ramp-2/three-months.csv diff --git a/razorpay/all.csv b/leetcode/razorpay/all.csv similarity index 100% rename from razorpay/all.csv rename to leetcode/razorpay/all.csv diff --git a/razorpay/more-than-six-months.csv b/leetcode/razorpay/more-than-six-months.csv similarity index 100% rename from razorpay/more-than-six-months.csv rename to leetcode/razorpay/more-than-six-months.csv diff --git a/razorpay/six-months.csv b/leetcode/razorpay/six-months.csv similarity index 100% rename from razorpay/six-months.csv rename to leetcode/razorpay/six-months.csv diff --git a/rbc/all.csv b/leetcode/rbc/all.csv similarity index 100% rename from rbc/all.csv rename to leetcode/rbc/all.csv diff --git a/rbc/more-than-six-months.csv b/leetcode/rbc/more-than-six-months.csv similarity index 100% rename from rbc/more-than-six-months.csv rename to leetcode/rbc/more-than-six-months.csv diff --git a/rbc/six-months.csv b/leetcode/rbc/six-months.csv similarity index 100% rename from rbc/six-months.csv rename to leetcode/rbc/six-months.csv diff --git a/redbus/all.csv b/leetcode/redbus/all.csv similarity index 100% rename from redbus/all.csv rename to leetcode/redbus/all.csv diff --git a/redbus/more-than-six-months.csv b/leetcode/redbus/more-than-six-months.csv similarity index 100% rename from redbus/more-than-six-months.csv rename to leetcode/redbus/more-than-six-months.csv diff --git a/reddit/all.csv b/leetcode/reddit/all.csv similarity index 100% rename from reddit/all.csv rename to leetcode/reddit/all.csv diff --git a/reddit/more-than-six-months.csv b/leetcode/reddit/more-than-six-months.csv similarity index 100% rename from reddit/more-than-six-months.csv rename to leetcode/reddit/more-than-six-months.csv diff --git a/reddit/six-months.csv b/leetcode/reddit/six-months.csv similarity index 100% rename from reddit/six-months.csv rename to leetcode/reddit/six-months.csv diff --git a/redfin/all.csv b/leetcode/redfin/all.csv similarity index 100% rename from redfin/all.csv rename to leetcode/redfin/all.csv diff --git a/redfin/six-months.csv b/leetcode/redfin/six-months.csv similarity index 100% rename from redfin/six-months.csv rename to leetcode/redfin/six-months.csv diff --git a/remitly/all.csv b/leetcode/remitly/all.csv similarity index 100% rename from remitly/all.csv rename to leetcode/remitly/all.csv diff --git a/remitly/more-than-six-months.csv b/leetcode/remitly/more-than-six-months.csv similarity index 100% rename from remitly/more-than-six-months.csv rename to leetcode/remitly/more-than-six-months.csv diff --git a/remitly/six-months.csv b/leetcode/remitly/six-months.csv similarity index 100% rename from remitly/six-months.csv rename to leetcode/remitly/six-months.csv diff --git a/remitly/three-months.csv b/leetcode/remitly/three-months.csv similarity index 100% rename from remitly/three-months.csv rename to leetcode/remitly/three-months.csv diff --git a/retailmenot/all.csv b/leetcode/retailmenot/all.csv similarity index 100% rename from retailmenot/all.csv rename to leetcode/retailmenot/all.csv diff --git a/retailmenot/more-than-six-months.csv b/leetcode/retailmenot/more-than-six-months.csv similarity index 100% rename from retailmenot/more-than-six-months.csv rename to leetcode/retailmenot/more-than-six-months.csv diff --git a/revolut/all.csv b/leetcode/revolut/all.csv similarity index 100% rename from revolut/all.csv rename to leetcode/revolut/all.csv diff --git a/revolut/more-than-six-months.csv b/leetcode/revolut/more-than-six-months.csv similarity index 100% rename from revolut/more-than-six-months.csv rename to leetcode/revolut/more-than-six-months.csv diff --git a/revolut/six-months.csv b/leetcode/revolut/six-months.csv similarity index 100% rename from revolut/six-months.csv rename to leetcode/revolut/six-months.csv diff --git a/revolut/three-months.csv b/leetcode/revolut/three-months.csv similarity index 100% rename from revolut/three-months.csv rename to leetcode/revolut/three-months.csv diff --git a/riot-games/all.csv b/leetcode/riot-games/all.csv similarity index 100% rename from riot-games/all.csv rename to leetcode/riot-games/all.csv diff --git a/riot-games/more-than-six-months.csv b/leetcode/riot-games/more-than-six-months.csv similarity index 100% rename from riot-games/more-than-six-months.csv rename to leetcode/riot-games/more-than-six-months.csv diff --git a/riot-games/six-months.csv b/leetcode/riot-games/six-months.csv similarity index 100% rename from riot-games/six-months.csv rename to leetcode/riot-games/six-months.csv diff --git a/ripple/all.csv b/leetcode/ripple/all.csv similarity index 100% rename from ripple/all.csv rename to leetcode/ripple/all.csv diff --git a/ripple/more-than-six-months.csv b/leetcode/ripple/more-than-six-months.csv similarity index 100% rename from ripple/more-than-six-months.csv rename to leetcode/ripple/more-than-six-months.csv diff --git a/ripple/six-months.csv b/leetcode/ripple/six-months.csv similarity index 100% rename from ripple/six-months.csv rename to leetcode/ripple/six-months.csv diff --git a/ripple/three-months.csv b/leetcode/ripple/three-months.csv similarity index 100% rename from ripple/three-months.csv rename to leetcode/ripple/three-months.csv diff --git a/rippling/all.csv b/leetcode/rippling/all.csv similarity index 100% rename from rippling/all.csv rename to leetcode/rippling/all.csv diff --git a/rippling/more-than-six-months.csv b/leetcode/rippling/more-than-six-months.csv similarity index 100% rename from rippling/more-than-six-months.csv rename to leetcode/rippling/more-than-six-months.csv diff --git a/rippling/six-months.csv b/leetcode/rippling/six-months.csv similarity index 100% rename from rippling/six-months.csv rename to leetcode/rippling/six-months.csv diff --git a/rivian/all.csv b/leetcode/rivian/all.csv similarity index 100% rename from rivian/all.csv rename to leetcode/rivian/all.csv diff --git a/rivian/more-than-six-months.csv b/leetcode/rivian/more-than-six-months.csv similarity index 100% rename from rivian/more-than-six-months.csv rename to leetcode/rivian/more-than-six-months.csv diff --git a/rivian/six-months.csv b/leetcode/rivian/six-months.csv similarity index 100% rename from rivian/six-months.csv rename to leetcode/rivian/six-months.csv diff --git a/rivian/three-months.csv b/leetcode/rivian/three-months.csv similarity index 100% rename from rivian/three-months.csv rename to leetcode/rivian/three-months.csv diff --git a/robinhood/all.csv b/leetcode/robinhood/all.csv similarity index 100% rename from robinhood/all.csv rename to leetcode/robinhood/all.csv diff --git a/robinhood/more-than-six-months.csv b/leetcode/robinhood/more-than-six-months.csv similarity index 100% rename from robinhood/more-than-six-months.csv rename to leetcode/robinhood/more-than-six-months.csv diff --git a/robinhood/six-months.csv b/leetcode/robinhood/six-months.csv similarity index 100% rename from robinhood/six-months.csv rename to leetcode/robinhood/six-months.csv diff --git a/robinhood/three-months.csv b/leetcode/robinhood/three-months.csv similarity index 100% rename from robinhood/three-months.csv rename to leetcode/robinhood/three-months.csv diff --git a/roblox/all.csv b/leetcode/roblox/all.csv similarity index 100% rename from roblox/all.csv rename to leetcode/roblox/all.csv diff --git a/roblox/more-than-six-months.csv b/leetcode/roblox/more-than-six-months.csv similarity index 100% rename from roblox/more-than-six-months.csv rename to leetcode/roblox/more-than-six-months.csv diff --git a/roblox/six-months.csv b/leetcode/roblox/six-months.csv similarity index 100% rename from roblox/six-months.csv rename to leetcode/roblox/six-months.csv diff --git a/roblox/thirty-days.csv b/leetcode/roblox/thirty-days.csv similarity index 100% rename from roblox/thirty-days.csv rename to leetcode/roblox/thirty-days.csv diff --git a/roblox/three-months.csv b/leetcode/roblox/three-months.csv similarity index 100% rename from roblox/three-months.csv rename to leetcode/roblox/three-months.csv diff --git a/roche/all.csv b/leetcode/roche/all.csv similarity index 100% rename from roche/all.csv rename to leetcode/roche/all.csv diff --git a/roche/more-than-six-months.csv b/leetcode/roche/more-than-six-months.csv similarity index 100% rename from roche/more-than-six-months.csv rename to leetcode/roche/more-than-six-months.csv diff --git a/rokt/all.csv b/leetcode/rokt/all.csv similarity index 100% rename from rokt/all.csv rename to leetcode/rokt/all.csv diff --git a/rokt/more-than-six-months.csv b/leetcode/rokt/more-than-six-months.csv similarity index 100% rename from rokt/more-than-six-months.csv rename to leetcode/rokt/more-than-six-months.csv diff --git a/rokt/six-months.csv b/leetcode/rokt/six-months.csv similarity index 100% rename from rokt/six-months.csv rename to leetcode/rokt/six-months.csv diff --git a/roku/all.csv b/leetcode/roku/all.csv similarity index 100% rename from roku/all.csv rename to leetcode/roku/all.csv diff --git a/roku/more-than-six-months.csv b/leetcode/roku/more-than-six-months.csv similarity index 100% rename from roku/more-than-six-months.csv rename to leetcode/roku/more-than-six-months.csv diff --git a/roku/six-months.csv b/leetcode/roku/six-months.csv similarity index 100% rename from roku/six-months.csv rename to leetcode/roku/six-months.csv diff --git a/roku/three-months.csv b/leetcode/roku/three-months.csv similarity index 100% rename from roku/three-months.csv rename to leetcode/roku/three-months.csv diff --git a/rubrik/all.csv b/leetcode/rubrik/all.csv similarity index 100% rename from rubrik/all.csv rename to leetcode/rubrik/all.csv diff --git a/rubrik/more-than-six-months.csv b/leetcode/rubrik/more-than-six-months.csv similarity index 100% rename from rubrik/more-than-six-months.csv rename to leetcode/rubrik/more-than-six-months.csv diff --git a/rubrik/six-months.csv b/leetcode/rubrik/six-months.csv similarity index 100% rename from rubrik/six-months.csv rename to leetcode/rubrik/six-months.csv diff --git a/rubrik/three-months.csv b/leetcode/rubrik/three-months.csv similarity index 100% rename from rubrik/three-months.csv rename to leetcode/rubrik/three-months.csv diff --git a/salesforce/all.csv b/leetcode/salesforce/all.csv similarity index 100% rename from salesforce/all.csv rename to leetcode/salesforce/all.csv diff --git a/salesforce/more-than-six-months.csv b/leetcode/salesforce/more-than-six-months.csv similarity index 100% rename from salesforce/more-than-six-months.csv rename to leetcode/salesforce/more-than-six-months.csv diff --git a/salesforce/six-months.csv b/leetcode/salesforce/six-months.csv similarity index 100% rename from salesforce/six-months.csv rename to leetcode/salesforce/six-months.csv diff --git a/salesforce/thirty-days.csv b/leetcode/salesforce/thirty-days.csv similarity index 100% rename from salesforce/thirty-days.csv rename to leetcode/salesforce/thirty-days.csv diff --git a/salesforce/three-months.csv b/leetcode/salesforce/three-months.csv similarity index 100% rename from salesforce/three-months.csv rename to leetcode/salesforce/three-months.csv diff --git a/sambanova/all.csv b/leetcode/sambanova/all.csv similarity index 100% rename from sambanova/all.csv rename to leetcode/sambanova/all.csv diff --git a/samsara/all.csv b/leetcode/samsara/all.csv similarity index 100% rename from samsara/all.csv rename to leetcode/samsara/all.csv diff --git a/samsara/more-than-six-months.csv b/leetcode/samsara/more-than-six-months.csv similarity index 100% rename from samsara/more-than-six-months.csv rename to leetcode/samsara/more-than-six-months.csv diff --git a/samsara/six-months.csv b/leetcode/samsara/six-months.csv similarity index 100% rename from samsara/six-months.csv rename to leetcode/samsara/six-months.csv diff --git a/samsung/all.csv b/leetcode/samsung/all.csv similarity index 100% rename from samsung/all.csv rename to leetcode/samsung/all.csv diff --git a/samsung/more-than-six-months.csv b/leetcode/samsung/more-than-six-months.csv similarity index 100% rename from samsung/more-than-six-months.csv rename to leetcode/samsung/more-than-six-months.csv diff --git a/samsung/six-months.csv b/leetcode/samsung/six-months.csv similarity index 100% rename from samsung/six-months.csv rename to leetcode/samsung/six-months.csv diff --git a/samsung/three-months.csv b/leetcode/samsung/three-months.csv similarity index 100% rename from samsung/three-months.csv rename to leetcode/samsung/three-months.csv diff --git a/sap/all.csv b/leetcode/sap/all.csv similarity index 100% rename from sap/all.csv rename to leetcode/sap/all.csv diff --git a/sap/more-than-six-months.csv b/leetcode/sap/more-than-six-months.csv similarity index 100% rename from sap/more-than-six-months.csv rename to leetcode/sap/more-than-six-months.csv diff --git a/sap/six-months.csv b/leetcode/sap/six-months.csv similarity index 100% rename from sap/six-months.csv rename to leetcode/sap/six-months.csv diff --git a/sap/three-months.csv b/leetcode/sap/three-months.csv similarity index 100% rename from sap/three-months.csv rename to leetcode/sap/three-months.csv diff --git a/scale-ai/all.csv b/leetcode/scale-ai/all.csv similarity index 100% rename from scale-ai/all.csv rename to leetcode/scale-ai/all.csv diff --git a/scale-ai/more-than-six-months.csv b/leetcode/scale-ai/more-than-six-months.csv similarity index 100% rename from scale-ai/more-than-six-months.csv rename to leetcode/scale-ai/more-than-six-months.csv diff --git a/schneider-electric/all.csv b/leetcode/schneider-electric/all.csv similarity index 100% rename from schneider-electric/all.csv rename to leetcode/schneider-electric/all.csv diff --git a/schneider-electric/more-than-six-months.csv b/leetcode/schneider-electric/more-than-six-months.csv similarity index 100% rename from schneider-electric/more-than-six-months.csv rename to leetcode/schneider-electric/more-than-six-months.csv diff --git a/schrodinger/all.csv b/leetcode/schrodinger/all.csv similarity index 100% rename from schrodinger/all.csv rename to leetcode/schrodinger/all.csv diff --git a/schrodinger/more-than-six-months.csv b/leetcode/schrodinger/more-than-six-months.csv similarity index 100% rename from schrodinger/more-than-six-months.csv rename to leetcode/schrodinger/more-than-six-months.csv diff --git a/sentry/all.csv b/leetcode/sentry/all.csv similarity index 100% rename from sentry/all.csv rename to leetcode/sentry/all.csv diff --git a/sentry/more-than-six-months.csv b/leetcode/sentry/more-than-six-months.csv similarity index 100% rename from sentry/more-than-six-months.csv rename to leetcode/sentry/more-than-six-months.csv diff --git a/servicenow/all.csv b/leetcode/servicenow/all.csv similarity index 100% rename from servicenow/all.csv rename to leetcode/servicenow/all.csv diff --git a/servicenow/more-than-six-months.csv b/leetcode/servicenow/more-than-six-months.csv similarity index 100% rename from servicenow/more-than-six-months.csv rename to leetcode/servicenow/more-than-six-months.csv diff --git a/servicenow/six-months.csv b/leetcode/servicenow/six-months.csv similarity index 100% rename from servicenow/six-months.csv rename to leetcode/servicenow/six-months.csv diff --git a/servicenow/three-months.csv b/leetcode/servicenow/three-months.csv similarity index 100% rename from servicenow/three-months.csv rename to leetcode/servicenow/three-months.csv diff --git a/sharechat/all.csv b/leetcode/sharechat/all.csv similarity index 100% rename from sharechat/all.csv rename to leetcode/sharechat/all.csv diff --git a/sharechat/more-than-six-months.csv b/leetcode/sharechat/more-than-six-months.csv similarity index 100% rename from sharechat/more-than-six-months.csv rename to leetcode/sharechat/more-than-six-months.csv diff --git a/shift-technology/all.csv b/leetcode/shift-technology/all.csv similarity index 100% rename from shift-technology/all.csv rename to leetcode/shift-technology/all.csv diff --git a/shift-technology/more-than-six-months.csv b/leetcode/shift-technology/more-than-six-months.csv similarity index 100% rename from shift-technology/more-than-six-months.csv rename to leetcode/shift-technology/more-than-six-months.csv diff --git a/shipsy/all.csv b/leetcode/shipsy/all.csv similarity index 100% rename from shipsy/all.csv rename to leetcode/shipsy/all.csv diff --git a/shipsy/more-than-six-months.csv b/leetcode/shipsy/more-than-six-months.csv similarity index 100% rename from shipsy/more-than-six-months.csv rename to leetcode/shipsy/more-than-six-months.csv diff --git a/shopee/all.csv b/leetcode/shopee/all.csv similarity index 100% rename from shopee/all.csv rename to leetcode/shopee/all.csv diff --git a/shopee/more-than-six-months.csv b/leetcode/shopee/more-than-six-months.csv similarity index 100% rename from shopee/more-than-six-months.csv rename to leetcode/shopee/more-than-six-months.csv diff --git a/shopee/six-months.csv b/leetcode/shopee/six-months.csv similarity index 100% rename from shopee/six-months.csv rename to leetcode/shopee/six-months.csv diff --git a/shopify/all.csv b/leetcode/shopify/all.csv similarity index 100% rename from shopify/all.csv rename to leetcode/shopify/all.csv diff --git a/shopify/more-than-six-months.csv b/leetcode/shopify/more-than-six-months.csv similarity index 100% rename from shopify/more-than-six-months.csv rename to leetcode/shopify/more-than-six-months.csv diff --git a/shopify/six-months.csv b/leetcode/shopify/six-months.csv similarity index 100% rename from shopify/six-months.csv rename to leetcode/shopify/six-months.csv diff --git a/shopify/three-months.csv b/leetcode/shopify/three-months.csv similarity index 100% rename from shopify/three-months.csv rename to leetcode/shopify/three-months.csv diff --git a/siemens/all.csv b/leetcode/siemens/all.csv similarity index 100% rename from siemens/all.csv rename to leetcode/siemens/all.csv diff --git a/siemens/more-than-six-months.csv b/leetcode/siemens/more-than-six-months.csv similarity index 100% rename from siemens/more-than-six-months.csv rename to leetcode/siemens/more-than-six-months.csv diff --git a/siemens/six-months.csv b/leetcode/siemens/six-months.csv similarity index 100% rename from siemens/six-months.csv rename to leetcode/siemens/six-months.csv diff --git a/sig/all.csv b/leetcode/sig/all.csv similarity index 100% rename from sig/all.csv rename to leetcode/sig/all.csv diff --git a/sig/more-than-six-months.csv b/leetcode/sig/more-than-six-months.csv similarity index 100% rename from sig/more-than-six-months.csv rename to leetcode/sig/more-than-six-months.csv diff --git a/sig/six-months.csv b/leetcode/sig/six-months.csv similarity index 100% rename from sig/six-months.csv rename to leetcode/sig/six-months.csv diff --git a/sigmoid/all.csv b/leetcode/sigmoid/all.csv similarity index 100% rename from sigmoid/all.csv rename to leetcode/sigmoid/all.csv diff --git a/sigmoid/more-than-six-months.csv b/leetcode/sigmoid/more-than-six-months.csv similarity index 100% rename from sigmoid/more-than-six-months.csv rename to leetcode/sigmoid/more-than-six-months.csv diff --git a/sigmoid/six-months.csv b/leetcode/sigmoid/six-months.csv similarity index 100% rename from sigmoid/six-months.csv rename to leetcode/sigmoid/six-months.csv diff --git a/sigmoid/three-months.csv b/leetcode/sigmoid/three-months.csv similarity index 100% rename from sigmoid/three-months.csv rename to leetcode/sigmoid/three-months.csv diff --git a/singlestore/all.csv b/leetcode/singlestore/all.csv similarity index 100% rename from singlestore/all.csv rename to leetcode/singlestore/all.csv diff --git a/singlestore/more-than-six-months.csv b/leetcode/singlestore/more-than-six-months.csv similarity index 100% rename from singlestore/more-than-six-months.csv rename to leetcode/singlestore/more-than-six-months.csv diff --git a/sixt/all.csv b/leetcode/sixt/all.csv similarity index 100% rename from sixt/all.csv rename to leetcode/sixt/all.csv diff --git a/sixt/more-than-six-months.csv b/leetcode/sixt/more-than-six-months.csv similarity index 100% rename from sixt/more-than-six-months.csv rename to leetcode/sixt/more-than-six-months.csv diff --git a/slice/all.csv b/leetcode/slice/all.csv similarity index 100% rename from slice/all.csv rename to leetcode/slice/all.csv diff --git a/slice/more-than-six-months.csv b/leetcode/slice/more-than-six-months.csv similarity index 100% rename from slice/more-than-six-months.csv rename to leetcode/slice/more-than-six-months.csv diff --git a/smartnews/all.csv b/leetcode/smartnews/all.csv similarity index 100% rename from smartnews/all.csv rename to leetcode/smartnews/all.csv diff --git a/smartnews/more-than-six-months.csv b/leetcode/smartnews/more-than-six-months.csv similarity index 100% rename from smartnews/more-than-six-months.csv rename to leetcode/smartnews/more-than-six-months.csv diff --git a/smartsheet/all.csv b/leetcode/smartsheet/all.csv similarity index 100% rename from smartsheet/all.csv rename to leetcode/smartsheet/all.csv diff --git a/smartsheet/more-than-six-months.csv b/leetcode/smartsheet/more-than-six-months.csv similarity index 100% rename from smartsheet/more-than-six-months.csv rename to leetcode/smartsheet/more-than-six-months.csv diff --git a/snapchat/all.csv b/leetcode/snapchat/all.csv similarity index 100% rename from snapchat/all.csv rename to leetcode/snapchat/all.csv diff --git a/snapchat/more-than-six-months.csv b/leetcode/snapchat/more-than-six-months.csv similarity index 100% rename from snapchat/more-than-six-months.csv rename to leetcode/snapchat/more-than-six-months.csv diff --git a/snapchat/six-months.csv b/leetcode/snapchat/six-months.csv similarity index 100% rename from snapchat/six-months.csv rename to leetcode/snapchat/six-months.csv diff --git a/snapchat/three-months.csv b/leetcode/snapchat/three-months.csv similarity index 100% rename from snapchat/three-months.csv rename to leetcode/snapchat/three-months.csv diff --git a/snapdeal/all.csv b/leetcode/snapdeal/all.csv similarity index 100% rename from snapdeal/all.csv rename to leetcode/snapdeal/all.csv diff --git a/snapdeal/more-than-six-months.csv b/leetcode/snapdeal/more-than-six-months.csv similarity index 100% rename from snapdeal/more-than-six-months.csv rename to leetcode/snapdeal/more-than-six-months.csv diff --git a/snowflake/all.csv b/leetcode/snowflake/all.csv similarity index 100% rename from snowflake/all.csv rename to leetcode/snowflake/all.csv diff --git a/snowflake/more-than-six-months.csv b/leetcode/snowflake/more-than-six-months.csv similarity index 100% rename from snowflake/more-than-six-months.csv rename to leetcode/snowflake/more-than-six-months.csv diff --git a/snowflake/six-months.csv b/leetcode/snowflake/six-months.csv similarity index 100% rename from snowflake/six-months.csv rename to leetcode/snowflake/six-months.csv diff --git a/snowflake/thirty-days.csv b/leetcode/snowflake/thirty-days.csv similarity index 100% rename from snowflake/thirty-days.csv rename to leetcode/snowflake/thirty-days.csv diff --git a/snowflake/three-months.csv b/leetcode/snowflake/three-months.csv similarity index 100% rename from snowflake/three-months.csv rename to leetcode/snowflake/three-months.csv diff --git a/societe-generale/all.csv b/leetcode/societe-generale/all.csv similarity index 100% rename from societe-generale/all.csv rename to leetcode/societe-generale/all.csv diff --git a/societe-generale/more-than-six-months.csv b/leetcode/societe-generale/more-than-six-months.csv similarity index 100% rename from societe-generale/more-than-six-months.csv rename to leetcode/societe-generale/more-than-six-months.csv diff --git a/sofi/all.csv b/leetcode/sofi/all.csv similarity index 100% rename from sofi/all.csv rename to leetcode/sofi/all.csv diff --git a/sofi/more-than-six-months.csv b/leetcode/sofi/more-than-six-months.csv similarity index 100% rename from sofi/more-than-six-months.csv rename to leetcode/sofi/more-than-six-months.csv diff --git a/sofi/six-months.csv b/leetcode/sofi/six-months.csv similarity index 100% rename from sofi/six-months.csv rename to leetcode/sofi/six-months.csv diff --git a/sofi/three-months.csv b/leetcode/sofi/three-months.csv similarity index 100% rename from sofi/three-months.csv rename to leetcode/sofi/three-months.csv diff --git a/software-ag/all.csv b/leetcode/software-ag/all.csv similarity index 100% rename from software-ag/all.csv rename to leetcode/software-ag/all.csv diff --git a/software-ag/more-than-six-months.csv b/leetcode/software-ag/more-than-six-months.csv similarity index 100% rename from software-ag/more-than-six-months.csv rename to leetcode/software-ag/more-than-six-months.csv diff --git a/softwire/all.csv b/leetcode/softwire/all.csv similarity index 100% rename from softwire/all.csv rename to leetcode/softwire/all.csv diff --git a/softwire/more-than-six-months.csv b/leetcode/softwire/more-than-six-months.csv similarity index 100% rename from softwire/more-than-six-months.csv rename to leetcode/softwire/more-than-six-months.csv diff --git a/softwire/six-months.csv b/leetcode/softwire/six-months.csv similarity index 100% rename from softwire/six-months.csv rename to leetcode/softwire/six-months.csv diff --git a/sony/all.csv b/leetcode/sony/all.csv similarity index 100% rename from sony/all.csv rename to leetcode/sony/all.csv diff --git a/sony/more-than-six-months.csv b/leetcode/sony/more-than-six-months.csv similarity index 100% rename from sony/more-than-six-months.csv rename to leetcode/sony/more-than-six-months.csv diff --git a/soti/all.csv b/leetcode/soti/all.csv similarity index 100% rename from soti/all.csv rename to leetcode/soti/all.csv diff --git a/soti/more-than-six-months.csv b/leetcode/soti/more-than-six-months.csv similarity index 100% rename from soti/more-than-six-months.csv rename to leetcode/soti/more-than-six-months.csv diff --git a/soundhound/all.csv b/leetcode/soundhound/all.csv similarity index 100% rename from soundhound/all.csv rename to leetcode/soundhound/all.csv diff --git a/soundhound/more-than-six-months.csv b/leetcode/soundhound/more-than-six-months.csv similarity index 100% rename from soundhound/more-than-six-months.csv rename to leetcode/soundhound/more-than-six-months.csv diff --git a/spacex/all.csv b/leetcode/spacex/all.csv similarity index 100% rename from spacex/all.csv rename to leetcode/spacex/all.csv diff --git a/spacex/more-than-six-months.csv b/leetcode/spacex/more-than-six-months.csv similarity index 100% rename from spacex/more-than-six-months.csv rename to leetcode/spacex/more-than-six-months.csv diff --git a/spinny/all.csv b/leetcode/spinny/all.csv similarity index 100% rename from spinny/all.csv rename to leetcode/spinny/all.csv diff --git a/spinny/more-than-six-months.csv b/leetcode/spinny/more-than-six-months.csv similarity index 100% rename from spinny/more-than-six-months.csv rename to leetcode/spinny/more-than-six-months.csv diff --git a/spinny/six-months.csv b/leetcode/spinny/six-months.csv similarity index 100% rename from spinny/six-months.csv rename to leetcode/spinny/six-months.csv diff --git a/spinny/three-months.csv b/leetcode/spinny/three-months.csv similarity index 100% rename from spinny/three-months.csv rename to leetcode/spinny/three-months.csv diff --git a/splunk/all.csv b/leetcode/splunk/all.csv similarity index 100% rename from splunk/all.csv rename to leetcode/splunk/all.csv diff --git a/splunk/more-than-six-months.csv b/leetcode/splunk/more-than-six-months.csv similarity index 100% rename from splunk/more-than-six-months.csv rename to leetcode/splunk/more-than-six-months.csv diff --git a/splunk/six-months.csv b/leetcode/splunk/six-months.csv similarity index 100% rename from splunk/six-months.csv rename to leetcode/splunk/six-months.csv diff --git a/spotify/all.csv b/leetcode/spotify/all.csv similarity index 100% rename from spotify/all.csv rename to leetcode/spotify/all.csv diff --git a/spotify/more-than-six-months.csv b/leetcode/spotify/more-than-six-months.csv similarity index 100% rename from spotify/more-than-six-months.csv rename to leetcode/spotify/more-than-six-months.csv diff --git a/spotify/six-months.csv b/leetcode/spotify/six-months.csv similarity index 100% rename from spotify/six-months.csv rename to leetcode/spotify/six-months.csv diff --git a/spotify/thirty-days.csv b/leetcode/spotify/thirty-days.csv similarity index 100% rename from spotify/thirty-days.csv rename to leetcode/spotify/thirty-days.csv diff --git a/spotify/three-months.csv b/leetcode/spotify/three-months.csv similarity index 100% rename from spotify/three-months.csv rename to leetcode/spotify/three-months.csv diff --git a/sprinklr/all.csv b/leetcode/sprinklr/all.csv similarity index 100% rename from sprinklr/all.csv rename to leetcode/sprinklr/all.csv diff --git a/sprinklr/more-than-six-months.csv b/leetcode/sprinklr/more-than-six-months.csv similarity index 100% rename from sprinklr/more-than-six-months.csv rename to leetcode/sprinklr/more-than-six-months.csv diff --git a/square/all.csv b/leetcode/square/all.csv similarity index 100% rename from square/all.csv rename to leetcode/square/all.csv diff --git a/square/more-than-six-months.csv b/leetcode/square/more-than-six-months.csv similarity index 100% rename from square/more-than-six-months.csv rename to leetcode/square/more-than-six-months.csv diff --git a/square/six-months.csv b/leetcode/square/six-months.csv similarity index 100% rename from square/six-months.csv rename to leetcode/square/six-months.csv diff --git a/squarepoint-capital/all.csv b/leetcode/squarepoint-capital/all.csv similarity index 100% rename from squarepoint-capital/all.csv rename to leetcode/squarepoint-capital/all.csv diff --git a/squarepoint-capital/more-than-six-months.csv b/leetcode/squarepoint-capital/more-than-six-months.csv similarity index 100% rename from squarepoint-capital/more-than-six-months.csv rename to leetcode/squarepoint-capital/more-than-six-months.csv diff --git a/squarepoint-capital/six-months.csv b/leetcode/squarepoint-capital/six-months.csv similarity index 100% rename from squarepoint-capital/six-months.csv rename to leetcode/squarepoint-capital/six-months.csv diff --git a/squarespace/all.csv b/leetcode/squarespace/all.csv similarity index 100% rename from squarespace/all.csv rename to leetcode/squarespace/all.csv diff --git a/squarespace/more-than-six-months.csv b/leetcode/squarespace/more-than-six-months.csv similarity index 100% rename from squarespace/more-than-six-months.csv rename to leetcode/squarespace/more-than-six-months.csv diff --git a/squarespace/six-months.csv b/leetcode/squarespace/six-months.csv similarity index 100% rename from squarespace/six-months.csv rename to leetcode/squarespace/six-months.csv diff --git a/squarespace/three-months.csv b/leetcode/squarespace/three-months.csv similarity index 100% rename from squarespace/three-months.csv rename to leetcode/squarespace/three-months.csv diff --git a/src/main/java/Main.java b/leetcode/src/main/java/Main.java similarity index 100% rename from src/main/java/Main.java rename to leetcode/src/main/java/Main.java diff --git a/src/main/java/Scraper.java b/leetcode/src/main/java/Scraper.java similarity index 100% rename from src/main/java/Scraper.java rename to leetcode/src/main/java/Scraper.java diff --git a/src/main/java/model/ProblemStatement.java b/leetcode/src/main/java/model/ProblemStatement.java similarity index 100% rename from src/main/java/model/ProblemStatement.java rename to leetcode/src/main/java/model/ProblemStatement.java diff --git a/stackadapt/all.csv b/leetcode/stackadapt/all.csv similarity index 100% rename from stackadapt/all.csv rename to leetcode/stackadapt/all.csv diff --git a/stackadapt/more-than-six-months.csv b/leetcode/stackadapt/more-than-six-months.csv similarity index 100% rename from stackadapt/more-than-six-months.csv rename to leetcode/stackadapt/more-than-six-months.csv diff --git a/stackline/all.csv b/leetcode/stackline/all.csv similarity index 100% rename from stackline/all.csv rename to leetcode/stackline/all.csv diff --git a/stackline/more-than-six-months.csv b/leetcode/stackline/more-than-six-months.csv similarity index 100% rename from stackline/more-than-six-months.csv rename to leetcode/stackline/more-than-six-months.csv diff --git a/stackline/six-months.csv b/leetcode/stackline/six-months.csv similarity index 100% rename from stackline/six-months.csv rename to leetcode/stackline/six-months.csv diff --git a/starbucks/all.csv b/leetcode/starbucks/all.csv similarity index 100% rename from starbucks/all.csv rename to leetcode/starbucks/all.csv diff --git a/starbucks/six-months.csv b/leetcode/starbucks/six-months.csv similarity index 100% rename from starbucks/six-months.csv rename to leetcode/starbucks/six-months.csv diff --git a/starbucks/three-months.csv b/leetcode/starbucks/three-months.csv similarity index 100% rename from starbucks/three-months.csv rename to leetcode/starbucks/three-months.csv diff --git a/state-farm/all.csv b/leetcode/state-farm/all.csv similarity index 100% rename from state-farm/all.csv rename to leetcode/state-farm/all.csv diff --git a/state-farm/six-months.csv b/leetcode/state-farm/six-months.csv similarity index 100% rename from state-farm/six-months.csv rename to leetcode/state-farm/six-months.csv diff --git a/strava/all.csv b/leetcode/strava/all.csv similarity index 100% rename from strava/all.csv rename to leetcode/strava/all.csv diff --git a/strava/more-than-six-months.csv b/leetcode/strava/more-than-six-months.csv similarity index 100% rename from strava/more-than-six-months.csv rename to leetcode/strava/more-than-six-months.csv diff --git a/stripe/all.csv b/leetcode/stripe/all.csv similarity index 100% rename from stripe/all.csv rename to leetcode/stripe/all.csv diff --git a/stripe/more-than-six-months.csv b/leetcode/stripe/more-than-six-months.csv similarity index 100% rename from stripe/more-than-six-months.csv rename to leetcode/stripe/more-than-six-months.csv diff --git a/stripe/six-months.csv b/leetcode/stripe/six-months.csv similarity index 100% rename from stripe/six-months.csv rename to leetcode/stripe/six-months.csv diff --git a/stripe/thirty-days.csv b/leetcode/stripe/thirty-days.csv similarity index 100% rename from stripe/thirty-days.csv rename to leetcode/stripe/thirty-days.csv diff --git a/stripe/three-months.csv b/leetcode/stripe/three-months.csv similarity index 100% rename from stripe/three-months.csv rename to leetcode/stripe/three-months.csv diff --git a/sumologic/all.csv b/leetcode/sumologic/all.csv similarity index 100% rename from sumologic/all.csv rename to leetcode/sumologic/all.csv diff --git a/sumologic/more-than-six-months.csv b/leetcode/sumologic/more-than-six-months.csv similarity index 100% rename from sumologic/more-than-six-months.csv rename to leetcode/sumologic/more-than-six-months.csv diff --git a/susquehanna-international-group/all.csv b/leetcode/susquehanna-international-group/all.csv similarity index 100% rename from susquehanna-international-group/all.csv rename to leetcode/susquehanna-international-group/all.csv diff --git a/swiggy/all.csv b/leetcode/swiggy/all.csv similarity index 100% rename from swiggy/all.csv rename to leetcode/swiggy/all.csv diff --git a/swiggy/more-than-six-months.csv b/leetcode/swiggy/more-than-six-months.csv similarity index 100% rename from swiggy/more-than-six-months.csv rename to leetcode/swiggy/more-than-six-months.csv diff --git a/swiggy/six-months.csv b/leetcode/swiggy/six-months.csv similarity index 100% rename from swiggy/six-months.csv rename to leetcode/swiggy/six-months.csv diff --git a/swiggy/thirty-days.csv b/leetcode/swiggy/thirty-days.csv similarity index 100% rename from swiggy/thirty-days.csv rename to leetcode/swiggy/thirty-days.csv diff --git a/swiggy/three-months.csv b/leetcode/swiggy/three-months.csv similarity index 100% rename from swiggy/three-months.csv rename to leetcode/swiggy/three-months.csv diff --git a/syfe/all.csv b/leetcode/syfe/all.csv similarity index 100% rename from syfe/all.csv rename to leetcode/syfe/all.csv diff --git a/syfe/more-than-six-months.csv b/leetcode/syfe/more-than-six-months.csv similarity index 100% rename from syfe/more-than-six-months.csv rename to leetcode/syfe/more-than-six-months.csv diff --git a/synology/all.csv b/leetcode/synology/all.csv similarity index 100% rename from synology/all.csv rename to leetcode/synology/all.csv diff --git a/synology/more-than-six-months.csv b/leetcode/synology/more-than-six-months.csv similarity index 100% rename from synology/more-than-six-months.csv rename to leetcode/synology/more-than-six-months.csv diff --git a/synopsys/all.csv b/leetcode/synopsys/all.csv similarity index 100% rename from synopsys/all.csv rename to leetcode/synopsys/all.csv diff --git a/synopsys/more-than-six-months.csv b/leetcode/synopsys/more-than-six-months.csv similarity index 100% rename from synopsys/more-than-six-months.csv rename to leetcode/synopsys/more-than-six-months.csv diff --git a/ta-digital/all.csv b/leetcode/ta-digital/all.csv similarity index 100% rename from ta-digital/all.csv rename to leetcode/ta-digital/all.csv diff --git a/ta-digital/more-than-six-months.csv b/leetcode/ta-digital/more-than-six-months.csv similarity index 100% rename from ta-digital/more-than-six-months.csv rename to leetcode/ta-digital/more-than-six-months.csv diff --git a/tableau/all.csv b/leetcode/tableau/all.csv similarity index 100% rename from tableau/all.csv rename to leetcode/tableau/all.csv diff --git a/tableau/more-than-six-months.csv b/leetcode/tableau/more-than-six-months.csv similarity index 100% rename from tableau/more-than-six-months.csv rename to leetcode/tableau/more-than-six-months.csv diff --git a/tally-solutions/all.csv b/leetcode/tally-solutions/all.csv similarity index 100% rename from tally-solutions/all.csv rename to leetcode/tally-solutions/all.csv diff --git a/tally-solutions/more-than-six-months.csv b/leetcode/tally-solutions/more-than-six-months.csv similarity index 100% rename from tally-solutions/more-than-six-months.csv rename to leetcode/tally-solutions/more-than-six-months.csv diff --git a/tanium/all.csv b/leetcode/tanium/all.csv similarity index 100% rename from tanium/all.csv rename to leetcode/tanium/all.csv diff --git a/tanium/more-than-six-months.csv b/leetcode/tanium/more-than-six-months.csv similarity index 100% rename from tanium/more-than-six-months.csv rename to leetcode/tanium/more-than-six-months.csv diff --git a/tanium/six-months.csv b/leetcode/tanium/six-months.csv similarity index 100% rename from tanium/six-months.csv rename to leetcode/tanium/six-months.csv diff --git a/target/all.csv b/leetcode/target/all.csv similarity index 100% rename from target/all.csv rename to leetcode/target/all.csv diff --git a/target/more-than-six-months.csv b/leetcode/target/more-than-six-months.csv similarity index 100% rename from target/more-than-six-months.csv rename to leetcode/target/more-than-six-months.csv diff --git a/tcs/all.csv b/leetcode/tcs/all.csv similarity index 100% rename from tcs/all.csv rename to leetcode/tcs/all.csv diff --git a/tcs/more-than-six-months.csv b/leetcode/tcs/more-than-six-months.csv similarity index 100% rename from tcs/more-than-six-months.csv rename to leetcode/tcs/more-than-six-months.csv diff --git a/tcs/six-months.csv b/leetcode/tcs/six-months.csv similarity index 100% rename from tcs/six-months.csv rename to leetcode/tcs/six-months.csv diff --git a/tcs/thirty-days.csv b/leetcode/tcs/thirty-days.csv similarity index 100% rename from tcs/thirty-days.csv rename to leetcode/tcs/thirty-days.csv diff --git a/tcs/three-months.csv b/leetcode/tcs/three-months.csv similarity index 100% rename from tcs/three-months.csv rename to leetcode/tcs/three-months.csv diff --git a/tech-mahindra/all.csv b/leetcode/tech-mahindra/all.csv similarity index 100% rename from tech-mahindra/all.csv rename to leetcode/tech-mahindra/all.csv diff --git a/tech-mahindra/more-than-six-months.csv b/leetcode/tech-mahindra/more-than-six-months.csv similarity index 100% rename from tech-mahindra/more-than-six-months.csv rename to leetcode/tech-mahindra/more-than-six-months.csv diff --git a/tekion/all.csv b/leetcode/tekion/all.csv similarity index 100% rename from tekion/all.csv rename to leetcode/tekion/all.csv diff --git a/tekion/more-than-six-months.csv b/leetcode/tekion/more-than-six-months.csv similarity index 100% rename from tekion/more-than-six-months.csv rename to leetcode/tekion/more-than-six-months.csv diff --git a/tekion/six-months.csv b/leetcode/tekion/six-months.csv similarity index 100% rename from tekion/six-months.csv rename to leetcode/tekion/six-months.csv diff --git a/tekion/three-months.csv b/leetcode/tekion/three-months.csv similarity index 100% rename from tekion/three-months.csv rename to leetcode/tekion/three-months.csv diff --git a/tencent/all.csv b/leetcode/tencent/all.csv similarity index 100% rename from tencent/all.csv rename to leetcode/tencent/all.csv diff --git a/tencent/more-than-six-months.csv b/leetcode/tencent/more-than-six-months.csv similarity index 100% rename from tencent/more-than-six-months.csv rename to leetcode/tencent/more-than-six-months.csv diff --git a/tencent/six-months.csv b/leetcode/tencent/six-months.csv similarity index 100% rename from tencent/six-months.csv rename to leetcode/tencent/six-months.csv diff --git a/tencent/three-months.csv b/leetcode/tencent/three-months.csv similarity index 100% rename from tencent/three-months.csv rename to leetcode/tencent/three-months.csv diff --git a/teradata/all.csv b/leetcode/teradata/all.csv similarity index 100% rename from teradata/all.csv rename to leetcode/teradata/all.csv diff --git a/teradata/more-than-six-months.csv b/leetcode/teradata/more-than-six-months.csv similarity index 100% rename from teradata/more-than-six-months.csv rename to leetcode/teradata/more-than-six-months.csv diff --git a/tesco/all.csv b/leetcode/tesco/all.csv similarity index 100% rename from tesco/all.csv rename to leetcode/tesco/all.csv diff --git a/tesco/more-than-six-months.csv b/leetcode/tesco/more-than-six-months.csv similarity index 100% rename from tesco/more-than-six-months.csv rename to leetcode/tesco/more-than-six-months.csv diff --git a/tesco/six-months.csv b/leetcode/tesco/six-months.csv similarity index 100% rename from tesco/six-months.csv rename to leetcode/tesco/six-months.csv diff --git a/tesla/all.csv b/leetcode/tesla/all.csv similarity index 100% rename from tesla/all.csv rename to leetcode/tesla/all.csv diff --git a/tesla/more-than-six-months.csv b/leetcode/tesla/more-than-six-months.csv similarity index 100% rename from tesla/more-than-six-months.csv rename to leetcode/tesla/more-than-six-months.csv diff --git a/tesla/six-months.csv b/leetcode/tesla/six-months.csv similarity index 100% rename from tesla/six-months.csv rename to leetcode/tesla/six-months.csv diff --git a/tesla/three-months.csv b/leetcode/tesla/three-months.csv similarity index 100% rename from tesla/three-months.csv rename to leetcode/tesla/three-months.csv diff --git a/texas-instruments/all.csv b/leetcode/texas-instruments/all.csv similarity index 100% rename from texas-instruments/all.csv rename to leetcode/texas-instruments/all.csv diff --git a/texas-instruments/more-than-six-months.csv b/leetcode/texas-instruments/more-than-six-months.csv similarity index 100% rename from texas-instruments/more-than-six-months.csv rename to leetcode/texas-instruments/more-than-six-months.csv diff --git a/the-trade-desk/all.csv b/leetcode/the-trade-desk/all.csv similarity index 100% rename from the-trade-desk/all.csv rename to leetcode/the-trade-desk/all.csv diff --git a/the-trade-desk/more-than-six-months.csv b/leetcode/the-trade-desk/more-than-six-months.csv similarity index 100% rename from the-trade-desk/more-than-six-months.csv rename to leetcode/the-trade-desk/more-than-six-months.csv diff --git a/the-trade-desk/six-months.csv b/leetcode/the-trade-desk/six-months.csv similarity index 100% rename from the-trade-desk/six-months.csv rename to leetcode/the-trade-desk/six-months.csv diff --git a/thomson-reuters/all.csv b/leetcode/thomson-reuters/all.csv similarity index 100% rename from thomson-reuters/all.csv rename to leetcode/thomson-reuters/all.csv diff --git a/thomson-reuters/more-than-six-months.csv b/leetcode/thomson-reuters/more-than-six-months.csv similarity index 100% rename from thomson-reuters/more-than-six-months.csv rename to leetcode/thomson-reuters/more-than-six-months.csv diff --git a/thoughtspot/all.csv b/leetcode/thoughtspot/all.csv similarity index 100% rename from thoughtspot/all.csv rename to leetcode/thoughtspot/all.csv diff --git a/thoughtspot/more-than-six-months.csv b/leetcode/thoughtspot/more-than-six-months.csv similarity index 100% rename from thoughtspot/more-than-six-months.csv rename to leetcode/thoughtspot/more-than-six-months.csv diff --git a/thoughtworks/all.csv b/leetcode/thoughtworks/all.csv similarity index 100% rename from thoughtworks/all.csv rename to leetcode/thoughtworks/all.csv diff --git a/thoughtworks/more-than-six-months.csv b/leetcode/thoughtworks/more-than-six-months.csv similarity index 100% rename from thoughtworks/more-than-six-months.csv rename to leetcode/thoughtworks/more-than-six-months.csv diff --git a/thousandeyes/all.csv b/leetcode/thousandeyes/all.csv similarity index 100% rename from thousandeyes/all.csv rename to leetcode/thousandeyes/all.csv diff --git a/thousandeyes/more-than-six-months.csv b/leetcode/thousandeyes/more-than-six-months.csv similarity index 100% rename from thousandeyes/more-than-six-months.csv rename to leetcode/thousandeyes/more-than-six-months.csv diff --git a/thumbtack/all.csv b/leetcode/thumbtack/all.csv similarity index 100% rename from thumbtack/all.csv rename to leetcode/thumbtack/all.csv diff --git a/thumbtack/more-than-six-months.csv b/leetcode/thumbtack/more-than-six-months.csv similarity index 100% rename from thumbtack/more-than-six-months.csv rename to leetcode/thumbtack/more-than-six-months.csv diff --git a/tiaa/all.csv b/leetcode/tiaa/all.csv similarity index 100% rename from tiaa/all.csv rename to leetcode/tiaa/all.csv diff --git a/tiaa/more-than-six-months.csv b/leetcode/tiaa/more-than-six-months.csv similarity index 100% rename from tiaa/more-than-six-months.csv rename to leetcode/tiaa/more-than-six-months.csv diff --git a/tiger-analytics/all.csv b/leetcode/tiger-analytics/all.csv similarity index 100% rename from tiger-analytics/all.csv rename to leetcode/tiger-analytics/all.csv diff --git a/tiger-analytics/more-than-six-months.csv b/leetcode/tiger-analytics/more-than-six-months.csv similarity index 100% rename from tiger-analytics/more-than-six-months.csv rename to leetcode/tiger-analytics/more-than-six-months.csv diff --git a/tiger-analytics/six-months.csv b/leetcode/tiger-analytics/six-months.csv similarity index 100% rename from tiger-analytics/six-months.csv rename to leetcode/tiger-analytics/six-months.csv diff --git a/tiger-analytics/three-months.csv b/leetcode/tiger-analytics/three-months.csv similarity index 100% rename from tiger-analytics/three-months.csv rename to leetcode/tiger-analytics/three-months.csv diff --git a/tiktok/all.csv b/leetcode/tiktok/all.csv similarity index 100% rename from tiktok/all.csv rename to leetcode/tiktok/all.csv diff --git a/tiktok/more-than-six-months.csv b/leetcode/tiktok/more-than-six-months.csv similarity index 100% rename from tiktok/more-than-six-months.csv rename to leetcode/tiktok/more-than-six-months.csv diff --git a/tiktok/six-months.csv b/leetcode/tiktok/six-months.csv similarity index 100% rename from tiktok/six-months.csv rename to leetcode/tiktok/six-months.csv diff --git a/tiktok/thirty-days.csv b/leetcode/tiktok/thirty-days.csv similarity index 100% rename from tiktok/thirty-days.csv rename to leetcode/tiktok/thirty-days.csv diff --git a/tiktok/three-months.csv b/leetcode/tiktok/three-months.csv similarity index 100% rename from tiktok/three-months.csv rename to leetcode/tiktok/three-months.csv diff --git a/tinder/all.csv b/leetcode/tinder/all.csv similarity index 100% rename from tinder/all.csv rename to leetcode/tinder/all.csv diff --git a/tinder/more-than-six-months.csv b/leetcode/tinder/more-than-six-months.csv similarity index 100% rename from tinder/more-than-six-months.csv rename to leetcode/tinder/more-than-six-months.csv diff --git a/tinkoff/all.csv b/leetcode/tinkoff/all.csv similarity index 100% rename from tinkoff/all.csv rename to leetcode/tinkoff/all.csv diff --git a/tinkoff/more-than-six-months.csv b/leetcode/tinkoff/more-than-six-months.csv similarity index 100% rename from tinkoff/more-than-six-months.csv rename to leetcode/tinkoff/more-than-six-months.csv diff --git a/toast/all.csv b/leetcode/toast/all.csv similarity index 100% rename from toast/all.csv rename to leetcode/toast/all.csv diff --git a/toast/more-than-six-months.csv b/leetcode/toast/more-than-six-months.csv similarity index 100% rename from toast/more-than-six-months.csv rename to leetcode/toast/more-than-six-months.csv diff --git a/toast/six-months.csv b/leetcode/toast/six-months.csv similarity index 100% rename from toast/six-months.csv rename to leetcode/toast/six-months.csv diff --git a/toast/three-months.csv b/leetcode/toast/three-months.csv similarity index 100% rename from toast/three-months.csv rename to leetcode/toast/three-months.csv diff --git a/tokopedia/all.csv b/leetcode/tokopedia/all.csv similarity index 100% rename from tokopedia/all.csv rename to leetcode/tokopedia/all.csv diff --git a/tokopedia/more-than-six-months.csv b/leetcode/tokopedia/more-than-six-months.csv similarity index 100% rename from tokopedia/more-than-six-months.csv rename to leetcode/tokopedia/more-than-six-months.csv diff --git a/tomtom/all.csv b/leetcode/tomtom/all.csv similarity index 100% rename from tomtom/all.csv rename to leetcode/tomtom/all.csv diff --git a/tomtom/more-than-six-months.csv b/leetcode/tomtom/more-than-six-months.csv similarity index 100% rename from tomtom/more-than-six-months.csv rename to leetcode/tomtom/more-than-six-months.csv diff --git a/tomtom/six-months.csv b/leetcode/tomtom/six-months.csv similarity index 100% rename from tomtom/six-months.csv rename to leetcode/tomtom/six-months.csv diff --git a/toptal/all.csv b/leetcode/toptal/all.csv similarity index 100% rename from toptal/all.csv rename to leetcode/toptal/all.csv diff --git a/toptal/more-than-six-months.csv b/leetcode/toptal/more-than-six-months.csv similarity index 100% rename from toptal/more-than-six-months.csv rename to leetcode/toptal/more-than-six-months.csv diff --git a/tower-research/all.csv b/leetcode/tower-research/all.csv similarity index 100% rename from tower-research/all.csv rename to leetcode/tower-research/all.csv diff --git a/tower-research/more-than-six-months.csv b/leetcode/tower-research/more-than-six-months.csv similarity index 100% rename from tower-research/more-than-six-months.csv rename to leetcode/tower-research/more-than-six-months.csv diff --git a/tracxn/all.csv b/leetcode/tracxn/all.csv similarity index 100% rename from tracxn/all.csv rename to leetcode/tracxn/all.csv diff --git a/tracxn/six-months.csv b/leetcode/tracxn/six-months.csv similarity index 100% rename from tracxn/six-months.csv rename to leetcode/tracxn/six-months.csv diff --git a/traveloka/all.csv b/leetcode/traveloka/all.csv similarity index 100% rename from traveloka/all.csv rename to leetcode/traveloka/all.csv diff --git a/traveloka/more-than-six-months.csv b/leetcode/traveloka/more-than-six-months.csv similarity index 100% rename from traveloka/more-than-six-months.csv rename to leetcode/traveloka/more-than-six-months.csv diff --git a/traveloka/six-months.csv b/leetcode/traveloka/six-months.csv similarity index 100% rename from traveloka/six-months.csv rename to leetcode/traveloka/six-months.csv diff --git a/trexquant/all.csv b/leetcode/trexquant/all.csv similarity index 100% rename from trexquant/all.csv rename to leetcode/trexquant/all.csv diff --git a/trexquant/more-than-six-months.csv b/leetcode/trexquant/more-than-six-months.csv similarity index 100% rename from trexquant/more-than-six-months.csv rename to leetcode/trexquant/more-than-six-months.csv diff --git a/trilogy/all.csv b/leetcode/trilogy/all.csv similarity index 100% rename from trilogy/all.csv rename to leetcode/trilogy/all.csv diff --git a/trilogy/more-than-six-months.csv b/leetcode/trilogy/more-than-six-months.csv similarity index 100% rename from trilogy/more-than-six-months.csv rename to leetcode/trilogy/more-than-six-months.csv diff --git a/trilogy/six-months.csv b/leetcode/trilogy/six-months.csv similarity index 100% rename from trilogy/six-months.csv rename to leetcode/trilogy/six-months.csv diff --git a/trilogy/thirty-days.csv b/leetcode/trilogy/thirty-days.csv similarity index 100% rename from trilogy/thirty-days.csv rename to leetcode/trilogy/thirty-days.csv diff --git a/trilogy/three-months.csv b/leetcode/trilogy/three-months.csv similarity index 100% rename from trilogy/three-months.csv rename to leetcode/trilogy/three-months.csv diff --git a/tripadvisor/all.csv b/leetcode/tripadvisor/all.csv similarity index 100% rename from tripadvisor/all.csv rename to leetcode/tripadvisor/all.csv diff --git a/tripadvisor/more-than-six-months.csv b/leetcode/tripadvisor/more-than-six-months.csv similarity index 100% rename from tripadvisor/more-than-six-months.csv rename to leetcode/tripadvisor/more-than-six-months.csv diff --git a/tripadvisor/six-months.csv b/leetcode/tripadvisor/six-months.csv similarity index 100% rename from tripadvisor/six-months.csv rename to leetcode/tripadvisor/six-months.csv diff --git a/triplebyte/all.csv b/leetcode/triplebyte/all.csv similarity index 100% rename from triplebyte/all.csv rename to leetcode/triplebyte/all.csv diff --git a/triplebyte/more-than-six-months.csv b/leetcode/triplebyte/more-than-six-months.csv similarity index 100% rename from triplebyte/more-than-six-months.csv rename to leetcode/triplebyte/more-than-six-months.csv diff --git a/turing/all.csv b/leetcode/turing/all.csv similarity index 100% rename from turing/all.csv rename to leetcode/turing/all.csv diff --git a/turing/more-than-six-months.csv b/leetcode/turing/more-than-six-months.csv similarity index 100% rename from turing/more-than-six-months.csv rename to leetcode/turing/more-than-six-months.csv diff --git a/turing/six-months.csv b/leetcode/turing/six-months.csv similarity index 100% rename from turing/six-months.csv rename to leetcode/turing/six-months.csv diff --git a/turing/three-months.csv b/leetcode/turing/three-months.csv similarity index 100% rename from turing/three-months.csv rename to leetcode/turing/three-months.csv diff --git a/turo/all.csv b/leetcode/turo/all.csv similarity index 100% rename from turo/all.csv rename to leetcode/turo/all.csv diff --git a/turo/more-than-six-months.csv b/leetcode/turo/more-than-six-months.csv similarity index 100% rename from turo/more-than-six-months.csv rename to leetcode/turo/more-than-six-months.csv diff --git a/turvo/all.csv b/leetcode/turvo/all.csv similarity index 100% rename from turvo/all.csv rename to leetcode/turvo/all.csv diff --git a/turvo/more-than-six-months.csv b/leetcode/turvo/more-than-six-months.csv similarity index 100% rename from turvo/more-than-six-months.csv rename to leetcode/turvo/more-than-six-months.csv diff --git a/tusimple/all.csv b/leetcode/tusimple/all.csv similarity index 100% rename from tusimple/all.csv rename to leetcode/tusimple/all.csv diff --git a/tusimple/more-than-six-months.csv b/leetcode/tusimple/more-than-six-months.csv similarity index 100% rename from tusimple/more-than-six-months.csv rename to leetcode/tusimple/more-than-six-months.csv diff --git a/twilio/all.csv b/leetcode/twilio/all.csv similarity index 100% rename from twilio/all.csv rename to leetcode/twilio/all.csv diff --git a/twilio/more-than-six-months.csv b/leetcode/twilio/more-than-six-months.csv similarity index 100% rename from twilio/more-than-six-months.csv rename to leetcode/twilio/more-than-six-months.csv diff --git a/twitch/all.csv b/leetcode/twitch/all.csv similarity index 100% rename from twitch/all.csv rename to leetcode/twitch/all.csv diff --git a/twitch/more-than-six-months.csv b/leetcode/twitch/more-than-six-months.csv similarity index 100% rename from twitch/more-than-six-months.csv rename to leetcode/twitch/more-than-six-months.csv diff --git a/twitch/six-months.csv b/leetcode/twitch/six-months.csv similarity index 100% rename from twitch/six-months.csv rename to leetcode/twitch/six-months.csv diff --git a/twitch/three-months.csv b/leetcode/twitch/three-months.csv similarity index 100% rename from twitch/three-months.csv rename to leetcode/twitch/three-months.csv diff --git a/twitter/all.csv b/leetcode/twitter/all.csv similarity index 100% rename from twitter/all.csv rename to leetcode/twitter/all.csv diff --git a/twitter/more-than-six-months.csv b/leetcode/twitter/more-than-six-months.csv similarity index 100% rename from twitter/more-than-six-months.csv rename to leetcode/twitter/more-than-six-months.csv diff --git a/two-sigma/all.csv b/leetcode/two-sigma/all.csv similarity index 100% rename from two-sigma/all.csv rename to leetcode/two-sigma/all.csv diff --git a/two-sigma/more-than-six-months.csv b/leetcode/two-sigma/more-than-six-months.csv similarity index 100% rename from two-sigma/more-than-six-months.csv rename to leetcode/two-sigma/more-than-six-months.csv diff --git a/two-sigma/six-months.csv b/leetcode/two-sigma/six-months.csv similarity index 100% rename from two-sigma/six-months.csv rename to leetcode/two-sigma/six-months.csv diff --git a/uber/all.csv b/leetcode/uber/all.csv similarity index 100% rename from uber/all.csv rename to leetcode/uber/all.csv diff --git a/uber/more-than-six-months.csv b/leetcode/uber/more-than-six-months.csv similarity index 100% rename from uber/more-than-six-months.csv rename to leetcode/uber/more-than-six-months.csv diff --git a/uber/six-months.csv b/leetcode/uber/six-months.csv similarity index 100% rename from uber/six-months.csv rename to leetcode/uber/six-months.csv diff --git a/uber/thirty-days.csv b/leetcode/uber/thirty-days.csv similarity index 100% rename from uber/thirty-days.csv rename to leetcode/uber/thirty-days.csv diff --git a/uber/three-months.csv b/leetcode/uber/three-months.csv similarity index 100% rename from uber/three-months.csv rename to leetcode/uber/three-months.csv diff --git a/ubisoft/all.csv b/leetcode/ubisoft/all.csv similarity index 100% rename from ubisoft/all.csv rename to leetcode/ubisoft/all.csv diff --git a/ubs/all.csv b/leetcode/ubs/all.csv similarity index 100% rename from ubs/all.csv rename to leetcode/ubs/all.csv diff --git a/ubs/more-than-six-months.csv b/leetcode/ubs/more-than-six-months.csv similarity index 100% rename from ubs/more-than-six-months.csv rename to leetcode/ubs/more-than-six-months.csv diff --git a/ubs/six-months.csv b/leetcode/ubs/six-months.csv similarity index 100% rename from ubs/six-months.csv rename to leetcode/ubs/six-months.csv diff --git a/uipath/all.csv b/leetcode/uipath/all.csv similarity index 100% rename from uipath/all.csv rename to leetcode/uipath/all.csv diff --git a/uipath/more-than-six-months.csv b/leetcode/uipath/more-than-six-months.csv similarity index 100% rename from uipath/more-than-six-months.csv rename to leetcode/uipath/more-than-six-months.csv diff --git a/uipath/six-months.csv b/leetcode/uipath/six-months.csv similarity index 100% rename from uipath/six-months.csv rename to leetcode/uipath/six-months.csv diff --git a/uipath/three-months.csv b/leetcode/uipath/three-months.csv similarity index 100% rename from uipath/three-months.csv rename to leetcode/uipath/three-months.csv diff --git a/ukg/all.csv b/leetcode/ukg/all.csv similarity index 100% rename from ukg/all.csv rename to leetcode/ukg/all.csv diff --git a/ukg/more-than-six-months.csv b/leetcode/ukg/more-than-six-months.csv similarity index 100% rename from ukg/more-than-six-months.csv rename to leetcode/ukg/more-than-six-months.csv diff --git a/ukg/six-months.csv b/leetcode/ukg/six-months.csv similarity index 100% rename from ukg/six-months.csv rename to leetcode/ukg/six-months.csv diff --git a/ukg/three-months.csv b/leetcode/ukg/three-months.csv similarity index 100% rename from ukg/three-months.csv rename to leetcode/ukg/three-months.csv diff --git a/unbxd/all.csv b/leetcode/unbxd/all.csv similarity index 100% rename from unbxd/all.csv rename to leetcode/unbxd/all.csv diff --git a/unbxd/more-than-six-months.csv b/leetcode/unbxd/more-than-six-months.csv similarity index 100% rename from unbxd/more-than-six-months.csv rename to leetcode/unbxd/more-than-six-months.csv diff --git a/unity/all.csv b/leetcode/unity/all.csv similarity index 100% rename from unity/all.csv rename to leetcode/unity/all.csv diff --git a/unity/more-than-six-months.csv b/leetcode/unity/more-than-six-months.csv similarity index 100% rename from unity/more-than-six-months.csv rename to leetcode/unity/more-than-six-months.csv diff --git a/unstop/all.csv b/leetcode/unstop/all.csv similarity index 100% rename from unstop/all.csv rename to leetcode/unstop/all.csv diff --git a/unstop/more-than-six-months.csv b/leetcode/unstop/more-than-six-months.csv similarity index 100% rename from unstop/more-than-six-months.csv rename to leetcode/unstop/more-than-six-months.csv diff --git a/upstart/all.csv b/leetcode/upstart/all.csv similarity index 100% rename from upstart/all.csv rename to leetcode/upstart/all.csv diff --git a/upstart/more-than-six-months.csv b/leetcode/upstart/more-than-six-months.csv similarity index 100% rename from upstart/more-than-six-months.csv rename to leetcode/upstart/more-than-six-months.csv diff --git a/upstart/six-months.csv b/leetcode/upstart/six-months.csv similarity index 100% rename from upstart/six-months.csv rename to leetcode/upstart/six-months.csv diff --git a/upstart/three-months.csv b/leetcode/upstart/three-months.csv similarity index 100% rename from upstart/three-months.csv rename to leetcode/upstart/three-months.csv diff --git a/upstox/all.csv b/leetcode/upstox/all.csv similarity index 100% rename from upstox/all.csv rename to leetcode/upstox/all.csv diff --git a/urban-company/all.csv b/leetcode/urban-company/all.csv similarity index 100% rename from urban-company/all.csv rename to leetcode/urban-company/all.csv diff --git a/urban-company/more-than-six-months.csv b/leetcode/urban-company/more-than-six-months.csv similarity index 100% rename from urban-company/more-than-six-months.csv rename to leetcode/urban-company/more-than-six-months.csv diff --git a/usaa/all.csv b/leetcode/usaa/all.csv similarity index 100% rename from usaa/all.csv rename to leetcode/usaa/all.csv diff --git a/usaa/more-than-six-months.csv b/leetcode/usaa/more-than-six-months.csv similarity index 100% rename from usaa/more-than-six-months.csv rename to leetcode/usaa/more-than-six-months.csv diff --git a/ust/all.csv b/leetcode/ust/all.csv similarity index 100% rename from ust/all.csv rename to leetcode/ust/all.csv diff --git a/ust/more-than-six-months.csv b/leetcode/ust/more-than-six-months.csv similarity index 100% rename from ust/more-than-six-months.csv rename to leetcode/ust/more-than-six-months.csv diff --git a/valve/all.csv b/leetcode/valve/all.csv similarity index 100% rename from valve/all.csv rename to leetcode/valve/all.csv diff --git a/valve/more-than-six-months.csv b/leetcode/valve/more-than-six-months.csv similarity index 100% rename from valve/more-than-six-months.csv rename to leetcode/valve/more-than-six-months.csv diff --git a/valve/six-months.csv b/leetcode/valve/six-months.csv similarity index 100% rename from valve/six-months.csv rename to leetcode/valve/six-months.csv diff --git a/vanguard/all.csv b/leetcode/vanguard/all.csv similarity index 100% rename from vanguard/all.csv rename to leetcode/vanguard/all.csv diff --git a/vanguard/more-than-six-months.csv b/leetcode/vanguard/more-than-six-months.csv similarity index 100% rename from vanguard/more-than-six-months.csv rename to leetcode/vanguard/more-than-six-months.csv diff --git a/veeva/all.csv b/leetcode/veeva/all.csv similarity index 100% rename from veeva/all.csv rename to leetcode/veeva/all.csv diff --git a/veeva/more-than-six-months.csv b/leetcode/veeva/more-than-six-months.csv similarity index 100% rename from veeva/more-than-six-months.csv rename to leetcode/veeva/more-than-six-months.csv diff --git a/verily/all.csv b/leetcode/verily/all.csv similarity index 100% rename from verily/all.csv rename to leetcode/verily/all.csv diff --git a/verily/more-than-six-months.csv b/leetcode/verily/more-than-six-months.csv similarity index 100% rename from verily/more-than-six-months.csv rename to leetcode/verily/more-than-six-months.csv diff --git a/verily/six-months.csv b/leetcode/verily/six-months.csv similarity index 100% rename from verily/six-months.csv rename to leetcode/verily/six-months.csv diff --git a/veritas/all.csv b/leetcode/veritas/all.csv similarity index 100% rename from veritas/all.csv rename to leetcode/veritas/all.csv diff --git a/veritas/more-than-six-months.csv b/leetcode/veritas/more-than-six-months.csv similarity index 100% rename from veritas/more-than-six-months.csv rename to leetcode/veritas/more-than-six-months.csv diff --git a/verizon/all.csv b/leetcode/verizon/all.csv similarity index 100% rename from verizon/all.csv rename to leetcode/verizon/all.csv diff --git a/verizon/more-than-six-months.csv b/leetcode/verizon/more-than-six-months.csv similarity index 100% rename from verizon/more-than-six-months.csv rename to leetcode/verizon/more-than-six-months.csv diff --git a/verizon/six-months.csv b/leetcode/verizon/six-months.csv similarity index 100% rename from verizon/six-months.csv rename to leetcode/verizon/six-months.csv diff --git a/verkada/all.csv b/leetcode/verkada/all.csv similarity index 100% rename from verkada/all.csv rename to leetcode/verkada/all.csv diff --git a/verkada/more-than-six-months.csv b/leetcode/verkada/more-than-six-months.csv similarity index 100% rename from verkada/more-than-six-months.csv rename to leetcode/verkada/more-than-six-months.csv diff --git a/verkada/six-months.csv b/leetcode/verkada/six-months.csv similarity index 100% rename from verkada/six-months.csv rename to leetcode/verkada/six-months.csv diff --git a/verkada/three-months.csv b/leetcode/verkada/three-months.csv similarity index 100% rename from verkada/three-months.csv rename to leetcode/verkada/three-months.csv diff --git a/viasat/all.csv b/leetcode/viasat/all.csv similarity index 100% rename from viasat/all.csv rename to leetcode/viasat/all.csv diff --git a/viasat/more-than-six-months.csv b/leetcode/viasat/more-than-six-months.csv similarity index 100% rename from viasat/more-than-six-months.csv rename to leetcode/viasat/more-than-six-months.csv diff --git a/viasat/six-months.csv b/leetcode/viasat/six-months.csv similarity index 100% rename from viasat/six-months.csv rename to leetcode/viasat/six-months.csv diff --git a/vimeo/all.csv b/leetcode/vimeo/all.csv similarity index 100% rename from vimeo/all.csv rename to leetcode/vimeo/all.csv diff --git a/vimeo/more-than-six-months.csv b/leetcode/vimeo/more-than-six-months.csv similarity index 100% rename from vimeo/more-than-six-months.csv rename to leetcode/vimeo/more-than-six-months.csv diff --git a/vimeo/six-months.csv b/leetcode/vimeo/six-months.csv similarity index 100% rename from vimeo/six-months.csv rename to leetcode/vimeo/six-months.csv diff --git a/vimeo/three-months.csv b/leetcode/vimeo/three-months.csv similarity index 100% rename from vimeo/three-months.csv rename to leetcode/vimeo/three-months.csv diff --git a/virtu/all.csv b/leetcode/virtu/all.csv similarity index 100% rename from virtu/all.csv rename to leetcode/virtu/all.csv diff --git a/virtu/more-than-six-months.csv b/leetcode/virtu/more-than-six-months.csv similarity index 100% rename from virtu/more-than-six-months.csv rename to leetcode/virtu/more-than-six-months.csv diff --git a/virtu/six-months.csv b/leetcode/virtu/six-months.csv similarity index 100% rename from virtu/six-months.csv rename to leetcode/virtu/six-months.csv diff --git a/virtu/three-months.csv b/leetcode/virtu/three-months.csv similarity index 100% rename from virtu/three-months.csv rename to leetcode/virtu/three-months.csv diff --git a/virtusa/all.csv b/leetcode/virtusa/all.csv similarity index 100% rename from virtusa/all.csv rename to leetcode/virtusa/all.csv diff --git a/virtusa/more-than-six-months.csv b/leetcode/virtusa/more-than-six-months.csv similarity index 100% rename from virtusa/more-than-six-months.csv rename to leetcode/virtusa/more-than-six-months.csv diff --git a/visa/all.csv b/leetcode/visa/all.csv similarity index 100% rename from visa/all.csv rename to leetcode/visa/all.csv diff --git a/visa/more-than-six-months.csv b/leetcode/visa/more-than-six-months.csv similarity index 100% rename from visa/more-than-six-months.csv rename to leetcode/visa/more-than-six-months.csv diff --git a/visa/six-months.csv b/leetcode/visa/six-months.csv similarity index 100% rename from visa/six-months.csv rename to leetcode/visa/six-months.csv diff --git a/visa/three-months.csv b/leetcode/visa/three-months.csv similarity index 100% rename from visa/three-months.csv rename to leetcode/visa/three-months.csv diff --git a/vk/all.csv b/leetcode/vk/all.csv similarity index 100% rename from vk/all.csv rename to leetcode/vk/all.csv diff --git a/vk/more-than-six-months.csv b/leetcode/vk/more-than-six-months.csv similarity index 100% rename from vk/more-than-six-months.csv rename to leetcode/vk/more-than-six-months.csv diff --git a/vk/six-months.csv b/leetcode/vk/six-months.csv similarity index 100% rename from vk/six-months.csv rename to leetcode/vk/six-months.csv diff --git a/vk/three-months.csv b/leetcode/vk/three-months.csv similarity index 100% rename from vk/three-months.csv rename to leetcode/vk/three-months.csv diff --git a/vmware/all.csv b/leetcode/vmware/all.csv similarity index 100% rename from vmware/all.csv rename to leetcode/vmware/all.csv diff --git a/vmware/more-than-six-months.csv b/leetcode/vmware/more-than-six-months.csv similarity index 100% rename from vmware/more-than-six-months.csv rename to leetcode/vmware/more-than-six-months.csv diff --git a/walmart-labs/all.csv b/leetcode/walmart-labs/all.csv similarity index 100% rename from walmart-labs/all.csv rename to leetcode/walmart-labs/all.csv diff --git a/walmart-labs/more-than-six-months.csv b/leetcode/walmart-labs/more-than-six-months.csv similarity index 100% rename from walmart-labs/more-than-six-months.csv rename to leetcode/walmart-labs/more-than-six-months.csv diff --git a/walmart-labs/six-months.csv b/leetcode/walmart-labs/six-months.csv similarity index 100% rename from walmart-labs/six-months.csv rename to leetcode/walmart-labs/six-months.csv diff --git a/walmart-labs/thirty-days.csv b/leetcode/walmart-labs/thirty-days.csv similarity index 100% rename from walmart-labs/thirty-days.csv rename to leetcode/walmart-labs/thirty-days.csv diff --git a/walmart-labs/three-months.csv b/leetcode/walmart-labs/three-months.csv similarity index 100% rename from walmart-labs/three-months.csv rename to leetcode/walmart-labs/three-months.csv diff --git a/warnermedia/all.csv b/leetcode/warnermedia/all.csv similarity index 100% rename from warnermedia/all.csv rename to leetcode/warnermedia/all.csv diff --git a/warnermedia/more-than-six-months.csv b/leetcode/warnermedia/more-than-six-months.csv similarity index 100% rename from warnermedia/more-than-six-months.csv rename to leetcode/warnermedia/more-than-six-months.csv diff --git a/warnermedia/six-months.csv b/leetcode/warnermedia/six-months.csv similarity index 100% rename from warnermedia/six-months.csv rename to leetcode/warnermedia/six-months.csv diff --git a/warnermedia/three-months.csv b/leetcode/warnermedia/three-months.csv similarity index 100% rename from warnermedia/three-months.csv rename to leetcode/warnermedia/three-months.csv diff --git a/watchguard/all.csv b/leetcode/watchguard/all.csv similarity index 100% rename from watchguard/all.csv rename to leetcode/watchguard/all.csv diff --git a/watchguard/more-than-six-months.csv b/leetcode/watchguard/more-than-six-months.csv similarity index 100% rename from watchguard/more-than-six-months.csv rename to leetcode/watchguard/more-than-six-months.csv diff --git a/wayfair/all.csv b/leetcode/wayfair/all.csv similarity index 100% rename from wayfair/all.csv rename to leetcode/wayfair/all.csv diff --git a/wayfair/more-than-six-months.csv b/leetcode/wayfair/more-than-six-months.csv similarity index 100% rename from wayfair/more-than-six-months.csv rename to leetcode/wayfair/more-than-six-months.csv diff --git a/wayfair/six-months.csv b/leetcode/wayfair/six-months.csv similarity index 100% rename from wayfair/six-months.csv rename to leetcode/wayfair/six-months.csv diff --git a/waymo/all.csv b/leetcode/waymo/all.csv similarity index 100% rename from waymo/all.csv rename to leetcode/waymo/all.csv diff --git a/waymo/more-than-six-months.csv b/leetcode/waymo/more-than-six-months.csv similarity index 100% rename from waymo/more-than-six-months.csv rename to leetcode/waymo/more-than-six-months.csv diff --git a/waymo/six-months.csv b/leetcode/waymo/six-months.csv similarity index 100% rename from waymo/six-months.csv rename to leetcode/waymo/six-months.csv diff --git a/waymo/three-months.csv b/leetcode/waymo/three-months.csv similarity index 100% rename from waymo/three-months.csv rename to leetcode/waymo/three-months.csv diff --git a/wayve/all.csv b/leetcode/wayve/all.csv similarity index 100% rename from wayve/all.csv rename to leetcode/wayve/all.csv diff --git a/wayve/more-than-six-months.csv b/leetcode/wayve/more-than-six-months.csv similarity index 100% rename from wayve/more-than-six-months.csv rename to leetcode/wayve/more-than-six-months.csv diff --git a/wealthfront/all.csv b/leetcode/wealthfront/all.csv similarity index 100% rename from wealthfront/all.csv rename to leetcode/wealthfront/all.csv diff --git a/wealthfront/more-than-six-months.csv b/leetcode/wealthfront/more-than-six-months.csv similarity index 100% rename from wealthfront/more-than-six-months.csv rename to leetcode/wealthfront/more-than-six-months.csv diff --git a/wells-fargo/all.csv b/leetcode/wells-fargo/all.csv similarity index 100% rename from wells-fargo/all.csv rename to leetcode/wells-fargo/all.csv diff --git a/wells-fargo/more-than-six-months.csv b/leetcode/wells-fargo/more-than-six-months.csv similarity index 100% rename from wells-fargo/more-than-six-months.csv rename to leetcode/wells-fargo/more-than-six-months.csv diff --git a/weride/all.csv b/leetcode/weride/all.csv similarity index 100% rename from weride/all.csv rename to leetcode/weride/all.csv diff --git a/weride/more-than-six-months.csv b/leetcode/weride/more-than-six-months.csv similarity index 100% rename from weride/more-than-six-months.csv rename to leetcode/weride/more-than-six-months.csv diff --git a/weride/six-months.csv b/leetcode/weride/six-months.csv similarity index 100% rename from weride/six-months.csv rename to leetcode/weride/six-months.csv diff --git a/weride/three-months.csv b/leetcode/weride/three-months.csv similarity index 100% rename from weride/three-months.csv rename to leetcode/weride/three-months.csv diff --git a/western-digital/all.csv b/leetcode/western-digital/all.csv similarity index 100% rename from western-digital/all.csv rename to leetcode/western-digital/all.csv diff --git a/western-digital/six-months.csv b/leetcode/western-digital/six-months.csv similarity index 100% rename from western-digital/six-months.csv rename to leetcode/western-digital/six-months.csv diff --git a/whatfix/all.csv b/leetcode/whatfix/all.csv similarity index 100% rename from whatfix/all.csv rename to leetcode/whatfix/all.csv diff --git a/whatfix/more-than-six-months.csv b/leetcode/whatfix/more-than-six-months.csv similarity index 100% rename from whatfix/more-than-six-months.csv rename to leetcode/whatfix/more-than-six-months.csv diff --git a/whatnot/all.csv b/leetcode/whatnot/all.csv similarity index 100% rename from whatnot/all.csv rename to leetcode/whatnot/all.csv diff --git a/whatnot/more-than-six-months.csv b/leetcode/whatnot/more-than-six-months.csv similarity index 100% rename from whatnot/more-than-six-months.csv rename to leetcode/whatnot/more-than-six-months.csv diff --git a/whatnot/six-months.csv b/leetcode/whatnot/six-months.csv similarity index 100% rename from whatnot/six-months.csv rename to leetcode/whatnot/six-months.csv diff --git a/whatnot/three-months.csv b/leetcode/whatnot/three-months.csv similarity index 100% rename from whatnot/three-months.csv rename to leetcode/whatnot/three-months.csv diff --git a/winzo/all.csv b/leetcode/winzo/all.csv similarity index 100% rename from winzo/all.csv rename to leetcode/winzo/all.csv diff --git a/winzo/more-than-six-months.csv b/leetcode/winzo/more-than-six-months.csv similarity index 100% rename from winzo/more-than-six-months.csv rename to leetcode/winzo/more-than-six-months.csv diff --git a/wipro/all.csv b/leetcode/wipro/all.csv similarity index 100% rename from wipro/all.csv rename to leetcode/wipro/all.csv diff --git a/wipro/more-than-six-months.csv b/leetcode/wipro/more-than-six-months.csv similarity index 100% rename from wipro/more-than-six-months.csv rename to leetcode/wipro/more-than-six-months.csv diff --git a/wipro/six-months.csv b/leetcode/wipro/six-months.csv similarity index 100% rename from wipro/six-months.csv rename to leetcode/wipro/six-months.csv diff --git a/wipro/three-months.csv b/leetcode/wipro/three-months.csv similarity index 100% rename from wipro/three-months.csv rename to leetcode/wipro/three-months.csv diff --git a/wise/all.csv b/leetcode/wise/all.csv similarity index 100% rename from wise/all.csv rename to leetcode/wise/all.csv diff --git a/wise/more-than-six-months.csv b/leetcode/wise/more-than-six-months.csv similarity index 100% rename from wise/more-than-six-months.csv rename to leetcode/wise/more-than-six-months.csv diff --git a/wish/all.csv b/leetcode/wish/all.csv similarity index 100% rename from wish/all.csv rename to leetcode/wish/all.csv diff --git a/wish/more-than-six-months.csv b/leetcode/wish/more-than-six-months.csv similarity index 100% rename from wish/more-than-six-months.csv rename to leetcode/wish/more-than-six-months.csv diff --git a/wissen/all.csv b/leetcode/wissen/all.csv similarity index 100% rename from wissen/all.csv rename to leetcode/wissen/all.csv diff --git a/wissen/more-than-six-months.csv b/leetcode/wissen/more-than-six-months.csv similarity index 100% rename from wissen/more-than-six-months.csv rename to leetcode/wissen/more-than-six-months.csv diff --git a/wissen/six-months.csv b/leetcode/wissen/six-months.csv similarity index 100% rename from wissen/six-months.csv rename to leetcode/wissen/six-months.csv diff --git a/wissen/three-months.csv b/leetcode/wissen/three-months.csv similarity index 100% rename from wissen/three-months.csv rename to leetcode/wissen/three-months.csv diff --git a/wix/all.csv b/leetcode/wix/all.csv similarity index 100% rename from wix/all.csv rename to leetcode/wix/all.csv diff --git a/wix/more-than-six-months.csv b/leetcode/wix/more-than-six-months.csv similarity index 100% rename from wix/more-than-six-months.csv rename to leetcode/wix/more-than-six-months.csv diff --git a/wix/six-months.csv b/leetcode/wix/six-months.csv similarity index 100% rename from wix/six-months.csv rename to leetcode/wix/six-months.csv diff --git a/wix/three-months.csv b/leetcode/wix/three-months.csv similarity index 100% rename from wix/three-months.csv rename to leetcode/wix/three-months.csv diff --git a/workday/all.csv b/leetcode/workday/all.csv similarity index 100% rename from workday/all.csv rename to leetcode/workday/all.csv diff --git a/workday/more-than-six-months.csv b/leetcode/workday/more-than-six-months.csv similarity index 100% rename from workday/more-than-six-months.csv rename to leetcode/workday/more-than-six-months.csv diff --git a/workday/six-months.csv b/leetcode/workday/six-months.csv similarity index 100% rename from workday/six-months.csv rename to leetcode/workday/six-months.csv diff --git a/workday/three-months.csv b/leetcode/workday/three-months.csv similarity index 100% rename from workday/three-months.csv rename to leetcode/workday/three-months.csv diff --git a/works-applications/all.csv b/leetcode/works-applications/all.csv similarity index 100% rename from works-applications/all.csv rename to leetcode/works-applications/all.csv diff --git a/works-applications/more-than-six-months.csv b/leetcode/works-applications/more-than-six-months.csv similarity index 100% rename from works-applications/more-than-six-months.csv rename to leetcode/works-applications/more-than-six-months.csv diff --git a/worldquant/all.csv b/leetcode/worldquant/all.csv similarity index 100% rename from worldquant/all.csv rename to leetcode/worldquant/all.csv diff --git a/worldquant/more-than-six-months.csv b/leetcode/worldquant/more-than-six-months.csv similarity index 100% rename from worldquant/more-than-six-months.csv rename to leetcode/worldquant/more-than-six-months.csv diff --git a/worldquant/six-months.csv b/leetcode/worldquant/six-months.csv similarity index 100% rename from worldquant/six-months.csv rename to leetcode/worldquant/six-months.csv diff --git a/worldquant/three-months.csv b/leetcode/worldquant/three-months.csv similarity index 100% rename from worldquant/three-months.csv rename to leetcode/worldquant/three-months.csv diff --git a/woven-by-toyota/all.csv b/leetcode/woven-by-toyota/all.csv similarity index 100% rename from woven-by-toyota/all.csv rename to leetcode/woven-by-toyota/all.csv diff --git a/woven-by-toyota/six-months.csv b/leetcode/woven-by-toyota/six-months.csv similarity index 100% rename from woven-by-toyota/six-months.csv rename to leetcode/woven-by-toyota/six-months.csv diff --git a/xiaomi/all.csv b/leetcode/xiaomi/all.csv similarity index 100% rename from xiaomi/all.csv rename to leetcode/xiaomi/all.csv diff --git a/xing/all.csv b/leetcode/xing/all.csv similarity index 100% rename from xing/all.csv rename to leetcode/xing/all.csv diff --git a/xing/more-than-six-months.csv b/leetcode/xing/more-than-six-months.csv similarity index 100% rename from xing/more-than-six-months.csv rename to leetcode/xing/more-than-six-months.csv diff --git a/yahoo/all.csv b/leetcode/yahoo/all.csv similarity index 100% rename from yahoo/all.csv rename to leetcode/yahoo/all.csv diff --git a/yahoo/more-than-six-months.csv b/leetcode/yahoo/more-than-six-months.csv similarity index 100% rename from yahoo/more-than-six-months.csv rename to leetcode/yahoo/more-than-six-months.csv diff --git a/yahoo/six-months.csv b/leetcode/yahoo/six-months.csv similarity index 100% rename from yahoo/six-months.csv rename to leetcode/yahoo/six-months.csv diff --git a/yahoo/three-months.csv b/leetcode/yahoo/three-months.csv similarity index 100% rename from yahoo/three-months.csv rename to leetcode/yahoo/three-months.csv diff --git a/yandex/all.csv b/leetcode/yandex/all.csv similarity index 100% rename from yandex/all.csv rename to leetcode/yandex/all.csv diff --git a/yandex/more-than-six-months.csv b/leetcode/yandex/more-than-six-months.csv similarity index 100% rename from yandex/more-than-six-months.csv rename to leetcode/yandex/more-than-six-months.csv diff --git a/yandex/six-months.csv b/leetcode/yandex/six-months.csv similarity index 100% rename from yandex/six-months.csv rename to leetcode/yandex/six-months.csv diff --git a/yandex/thirty-days.csv b/leetcode/yandex/thirty-days.csv similarity index 100% rename from yandex/thirty-days.csv rename to leetcode/yandex/thirty-days.csv diff --git a/yandex/three-months.csv b/leetcode/yandex/three-months.csv similarity index 100% rename from yandex/three-months.csv rename to leetcode/yandex/three-months.csv diff --git a/yatra/all.csv b/leetcode/yatra/all.csv similarity index 100% rename from yatra/all.csv rename to leetcode/yatra/all.csv diff --git a/yatra/more-than-six-months.csv b/leetcode/yatra/more-than-six-months.csv similarity index 100% rename from yatra/more-than-six-months.csv rename to leetcode/yatra/more-than-six-months.csv diff --git a/yelp/all.csv b/leetcode/yelp/all.csv similarity index 100% rename from yelp/all.csv rename to leetcode/yelp/all.csv diff --git a/yelp/more-than-six-months.csv b/leetcode/yelp/more-than-six-months.csv similarity index 100% rename from yelp/more-than-six-months.csv rename to leetcode/yelp/more-than-six-months.csv diff --git a/yelp/six-months.csv b/leetcode/yelp/six-months.csv similarity index 100% rename from yelp/six-months.csv rename to leetcode/yelp/six-months.csv diff --git a/yelp/three-months.csv b/leetcode/yelp/three-months.csv similarity index 100% rename from yelp/three-months.csv rename to leetcode/yelp/three-months.csv diff --git a/yext/all.csv b/leetcode/yext/all.csv similarity index 100% rename from yext/all.csv rename to leetcode/yext/all.csv diff --git a/yext/more-than-six-months.csv b/leetcode/yext/more-than-six-months.csv similarity index 100% rename from yext/more-than-six-months.csv rename to leetcode/yext/more-than-six-months.csv diff --git a/zalando/all.csv b/leetcode/zalando/all.csv similarity index 100% rename from zalando/all.csv rename to leetcode/zalando/all.csv diff --git a/zalando/more-than-six-months.csv b/leetcode/zalando/more-than-six-months.csv similarity index 100% rename from zalando/more-than-six-months.csv rename to leetcode/zalando/more-than-six-months.csv diff --git a/zappos/all.csv b/leetcode/zappos/all.csv similarity index 100% rename from zappos/all.csv rename to leetcode/zappos/all.csv diff --git a/zappos/more-than-six-months.csv b/leetcode/zappos/more-than-six-months.csv similarity index 100% rename from zappos/more-than-six-months.csv rename to leetcode/zappos/more-than-six-months.csv diff --git a/zemoso/all.csv b/leetcode/zemoso/all.csv similarity index 100% rename from zemoso/all.csv rename to leetcode/zemoso/all.csv diff --git a/zemoso/more-than-six-months.csv b/leetcode/zemoso/more-than-six-months.csv similarity index 100% rename from zemoso/more-than-six-months.csv rename to leetcode/zemoso/more-than-six-months.csv diff --git a/zendesk/all.csv b/leetcode/zendesk/all.csv similarity index 100% rename from zendesk/all.csv rename to leetcode/zendesk/all.csv diff --git a/zendesk/more-than-six-months.csv b/leetcode/zendesk/more-than-six-months.csv similarity index 100% rename from zendesk/more-than-six-months.csv rename to leetcode/zendesk/more-than-six-months.csv diff --git a/zenefits/all.csv b/leetcode/zenefits/all.csv similarity index 100% rename from zenefits/all.csv rename to leetcode/zenefits/all.csv diff --git a/zenefits/more-than-six-months.csv b/leetcode/zenefits/more-than-six-months.csv similarity index 100% rename from zenefits/more-than-six-months.csv rename to leetcode/zenefits/more-than-six-months.csv diff --git a/zepto/all.csv b/leetcode/zepto/all.csv similarity index 100% rename from zepto/all.csv rename to leetcode/zepto/all.csv diff --git a/zepto/more-than-six-months.csv b/leetcode/zepto/more-than-six-months.csv similarity index 100% rename from zepto/more-than-six-months.csv rename to leetcode/zepto/more-than-six-months.csv diff --git a/zepto/six-months.csv b/leetcode/zepto/six-months.csv similarity index 100% rename from zepto/six-months.csv rename to leetcode/zepto/six-months.csv diff --git a/zeta-suite/all.csv b/leetcode/zeta-suite/all.csv similarity index 100% rename from zeta-suite/all.csv rename to leetcode/zeta-suite/all.csv diff --git a/zeta-suite/more-than-six-months.csv b/leetcode/zeta-suite/more-than-six-months.csv similarity index 100% rename from zeta-suite/more-than-six-months.csv rename to leetcode/zeta-suite/more-than-six-months.csv diff --git a/zeta/all.csv b/leetcode/zeta/all.csv similarity index 100% rename from zeta/all.csv rename to leetcode/zeta/all.csv diff --git a/zeta/more-than-six-months.csv b/leetcode/zeta/more-than-six-months.csv similarity index 100% rename from zeta/more-than-six-months.csv rename to leetcode/zeta/more-than-six-months.csv diff --git a/zeta/six-months.csv b/leetcode/zeta/six-months.csv similarity index 100% rename from zeta/six-months.csv rename to leetcode/zeta/six-months.csv diff --git a/zeta/thirty-days.csv b/leetcode/zeta/thirty-days.csv similarity index 100% rename from zeta/thirty-days.csv rename to leetcode/zeta/thirty-days.csv diff --git a/zeta/three-months.csv b/leetcode/zeta/three-months.csv similarity index 100% rename from zeta/three-months.csv rename to leetcode/zeta/three-months.csv diff --git a/zillow/all.csv b/leetcode/zillow/all.csv similarity index 100% rename from zillow/all.csv rename to leetcode/zillow/all.csv diff --git a/zillow/more-than-six-months.csv b/leetcode/zillow/more-than-six-months.csv similarity index 100% rename from zillow/more-than-six-months.csv rename to leetcode/zillow/more-than-six-months.csv diff --git a/zip/all.csv b/leetcode/zip/all.csv similarity index 100% rename from zip/all.csv rename to leetcode/zip/all.csv diff --git a/zip/more-than-six-months.csv b/leetcode/zip/more-than-six-months.csv similarity index 100% rename from zip/more-than-six-months.csv rename to leetcode/zip/more-than-six-months.csv diff --git a/zip/six-months.csv b/leetcode/zip/six-months.csv similarity index 100% rename from zip/six-months.csv rename to leetcode/zip/six-months.csv diff --git a/zip/three-months.csv b/leetcode/zip/three-months.csv similarity index 100% rename from zip/three-months.csv rename to leetcode/zip/three-months.csv diff --git a/ziprecruiter/all.csv b/leetcode/ziprecruiter/all.csv similarity index 100% rename from ziprecruiter/all.csv rename to leetcode/ziprecruiter/all.csv diff --git a/ziprecruiter/more-than-six-months.csv b/leetcode/ziprecruiter/more-than-six-months.csv similarity index 100% rename from ziprecruiter/more-than-six-months.csv rename to leetcode/ziprecruiter/more-than-six-months.csv diff --git a/zluri/all.csv b/leetcode/zluri/all.csv similarity index 100% rename from zluri/all.csv rename to leetcode/zluri/all.csv diff --git a/zluri/more-than-six-months.csv b/leetcode/zluri/more-than-six-months.csv similarity index 100% rename from zluri/more-than-six-months.csv rename to leetcode/zluri/more-than-six-months.csv diff --git a/zoho/all.csv b/leetcode/zoho/all.csv similarity index 100% rename from zoho/all.csv rename to leetcode/zoho/all.csv diff --git a/zoho/more-than-six-months.csv b/leetcode/zoho/more-than-six-months.csv similarity index 100% rename from zoho/more-than-six-months.csv rename to leetcode/zoho/more-than-six-months.csv diff --git a/zoho/six-months.csv b/leetcode/zoho/six-months.csv similarity index 100% rename from zoho/six-months.csv rename to leetcode/zoho/six-months.csv diff --git a/zoho/thirty-days.csv b/leetcode/zoho/thirty-days.csv similarity index 100% rename from zoho/thirty-days.csv rename to leetcode/zoho/thirty-days.csv diff --git a/zoho/three-months.csv b/leetcode/zoho/three-months.csv similarity index 100% rename from zoho/three-months.csv rename to leetcode/zoho/three-months.csv diff --git a/zomato/all.csv b/leetcode/zomato/all.csv similarity index 100% rename from zomato/all.csv rename to leetcode/zomato/all.csv diff --git a/zomato/more-than-six-months.csv b/leetcode/zomato/more-than-six-months.csv similarity index 100% rename from zomato/more-than-six-months.csv rename to leetcode/zomato/more-than-six-months.csv diff --git a/zomato/six-months.csv b/leetcode/zomato/six-months.csv similarity index 100% rename from zomato/six-months.csv rename to leetcode/zomato/six-months.csv diff --git a/zomato/three-months.csv b/leetcode/zomato/three-months.csv similarity index 100% rename from zomato/three-months.csv rename to leetcode/zomato/three-months.csv diff --git a/zoom/all.csv b/leetcode/zoom/all.csv similarity index 100% rename from zoom/all.csv rename to leetcode/zoom/all.csv diff --git a/zoom/more-than-six-months.csv b/leetcode/zoom/more-than-six-months.csv similarity index 100% rename from zoom/more-than-six-months.csv rename to leetcode/zoom/more-than-six-months.csv diff --git a/zoox/all.csv b/leetcode/zoox/all.csv similarity index 100% rename from zoox/all.csv rename to leetcode/zoox/all.csv diff --git a/zoox/more-than-six-months.csv b/leetcode/zoox/more-than-six-months.csv similarity index 100% rename from zoox/more-than-six-months.csv rename to leetcode/zoox/more-than-six-months.csv diff --git a/zoox/six-months.csv b/leetcode/zoox/six-months.csv similarity index 100% rename from zoox/six-months.csv rename to leetcode/zoox/six-months.csv diff --git a/zoox/three-months.csv b/leetcode/zoox/three-months.csv similarity index 100% rename from zoox/three-months.csv rename to leetcode/zoox/three-months.csv diff --git a/zopsmart/all.csv b/leetcode/zopsmart/all.csv similarity index 100% rename from zopsmart/all.csv rename to leetcode/zopsmart/all.csv diff --git a/zopsmart/more-than-six-months.csv b/leetcode/zopsmart/more-than-six-months.csv similarity index 100% rename from zopsmart/more-than-six-months.csv rename to leetcode/zopsmart/more-than-six-months.csv diff --git a/zopsmart/six-months.csv b/leetcode/zopsmart/six-months.csv similarity index 100% rename from zopsmart/six-months.csv rename to leetcode/zopsmart/six-months.csv diff --git a/zopsmart/three-months.csv b/leetcode/zopsmart/three-months.csv similarity index 100% rename from zopsmart/three-months.csv rename to leetcode/zopsmart/three-months.csv diff --git a/zs-associates/all.csv b/leetcode/zs-associates/all.csv similarity index 100% rename from zs-associates/all.csv rename to leetcode/zs-associates/all.csv diff --git a/zs-associates/more-than-six-months.csv b/leetcode/zs-associates/more-than-six-months.csv similarity index 100% rename from zs-associates/more-than-six-months.csv rename to leetcode/zs-associates/more-than-six-months.csv diff --git a/zs-associates/six-months.csv b/leetcode/zs-associates/six-months.csv similarity index 100% rename from zs-associates/six-months.csv rename to leetcode/zs-associates/six-months.csv diff --git a/zs-associates/three-months.csv b/leetcode/zs-associates/three-months.csv similarity index 100% rename from zs-associates/three-months.csv rename to leetcode/zs-associates/three-months.csv diff --git a/zscaler/all.csv b/leetcode/zscaler/all.csv similarity index 100% rename from zscaler/all.csv rename to leetcode/zscaler/all.csv diff --git a/zscaler/more-than-six-months.csv b/leetcode/zscaler/more-than-six-months.csv similarity index 100% rename from zscaler/more-than-six-months.csv rename to leetcode/zscaler/more-than-six-months.csv diff --git a/zscaler/six-months.csv b/leetcode/zscaler/six-months.csv similarity index 100% rename from zscaler/six-months.csv rename to leetcode/zscaler/six-months.csv diff --git a/zscaler/three-months.csv b/leetcode/zscaler/three-months.csv similarity index 100% rename from zscaler/three-months.csv rename to leetcode/zscaler/three-months.csv diff --git a/zynga/all.csv b/leetcode/zynga/all.csv similarity index 100% rename from zynga/all.csv rename to leetcode/zynga/all.csv diff --git a/zynga/more-than-six-months.csv b/leetcode/zynga/more-than-six-months.csv similarity index 100% rename from zynga/more-than-six-months.csv rename to leetcode/zynga/more-than-six-months.csv diff --git a/run-image.zsh b/run-image.zsh new file mode 100644 index 0000000..cb2e523 --- /dev/null +++ b/run-image.zsh @@ -0,0 +1 @@ +docker run -p 80:80 -p 443:443 -p 5164:5164 lcw-backend -e ASPNETCORE_ENVIRONMENT=Development -d \ No newline at end of file diff --git a/src/.dockerignore b/src/.dockerignore new file mode 100644 index 0000000..fe1152b --- /dev/null +++ b/src/.dockerignore @@ -0,0 +1,30 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md +!**/.gitignore +!.git/HEAD +!.git/config +!.git/packed-refs +!.git/refs/heads/** \ No newline at end of file diff --git a/src/Backend/Backend.csproj b/src/Backend/Backend.csproj new file mode 100644 index 0000000..2f72ea8 --- /dev/null +++ b/src/Backend/Backend.csproj @@ -0,0 +1,31 @@ +īģŋ + + + net8.0 + enable + enable + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Backend/Backend.csproj.user b/src/Backend/Backend.csproj.user new file mode 100644 index 0000000..9ff5820 --- /dev/null +++ b/src/Backend/Backend.csproj.user @@ -0,0 +1,6 @@ +īģŋ + + + https + + \ No newline at end of file diff --git a/src/Backend/Backend.http b/src/Backend/Backend.http new file mode 100644 index 0000000..9033100 --- /dev/null +++ b/src/Backend/Backend.http @@ -0,0 +1,6 @@ +@Backend_HostAddress = http://localhost:5164 + +GET {{Backend_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/src/Backend/Controllers/AdminController.cs b/src/Backend/Controllers/AdminController.cs new file mode 100644 index 0000000..f96406e --- /dev/null +++ b/src/Backend/Controllers/AdminController.cs @@ -0,0 +1,68 @@ + +namespace Backend.Controllers +{ + using Backend.Operations; + using Common.Managers; + using Microsoft.AspNetCore.Mvc; + + [ApiController] + [Route("api/admin")] + public class AdminController : ControllerBase + { + private readonly ILogger logger; + private readonly ScrapperRunner scrapperRunner; + + public AdminController(ILogger logger, ScrapperRunner scrapperRunner) + { + this.logger = logger; + this.scrapperRunner = scrapperRunner; + } + + [HttpGet] + [Route("scrappers/trigger/{scrapperId}")] + public ActionResult TriggerScrapperRun(string scrapperId) + { + // _ = Task.Run(async () => await scrapperRunner.RunScrapperAsync(scrapperId)); + return Ok($"[Dummy]: Scrapper run triggered for id: {scrapperId}"); + } + + [HttpPut] + [Route("scrappers/trigger/{scrapperId}")] + public ActionResult EnableScrapper(string scrapperId) + { + this.scrapperRunner.EnableScrapper(scrapperId); + return Ok($"Scrapper enabled for id: {scrapperId}"); + } + + [HttpDelete] + [Route("scrappers/trigger/{scrapperId}")] + public ActionResult DisableScrapper(string scrapperId) + { + this.scrapperRunner.DisableScrapper(scrapperId); + return Ok($"Scrapper disabled for id: {scrapperId}"); + } + + [HttpGet] + [Route("scrappers/background/start")] + public ActionResult StartScrappersInBackground() + { + this.scrapperRunner.StartBackgroundRunner(); + return Ok($"Background scrapper runs started. Current State: {this.scrapperRunner.CurrentState}"); + } + + [HttpGet] + [Route("scrappers/background/stop")] + public ActionResult StopScrappersInBackground() + { + this.scrapperRunner.StopBackgroundRunner(); + return Ok($"Background scrapper runs stopped. Current State: {this.scrapperRunner.CurrentState}"); + } + + [HttpGet] + [Route("scrappers/background/status")] + public ActionResult GetScrappersInBackgroundStatus() + { + return Ok(this.scrapperRunner.GetStatus()); + } + } +} \ No newline at end of file diff --git a/src/Backend/Controllers/JobSearchController.cs b/src/Backend/Controllers/JobSearchController.cs new file mode 100644 index 0000000..3d57f86 --- /dev/null +++ b/src/Backend/Controllers/JobSearchController.cs @@ -0,0 +1,50 @@ +namespace Backend.Controllers +{ + using Backend.Operations; + using Microsoft.AspNetCore.Mvc; + using Common.Models.Public; + using Common.Repositories; + using System.Threading.Tasks; + using Common.Managers; + using Common.Engines; + using Common.Queries; + using Common.DatabaseModels; + + [ApiController] + [Route("api/jobs")] + public class JobSearchController : ControllerBase + { + private readonly JobDataProvider jobDataProvider; + private readonly ILogger logger; + public JobSearchController(JobDataProvider jobDataProvider, ILogger logger) + { + this.logger = logger; + this.jobDataProvider = jobDataProvider; + } + + [HttpPost] + [Route("search")] + public async Task>> SearchJobs([FromBody] JobQuery jobquery) + { + return await this.jobDataProvider.GetJobsAsync(jobquery); + } + + [HttpGet] + [Route("latest")] + public async Task> GetLatestJobsFromDb( + [FromQuery] string location = "India", + [FromQuery] string level = "Mid", + [FromQuery] int days = 3) + { + var jobList = await this.jobDataProvider.GetJobsAsync(location, days, level); + return Content(JobListView.RenderScrappedJobsHtml(jobList), "text/html"); + } + + [HttpGet] + [Route("lastOneDay")] + public async Task> GetLastOneDayJobsFromDb() + { + return Ok(await this.jobDataProvider.GetAllJobsAsync(1)); + } + } +} \ No newline at end of file diff --git a/src/Backend/Controllers/ProblemsController.cs b/src/Backend/Controllers/ProblemsController.cs new file mode 100644 index 0000000..954c9ee --- /dev/null +++ b/src/Backend/Controllers/ProblemsController.cs @@ -0,0 +1,66 @@ +namespace Backend.Controllers +{ + using Backend.Filters; + using Common.Models.Public; + using Backend.Operations; + using Common.Models; + using Microsoft.AspNetCore.Mvc; + + [ApiController] + [Route("api")] + public class ProblemsController : ControllerBase + { + private readonly ILogger logger; + private readonly IConfiguration configuration; + private readonly DataProvider dataProvider; + public ProblemsController(ILogger logger, + DataProvider dataProvider, + IConfiguration configuration) + { + this.logger = logger; + this.dataProvider = dataProvider; + this.configuration = configuration; + } + + [HttpGet] + [Route("")] + public ActionResult GetHome() + { + return Ok("Leetcode Wrapper Backend is running."); + } + + [HttpGet] + [Route("problems")] + public async Task>> GetProblems( + [FromQuery(Name = QueryParam.Skip)] int skip = 0, + [FromQuery(Name = QueryParam.Limit)] int limit = 50, + [FromQuery(Name = QueryParam.Shuffle)] int shuffle = -1, + [FromQuery(Name = QueryParam.Company)] List? companies = null, + [FromQuery(Name = QueryParam.Difficulty)] List? difficulties = null, + [FromQuery(Name = QueryParam.Tag)] List? tags = null) + { + var filter = new ProblemFilter(skip, limit, shuffle, companies, difficulties, tags); + var filteredProblems = await dataProvider.GetProblemsAsync(filter); + return Ok(filteredProblems); + } + + [HttpGet] + [Route("problems-metadata")] + public async Task> GetProblemsMetadata() + { + return Ok(await dataProvider.GetProblemsMetadataAsync()); + } + + [HttpGet] + [Route("problems/{id}")] + public async Task> GetProblems(string id) + { + var problem = await dataProvider.GetProblemByIdAsync(id); + if (problem != null) + { + return Ok(problem); + } + return NotFound($"Problem {id} not found."); + } + } +} \ No newline at end of file diff --git a/src/Backend/Controllers/ScrapperSettingsController.cs b/src/Backend/Controllers/ScrapperSettingsController.cs new file mode 100644 index 0000000..4192716 --- /dev/null +++ b/src/Backend/Controllers/ScrapperSettingsController.cs @@ -0,0 +1,64 @@ +īģŋusing Common.DatabaseModels; +using Common.Engines; +using Common.Managers; +using Common.Models; +using Common.Models.Public; +using Common.Repositories; +using Microsoft.AspNetCore.Mvc; + +namespace Backend.Controllers +{ + [ApiController] + [Route("api/jobs/scrappers")] + public class ScrapperSettingsController : ControllerBase + { + private readonly JobScrapperSettingsManager _settingsManager; + + private readonly ILogger _logger; + + public ScrapperSettingsController(JobScrapperSettingsManager jobScrapperSettingsManager, + ILogger logger) + { + _settingsManager = jobScrapperSettingsManager; + _logger = logger; + } + + [HttpGet] + [Route("")] + public async Task>> GetAllJobScrappers() + { + // Placeholder implementation for getting all scrappers + return Ok(await _settingsManager.GetAllSettings()); + } + + [HttpPut] + [Route("{id}")] + public async Task> UpdateJobScrapperSettings(string id, [FromBody] ScrapperSettings settings) + { + try + { + return Ok(await _settingsManager.CreateOrUpdateSettings(id, settings)); + } + catch (InvalidOperationException ex) + { + return BadRequest(ex.Message); + } + } + + [HttpPost] + [Route("add")] + public async Task> CreateNewJobScrapperSettings([FromBody] ScrapperSettings settings) + { + return BadRequest("Use PUT api/jobs/scrappers/{id} to create or update scrapper settings."); + // return Ok(await _settingsManager.CreateOrUpdateSettings(string.Empty, settings)); + } + + [HttpGet] + [Route("{id}")] + public async Task> GetJobScrapperSettings(string id) + { + // Placeholder implementation for getting scrapper settings + return Ok(await _settingsManager.GetSettingsById(id)); + } + } +} diff --git a/src/Backend/Docs/NextPlanOfAction.md b/src/Backend/Docs/NextPlanOfAction.md new file mode 100644 index 0000000..c782975 --- /dev/null +++ b/src/Backend/Docs/NextPlanOfAction.md @@ -0,0 +1,8 @@ +## Next Plans +1. **Create functions for async updates for Jobs backend** +2. **Integrate Redis for fast retreival** +3. **Notification System upon new Job post arrival** + 3.1. **Will require integration to some async framework.** + 3.2. **Using Servicebus can be costly might use some other message broker** +4. **Custom tracing framework using Prometheus and Grafana (learning purpose)** +5. **Make the system scalable enough to register a new scraping source easily** \ No newline at end of file diff --git a/src/Backend/Filters/ProblemFilter.cs b/src/Backend/Filters/ProblemFilter.cs new file mode 100644 index 0000000..1af746d --- /dev/null +++ b/src/Backend/Filters/ProblemFilter.cs @@ -0,0 +1,66 @@ +using Common; +using Common.Models; + +namespace Backend.Filters +{ + public class ProblemFilter : IFilter + { + private int skip = 0; + private int limit = 50; + private int shuffle = -1; + private List companies; + private List difficulties; + private List tags; + + public ProblemFilter(int skip, int limit, int shuffle, List? companies, List? difficulties, List? tags) + { + this.skip = skip; + this.limit = Math.Min(limit, 50); + this.shuffle = shuffle; + this.companies = companies ?? new List(); + this.difficulties = difficulties ?? new List(); + this.tags = tags ?? new List(); + } + + public List ApplyFilterAsync(List problems) + { + List filteredProblems = problems; + + // TODO: Add tags filtering logic with company + if (companies != null && companies.Count > 0 || tags != null && tags.Count > 0) + { + filteredProblems = filteredProblems.Where( + p => p.companies != null && + p.companies.Any(kv => + (companies == null || companies.Count == 0 || companies.Contains(kv.Key, StringComparer.OrdinalIgnoreCase)) && + kv.Value.Any(t => tags == null || tags.Count == 0 || tags.Contains(t, StringComparer.OrdinalIgnoreCase)))).ToList(); + } + + if (difficulties != null && difficulties.Count > 0) + { + filteredProblems = filteredProblems.Where(p => difficulties.Contains(p.difficulty)).ToList(); + } + + if (shuffle != -1) + { + Shuffle(filteredProblems, this.shuffle); + } + + filteredProblems = filteredProblems.Skip(skip).Take(limit).ToList(); + + return filteredProblems; + } + + private static void Shuffle(IList list, int seed) + { + Random rng = new Random(seed); + int n = list.Count; + while (n > 1) + { + n--; + int k = rng.Next(n + 1); + (list[n], list[k]) = (list[k], list[n]); + } + } + } +} \ No newline at end of file diff --git a/src/Backend/Operations/DataProvider.cs b/src/Backend/Operations/DataProvider.cs new file mode 100644 index 0000000..55bd888 --- /dev/null +++ b/src/Backend/Operations/DataProvider.cs @@ -0,0 +1,79 @@ +namespace Backend.Operations +{ + using Backend.Filters; + using Common; + using Common.Cache; + using Common.Constants; + using Common.Models; + + public class DataProvider + { + private ICache _problemCache; + private ILogger _logger; + private List companyTags = new List(); + private DateTime lastMetadataFetchTime = DateTime.MinValue; + public DataProvider([FromKeyedServices(CacheConstants.ProblemCacheKey)] ICache problemCache, ILogger logger) + { + _problemCache = problemCache; + _logger = logger; + } + + public async Task> GetProblemsMetadataAsync() + { + if (companyTags == null || companyTags.Count == 0 || lastMetadataFetchTime < DateTime.UtcNow.AddDays(14)) + { + var allProblems = await GetAllProblemsAsync(); + var companySet = new HashSet(StringComparer.OrdinalIgnoreCase); + foreach (var problem in allProblems.Values) + { + if (problem.companies != null) + { + foreach (var company in problem.companies) + { + companySet.Add(company.Key); + } + } + } + lastMetadataFetchTime = DateTime.UtcNow; + companyTags = companySet?.ToList() ?? new List(); + } + + return companyTags; + } + + public async Task> GetProblemsAsync(IFilter? filter = null) + { + var allProblems = await GetAllProblemsAsync(); + if (filter != null) + { + return filter.ApplyFilterAsync(allProblems.Values.ToList()); + } + return allProblems.Values.ToList(); + } + + public async Task GetProblemByIdAsync(string id) + { + var allProblems = await GetAllProblemsAsync(); + if (allProblems.TryGetValue(id, out var problem)) + { + return problem; + } + return null; + } + + private async Task> GetAllProblemsAsync() + { + if (_problemCache.Contains(CacheConstants.ProblemCacheKey)) + { + _logger.LogInformation("Problem cache hit. Retrieving data from cache."); + } + else + { + _logger.LogInformation("Problem cache miss. Loading data into cache."); + await _problemCache.Populate(); + } + + return _problemCache.Get>(CacheConstants.ProblemCacheKey) ?? new Dictionary(StringComparer.OrdinalIgnoreCase); + } + } +} \ No newline at end of file diff --git a/src/Backend/Operations/JobDataProvider.cs b/src/Backend/Operations/JobDataProvider.cs new file mode 100644 index 0000000..05aed99 --- /dev/null +++ b/src/Backend/Operations/JobDataProvider.cs @@ -0,0 +1,78 @@ +namespace Backend.Operations +{ + using System.ComponentModel; + using Common.Cache; + using Common.DatabaseModels; + using Common.Queries; + using Common.Repositories; + + public class JobDataProvider + { + private readonly ILogger _logger; + private readonly JobsRepository _jobsRepository; + + private TimeSpan cacheDuration = TimeSpan.FromMinutes(15); + private Memca cache; + + public JobDataProvider(ILogger logger, JobsRepository jobsRepository) + { + _logger = logger; + _jobsRepository = jobsRepository; + this.cache = new Memca(this.cacheDuration); + } + + public async Task> GetJobsAsync(string jobLocation, int lookbackdays, string level) + { + var filteredJobs = await GetRecentJobsAsync(jobLocation, lookbackdays); + + if (!string.IsNullOrEmpty(level)) + { + filteredJobs = filteredJobs.Where(j => j.jobType.ToLower().Contains(level.ToLower())).ToList(); + } + + return filteredJobs; + } + + public async Task> GetJobsAsync(JobQuery jobquery) + { + return await this._jobsRepository.GetJobsFromQuery(jobquery); + } + + public async Task> GetAllJobsAsync(int lookbackdays = 1) + { + var allJobs = await GetAllLatestJobsAsync(); + allJobs = allJobs.Where(j => j.scrappedTime >= DateTime.UtcNow.AddDays(-lookbackdays)).ToList(); + return allJobs; + } + + private async Task> GetRecentJobsAsync(string location = "india", int lookbackdays = 3) + { + string cacheKey = $"jobs_{location}_{lookbackdays}"; + if (this.cache.Get>(cacheKey) is List cachedJobs) + { + _logger.LogInformation($"Cache hit for key: {cacheKey}"); + return cachedJobs; + } + + _logger.LogInformation($"Cache miss for key: {cacheKey}. Fetching from database."); + var jobs = await _jobsRepository.GetJobsAsync(location, lookbackdays); + this.cache.Set(cacheKey, jobs, this.cacheDuration); + return jobs; + } + + private async Task> GetAllLatestJobsAsync() + { + string cacheKey = $"all_jobs_latest"; + if (this.cache.Get>(cacheKey) is List cachedJobs) + { + _logger.LogInformation($"Cache hit for key: {cacheKey}"); + return cachedJobs; + } + + _logger.LogInformation($"Cache miss for key: {cacheKey}. Fetching from database."); + var jobs = await _jobsRepository.GetAllLatestJobsAsync(); + this.cache.Set(cacheKey, jobs, this.cacheDuration); + return jobs; + } + } +} \ No newline at end of file diff --git a/src/Backend/Operations/ScrapperRunner.cs b/src/Backend/Operations/ScrapperRunner.cs new file mode 100644 index 0000000..e15faf3 --- /dev/null +++ b/src/Backend/Operations/ScrapperRunner.cs @@ -0,0 +1,130 @@ +using System.Collections.Concurrent; +using System.Dynamic; +using System.Text; +using Common.Engines; +using Common.Managers; +using Common.Repositories; + +namespace Backend.Operations +{ + public class ScrapperRunner + { + ILogger logger; + GSEngine gsEngine; + AIEngine aiEngine; + JobsRepository jobsRepository; + JobScrapperSettingsManager settingsManager; + + private ConcurrentBag enabledScrappers = new ConcurrentBag(); + private TimeSpan runInterval = TimeSpan.FromHours(3); + private CancellationTokenSource cts = new CancellationTokenSource(); + private Task? backgroundTask = null; + public string CurrentState => backgroundTask != null && !backgroundTask.IsCompleted ? "Running" : "Stopped"; + + private string LastError = string.Empty; + private DateTime lastRunTime = DateTime.MinValue; + private ConcurrentDictionary lastRunResults = new ConcurrentDictionary(); + + public ScrapperRunner(ILogger logger, JobScrapperSettingsManager settingsManager, GSEngine gSEngine, AIEngine aIEngine, JobsRepository jobsRepository) + { + this.logger = logger; + this.gsEngine = gSEngine; + this.aiEngine = aIEngine; + this.jobsRepository = jobsRepository; + this.settingsManager = settingsManager; + } + + public void EnableScrapper(string scrapperId) + { + if (!enabledScrappers.Contains(scrapperId)) + { + enabledScrappers.Add(scrapperId); + } + } + + public void DisableScrapper(string scrapperId) + { + enabledScrappers = new ConcurrentBag(enabledScrappers.Except(new List { scrapperId })); + } + + + public async Task RunScrapperAsync(string scrapperId) + { + var settings = await this.settingsManager.GetSettingsById(scrapperId); + if (settings == null) + { + logger.LogWarning($"Scrapper settings not found for id: {scrapperId}. Skipping scrapper run."); + this.lastRunResults[scrapperId] = $"[{DateTime.Now}] Settings not found."; + return; + } + + try + { + var scrapper = new JobScrapper(gsEngine, aiEngine, jobsRepository, logger); + scrapper.ConfigureSettings(settings); + var res = await scrapper.RunAsync(); + logger.LogInformation($"Scrapper run completed for id: {scrapperId} | Results: {res}"); + settings.lastRunTime = DateTime.UtcNow; + this.lastRunResults[scrapperId] = $"[{DateTime.Now}] {res}"; + await this.settingsManager.UpdateSettingsAsync(scrapperId, settings); + } + catch (Exception ex) + { + logger.LogError($"Error running scrapper for id: {scrapperId}. Exception: {ex}"); + this.LastError = ex.Message; + } + } + + public void StartBackgroundRunner() + { + if (backgroundTask == null || backgroundTask.IsCompleted) + { + cts = new CancellationTokenSource(); + backgroundTask = RunInBackgroundAsync(cts.Token); + } + } + + public void StopBackgroundRunner() + { + if (cts != null && !cts.IsCancellationRequested) + { + cts.Cancel(); + } + } + + public dynamic GetStatus() + { + dynamic status = new ExpandoObject(); + var dict = (IDictionary)status; + + dict["CurrentState"] = this.CurrentState; + dict["AIEngineReady"] = this.aiEngine?.IsReady() ?? false; + dict["RunInterval"] = this.runInterval; + dict["LastRunTimeUtc"] = this.lastRunTime; + dict["EnabledScrappers"] = this.enabledScrappers.ToArray(); + // copy concurrent dictionary to a normal dictionary for safe enumeration / serialization + dict["LastResults"] = this.lastRunResults.ToDictionary(kv => kv.Key, kv => kv.Value); + dict["LastError"] = this.LastError; + + return status; + } + + private async Task RunInBackgroundAsync(CancellationToken cancellationToken) + { + TimeSpan checkInterval = TimeSpan.FromMinutes(5); + while (!cancellationToken.IsCancellationRequested) + { + if (DateTime.UtcNow - lastRunTime > runInterval) + { + foreach (var scrapperId in enabledScrappers) + { + logger.LogInformation($"Starting scrapper run for id: {scrapperId}"); + await RunScrapperAsync(scrapperId); + } + lastRunTime = DateTime.UtcNow; + } + await Task.Delay(checkInterval, cancellationToken); + } + } + } +} \ No newline at end of file diff --git a/src/Backend/Program.cs b/src/Backend/Program.cs new file mode 100644 index 0000000..44cde0f --- /dev/null +++ b/src/Backend/Program.cs @@ -0,0 +1,132 @@ +namespace Backend; + +using Backend.Operations; +using Common.Cache; +using Common.Constants; +using Common.Engines; +using Common.Factories; +using Common.Managers; +using Common.Repositories; +using Microsoft.Azure.Cosmos; +using Microsoft.Extensions.Logging.ApplicationInsights; +using System.Data; + +public class Program +{ + private static void SetupLogging(ILoggingBuilder logging, IConfiguration configuration) + { + logging.ClearProviders(); + logging.AddApplicationInsights( + configureTelemetryConfiguration: (config) => config.ConnectionString = configuration["ApplicationInsights:ConnectionString"], + configureApplicationInsightsLoggerOptions: (options) => { } + ); + + var appLogLevelSettings = configuration.GetSection("ApplicationInsights"); + var defaultLogLevel = appLogLevelSettings.GetValue("LogLevel:Default", LogLevel.Information); + Console.WriteLine($"Setting log level for Default to {defaultLogLevel}"); + + logging.AddFilter("", defaultLogLevel); + + foreach (var kvp in appLogLevelSettings.GetSection("LogLevel").AsEnumerable()) + { + if (Enum.TryParse(kvp.Value, out var logLevel)) + { + logging.AddFilter(kvp.Key.Split(":").Last(), logLevel); + } + } + } + + public static void Main(string[] args) + { + var builder = WebApplication.CreateBuilder(args); + var services = builder.Services; + + // Add services to the container. + builder.Services.AddApplicationInsightsTelemetry(); + builder.Services.AddControllers(); + + // Add CORS + builder.Services.AddCors(options => + { + options.AddPolicy("AllowReactApp", + builder => builder + .AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader()); + }); + + SetupLogging(builder.Logging, builder.Configuration); + + if (builder.Environment.IsDevelopment()) + { + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(c => + { + c.CustomSchemaIds(type => type.FullName); + }); + + builder.Logging.AddConsole(); + } + + var config = builder.Configuration; + + #region Register Cosmos related services + services.AddSingleton(s => + { + var cosmosDbUri = config[ConfigurationConstants.CosmosDBUriKey]; + var cosmosDbAccountKey = config[ConfigurationConstants.CosmosDBAccountKey]; + if (string.IsNullOrEmpty(cosmosDbUri) || string.IsNullOrEmpty(cosmosDbAccountKey)) + { + throw new DataException("Cosmos DB configuration is missing or invalid."); + } + return new CosmosClient(cosmosDbUri, cosmosDbAccountKey); + }); + + services.AddTransient(); + #endregion + + #region Register Cache + services.AddKeyedSingleton(CacheConstants.ProblemCacheKey); + #endregion + + #region Register Repositories + services.AddTransient(); + #endregion + + #region Register Miscellaneous Services + services.AddTransient(); + #endregion + + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + var app = builder.Build(); + ILogger logger = app.Logger; + + logger.LogInformation($"Backend started at {DateTime.UtcNow}"); + + // Configure the HTTP request pipeline. + if (app.Environment.IsDevelopment()) + { + app.UseSwagger(); + app.UseSwaggerUI(); + } + + // Commenting out HTTPS redirection to allow HTTP + // app.UseHttpsRedirection(); + + // Use CORS before other middleware + app.UseCors("AllowReactApp"); + + app.UseAuthorization(); + + app.MapControllers(); + + app.Run(); + } +} diff --git a/src/Backend/Properties/launchSettings.json b/src/Backend/Properties/launchSettings.json new file mode 100644 index 0000000..8b6a653 --- /dev/null +++ b/src/Backend/Properties/launchSettings.json @@ -0,0 +1,51 @@ +īģŋ{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:6270", + "sslPort": 44366 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5164", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7060;http://localhost:5164", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "container": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://0.0.0.0:5164", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/Backend/Views/JobListView.cs b/src/Backend/Views/JobListView.cs new file mode 100644 index 0000000..d1fdff1 --- /dev/null +++ b/src/Backend/Views/JobListView.cs @@ -0,0 +1,54 @@ +using System.Text; +using Common.DatabaseModels; + +public static class JobListView +{ + public static string RenderScrappedJobsHtml(List jobs) + { + var sb = new StringBuilder(); + + sb.AppendLine(""); + sb.AppendLine(""); + sb.AppendLine(""); + sb.AppendLine(""); + sb.AppendLine(""); + sb.AppendLine("Scrapped Jobs"); + sb.AppendLine(@""); + sb.AppendLine(""); + sb.AppendLine(""); + sb.AppendLine("

Scrapped Job Listings

"); + + foreach (var job in jobs) + { + sb.AppendLine("
"); + sb.AppendLine($" "); + sb.AppendLine($"
{System.Net.WebUtility.HtmlEncode(job.companyName ?? "Unknown")} — {System.Net.WebUtility.HtmlEncode(job.location ?? "N/A")}
"); + sb.AppendLine($"
{System.Net.WebUtility.HtmlEncode(job.snippet ?? "No description available.")}
"); + + if (job.tags != null && job.tags.Count > 0) + { + sb.AppendLine("
"); + foreach (var tag in job.tags) + sb.AppendLine($"{System.Net.WebUtility.HtmlEncode(tag)}"); + sb.AppendLine("
"); + } + + sb.AppendLine($" "); + sb.AppendLine($"
Scrapped: {job.scrappedTime:yyyy-MM-dd HH:mm}
"); + sb.AppendLine("
"); + } + + sb.AppendLine(""); + + return sb.ToString(); + } +} diff --git a/src/Backend/appsettings.Development.json b/src/Backend/appsettings.Development.json new file mode 100644 index 0000000..ff66ba6 --- /dev/null +++ b/src/Backend/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/Backend/appsettings.json b/src/Backend/appsettings.json new file mode 100644 index 0000000..d7bf0c3 --- /dev/null +++ b/src/Backend/appsettings.json @@ -0,0 +1,31 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "ApplicationSettings": { + "Name": "leetcode-wrapper", + "Version": "1.0.0", + "CosmosDbUri": "https://lcw-cosmos.documents.azure.com:443/", + "AccountKey": "", + "LCProject:DatabaseName": "LeetCodeWrapper", + "LCProject:ContainerName": "Problems", + "JobProject:DatabaseName": "JobDataBase", + "JobProject:ContainerName": "JobDetailsContainer", + "JobProject:ScraperContainerName": "ScrapperSettingsContainer" + }, + "ApplicationInsights": { + "LogLevel": { + "Default": "Trace", + "Microsoft": "Warning" + }, + "ConnectionString": "" + }, + "GoogleSearch": { + "ApiKey": "", + "SearchEngineId": "e509d21f7c4af4d2c" + }, + "AllowedHosts": "*" +} diff --git a/src/Common/Cache/BaseCache.cs b/src/Common/Cache/BaseCache.cs new file mode 100644 index 0000000..5337506 --- /dev/null +++ b/src/Common/Cache/BaseCache.cs @@ -0,0 +1,71 @@ +īģŋusing System; +using System.Collections.Concurrent; +using System.Threading.Tasks; + +namespace Common.Cache +{ + public abstract class BaseCache : ICache + { + // Internal cache storage + protected readonly ConcurrentDictionary _cache = new(); + + // Represents a cache item with optional expiration + protected class CacheItem + { + public object? Value { get; set; } + public DateTime? Expiration { get; set; } + } + + public T? Get(string key) + { + if (_cache.TryGetValue(key, out var item)) + { + if (item.Expiration == null || item.Expiration > DateTime.UtcNow) + { + return item.Value is T value ? value : default; + } + // Item expired, remove it + _cache.TryRemove(key, out _); + } + return default; + } + + public void Set(string key, T value, TimeSpan? absoluteExpiration = null) + { + var expiration = absoluteExpiration.HasValue + ? DateTime.UtcNow.Add(absoluteExpiration.Value) + : (DateTime?)null; + + _cache[key] = new CacheItem + { + Value = value, + Expiration = expiration + }; + } + + public void Remove(string key) + { + _cache.TryRemove(key, out _); + } + + public bool Contains(string key) + { + if (_cache.TryGetValue(key, out var item)) + { + if (item.Expiration == null || item.Expiration > DateTime.UtcNow) + { + return true; + } + // Item expired, remove it + _cache.TryRemove(key, out _); + } + return false; + } + + /// + /// Populates the cache using a custom technique. + /// Override this method in derived classes for custom population logic. + /// + public abstract Task Populate(); + } +} \ No newline at end of file diff --git a/src/Common/Cache/ICache.cs b/src/Common/Cache/ICache.cs new file mode 100644 index 0000000..56d36d2 --- /dev/null +++ b/src/Common/Cache/ICache.cs @@ -0,0 +1,42 @@ +īģŋusing System; + +namespace Common.Cache +{ + public interface ICache + { + /// + /// Gets a cached item by key. + /// + /// Type of the cached item. + /// The cache key. + /// The cached item, or default if not found. + T? Get(string key); + + /// + /// Adds or updates an item in the cache. + /// + /// Type of the item. + /// The cache key. + /// The value to cache. + /// Optional absolute expiration time. + void Set(string key, T value, TimeSpan? absoluteExpiration = null); + + /// + /// Removes an item from the cache. + /// + /// The cache key. + void Remove(string key); + + /// + /// Checks if a key exists in the cache. + /// + /// The cache key. + /// True if the key exists, otherwise false. + bool Contains(string key); + + /// + /// Populates the cache using a custom technique defined by the implementing class. + /// + Task Populate(); + } +} \ No newline at end of file diff --git a/src/Common/Cache/Memca.cs b/src/Common/Cache/Memca.cs new file mode 100644 index 0000000..75feeb3 --- /dev/null +++ b/src/Common/Cache/Memca.cs @@ -0,0 +1,39 @@ +namespace Common.Cache +{ + using System.Runtime.Caching; + public class Memca + { + private MemoryCache cache; + private readonly TimeSpan defaultExpiryDuration; + + public Memca(TimeSpan defaultExpiryDuration) + { + this.cache = MemoryCache.Default; + this.defaultExpiryDuration = defaultExpiryDuration; + } + + public T? Get(string key) + { + return (T?)this.cache.Get(key); + } + + public void Set(string key, T value, TimeSpan? absoluteExpiration = null) + { + var policy = new CacheItemPolicy(); + if (absoluteExpiration.HasValue) + { + policy.AbsoluteExpiration = DateTimeOffset.Now.Add(absoluteExpiration.Value); + } + else + { + policy.AbsoluteExpiration = DateTimeOffset.Now.Add(this.defaultExpiryDuration); + } + this.cache.Set(key, value, policy); + } + + public void Remove(string key) + { + this.cache.Remove(key); + } + } +} diff --git a/src/Common/Cache/ProblemCache.cs b/src/Common/Cache/ProblemCache.cs new file mode 100644 index 0000000..37c2211 --- /dev/null +++ b/src/Common/Cache/ProblemCache.cs @@ -0,0 +1,77 @@ +īģŋ +using Common.Constants; +using Common.Models; +using Common.Repositories; +using Microsoft.Azure.Cosmos; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Common.Cache +{ + public class ProblemCache : BaseCache + { + private const int RefreshIntervalInHours = 3; + private readonly IConfiguration configuration; + private readonly IProblemRepository problemRepository; + ILogger logger; + private DateTime lastLoadedTime = DateTime.MinValue; + private Dictionary problemsCache = new Dictionary(StringComparer.OrdinalIgnoreCase); + + public ProblemCache(IProblemRepository problemRepository, IConfiguration configuration, ILogger logger) + { + this.problemRepository = problemRepository; + this.configuration = configuration; + this.logger = logger; + Task.Run(() => this.StartBackgroundRefreshAsync(CancellationToken.None)); + } + + public async override Task Populate() + { + await LoadLatestDataAsync(); + // Ideally we should just make a call to redi here and return the data. + Set>(CacheConstants.ProblemCacheKey, problemsCache); + return; + } + + + private async Task LoadLatestDataAsync() + { + int maxRetries = 3; + for (int i = 0; i < maxRetries; i++) + { + try + { + var results = await problemRepository.GetAllProblemsAsync(); + lastLoadedTime = DateTime.UtcNow; + results = results.OrderBy(p => int.TryParse(p.id, out int id) ? id : -1).ToList(); + problemsCache = results.ToDictionary(p => p.id, StringComparer.OrdinalIgnoreCase); + this.logger.LogInformation($"Loaded {problemsCache.Count} problems from Cosmos DB at {lastLoadedTime}"); + break; + } + catch (Exception ex) + { + this.logger.LogError($"Error loading data from Cosmos DB. {ex}"); + await Task.Delay(TimeSpan.FromSeconds(2 * (i + 1))); + } + } + } + + private async Task StartBackgroundRefreshAsync(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + try + { + await LoadLatestDataAsync(); + } + catch (Exception ex) + { + this.logger.LogError($"Error during background data refresh: {ex}"); + } + + await Task.Delay(TimeSpan.FromHours(RefreshIntervalInHours), cancellationToken); + } + } + + } +} diff --git a/src/Common/Common.csproj b/src/Common/Common.csproj new file mode 100644 index 0000000..39ee69e --- /dev/null +++ b/src/Common/Common.csproj @@ -0,0 +1,22 @@ +īģŋ + + + Library + net8.0 + enable + enable + + + + + + + + + + + + + + + diff --git a/src/Common/Constants/CacheConstants.cs b/src/Common/Constants/CacheConstants.cs new file mode 100644 index 0000000..28f2b63 --- /dev/null +++ b/src/Common/Constants/CacheConstants.cs @@ -0,0 +1,13 @@ +īģŋusing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Common.Constants +{ + public class CacheConstants + { + public const string ProblemCacheKey = "ProblemCache"; + } +} diff --git a/src/Common/Constants/ConfigurationConstants.cs b/src/Common/Constants/ConfigurationConstants.cs new file mode 100644 index 0000000..b286deb --- /dev/null +++ b/src/Common/Constants/ConfigurationConstants.cs @@ -0,0 +1,22 @@ +īģŋusing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Common.Constants +{ + public static class ConfigurationConstants + { + #region Application Settings + public const string CosmosDBUriKey = "ApplicationSettings:CosmosDbUri"; + public const string CosmosDBAccountKey = "ApplicationSettings:AccountKey"; + public const string ApplicationSettings = "ApplicationSettings"; + public const string LCProjectContainerNameKey = "LCProject:ContainerName"; + public const string LCProjectDatabaseNameKey = "LCProject:DatabaseName"; + public const string JobsProjectContainerNameKey = "JobProject:ContainerName"; + public const string JobsScraperSettingsContainerNameKey = "JobProject:ScraperContainerName"; + public const string JobsProjectDatabaseNameKey = "JobProject:DatabaseName"; + #endregion + } +} diff --git a/src/Common/DatabaseModels/JobScrapperSettings.cs b/src/Common/DatabaseModels/JobScrapperSettings.cs new file mode 100644 index 0000000..570c209 --- /dev/null +++ b/src/Common/DatabaseModels/JobScrapperSettings.cs @@ -0,0 +1,82 @@ +using System; +using Common.Models.Public; +using PublicSettingsModel = Common.Models.Public.QuerySettings; + +namespace Common.DatabaseModels +{ + public class JobScrapperSettings + { + public string id { get; set; } + + public string settingName { get; set; } + + public bool enabled { get; set; } + + public DateTime lastUpdated { get; set; } + + public DateTime lastRunTime { get; set; } + + public int runIntervalInMinutes { get; set; } + + public QuerySettings settings { get; set; } + + public JobScrapperSettings(string id, + string settingName, + int? runIntervalsInMinutes, + PublicSettingsModel settings, + bool enabled = false) + { + this.id = id; + this.settingName = settingName; + this.enabled = enabled; + this.lastUpdated = DateTime.UtcNow; + this.lastRunTime = DateTime.MinValue; + this.runIntervalInMinutes = Math.Min(60, runIntervalsInMinutes ?? 60); + this.settings = new QuerySettings(settings); + } + + public void UpdateFromPublicModel(ScrapperSettings publicSettings) + { + if (publicSettings == null) throw new ArgumentNullException(nameof(publicSettings)); + + this.enabled = publicSettings.enabled; + this.runIntervalInMinutes = publicSettings.runIntervalInMinutes; + this.settings = new QuerySettings(publicSettings.settings); + this.lastUpdated = DateTime.UtcNow; + // keep SettingName unchanged unless public model provides one + if (!string.IsNullOrWhiteSpace(publicSettings.name)) + { + this.settingName = publicSettings.name; + } + } + + public ScrapperSettings ToPublicModel() + { + return new ScrapperSettings + { + id = this.id, + name = this.settingName, + enabled = this.enabled, + lastUpdated = this.lastUpdated, + lastRunTime = this.lastRunTime, + runIntervalInMinutes = this.runIntervalInMinutes, + settings = new PublicSettingsModel + { + query = this.settings.query, + locations = this.settings.locations, + sitesToInclude = this.settings.sitesToInclude, + sitesToExclude = this.settings.sitesToExclude, + exactTerms = this.settings.exactTerms, + negativeTerms = this.settings.negativeTerms, + additionalSearchTerms = this.settings.additionalSearchTerms, + lookBackDays = this.settings.lookBackDays + } + }; + } + + public QuerySettings GetQuerySettings() + { + return this.settings; + } + } +} \ No newline at end of file diff --git a/src/Common/DatabaseModels/ProblemSchema.cs b/src/Common/DatabaseModels/ProblemSchema.cs new file mode 100644 index 0000000..137bb81 --- /dev/null +++ b/src/Common/DatabaseModels/ProblemSchema.cs @@ -0,0 +1,46 @@ +using Common.Models; + +namespace Common.DatabaseModels +{ + public class ProblemSchema + { + public ProblemSchema() { } + public ProblemSchema(ProblemSchema ps) + { + id = ps.id; + title = ps.title; + url = ps.url; + difficulty = ps.difficulty; + acceptance = ps.acceptance; + frequency = ps.frequency; + companyList = new List>>(); + metadataList = new List>(); + } + + public ProblemSchema(Problem p) + { + id = p.id; + title = p.title; + url = p.url; + difficulty = p.difficulty; + acceptance = p.acceptance; + frequency = p.frequency; + companyList = p.companies.Select(kv => new KeyValuePair>(kv.Key, kv.Value.ToList())).ToList(); + metadataList = p.metadata.Select(kv => new KeyValuePair(kv.Key, kv.Value)).ToList(); + } + + public string id { get; set; } = string.Empty; + public string title { get; set; } = string.Empty; + public string url { get; set; } = string.Empty; + public Difficulty difficulty { get; set; } = Difficulty.Unknown; + public double acceptance { get; set; } = 0.0; + public double frequency { get; set; } = 0; + public List>> companyList { get; set; } = new List>>(); + public List> metadataList { get; set; } = new List>(); + + public override string ToString() + { + return $"{id}: {title} ({difficulty}) | companies: {string.Join(", ", companyList.Select(c => c.Key))} | metadata: {string.Join(", ", metadataList.Select(kv => $"{kv.Key}={kv.Value}"))}"; + } + } +} diff --git a/src/Common/DatabaseModels/QuerySettings.cs b/src/Common/DatabaseModels/QuerySettings.cs new file mode 100644 index 0000000..aa447a6 --- /dev/null +++ b/src/Common/DatabaseModels/QuerySettings.cs @@ -0,0 +1,33 @@ +īģŋusing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using PublicSettingsModel = Common.Models.Public.QuerySettings; + +namespace Common.DatabaseModels +{ + + public class QuerySettings + { + public string query { get; set; } + public List locations { get; set; } + public List sitesToInclude { get; set; } + public List sitesToExclude { get; set; } + public List exactTerms { get; set; } + public List negativeTerms { get; set; } + public int lookBackDays { get; set; } = 1; + public List additionalSearchTerms { get; set; } + + public QuerySettings(PublicSettingsModel qs) + { + query = qs.query; + locations = qs.locations; + sitesToInclude = qs.sitesToInclude; + sitesToExclude = qs.sitesToExclude; + exactTerms = qs.exactTerms; + negativeTerms = qs.negativeTerms; + additionalSearchTerms = qs.additionalSearchTerms; + } + } +} diff --git a/src/Common/DatabaseModels/ScrappedJob.cs b/src/Common/DatabaseModels/ScrappedJob.cs new file mode 100644 index 0000000..f334826 --- /dev/null +++ b/src/Common/DatabaseModels/ScrappedJob.cs @@ -0,0 +1,37 @@ +using Common.Models; + +namespace Common.DatabaseModels +{ + public class ScrappedJob + { + public string id { get; set; } + public string title { get; set; } + public string displayLink { get; set; } + public string snippet { get; set; } + public string description { get; set; } + public string link { get; set; } + public DateTime scrappedTime { get; set; } + public DateTime JobPostedTime { get; set; } + public string companyName { get; set; } + public string jobType { get; set; } + public string location { get; set; } + public List tags { get; set; } = new List(); + + public ScrappedJob() { } + public ScrappedJob(Item item, DateTime scrappedTime) + { + title = item.title; + displayLink = item.displayLink; + snippet = item.snippet; + link = item.link; + id = GenerateHashId(item.link, item.title, item.displayLink); + this.scrappedTime = scrappedTime; + description = "NA"; + } + + private string GenerateHashId(string v1, string v2, string v3) + { + return Helper.FastHashId.GenerateHashId(v1, v2, v3); + } + } +} \ No newline at end of file diff --git a/src/Common/Engines/AIEngine.cs b/src/Common/Engines/AIEngine.cs new file mode 100644 index 0000000..ee3fa22 --- /dev/null +++ b/src/Common/Engines/AIEngine.cs @@ -0,0 +1,132 @@ +namespace Common.Engines +{ + using Azure; + using Azure.AI; + using Azure.Identity; + using Azure.AI.Inference; + using Azure.AI.Projects; + using Azure.AI.Agents.Persistent; + using System.Diagnostics; + using Newtonsoft.Json; + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Configuration; + using Common.DatabaseModels; + + public class AIEngine + { + private const string AI_SERVICE_ENDPOINT = "https://job-analyzer.services.ai.azure.com/api/projects/firstProject"; + private const string AGENT_ID = "asst_gWZPhAs5gg4jVvmuto9sop5h"; + private readonly ILogger logger; + private readonly IConfiguration configuration; + private PersistentAgent agent; + private PersistentAgentsClient agentsClient; + public AIEngine(IConfiguration configuration, ILogger logger) + { + this.logger = logger; + this.configuration = configuration; + for (int i = 0; i < 3; i++) + { + try + { + this.agentsClient = new(AI_SERVICE_ENDPOINT, new DefaultAzureCredential()); + this.agent = this.agentsClient.Administration.GetAgent(AGENT_ID); + this.logger.LogInformation($"AIEngine initialized successfully. Endpoint: {AI_SERVICE_ENDPOINT}, AgentId: {AGENT_ID}"); + break; + } + catch (Exception ex) + { + logger.LogError($"Error initializing AIEngine: {ex.Message}"); + Task.Delay((i + 1) * 2000).ConfigureAwait(false).GetAwaiter().GetResult(); + } + } + + if (!IsReady()) + { + this.logger.LogError("AIEngine failed to initialize properly."); + throw new InvalidOperationException("AIEngine failed to initialize properly."); + } + } + + public bool IsReady() + { + return this.agent != null && this.agentsClient != null; + } + + public async Task>> GetJobLevelAsync(List scrappedJobs) + { + var results = new List>(); + this.logger.LogInformation($"Processing {scrappedJobs.Count} scrapped jobs. Ready: {IsReady()}"); + for (int i=0; i < scrappedJobs.Count; i += 20) + { + var batch = scrappedJobs.Skip(i).Take(20).ToList(); + try + { + var sw = Stopwatch.StartNew(); + var prompt = JsonConvert.SerializeObject(batch); + var response = await GetResponseInternalAsync(prompt); + sw.Stop(); + this.logger.LogInformation($"Processed jobs: {string.Join(",", batch.Select(j => j.id))} | response: {response}"); + var kvList = response.Split(",").Select(kvs => kvs.Split(":")).Where(kv => kv.Length == 2).Select(kv => new KeyValuePair(kv[0].Trim(), kv[1].Trim())).ToList(); + results.AddRange(kvList); + } + catch (Exception ex) + { + this.logger.LogError($"Error processing batch: {string.Join(",", batch.Select(j => j.id))} | {ex.Message}"); + } + } + return results; + } + + private async Task GetResponseInternalAsync(string input) + { + if (!IsReady()) + { + logger.LogError($"AIEngine is not properly initialized. Input: {input}"); + throw new InvalidOperationException("AIEngine not initialized."); + } + + var threadResponse = await agentsClient.Threads.CreateThreadAsync(); + var thread = threadResponse.Value; + + try + { + await agentsClient.Messages.CreateMessageAsync(thread.Id, MessageRole.User, input); + var runResponse = await agentsClient.Runs.CreateRunAsync(thread.Id, agent.Id); + var run = runResponse.Value; + + // Poll until terminal state + do + { + await Task.Delay(500); + run = await agentsClient.Runs.GetRunAsync(thread.Id, run.Id); + } + while (run.Status == RunStatus.Queued || run.Status == RunStatus.InProgress); + + if (run.Status != RunStatus.Completed) + { + logger.LogError($"Run failed. ThreadId={thread.Id}, Error={run.LastError?.Message}"); + throw new InvalidOperationException($"Run failed: {run.LastError?.Message}"); + } + + // Fetch all messages in ascending order + var messages = agentsClient.Messages.GetMessagesAsync(thread.Id, order: ListSortOrder.Ascending); + + string response = string.Empty; + PersistentThreadMessage lastThreadMessage = messages.ToBlockingEnumerable().Last(); + foreach (MessageContent contentItem in lastThreadMessage.ContentItems) + { + if (contentItem is MessageTextContent textItem) + { + response += textItem.Text; + } + } + + return response; + } + finally + { + await agentsClient.Threads.DeleteThreadAsync(thread.Id); + } + } + } +} \ No newline at end of file diff --git a/src/Common/Engines/GSEngine.cs b/src/Common/Engines/GSEngine.cs new file mode 100644 index 0000000..f871261 --- /dev/null +++ b/src/Common/Engines/GSEngine.cs @@ -0,0 +1,238 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Common.DatabaseModels; +using Common.Models; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; + +namespace Common.Engines +{ + public class GSEngine + { + private readonly string apiKey; + private readonly string searchEngineId; + private readonly HttpClient httpClient; + private string baseUrl = "https://customsearch.googleapis.com/customsearch/v1"; + private int maxResultsPerSearch = 150; + private readonly ILogger logger; + + public GSEngine(IConfiguration configuration, ILogger _logger) + { + this.apiKey = configuration["GoogleSearch:ApiKey"] ?? throw new ArgumentNullException("Google Search API Key is not configured."); + this.searchEngineId = configuration["GoogleSearch:SearchEngineId"] ?? throw new ArgumentNullException("Google Search Engine ID is not configured."); + this.logger = _logger; + this.httpClient = new HttpClient(); + } + + public async Task> SearchQueryAsync(JobScrapperSettings settings) + { + if (settings == null) throw new ArgumentNullException(nameof(settings)); + + var qsettings = settings.GetQuerySettings() ?? throw new InvalidOperationException("Query settings cannot be null."); + var allJobs = new List(); + int startIndex = 1; + int totalResults = 0; + + var sb = new StringBuilder(); + sb.Append($"{this.baseUrl}?key={apiKey}&cx={searchEngineId}"); + + // base query + var baseQuery = qsettings.query ?? string.Empty; + sb.Append($"&q={Uri.EscapeDataString(baseQuery)}"); + + // date restriction + if (qsettings.lookBackDays > 0) + { + sb.Append(AddDateRestrictionToQuery(qsettings.lookBackDays)); + } + + // Exact terms (join list if provided) + if (qsettings.exactTerms != null && qsettings.exactTerms.Any()) + { + var exact = string.Join(" ", qsettings.exactTerms.Where(s => !string.IsNullOrWhiteSpace(s))); + if (!string.IsNullOrWhiteSpace(exact)) sb.Append(AddExactTermsToQuery(exact)); + } + + // Negative terms + if (qsettings.negativeTerms != null && qsettings.negativeTerms.Any()) + { + var neg = string.Join(" ", qsettings.negativeTerms.Where(s => !string.IsNullOrWhiteSpace(s))); + if (!string.IsNullOrWhiteSpace(neg)) sb.Append(AddNegativeTermToQuery(neg)); + } + + // Location - use first location if present (api uses gl for country) + if (qsettings.locations != null && qsettings.locations.Any() && !string.IsNullOrWhiteSpace(qsettings.locations.First())) + { + sb.Append(AddClientLocationToQuery(qsettings.locations.First())); + } + + // Site include / exclude - use first for siteSearch (API supports one siteSearch parameter) + if (qsettings.sitesToInclude != null && qsettings.sitesToInclude.Any() && !string.IsNullOrWhiteSpace(qsettings.sitesToInclude.First())) + { + sb.Append(AddSiteSearchToQuery(qsettings.sitesToInclude.First())); + } + else if (qsettings.sitesToExclude != null && qsettings.sitesToExclude.Any() && !string.IsNullOrWhiteSpace(qsettings.sitesToExclude.First())) + { + // prefer include if present; otherwise exclude + sb.Append(AddExcludeSiteSearchFromQuery(qsettings.sitesToExclude.First())); + } + + // Additional terms (hq) + if (qsettings.additionalSearchTerms != null && qsettings.additionalSearchTerms.Any()) + { + var add = string.Join(" ", qsettings.additionalSearchTerms.Where(s => !string.IsNullOrWhiteSpace(s))); + if (!string.IsNullOrWhiteSpace(add)) sb.Append(AddadditionalSearchterms(add)); + } + + var template = sb.ToString(); + + do + { + var url = template + AddStartIndexToQuery(startIndex); + var res = await SearchRawUrlAsync(url); + if (res == null) + { + logger.LogError("SearchRawUrlAsync returned null for url: {url}", url); + break; + } + + // No items => stop + if (res.items == null || res.items.Count == 0) + { + logger.LogInformation("No items returned for url: {url}", url); + break; + } + + foreach (var item in res.items) + { + try + { + var job = new ScrappedJob(item, DateTime.UtcNow); + allJobs.Add(job); + } + catch (Exception ex) + { + logger.LogWarning(ex, "Skipping item due to processing error."); + } + } + + // Determine total results + if (!string.IsNullOrWhiteSpace(res.searchInformation?.totalResults)) + { + if (!int.TryParse(res.searchInformation.totalResults, out totalResults)) + { + // try fallback to queries.request[0].totalResults + var reqTotal = res.queries?.request?.FirstOrDefault()?.totalResults; + if (!int.TryParse(reqTotal, out totalResults)) totalResults = int.MaxValue; + } + } + else + { + var reqTotal = res.queries?.request?.FirstOrDefault()?.totalResults; + if (!int.TryParse(reqTotal, out totalResults)) totalResults = int.MaxValue; + } + + // Advance to next page if present + if (res.queries?.nextPage != null && res.queries.nextPage.Count > 0) + { + var next = res.queries.nextPage[0]; + // Use next.startIndex if present; otherwise increment by count + if (next.startIndex > 0) + { + startIndex = next.startIndex; + } + else + { + var count = res.queries.request?.FirstOrDefault()?.count ?? res.items.Count; + if (count <= 0) break; + startIndex += count; + } + } + else + { + // no next page -> stop + break; + } + + // safety: prevent infinite looping + if (startIndex <= 0 || startIndex > maxResultsPerSearch) break; + } + while (startIndex <= maxResultsPerSearch && (totalResults == 0 || startIndex <= totalResults)); + + this.logger.LogInformation("Fetched {count} jobs. Total available (approx): {total}. Url template: {template}", allJobs.Count, totalResults, template); + return allJobs; + } + + public async Task SearchRawUrlAsync(string url) + { + try + { + var response = await httpClient.GetAsync(url); + if (!response.IsSuccessStatusCode) + { + logger.LogWarning("Google Search API returned status {status} for url {url}", response.StatusCode, url); + return null; + } + + var content = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(content); + } + catch (Exception ex) + { + logger.LogError(ex, "Error occurred during Google Search API call."); + } + + return null; + } + + private string AddClientLocationToQuery(string location = "in") + { + return $"&gl={Uri.EscapeDataString(location)}"; + } + + private string AddDateRestrictionToQuery(int previousNDays = 1) + { + return $"&dateRestrict=d{previousNDays}"; + } + + private string AddNegativeTermToQuery(string phrase = "manager") + { + return $"&excludeTerms={Uri.EscapeDataString(phrase)}"; + } + + private string AddExactTermsToQuery(string phrase = "Software Engineer") + { + return $"&exactTerms={Uri.EscapeDataString(phrase)}"; + } + + private string AddSiteSearchToQuery(string site = "linkedin.com") + { + return $"&siteSearch={Uri.EscapeDataString(site)}&siteSearchFilter=i"; + } + + private string AddExcludeSiteSearchFromQuery(string site = "linkedin.com") + { + return $"&siteSearch={Uri.EscapeDataString(site)}&siteSearchFilter=e"; + } + + private string AddSortingToQuery(string sort = "date") + { + return $"&sort={Uri.EscapeDataString(sort)}"; + } + + private string AddadditionalSearchterms(string terms = "India") + { + return $"&hq={Uri.EscapeDataString(terms)}"; + } + + private string AddStartIndexToQuery(int startIndex = 1) + { + return $"&start={startIndex}"; + } + } +} \ No newline at end of file diff --git a/src/Common/Enums/CosmosContainerEnum.cs b/src/Common/Enums/CosmosContainerEnum.cs new file mode 100644 index 0000000..cf53d10 --- /dev/null +++ b/src/Common/Enums/CosmosContainerEnum.cs @@ -0,0 +1,15 @@ +īģŋusing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Common.Enums +{ + public enum CosmosContainerEnum + { + ProblemsContainer, + JobsContainer, + ScrapperSettingsContainer + } +} diff --git a/src/Common/Factories/CosmosContainerFactory.cs b/src/Common/Factories/CosmosContainerFactory.cs new file mode 100644 index 0000000..f54b062 --- /dev/null +++ b/src/Common/Factories/CosmosContainerFactory.cs @@ -0,0 +1,62 @@ +īģŋusing Common.Constants; +using Common.Enums; +using Common.Models.Miscellaneous; +using Microsoft.Azure.Cosmos; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Common.Factories +{ + public class CosmosContainerFactory : ICosmosContainerFactory + { + private CosmosClient _cosmosClient; + + private readonly IConfiguration _configuration; + + private readonly ILogger _logger; + public CosmosContainerFactory(CosmosClient cosmosClient, + IConfiguration configuration, + ILogger logger) + { + _cosmosClient = cosmosClient; + _configuration = configuration; + _logger = logger; + } + + public Container GetContainer(CosmosContainerEnum container) + { + var containerDetails = LoadContainerDetails(); + + if(!containerDetails.ContainsKey(container)) + { + _logger.LogError("Container details not found for container: {Container}", container); + throw new ArgumentOutOfRangeException(nameof(container), container, null); + } + + var databaseName = containerDetails[container].DatabaseName; + var containerName = containerDetails[container].ContainerName; + var dbInstnace = _cosmosClient.GetDatabase(databaseName); + return dbInstnace.GetContainer(containerName); + } + + private Dictionary LoadContainerDetails() + { + var config = _configuration.GetSection(ConfigurationConstants.ApplicationSettings); + return new Dictionary + { + { + CosmosContainerEnum.ProblemsContainer, + new ContainerDetails(config[ConfigurationConstants.LCProjectDatabaseNameKey], config[ConfigurationConstants.LCProjectContainerNameKey]) + }, + { + CosmosContainerEnum.JobsContainer, + new ContainerDetails(config[ConfigurationConstants.JobsProjectDatabaseNameKey], config[ConfigurationConstants.JobsProjectContainerNameKey]) + }, + { + CosmosContainerEnum.ScrapperSettingsContainer, + new ContainerDetails(config[ConfigurationConstants.JobsProjectDatabaseNameKey], config[ConfigurationConstants.JobsScraperSettingsContainerNameKey]) + } + }; + } + } +} diff --git a/src/Common/Factories/ICosmosContainerFactory.cs b/src/Common/Factories/ICosmosContainerFactory.cs new file mode 100644 index 0000000..f177298 --- /dev/null +++ b/src/Common/Factories/ICosmosContainerFactory.cs @@ -0,0 +1,10 @@ +īģŋusing Common.Enums; +using Microsoft.Azure.Cosmos; + +namespace Common.Factories +{ + public interface ICosmosContainerFactory + { + Container GetContainer(CosmosContainerEnum container); + } +} \ No newline at end of file diff --git a/src/Common/Helper.cs b/src/Common/Helper.cs new file mode 100644 index 0000000..435650e --- /dev/null +++ b/src/Common/Helper.cs @@ -0,0 +1,51 @@ +namespace Common.Helper +{ + using System; + using System.Collections.Generic; + using System.Text; + + public static class FastHashId + { + public static string GenerateHashId(string part1, string part2, string part3) + { + return GenerateHashId(new List { part1, part2, part3 }); + } + + public static string GenerateHashId(List input) + { + string combined = string.Join("|", input); + ulong hash = 14695981039346656037UL; // FNV offset basis + const ulong prime = 1099511628211UL; + + foreach (byte b in Encoding.UTF8.GetBytes(combined)) + { + hash ^= b; + hash *= prime; + } + + // Convert hash to Base36 (alphanumeric) for compactness + string base36 = ToBase36(hash); + + // Ensure it's exactly 10 characters + return base36.Length > 10 ? base36.Substring(0, 10) : base36.PadLeft(10, '0'); + } + + private static string ToBase36(ulong value) + { + const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + StringBuilder sb = new StringBuilder(); + while (value > 0) + { + sb.Insert(0, chars[(int)(value % 36)]); + value /= 36; + } + return sb.ToString(); + } + + public static string GenerateRandonGuid() + { + return Guid.NewGuid().ToString("N"); + } + } + +} diff --git a/src/Common/IFilter.cs b/src/Common/IFilter.cs new file mode 100644 index 0000000..0a90e8c --- /dev/null +++ b/src/Common/IFilter.cs @@ -0,0 +1,7 @@ +namespace Common +{ + public interface IFilter + { + public List ApplyFilterAsync(List entities); + } +} \ No newline at end of file diff --git a/src/Common/Managers/JobScrapper.cs b/src/Common/Managers/JobScrapper.cs new file mode 100644 index 0000000..dee2e4f --- /dev/null +++ b/src/Common/Managers/JobScrapper.cs @@ -0,0 +1,99 @@ +namespace Common.Managers + +{ + using Common.DatabaseModels; + using Common.Engines; + using Common.Repositories; + using Microsoft.Extensions.Logging; + + public class JobScrapper + { + private JobScrapperSettings settings; + private GSEngine gsEngine; + private AIEngine aiEngine; + private JobsRepository jobsRepository; + private ILogger logger; + + public JobScrapper(GSEngine gsEngine, AIEngine aiEngine, JobsRepository jobsRepo, ILogger logger) + { + this.logger = logger; + this.gsEngine = gsEngine; + this.aiEngine = aiEngine; + this.jobsRepository = jobsRepo; + } + + public void ConfigureSettings(JobScrapperSettings settings) + { + this.settings = settings; + } + + public async Task RunAsync() + { + var startTime = DateTime.UtcNow; + this.logger.LogInformation($"Starting JobScrapper run for settings: {this.settings}"); + + var searchResults = await gsEngine.SearchQueryAsync(this.settings); + + if (searchResults == null || searchResults.Count == 0) + { + this.logger.LogInformation($"Nothing to process. Query settings: {this.settings}"); + return "No search results, processing skipped."; + } + + var existingJobIds = await this.jobsRepository.GetJobIdsInLastNDaysAsync(1); + var hashSetExistingJobIds = new HashSet(existingJobIds, StringComparer.OrdinalIgnoreCase); + + this.logger.LogInformation($"Search Results count: {searchResults.Count} JobIds in last N(1) days = {hashSetExistingJobIds.Count}"); + searchResults = searchResults.Where(j => !hashSetExistingJobIds.Contains(j.id)).ToList(); + this.logger.LogInformation($"Filtered Search Results count: {searchResults.Count}"); + + if (searchResults.Count == 0) + { + this.logger.LogInformation($"All jobs are duplicates. Nothing to process. Query settings: {this.settings}"); + return "All jobs are duplicates, processing skipped."; + } + + var mp = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var job in searchResults) + { + if (!mp.ContainsKey(job.id)) + { + mp[job.id] = job; + } + } + + var levels = await this.aiEngine.GetJobLevelAsync(searchResults); + foreach (var level in levels) + { + if (mp.ContainsKey(level.Key)) + { + mp[level.Key].tags.AddRange(level.Value.Split("-")); + mp[level.Key].jobType = level.Value.Split("-").FirstOrDefault() ?? mp[level.Key].jobType; + if (level.Value.Split("-").Length > 1) + { + mp[level.Key].location = level.Value.Split("-")[1]; + } + } + else + { + this.logger.LogWarning($"Job ID {level.Key} not found in search results while assigning level tag."); + } + } + + var newResults = 0; + foreach (var job in searchResults) + { + var success = await this.jobsRepository.CreateIfNotExistsAsync(job); + if (success) + { + newResults++; + } + } + + var duration = DateTime.UtcNow - startTime; + this.logger.LogInformation($"JobScrapper run completed. Duration: {duration}. Processed {searchResults.Count} jobs for settings: {this.settings}"); + return $"Processed {searchResults.Count} jobs | New addition: {newResults} in {duration.TotalSeconds} seconds."; + } + + } +} \ No newline at end of file diff --git a/src/Common/Managers/JobScrapperSettingsManager.cs b/src/Common/Managers/JobScrapperSettingsManager.cs new file mode 100644 index 0000000..2c9f48f --- /dev/null +++ b/src/Common/Managers/JobScrapperSettingsManager.cs @@ -0,0 +1,93 @@ +namespace Common.Managers +{ + using Common.DatabaseModels; + using Common.Enums; + using Common.Factories; + using Common.Models.Public; + using Microsoft.Azure.Cosmos; + using Microsoft.Extensions.Logging; + public class JobScrapperSettingsManager + { + private readonly Container _scrapperSettingsContainer; + private readonly ILogger _logger; + + public JobScrapperSettingsManager(ICosmosContainerFactory cosmosContainerFactory, + ILogger logger) + { + _scrapperSettingsContainer = cosmosContainerFactory.GetContainer(CosmosContainerEnum.ScrapperSettingsContainer); + _logger = logger; + } + + public async Task CreateOrUpdateSettings(string id, ScrapperSettings publicSettings) + { + if(publicSettings == null) + { + throw new ArgumentNullException(nameof(publicSettings), "Public settings cannot be null"); + } + + var settingsInDb = await this.GetAllSettings(); + JobScrapperSettings current = null; + if(!string.IsNullOrEmpty(id) && settingsInDb.Any(s => s.id.Equals(id, StringComparison.OrdinalIgnoreCase))) + { + current = settingsInDb.First(s => s.id.Equals(id, StringComparison.OrdinalIgnoreCase)); + } + + if (current != null) + { + current.UpdateFromPublicModel(publicSettings); + } + else + { // TODO: Restrict total number of settings to 5 + if (settingsInDb.Count >= 5) + { + throw new InvalidOperationException("[TooManySettings]: Cannot create more than 5 scrapper settings."); + } + current = new JobScrapperSettings(id, publicSettings.name, publicSettings.runIntervalInMinutes, publicSettings.settings, true); + } + + await _scrapperSettingsContainer.UpsertItemAsync(current); + return current; + } + + public async Task GetSettingsById(string id) + { + var allSettings = await GetAllSettings(); + var setting = allSettings.FirstOrDefault(s => s.id.Equals(id, StringComparison.OrdinalIgnoreCase)); + + if (setting == null) + { + _logger.LogError($"No JobScrapperSettings found with id: {id}"); + throw new KeyNotFoundException($"No JobScrapperSettings found with id: {id}"); + } + + return setting; + } + + public async Task UpdateSettingsAsync(string id, JobScrapperSettings jobSetting) + { + try + { + await _scrapperSettingsContainer.UpsertItemAsync(jobSetting, new PartitionKey(id)); + _logger.LogInformation($"Successfully updated JobScrapperSettings with id: {id}"); + } + catch (Exception ex) + { + _logger.LogError($"Error updating JobScrapperSettings with id: {id}. Exception: {ex.Message}"); + return false; + } + return true; + } + + public async Task> GetAllSettings() + { + var settingsInDb = _scrapperSettingsContainer.GetItemQueryIterator($"SELECT * from c"); + var allSettings = new List(); + while (settingsInDb.HasMoreResults) + { + var response = await settingsInDb.ReadNextAsync(); + allSettings.AddRange(response); + } + return allSettings; + } + } +} \ No newline at end of file diff --git a/src/Common/Models/GSResult.cs b/src/Common/Models/GSResult.cs new file mode 100644 index 0000000..c1882c0 --- /dev/null +++ b/src/Common/Models/GSResult.cs @@ -0,0 +1,132 @@ +namespace Common.Models +{ + public class GSResult + { + public string kind { get; set; } + public UrlInfo url { get; set; } + public Queries queries { get; set; } + public Context context { get; set; } + public SearchInformation searchInformation { get; set; } + public List items { get; set; } + } + + public class UrlInfo + { + public string type { get; set; } + public string template { get; set; } + } + + public class Queries + { + public List request { get; set; } + public List nextPage { get; set; } + } + + public class QueryRequest + { + public string totalResults { get; set; } + public int count { get; set; } + public int startIndex { get; set; } + public string inputEncoding { get; set; } + public string outputEncoding { get; set; } + public string safe { get; set; } + public string cx { get; set; } + public string sort { get; set; } + public string gl { get; set; } + public string siteSearch { get; set; } + public string siteSearchFilter { get; set; } + public string exactTerms { get; set; } + public string excludeTerms { get; set; } + public string dateRestrict { get; set; } + } + + public class Context + { + public string title { get; set; } + } + + public class SearchInformation + { + public double searchTime { get; set; } + public string formattedSearchTime { get; set; } + public string totalResults { get; set; } + public string formattedTotalResults { get; set; } + } + + public class Item + { + public string kind { get; set; } + public string title { get; set; } + public string htmlTitle { get; set; } + public string link { get; set; } + public string displayLink { get; set; } + public string snippet { get; set; } + public string htmlSnippet { get; set; } + public string formattedUrl { get; set; } + public string htmlFormattedUrl { get; set; } + // public PageMap pagemap { get; set; } // Not in use currently + } + + /* + #region PageMapClasses + public class PageMap + { + public List metatags { get; set; } + public List cse_thumbnail { get; set; } + public List cse_image { get; set; } + public List BreadcrumbList { get; set; } + public List organization { get; set; } + } + + public class MetaTag + { + public string image { get; set; } + public string og_type { get; set; } + public string viewport { get; set; } + public string title { get; set; } + public string og_url { get; set; } + public string og_image { get; set; } + public string og_site_name { get; set; } + public string og_locale { get; set; } + public string og_description { get; set; } + public string twitter_card { get; set; } + public string twitter_image { get; set; } + public string author { get; set; } + public string url { get; set; } + public string position { get; set; } + public string referrer { get; set; } + public string csrf_token { get; set; } + public string csrf_param { get; set; } + public string jobidentifier { get; set; } + public string og_image_width { get; set; } + public string og_image_height { get; set; } + public string http_ogp_me_ns_article_published_time { get; set; } + public string http_ogp_me_ns_article_modified_time { get; set; } + public string http_ogp_me_ns_article_section { get; set; } + public string twitter_site { get; set; } + } + + public class CseThumbnail + { + public string src { get; set; } + public string width { get; set; } + public string height { get; set; } + } + + public class CseImage + { + public string src { get; set; } + } + + public class BreadcrumbList + { + // Add properties if needed + } + + public class Organization + { + public string sameas { get; set; } + } + #endregion PageMapClasses + */ +} \ No newline at end of file diff --git a/src/Common/Models/Miscellaneous/ContainerDetails.cs b/src/Common/Models/Miscellaneous/ContainerDetails.cs new file mode 100644 index 0000000..9d3a630 --- /dev/null +++ b/src/Common/Models/Miscellaneous/ContainerDetails.cs @@ -0,0 +1,20 @@ +īģŋusing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Common.Models.Miscellaneous +{ + public class ContainerDetails + { + public string DatabaseName { get; set; } + public string ContainerName { get; set; } + + public ContainerDetails(string databaseName, string containerName) + { + DatabaseName = databaseName; + ContainerName = containerName; + } + } +} diff --git a/src/Common/Models/Problem.cs b/src/Common/Models/Problem.cs new file mode 100644 index 0000000..714968f --- /dev/null +++ b/src/Common/Models/Problem.cs @@ -0,0 +1,60 @@ +using Common.DatabaseModels; + +namespace Common.Models +{ + public enum Difficulty + { + Unknown = 0, + Easy = 1, + Medium = 2, + Hard = 3 + } + + public class TagName + { + public static string FileName = "filename"; + public static string FolderName = "foldername"; + }; + + public class Problem + { + public Problem() { } + public Problem(Problem ps) + { + this.id = ps.id; + this.title = ps.title; + this.url = ps.url; + this.difficulty = ps.difficulty; + this.acceptance = ps.acceptance; + this.frequency = ps.frequency; + this.companies = new Dictionary>(ps.companies); + this.metadata = new Dictionary(ps.metadata); + } + + public Problem(ProblemSchema ps) + { + this.id = ps.id; + this.title = ps.title; + this.url = ps.url; + this.difficulty = ps.difficulty; + this.acceptance = ps.acceptance; + this.frequency = ps.frequency; + this.companies = ps.companyList.ToDictionary(kv => kv.Key, kv => kv.Value.ToList(), StringComparer.OrdinalIgnoreCase); + this.metadata = ps.metadataList.ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase); + } + + public string id { get; set; } = string.Empty; + public string title { get; set; } = string.Empty; + public string url { get; set; } = string.Empty; + public Difficulty difficulty { get; set; } = Difficulty.Unknown; + public double acceptance { get; set; } = 0.0; + public double frequency { get; set; } = 0; + public Dictionary> companies { get; set; } = new Dictionary>(StringComparer.OrdinalIgnoreCase); + public Dictionary metadata { get; set; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + + public override string ToString() + { + return $"{id}: {title} ({difficulty}) | companies: {string.Join(", ", companies.Keys)} | metadata: {string.Join(", ", metadata.Select(kv => $"{kv.Key}={kv.Value}"))}"; + } + } +} diff --git a/src/Common/Models/Public/QueryParam.cs b/src/Common/Models/Public/QueryParam.cs new file mode 100644 index 0000000..73c8b07 --- /dev/null +++ b/src/Common/Models/Public/QueryParam.cs @@ -0,0 +1,12 @@ +namespace Common.Models.Public +{ + public class QueryParam + { + public const string Skip = "skip"; + public const string Limit = "limit"; + public const string Difficulty = "difficulty"; + public const string Company = "company"; + public const string Tag = "tag"; + public const string Shuffle = "shuffle"; + } +} \ No newline at end of file diff --git a/src/Common/Models/Public/QuerySettings.cs b/src/Common/Models/Public/QuerySettings.cs new file mode 100644 index 0000000..4bb8415 --- /dev/null +++ b/src/Common/Models/Public/QuerySettings.cs @@ -0,0 +1,15 @@ +īģŋnamespace Common.Models.Public +{ + + public class QuerySettings + { + public string query { get; set; } + public List locations { get; set; } + public List sitesToInclude { get; set; } + public List sitesToExclude { get; set; } + public List exactTerms { get; set; } + public List negativeTerms { get; set; } + public List additionalSearchTerms { get; set; } + public int lookBackDays { get; set; } + } +} diff --git a/src/Common/Models/Public/ScrapperSettings.cs b/src/Common/Models/Public/ScrapperSettings.cs new file mode 100644 index 0000000..85d424b --- /dev/null +++ b/src/Common/Models/Public/ScrapperSettings.cs @@ -0,0 +1,13 @@ +namespace Common.Models.Public +{ + public class ScrapperSettings + { + public string id { get; set; } + public string name { get; set; } + public bool enabled { get; set; } + public DateTime lastUpdated { get; set; } + public DateTime lastRunTime { get; set; } + public int runIntervalInMinutes { get; set; } + public QuerySettings settings { get; set; } + } +} \ No newline at end of file diff --git a/src/Common/Queries/JobQuery.cs b/src/Common/Queries/JobQuery.cs new file mode 100644 index 0000000..3bcce34 --- /dev/null +++ b/src/Common/Queries/JobQuery.cs @@ -0,0 +1,12 @@ +īģŋnamespace Common.Queries +{ + public class JobQuery + { + public string JobType { get; set; } // Software Engineer, Data Scientist, etc. + public DateTime StartDate { get; set; } = DateTime.UtcNow; // Start date for the job posting + public DateTime EndDate { get; set; } = DateTime.UtcNow; // End date for the job posting + public List Companies { get; set; } // List of companies to filter + public List Locations { get; set; } // List of locations to filter + public string JobLevel { get; set; } // Entry Level, Mid Level, Senior Level, etc. + } +} diff --git a/src/Common/Repositories/IProblemRepository.cs b/src/Common/Repositories/IProblemRepository.cs new file mode 100644 index 0000000..17abe1b --- /dev/null +++ b/src/Common/Repositories/IProblemRepository.cs @@ -0,0 +1,9 @@ +īģŋusing Common.Models; + +namespace Common.Repositories +{ + public interface IProblemRepository + { + Task> GetAllProblemsAsync(); + } +} \ No newline at end of file diff --git a/src/Common/Repositories/JobScrapperSettingsRepository.cs b/src/Common/Repositories/JobScrapperSettingsRepository.cs new file mode 100644 index 0000000..c997470 --- /dev/null +++ b/src/Common/Repositories/JobScrapperSettingsRepository.cs @@ -0,0 +1,53 @@ +īģŋusing Common.DatabaseModels; +using Common.Enums; +using Common.Factories; +using Common.Managers; +using Microsoft.Azure.Cosmos; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Common.Repositories +{ + public class JobScrapperSettingsRepository + { + private readonly Container _scrapperSettingsContainer; + private readonly ILogger _logger; + + public JobScrapperSettingsRepository(ICosmosContainerFactory cosmosContainerFactory, + ILogger logger) + { + _scrapperSettingsContainer = cosmosContainerFactory.GetContainer(CosmosContainerEnum.ScrapperSettingsContainer); + _logger = logger; + } + + public async Task> GetAllSettings() + { + var settingsInDb = _scrapperSettingsContainer.GetItemQueryIterator($"SELECT * from c"); + var allSettings = new List(); + while (settingsInDb.HasMoreResults) + { + var response = await settingsInDb.ReadNextAsync(); + allSettings.AddRange(response); + } + return allSettings; + } + + public async Task UpdateSettingsAsync(string id, JobScrapperSettings jobSetting) + { + try + { + await _scrapperSettingsContainer.UpsertItemAsync(jobSetting, new PartitionKey(id)); + _logger.LogInformation($"Successfully updated JobScrapperSettings with id: {id}"); + } + catch (Exception ex) + { + _logger.LogError($"Error updating JobScrapperSettings with id: {id}. Exception: {ex.Message}"); + throw; + } + } + } +} diff --git a/src/Common/Repositories/JobsRepository.cs b/src/Common/Repositories/JobsRepository.cs new file mode 100644 index 0000000..3c9efb9 --- /dev/null +++ b/src/Common/Repositories/JobsRepository.cs @@ -0,0 +1,213 @@ +namespace Common.Repositories +{ + using Common.DatabaseModels; + using Common.Enums; + using Common.Factories; + using Common.Queries; + using Microsoft.Azure.Cosmos; + using Microsoft.Extensions.Logging; + using System.Net; + + public class JobsRepository + { + private readonly Container jobsContainer; + private readonly ILogger logger; + + public JobsRepository(ICosmosContainerFactory cosmosContainerFactory, + ILogger logger) + { + this.jobsContainer = cosmosContainerFactory.GetContainer(CosmosContainerEnum.JobsContainer); + this.logger = logger; + } + + public async Task> GetAllLatestJobsAsync() + { + var query = "SELECT * FROM c ORDER BY c.scrappedTime DESC OFFSET 0 LIMIT 2000"; + return await QueryJobsAsync(query); + } + + public async Task> GetAllJobsInLastOneDay() + { + var query = $"SELECT * FROM c WHERE DateTimeToTimestamp(GetCurrentTimestamp()) - DateTimeToTimestamp(c.scrappedTime) < 86400"; + return await QueryJobsAsync(query); + } + + /// + /// Create the item only if it does not already exist using a single DB call. + /// Returns true if the item was created, false if it already existed. + /// + public async Task CreateIfNotExistsAsync(ScrappedJob job) + { + if (job == null) throw new ArgumentNullException(nameof(job)); + try + { + var requestOptions = new ItemRequestOptions + { + // Instruct Cosmos to only create if the item does not exist. + // SDK will translate this to an If-None-Match header. + IfNoneMatchEtag = "*" + }; + + var response = await this.jobsContainer.CreateItemAsync(job, new PartitionKey(job.id), requestOptions); + // Created successfully + this.logger.LogInformation("Created job {id} in Cosmos DB. RU charge: {ru}", job.id, response.RequestCharge); + return true; + } + catch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.PreconditionFailed || ex.StatusCode == HttpStatusCode.Conflict) + { + // Item already exists (server enforces the If-None-Match precondition). + this.logger.LogInformation("Job {id} already exists. Skipping create.", job.id); + return false; + } + catch (Exception ex) + { + this.logger.LogError(ex, "Failed to create job {id} in Cosmos DB.", job.id); + throw; + } + } + + public async Task> GetJobsEasyQueryAsync(string location, string level) + { + var query = "SELECT * FROM c WHERE EXISTS ( SELECT VALUE t FROM t IN c.tags WHERE CONTAINS(LOWER(t), @location) OR CONTAINS(LOWER(t), @unknown) ) ORDER BY c.scrappedTime DESC OFFSET 0 LIMIT 1000"; + var queryDefinition = new QueryDefinition(query).WithParameter("@location", location.ToLower()).WithParameter("@unknown", "unknown"); + var res = await QueryJobsAsync(queryDefinition); + res = res.Where(j => j.tags.Any(t => t.Equals(level, StringComparison.OrdinalIgnoreCase))).ToList(); + return res; + } + + public async Task> GetJobIdsInLastNDaysAsync(int lookbackdays) + { + var cutoffDate = DateTime.UtcNow.AddDays(-lookbackdays); + var query = "SELECT c.id FROM c WHERE c.scrappedTime >= @cutoffDate"; + var queryDefinition = new QueryDefinition(query).WithParameter("@cutoffDate", cutoffDate); + var queryResultSetIterator = jobsContainer.GetItemQueryIterator(queryDefinition); + List results = new List(); + while (queryResultSetIterator.HasMoreResults) + { + var response = await queryResultSetIterator.ReadNextAsync(); + results.AddRange(response.Select(j => j.id)); + } + this.logger.LogInformation($"Retrieved {results.Count} job IDs from Cosmos DB in last {lookbackdays} days."); + return results; + } + + public async Task> GetJobsAsync(string location, int lookbackdays) + { + var cutoffDate = DateTime.UtcNow.AddDays(-lookbackdays); + var query = "SELECT * FROM c WHERE (LOWER(c.location) = @location OR LOWER(c.location) = @unknown) AND c.scrappedTime >= @cutoffDate ORDER BY c.scrappedTime DESC"; + var queryDefinition = new QueryDefinition(query) + .WithParameter("@location", location.ToLower()) + .WithParameter("@unknown", "unknown") + .WithParameter("@cutoffDate", cutoffDate.ToString("yyyy-MM-ddTHH:mm:ss")); + return await QueryJobsAsync(queryDefinition); + } + + private async Task> QueryJobsAsync(string query) + { + var queryDefinition = new QueryDefinition(query); + var queryResultSetIterator = jobsContainer.GetItemQueryIterator(queryDefinition); + List results = new List(); + while (queryResultSetIterator.HasMoreResults) + { + var response = await queryResultSetIterator.ReadNextAsync(); + results.AddRange(response); + } + this.logger.LogInformation($"Retrieved {results.Count} jobs from Cosmos DB. Query: {query}"); + return results; + } + private async Task> QueryJobsAsync(QueryDefinition queryDefinition) + { + var queryResultSetIterator = jobsContainer.GetItemQueryIterator(queryDefinition); + List results = new List(); + while (queryResultSetIterator.HasMoreResults) + { + var response = await queryResultSetIterator.ReadNextAsync(); + results.AddRange(response); + } + this.logger.LogInformation($"Retrieved {results.Count} jobs from Cosmos DB."); + return results; + } + + public async Task> GetJobsFromQuery(JobQuery jobquery) + { + if (jobquery == null) throw new ArgumentNullException(nameof(jobquery)); + + var sql = "SELECT * FROM c WHERE 1=1"; + var qd = new QueryDefinition(sql); + + // JobType: search title or tags + if (!string.IsNullOrWhiteSpace(jobquery.JobType)) + { + qd = qd.WithParameter("@jobType", jobquery.JobType); + sql += " AND CONTAINS(c.jobType, @jobType, true)"; + } + + // Companies (list) + if (jobquery.Companies != null && jobquery.Companies.Count > 0) + { + var companyConditions = new List(); + for (int i = 0; i < jobquery.Companies.Count; i++) + { + var param = $"@company{i}"; + qd = qd.WithParameter(param, jobquery.Companies[i]); + companyConditions.Add($"c.companyName = {param}"); + } + sql += " AND (" + string.Join(" OR ", companyConditions) + ")"; + } + + // Locations: fallback to searching in displayLink, snippet or description + if (jobquery.Locations != null && jobquery.Locations.Count > 0) + { + var locationConditions = new List(); + for (int i = 0; i < jobquery.Locations.Count; i++) + { + var param = $"@location{i}"; + qd = qd.WithParameter(param, jobquery.Locations[i]); + locationConditions.Add($"CONTAINS(c.location, {param}, true)"); + } + sql += " AND (" + string.Join(" OR ", locationConditions) + ")"; + } + + // JobLevel: search in tags array (case-insensitive contains) + if (!string.IsNullOrWhiteSpace(jobquery.JobLevel)) + { + qd = qd.WithParameter("@jobLevel", jobquery.JobLevel); + // Use EXISTS with an IN on the tags array and CONTAINS for case-insensitive matching + sql += " AND EXISTS(SELECT VALUE t FROM t IN c.tags WHERE CONTAINS(t, @jobLevel, true))"; + } + + // Date range (JobPostedTime) + if (jobquery.StartDate > DateTime.MinValue) + { + qd = qd.WithParameter("@startDate", jobquery.StartDate); + sql += " AND c.jobPostedTime >= @startDate"; + } + if (jobquery.EndDate > DateTime.MinValue) + { + qd = qd.WithParameter("@endDate", jobquery.EndDate); + sql += " AND c.jobPostedTime <= @endDate"; + } + + // final ordering / limit - optional, keep callers responsible if needed + qd = new QueryDefinition(sql); // rebuild with final SQL + // re-add parameters (QueryDefinition is immutable-like with chaining, but to keep it simple rebuild) + // Add parameters again + if (!string.IsNullOrWhiteSpace(jobquery.JobType)) qd = qd.WithParameter("@jobType", jobquery.JobType); + if (jobquery.Companies != null) + { + for (int i = 0; i < jobquery.Companies.Count; i++) qd = qd.WithParameter($"@company{i}", jobquery.Companies[i]); + } + if (jobquery.Locations != null) + { + for (int i = 0; i < jobquery.Locations.Count; i++) qd = qd.WithParameter($"@location{i}", jobquery.Locations[i]); + } + if (!string.IsNullOrWhiteSpace(jobquery.JobLevel)) qd = qd.WithParameter("@jobLevel", jobquery.JobLevel); + if (jobquery.StartDate > DateTime.MinValue) qd = qd.WithParameter("@startDate", jobquery.StartDate); + if (jobquery.EndDate > DateTime.MinValue) qd = qd.WithParameter("@endDate", jobquery.EndDate); + + logger.LogInformation($"Constructed job query: {sql}"); + + return await QueryJobsAsync(qd); + } + } +} diff --git a/src/Common/Repositories/ProblemRepository.cs b/src/Common/Repositories/ProblemRepository.cs new file mode 100644 index 0000000..1d5fa79 --- /dev/null +++ b/src/Common/Repositories/ProblemRepository.cs @@ -0,0 +1,38 @@ +īģŋusing Common.DatabaseModels; +using Common.Enums; +using Common.Factories; +using Common.Models; +using Microsoft.Azure.Cosmos; +using Microsoft.Extensions.Logging; + +namespace Common.Repositories +{ + public class ProblemRepository : IProblemRepository + { + private readonly Container _problemContainer; + private readonly ILogger _logger; + + public ProblemRepository(ICosmosContainerFactory cosmosContainerFactory, + ILogger logger) + { + _problemContainer = cosmosContainerFactory.GetContainer(CosmosContainerEnum.ProblemsContainer); + _logger = logger; + } + + public async Task> GetAllProblemsAsync() + { + var query = "SELECT * FROM c"; + var queryDefinition = new QueryDefinition(query); + var queryResultSetIterator = _problemContainer.GetItemQueryIterator(queryDefinition); + List results = new List(); + while (queryResultSetIterator.HasMoreResults) + { + var response = await queryResultSetIterator.ReadNextAsync(); + results.AddRange(response.Select(item => new Problem(item))); + } + results = results.OrderBy(p => int.TryParse(p.id, out int id) ? id : -1).ToList(); + _logger.LogInformation($"Retrieved {results.Count} problems from Cosmos DB."); + return results; + } + } +} diff --git a/src/PetProjectAzFunctions/.gitignore b/src/PetProjectAzFunctions/.gitignore new file mode 100644 index 0000000..ff5b00c --- /dev/null +++ b/src/PetProjectAzFunctions/.gitignore @@ -0,0 +1,264 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# Azure Functions localsettings file +local.settings.json + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +project.fragment.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +#*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc \ No newline at end of file diff --git a/src/PetProjectAzFunctions/Dockerfile b/src/PetProjectAzFunctions/Dockerfile new file mode 100644 index 0000000..61200dd --- /dev/null +++ b/src/PetProjectAzFunctions/Dockerfile @@ -0,0 +1,29 @@ +# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +# This stage is used when running from VS in fast mode (Default for Debug configuration) +FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 AS base +WORKDIR /home/site/wwwroot +EXPOSE 8080 + + +# This stage is used to build the service project +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["PetProjectAzFunctions/PetProjectAzFunctions.csproj", "PetProjectAzFunctions/"] +RUN dotnet restore "./PetProjectAzFunctions/PetProjectAzFunctions.csproj" +COPY . . +WORKDIR "/src/PetProjectAzFunctions" +RUN dotnet build "./PetProjectAzFunctions.csproj" -c $BUILD_CONFIGURATION -o /app/build + +# This stage is used to publish the service project to be copied to the final stage +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./PetProjectAzFunctions.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration) +FROM base AS final +WORKDIR /home/site/wwwroot +COPY --from=publish /app/publish . +ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ + AzureFunctionsJobHost__Logging__Console__IsEnabled=true \ No newline at end of file diff --git a/src/PetProjectAzFunctions/JobOpeningsSyncFunction.cs b/src/PetProjectAzFunctions/JobOpeningsSyncFunction.cs new file mode 100644 index 0000000..a87b8db --- /dev/null +++ b/src/PetProjectAzFunctions/JobOpeningsSyncFunction.cs @@ -0,0 +1,67 @@ +using System; +using Common.Managers; +using Common.Repositories; +using Microsoft.Azure.Functions.Worker; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace PetProjectAzFunctions +{ + public class JobOpeningsSyncFunction + { + private readonly ILogger _logger; + + private readonly JobScrapperSettingsRepository _jobScrapperSettingsRepository; + + private readonly IServiceProvider _serviceProvider; + + public JobOpeningsSyncFunction(ILoggerFactory loggerFactory, + JobScrapperSettingsRepository jobScrapperSettingsRepository, + IServiceProvider serviceProvider) + { + _logger = loggerFactory.CreateLogger(); + _jobScrapperSettingsRepository = jobScrapperSettingsRepository; + _serviceProvider = serviceProvider; + } + + [Function("JobOpeningsSyncFunction")] + public async Task Run([TimerTrigger("%CronPeriod%")] TimerInfo myTimer) + { + _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); + var scrapperSettings = await _jobScrapperSettingsRepository.GetAllSettings(); + var currentTime = DateTime.UtcNow; + await Parallel.ForEachAsync(scrapperSettings, async (setting, ct) => + { + try + { + if (setting.enabled) + { + if(setting.lastRunTime.AddMinutes(setting.runIntervalInMinutes) >= currentTime.AddMinutes(-1)) + { + using var scope = _serviceProvider.CreateScope(); + var scrapperInstance = scope.ServiceProvider.GetRequiredService(); + scrapperInstance.ConfigureSettings(setting); + await scrapperInstance.RunAsync(); + setting.lastRunTime = currentTime; + await _jobScrapperSettingsRepository.UpdateSettingsAsync(setting.id, setting); + } + else + { + _logger.LogInformation($"Scrapper setting {setting.id} was run at {setting.lastRunTime}, next run schedule has not yet come. Skipping this run."); + } + } + else + { + _logger.LogInformation($"Scrapper setting {setting.id} is disabled. Skipping."); + return; + } + } + catch (Exception ex) + { + _logger.LogError(ex, $"Error processing scrapper settings: {setting}"); + } + }); + } + } +} diff --git a/src/PetProjectAzFunctions/PetProjectAzFunctions.csproj b/src/PetProjectAzFunctions/PetProjectAzFunctions.csproj new file mode 100644 index 0000000..873e3b4 --- /dev/null +++ b/src/PetProjectAzFunctions/PetProjectAzFunctions.csproj @@ -0,0 +1,37 @@ +īģŋ + + net8.0 + v4 + Exe + enable + enable + /home/site/wwwroot + Linux + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + Never + + + + + + \ No newline at end of file diff --git a/src/PetProjectAzFunctions/Program.cs b/src/PetProjectAzFunctions/Program.cs new file mode 100644 index 0000000..7de0b9e --- /dev/null +++ b/src/PetProjectAzFunctions/Program.cs @@ -0,0 +1,53 @@ +using Common.Constants; +using Common.Engines; +using Common.Factories; +using Common.Managers; +using Common.Repositories; +using Microsoft.Azure.Cosmos; +using Microsoft.Azure.Functions.Worker.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System.Data; + +public class Program +{ + public static void Main(string[] args) + { + var builder = FunctionsApplication.CreateBuilder(args); + + builder.ConfigureFunctionsWebApplication(); + ConfigureServices(builder); + builder.Build().Run(); + } + + private static void ConfigureServices(FunctionsApplicationBuilder builder) + { + var services = builder.Services; + // Register your services here + services.AddLogging(); + services.AddHttpClient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + + var config = builder.Configuration; + + #region Register Cosmos related services + services.AddSingleton(s => + { + var cosmosDbUri = config[ConfigurationConstants.CosmosDBUriKey]; + var cosmosDbAccountKey = config[ConfigurationConstants.CosmosDBAccountKey]; + if (string.IsNullOrEmpty(cosmosDbUri) || string.IsNullOrEmpty(cosmosDbAccountKey)) + { + throw new DataException("Cosmos DB configuration is missing or invalid."); + } + return new CosmosClient(cosmosDbUri, cosmosDbAccountKey); + }); + + services.AddTransient(); + #endregion + + } +} diff --git a/src/PetProjectAzFunctions/Properties/launchSettings.json b/src/PetProjectAzFunctions/Properties/launchSettings.json new file mode 100644 index 0000000..6a6168e --- /dev/null +++ b/src/PetProjectAzFunctions/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "profiles": { + "PetProjectAzFunctions": { + "commandName": "Project", + "commandLineArgs": "--port 7149" + }, + "Container (Dockerfile)": { + "commandName": "Docker", + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "containerRunArguments": "--init", + "httpPort": 31027, + "useSSL": false + } + } +} \ No newline at end of file diff --git a/src/PetProjectAzFunctions/Properties/serviceDependencies.json b/src/PetProjectAzFunctions/Properties/serviceDependencies.json new file mode 100644 index 0000000..df4dcc9 --- /dev/null +++ b/src/PetProjectAzFunctions/Properties/serviceDependencies.json @@ -0,0 +1,11 @@ +{ + "dependencies": { + "appInsights1": { + "type": "appInsights" + }, + "storage1": { + "type": "storage", + "connectionId": "AzureWebJobsStorage" + } + } +} \ No newline at end of file diff --git a/src/PetProjectAzFunctions/host.json b/src/PetProjectAzFunctions/host.json new file mode 100644 index 0000000..ee5cf5f --- /dev/null +++ b/src/PetProjectAzFunctions/host.json @@ -0,0 +1,12 @@ +{ + "version": "2.0", + "logging": { + "applicationInsights": { + "samplingSettings": { + "isEnabled": true, + "excludedTypes": "Request" + }, + "enableLiveMetricsFilters": true + } + } +} \ No newline at end of file diff --git a/src/PetProjectAzFunctions/readme.md b/src/PetProjectAzFunctions/readme.md new file mode 100644 index 0000000..0b247b5 --- /dev/null +++ b/src/PetProjectAzFunctions/readme.md @@ -0,0 +1,11 @@ +# TimerTrigger - C# + +The `TimerTrigger` makes it incredibly easy to have your functions executed on a schedule. This sample demonstrates a simple use case of calling your function every 5 minutes. + +## How it works + +For a `TimerTrigger` to work, you provide a schedule in the form of a [cron expression](https://en.wikipedia.org/wiki/Cron#CRON_expression)(See the link for full details). A cron expression is a string with 6 separate expressions which represent a given schedule via patterns. The pattern we use to represent every 5 minutes is `0 */5 * * * *`. This, in plain text, means: "When seconds is equal to 0, minutes is divisible by 5, for any hour, day of the month, month, day of the week, or year". + +## Learn more + + Documentation \ No newline at end of file diff --git a/src/Synchronizer/Helper.cs b/src/Synchronizer/Helper.cs new file mode 100644 index 0000000..2fb87b2 --- /dev/null +++ b/src/Synchronizer/Helper.cs @@ -0,0 +1,49 @@ +using Synchronizer; + +internal class Helper +{ + public static List GetCsvFileNames(string rootDir) + { + var csvFiles = Directory.GetFiles(rootDir, "*.csv", SearchOption.AllDirectories); + return csvFiles.ToList(); + } + + public static List ReadProblemsFromCsv(string filePath) + { + var problems = new List(); + var lines = File.ReadAllLines(filePath); + var relPath = filePath.Split("leetcode/").Last(); + + foreach (var line in lines.Skip(1)) // Skip header + { + var parts = line.Split(','); + + // ID,URL,Title,Difficulty,Acceptance %,Frequency % + if (parts.Length < 5) + { + Console.WriteLine($"[{relPath}] Skipping malformed line: {line}"); + continue; + } + + var problem = new Common.Models.Problem + { + id = parts[0], + url = parts[1], + title = parts[2], + difficulty = Enum.TryParse(parts[3], true, out var diff) ? diff : Common.Models.Difficulty.Unknown, + acceptance = double.TryParse(parts[4].TrimEnd('%'), out var acc) ? acc : 0.0, + frequency = double.TryParse(parts[5].TrimEnd('%'), out var freq) ? freq : 0.0, + metadata = new Dictionary() + }; + + problem.metadata[Common.Models.TagName.FolderName] = relPath.Split('/').First(); + problem.metadata[Common.Models.TagName.FileName] = relPath.Split('/').Last().Split('.').First(); + + // Additional metadata can be parsed here if available + problems.Add(problem); + } + + return problems; + } + +} \ No newline at end of file diff --git a/src/Synchronizer/ProblemsProcessor.cs b/src/Synchronizer/ProblemsProcessor.cs new file mode 100644 index 0000000..a1a66d8 --- /dev/null +++ b/src/Synchronizer/ProblemsProcessor.cs @@ -0,0 +1,107 @@ +using Microsoft.Azure.Cosmos; +using Common.Models; +using Common.DatabaseModels; + +namespace Synchronizer; + +public class ProblemsProcessor +{ + private string rootDir; + private CosmosClient cosmosClient; + private DateTime ScrappedDate = new DateTime(2025, 7, 1); + private Dictionary TagsToReplace = + new Dictionary { { "more-than-six-months", "one-year" } }; + + public ProblemsProcessor(string rootDir, CosmosClient client) + { + this.rootDir = rootDir; + this.cosmosClient = client; + } + + public async Task Run() + { + var files = Helper.GetCsvFileNames(rootDir); + + Dictionary allProblems = new Dictionary(); + HashSet recentTags = new HashSet(StringComparer.OrdinalIgnoreCase); + + foreach (var file in files) + { + var problems = Helper.ReadProblemsFromCsv(file); + foreach (var problem in problems) + { + var companyName = problem.metadata[TagName.FolderName]; + var recent = problem.metadata[TagName.FileName]; + if (TagsToReplace.Keys.Contains(recent, StringComparer.OrdinalIgnoreCase)) + { + recent = TagsToReplace[recent.ToLower()]; + } + recentTags.Add(recent); + problem.metadata.Clear(); + + if (!allProblems.ContainsKey(problem.id)) + { + allProblems[problem.id] = new Problem(problem); + allProblems[problem.id].metadata["scrapped_date"] = ScrappedDate.ToString("yyyy-MM-dd"); + if (!allProblems[problem.id].companies.ContainsKey(companyName)) + { + allProblems[problem.id].companies[companyName] = new List(); + } + allProblems[problem.id].companies[companyName].Add(recent); + } + else + { + if (!allProblems[problem.id].companies.ContainsKey(companyName)) + { + allProblems[problem.id].companies[companyName] = new List(); + } + allProblems[problem.id].companies[companyName].Add(recent); + } + } + + } + // Implementation for processing problems + Console.WriteLine($"Total unique problems found: {allProblems.Count}"); + Console.WriteLine($"Recent tags found: {string.Join(", ", recentTags)}"); + + // var sampleProblems = allProblems.Values.Take(Math.Min(5, allProblems.Count)).ToList(); + // foreach (var prob in sampleProblems) Console.WriteLine(prob.ToString()); + + var db = cosmosClient.GetDatabase(ComosDbSettings.DatabaseId); + var container = db.GetContainer(ComosDbSettings.ContainerId); + + var problemsToUpsert = allProblems.Values.ToList(); + + var batchSize = 50; + for (int start = 0; start < problemsToUpsert.Count; start += batchSize) + { + var batch = problemsToUpsert.Skip(start).Take(batchSize).ToList(); + Console.WriteLine($"Upserting batch of {batch.Count} problems... | start: {start}"); + await UpsertProblems(container, batch); + await Task.Delay(TimeSpan.FromSeconds(1)); // To avoid overwhelming the Cosmos DB with requests + } + + } + + private async Task UpsertProblems(Container container, List problems) + { + var tasks = new List>>(); + var problemIds = new List(); + foreach (var problem in problems) + { + try + { + problemIds.Add(problem.id); + tasks.Add(container.UpsertItemAsync(new ProblemSchema(problem))); + await Task.Delay(TimeSpan.FromMilliseconds(10)); // To avoid overwhelming the Cosmos DB with requests + } + catch (Exception ex) + { + Console.WriteLine($"Error upserting problem {problem.id}: {ex.Message}"); + } + } + + await Task.WhenAll(tasks); + Console.WriteLine($"Upserted {tasks.Count} problems. {string.Join(", ", problemIds)}"); + } +} \ No newline at end of file diff --git a/src/Synchronizer/Program.cs b/src/Synchronizer/Program.cs new file mode 100644 index 0000000..046ba2d --- /dev/null +++ b/src/Synchronizer/Program.cs @@ -0,0 +1,83 @@ +īģŋnamespace Synchronizer; + +using Microsoft.Azure.Cosmos; +using ProblemSchema = Common.Models.Problem; + +internal class Program +{ + private static bool SetupDb(CosmosClient client) + { + try + { + client.CreateDatabaseIfNotExistsAsync(ComosDbSettings.DatabaseId).GetAwaiter().GetResult(); + var db = client.GetDatabase(ComosDbSettings.DatabaseId); + db.CreateContainerIfNotExistsAsync(ComosDbSettings.ContainerId, partitionKeyPath: "/id").GetAwaiter().GetResult(); + var container = db.GetContainer(ComosDbSettings.ContainerId); + } + catch (Exception ex) + { + Console.WriteLine(ex); + return false; + } + return true; + } + + static void Test(CosmosClient client) + { + var db = client.GetDatabase(ComosDbSettings.DatabaseId); + var container = db.GetContainer(ComosDbSettings.ContainerId); + + var res = container.UpsertItemAsync(new ProblemSchema + { + id = "1", + title = "Two Sum", + url = "https://leetcode.com/problems/two-sum/", + difficulty = Common.Models.Difficulty.Easy, + companies = new Dictionary> { {"Google", new List{"6-month"}} }, + acceptance = 78.5, + metadata = new Dictionary + { + { "tag", "array" }, + { "frequency", "high" } + } + }).GetAwaiter().GetResult(); + + var res2 = container.UpsertItemAsync(new ProblemSchema + { + id = "2", + title = "Three Sum", + url = "https://leetcode.com/problems/two-sum/", + difficulty = Common.Models.Difficulty.Easy, + companies = new Dictionary> { {"Meta", new List{"3-month"}} }, + metadata = new Dictionary + { + { "tag", "array" }, + { "frequency", "high" } + } + }).GetAwaiter().GetResult(); + } + + public static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + + CosmosClient client = new CosmosClient(ComosDbSettings.Uri, ComosDbSettings.PrimaryKey); + + SetupDb(client); + // Test(client); + + string rootDir = args.Length > 0 ? args[0] : throw new ArgumentException("Root directory argument is required"); + var processor = new ProblemsProcessor(rootDir, client); + processor.Run().GetAwaiter().GetResult(); + + Console.WriteLine("Bye bye"); + } +} + +public class ComosDbSettings +{ + public static string Uri { get; } = "https://lcw-cosmos.documents.azure.com:443/"; + public static string DatabaseId { get; } = "LeetCodeWrapper"; + public static string ContainerId { get; } = "Problems"; + public static string PrimaryKey { get; } = ""; +} diff --git a/src/Synchronizer/Synchronizer.csproj b/src/Synchronizer/Synchronizer.csproj new file mode 100644 index 0000000..36a7b00 --- /dev/null +++ b/src/Synchronizer/Synchronizer.csproj @@ -0,0 +1,20 @@ +īģŋ + + + Exe + net8.0 + enable + enable + + + + + + + + + + + + + diff --git a/src/client/.env.development b/src/client/.env.development new file mode 100644 index 0000000..9878cb0 --- /dev/null +++ b/src/client/.env.development @@ -0,0 +1 @@ +REACT_APP_API_BASE_URL=http://localhost:5164/api \ No newline at end of file diff --git a/src/client/.env.production b/src/client/.env.production new file mode 100644 index 0000000..ea5464b --- /dev/null +++ b/src/client/.env.production @@ -0,0 +1 @@ +REACT_APP_API_BASE_URL=https://leetwrap.centralindia.cloudapp.azure.com/api \ No newline at end of file diff --git a/src/client/.gitignore b/src/client/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/src/client/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/src/client/README.md b/src/client/README.md new file mode 100644 index 0000000..58beeac --- /dev/null +++ b/src/client/README.md @@ -0,0 +1,70 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in your browser. + +The page will reload when you make changes.\ +You may also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can't go back!** + +If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. + +You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `npm run build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/src/client/package-lock.json b/src/client/package-lock.json new file mode 100644 index 0000000..569a8a5 --- /dev/null +++ b/src/client/package-lock.json @@ -0,0 +1,17609 @@ +{ + "name": "client", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client", + "version": "0.1.0", + "dependencies": { + "@testing-library/dom": "^10.4.1", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^13.5.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.9.4", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "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/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.4.tgz", + "integrity": "sha512-Aa+yDiH87980jR6zvRfFuCR1+dLb00vBydhTL+zI992Rz/wQhSvuxjmOOuJOgO3XmakO6RykRGD2S1mq1AtgHA==", + "license": "MIT", + "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==", + "license": "Apache-2.0", + "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==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "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==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", + "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==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "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==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "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.27.1", + "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.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "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.", + "license": "MIT", + "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.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "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.", + "license": "MIT", + "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.", + "license": "MIT", + "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.", + "license": "MIT", + "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.", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", + "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "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==", + "license": "MIT", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz", + "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", + "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-flow": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", + "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "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==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "CC0-1.0" + }, + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "Python-2.0" + }, + "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==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==", + "license": "MIT", + "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", + "license": "Apache-2.0", + "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==", + "license": "Apache-2.0", + "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", + "license": "BSD-3-Clause" + }, + "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==", + "license": "ISC", + "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.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "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==", + "license": "MIT", + "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.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "license": "MIT", + "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/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/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==", + "license": "MIT" + }, + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "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/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.17.tgz", + "integrity": "sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ==", + "license": "MIT", + "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/@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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.13.0.tgz", + "integrity": "sha512-2ih5qGw5SZJ+2fLZxP6Lr6Na2NTIgPRL/7Kmyuw0uIyBQnuhQ8fi8fzUTd38eIQmqp+GYLC00cI6WgtqHxBwmw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "Apache-2.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/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==", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", + "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "license": "MIT", + "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.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz", + "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.0.tgz", + "integrity": "sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.14.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz", + "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==", + "license": "MIT", + "dependencies": { + "@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==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz", + "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.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==", + "license": "BSD-3-Clause" + }, + "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==", + "license": "Apache-2.0" + }, + "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", + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/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==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "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" + ], + "license": "Apache-2.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" + ], + "license": "Apache-2.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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "ISC", + "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==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "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==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" + }, + "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==", + "license": "MIT", + "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.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/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==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.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==", + "license": "MIT", + "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.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "Apache-2.0", + "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==", + "license": "MIT", + "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-loader": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "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==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "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==", + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "license": "MIT", + "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 || ^8.0.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==", + "license": "MIT", + "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.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.1.0.tgz", + "integrity": "sha512-f9B1xMdnkCIqe+2dHrJsoQFRz7reChaAHE/65SdaykPklQqhme2WaC08oD3is77x9ff98/9EazAKFDZv5rFEQg==", + "license": "MIT", + "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-proposal-private-property-in-object": "^7.16.7", + "@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/babel-preset-react-app/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.12.tgz", + "integrity": "sha512-vAPMQdnyKCBtkmQA6FMCBvU9qFIppS3nzyXnEM+Lo2IAhG4Mpjv9cCxMudhgV3YdNNJv6TNqXy97dfRVL2LmaQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.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==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "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==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause" + }, + "node_modules/browserslist": { + "version": "4.26.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "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==", + "license": "Apache-2.0", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.30001748", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001748.tgz", + "integrity": "sha512-5P5UgAr0+aBmNiplks08JLw+AW/XG/SurlgZLgB1dDLfAw7EfRGxIwzPHxdSCGY/BTKDqIVyJL87cCN6s0ZR0w==", + "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" + } + ], + "license": "CC-BY-4.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "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/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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/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==", + "license": "MIT" + }, + "node_modules/coa/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==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.1.tgz", + "integrity": "sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", + "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.1.tgz", + "integrity": "sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==", + "hasInstallScript": true, + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "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.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "ISC", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "CC0-1.0", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT" + }, + "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" + } + ], + "license": "CC0-1.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0" + }, + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "BSD-2-Clause" + }, + "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==", + "license": "MIT", + "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.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "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.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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" + } + ], + "license": "BSD-2-Clause" + }, + "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", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.230", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.230.tgz", + "integrity": "sha512-A6A6Fd3+gMdaed9wX83CvHYJb4UuapPD5X5SLq72VZJzxHSY0/LUweGXRWmQlh2ln7KV7iw7jnwXK7dlPoOnHQ==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "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==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-3-Clause", + "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.", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "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", + "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.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "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.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "Apache-2.0", + "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==", + "license": "MIT", + "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/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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?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==", + "license": "Python-2.0" + }, + "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==", + "license": "MIT", + "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/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "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.8" + }, + "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==", + "license": "ISC", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "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==", + "license": "Apache-2.0", + "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==", + "license": "Apache-2.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "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==", + "license": "MIT", + "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.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "license": "MIT", + "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==", + "license": "MIT", + "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/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==", + "license": "MIT", + "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/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", + "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "license": "Unlicense" + }, + "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==", + "license": "ISC" + }, + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "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==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "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", + "license": "ISC", + "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==", + "license": "ISC", + "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==", + "license": "BSD-2-Clause" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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.4", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.4.tgz", + "integrity": "sha512-V/PZeWsqhfpE27nKeX9EO2sbR+D17A+tLf6qU+ht66jdUsN0QLKJN27Z+1+gHrVMKgndBahes0PU6rRihDgHTw==", + "license": "MIT", + "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" + } + ], + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "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==", + "license": "ISC", + "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==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.", + "license": "ISC", + "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==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "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==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "ISC", + "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==", + "license": "BSD-3-Clause", + "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/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==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "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==", + "license": "BlueOak-1.0.0", + "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.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "license": "MIT", + "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-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "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-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "license": "MIT", + "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==", + "license": "MIT", + "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-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "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-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", + "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "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.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "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==", + "license": "MIT", + "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.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0" + }, + "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==", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", + "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "CC0-1.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "Unlicense", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "license": "MIT", + "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==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "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==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz", + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", + "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "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==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BlueOak-1.0.0" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "BlueOak-1.0.0", + "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==", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "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==", + "license": "CC0-1.0", + "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-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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "ISC", + "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" + } + ], + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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" + } + ], + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "CC0-1.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "CC0-1.0" + }, + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/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==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "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)", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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/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==", + "license": "MIT", + "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/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/react-error-overlay": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", + "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.4.tgz", + "integrity": "sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.4.tgz", + "integrity": "sha512-f30P6bIkmYvnHHa5Gcu65deIXoA2+r3Eb6PJIAddvsT9aGlchMatJ51GgpU470aSqRRbFX22T70yQNUGuW3DfA==", + "license": "MIT", + "dependencies": { + "react-router": "7.9.4" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-router/node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "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==", + "license": "MIT", + "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/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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "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==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "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==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "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/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==", + "license": "MIT" + }, + "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==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "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", + "license": "ISC", + "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==", + "license": "MIT", + "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", + "license": "MIT", + "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/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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "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" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "CC0-1.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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==", + "license": "MIT", + "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/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.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==", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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-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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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", + "license": "MIT" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause" + }, + "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", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "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==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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==", + "license": "MIT", + "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.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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.", + "license": "MIT", + "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/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==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/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==", + "license": "MIT" + }, + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause" + }, + "node_modules/svgo/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==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", + "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/tailwindcss/node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "(MIT OR CC0-1.0)", + "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==", + "license": "MIT", + "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.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "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.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "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/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==", + "license": "MIT" + }, + "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==", + "license": "ISC", + "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==", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "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==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "Apache-2.0" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "license": "MIT", + "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==", + "license": "0BSD" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "(MIT OR CC0-1.0)", + "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==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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/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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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.", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0" + }, + "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==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.102.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.0.tgz", + "integrity": "sha512-hUtqAR3ZLVEYDEABdBioQCIqSoguHbFn1K7WlPPWSuXmx0031BD73PSE35jKyftdSh4YLDoQNgK4pqBt5Q82MA==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.24.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.3", + "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": "^4.3.2", + "tapable": "^2.2.3", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "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==", + "license": "Apache-2.0", + "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==", + "license": "Apache-2.0", + "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==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "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==", + "license": "MIT", + "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.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "BSD-2-Clause" + }, + "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==", + "license": "MIT", + "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", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "license": "MIT", + "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", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "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==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/src/client/package.json b/src/client/package.json new file mode 100644 index 0000000..cd3200d --- /dev/null +++ b/src/client/package.json @@ -0,0 +1,40 @@ +{ + "name": "client", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/dom": "^10.4.1", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^13.5.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.9.4", + "react-scripts": "5.0.1", + "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/src/client/public/favicon.ico b/src/client/public/favicon.ico new file mode 100644 index 0000000..a11777c Binary files /dev/null and b/src/client/public/favicon.ico differ diff --git a/src/client/public/index.html b/src/client/public/index.html new file mode 100644 index 0000000..aa069f2 --- /dev/null +++ b/src/client/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/src/client/public/logo192.png b/src/client/public/logo192.png new file mode 100644 index 0000000..fc44b0a Binary files /dev/null and b/src/client/public/logo192.png differ diff --git a/src/client/public/logo512.png b/src/client/public/logo512.png new file mode 100644 index 0000000..a4e47a6 Binary files /dev/null and b/src/client/public/logo512.png differ diff --git a/src/client/public/manifest.json b/src/client/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/src/client/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/src/client/public/robots.txt b/src/client/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/src/client/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/src/client/src/App.css b/src/client/src/App.css new file mode 100644 index 0000000..74b5e05 --- /dev/null +++ b/src/client/src/App.css @@ -0,0 +1,38 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/src/client/src/App.js b/src/client/src/App.js new file mode 100644 index 0000000..b0381e8 --- /dev/null +++ b/src/client/src/App.js @@ -0,0 +1,21 @@ +import "./App.css"; +import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; +import Main from "./components/layout/Main"; +import ProblemPage from "./components/problems/ProblemPage"; +import Header from "./components/layout/Header"; + +function App() { + return ( +
+ +
+ + } /> + } /> + + +
+ ); +} + +export default App; diff --git a/src/client/src/components/filters/FilterOptions.js b/src/client/src/components/filters/FilterOptions.js new file mode 100644 index 0000000..4861723 --- /dev/null +++ b/src/client/src/components/filters/FilterOptions.js @@ -0,0 +1,107 @@ +import React from "react"; +import { DifficultyLevel } from "../../constants/difficulty"; +import "../../styles/components/FilterOptions.css"; + +const TIME_PERIODS = [ + { value: "thirty-days", label: "Last 30 Days" }, + { value: "three-months", label: "Last 3 Months" }, + { value: "six-months", label: "Last 6 Months" }, + { value: "one-year", label: "Last Year" }, + { value: "all", label: "All Time" }, +]; + +const DIFFICULTIES = [ + { value: DifficultyLevel.EASY, label: "Easy" }, + { value: DifficultyLevel.MEDIUM, label: "Medium" }, + { value: DifficultyLevel.HARD, label: "Hard" }, +]; + +const FilterOptions = ({ currentFilters, onFilterChange, companies = [] }) => { + const handleCompanyChange = (e) => { + onFilterChange({ ...currentFilters, company: e.target.value }); + }; + + const handleTimePeriodChange = (e) => { + onFilterChange({ ...currentFilters, timePeriod: e.target.value }); + }; + + const handleDifficultyChange = (e) => { + onFilterChange({ ...currentFilters, difficulty: e.target.value }); + }; + + const handleClearFilters = () => { + onFilterChange({ + company: "", + timePeriod: "", + difficulty: "", + }); + }; + + + return ( +
+
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ ); +}; + +export default FilterOptions; diff --git a/src/client/src/components/hooks/useSolvedProblems.js b/src/client/src/components/hooks/useSolvedProblems.js new file mode 100644 index 0000000..689d5eb --- /dev/null +++ b/src/client/src/components/hooks/useSolvedProblems.js @@ -0,0 +1,74 @@ +import { useState, useEffect } from 'react'; + +const useSolvedProblems = () => { + // Initialize state directly from localStorage using lazy initial state + const [solvedProblems, setSolvedProblems] = useState(() => { + try { + const stored = localStorage.getItem('leetcode-solved-problems'); + if (stored) { + const parsed = JSON.parse(stored); + return new Set(parsed); + } + } catch (error) { + console.error('Error loading solved problems from localStorage:', error); + } + return new Set(); + }); + + // Single useEffect for saving to localStorage + useEffect(() => { + try { + const array = Array.from(solvedProblems); + localStorage.setItem('leetcode-solved-problems', JSON.stringify(array)); + } catch (error) { + console.error('Error saving solved problems to localStorage:', error); + } + }, [solvedProblems]); + + const toggleSolved = (problemId) => { + setSolvedProblems(prev => { + const newSet = new Set(prev); + if (newSet.has(problemId)) { + newSet.delete(problemId); + } else { + newSet.add(problemId); + } + return newSet; + }); + }; + + const isSolved = (problemId) => { + return solvedProblems.has(problemId); + }; + + const markSolved = (problemId) => { + setSolvedProblems(prev => { + const newSet = new Set(prev); + newSet.add(problemId); + return newSet; + }); + }; + + const markUnsolved = (problemId) => { + setSolvedProblems(prev => { + const newSet = new Set(prev); + newSet.delete(problemId); + return newSet; + }); + }; + + const clearAllSolved = () => { + setSolvedProblems(new Set()); + }; + + return { + solvedProblems, + toggleSolved, + isSolved, + markSolved, + markUnsolved, + clearAllSolved + }; +}; + +export default useSolvedProblems; \ No newline at end of file diff --git a/src/client/src/components/layout/Body.js b/src/client/src/components/layout/Body.js new file mode 100644 index 0000000..f771550 --- /dev/null +++ b/src/client/src/components/layout/Body.js @@ -0,0 +1,64 @@ +import React from "react"; +import ProblemGrid from "../problems/ProblemGrid"; +import Pagination from "./Pagination"; +import "../../styles/layout/Body.css"; + +const Body = ({ + problems, + loading, + error, + filters, + currentPage, + totalPages, + onPageChange, + hasActiveFilters, + currentView, + onViewChange, + solvedProblems, + shuffleState +}) => { + if (loading) { + return ( +
+
+ {hasActiveFilters + ? "Loading filtered problems..." + : "Loading problems..."} +
+
+ ); + } + + if (error) { + return ( +
+
+ {error} + +
+
+ ); + } + + return ( +
+
+ + +
+
+ ); +}; + +export default Body; \ No newline at end of file diff --git a/src/client/src/components/layout/Header.js b/src/client/src/components/layout/Header.js new file mode 100644 index 0000000..7fc2f69 --- /dev/null +++ b/src/client/src/components/layout/Header.js @@ -0,0 +1,17 @@ +import React from "react"; +import "../../styles/layout/Header.css"; +import { Link } from "react-router-dom"; + +const Header = () => { + return ( +
+
+ +

LeetCode Problem Tracker

+ +
+
+ ); +}; + +export default Header; diff --git a/src/client/src/components/layout/Main.js b/src/client/src/components/layout/Main.js new file mode 100644 index 0000000..80b44a5 --- /dev/null +++ b/src/client/src/components/layout/Main.js @@ -0,0 +1,143 @@ +import React, { useState, useEffect, useMemo } from "react"; +import { fetchProblems } from "../../services/api"; +import Nav from "./Nav"; +import Body from "./Body"; +import useSolvedProblems from "../hooks/useSolvedProblems"; +import "../../styles/layout/Main.css"; + +const Main = () => { + const [problems, setProblems] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [filters, setFilters] = useState({ + company: "", + timePeriod: "", + difficulty: "", + }); + const [currentPage, setCurrentPage] = useState(1); + const [totalPages, setTotalPages] = useState(1); + const [currentView, setCurrentView] = useState('list'); + const [shuffle, setShuffle] = useState(-1); // -1 means shuffle is off + const [isShuffleEnabled, setIsShuffleEnabled] = useState(false); + + const solvedProblems = useSolvedProblems(); + const PROBLEMS_PER_PAGE = 50; + + const hasActiveFilters = useMemo(() => { + return !!(filters.company || filters.timePeriod || filters.difficulty); + }, [filters]); + + const generateShuffleNumber = () => { + return Math.floor(Math.random() * 10000) + 1; + }; + + // Toggle shuffle on/off + const toggleShuffle = () => { + if (isShuffleEnabled) { + // Turning shuffle off + setIsShuffleEnabled(false); + setShuffle(-1); + } else { + // Turning shuffle on - generate new number if none exists + setIsShuffleEnabled(true); + if (shuffle === -1) { + setShuffle(generateShuffleNumber()); + } + } + }; + + // Regenerate shuffle number + const regenerateShuffle = () => { + const newShuffle = generateShuffleNumber(); + setShuffle(newShuffle); + setCurrentPage(1); // Reset to first page when regenerating shuffle + }; + + useEffect(() => { + const loadProblems = async () => { + setLoading(true); + try { + const data = await fetchProblems( + currentPage, + PROBLEMS_PER_PAGE, + filters, + isShuffleEnabled ? shuffle : -1 // Only pass shuffle if enabled + ); + setProblems(data); + setError(null); + + if (data.length < PROBLEMS_PER_PAGE) { + setTotalPages(currentPage); + } else { + setTotalPages(currentPage + 1); + } + } catch (err) { + setError("Failed to fetch problems. Please try again later."); + setProblems([]); + } finally { + setLoading(false); + } + }; + + loadProblems(); + }, [currentPage, filters, shuffle, isShuffleEnabled]); + + const companies = useMemo(() => { + const companySet = new Set(); + problems.forEach((problem) => { + if (problem.companies) { + Object.keys(problem.companies).forEach((company) => + companySet.add(company) + ); + } + }); + return Array.from(companySet).sort(); + }, [problems]); + + const handleFilterChange = (newFilters) => { + setFilters(newFilters); + setCurrentPage(1); + }; + + const handlePageChange = (page) => { + setCurrentPage(page); + window.scrollTo({ top: 0, behavior: 'smooth' }); + }; + + return ( +
+
+ ); +}; + +export default Main; \ No newline at end of file diff --git a/src/client/src/components/layout/Nav.js b/src/client/src/components/layout/Nav.js new file mode 100644 index 0000000..a8aa9f8 --- /dev/null +++ b/src/client/src/components/layout/Nav.js @@ -0,0 +1,19 @@ +import React from "react"; +import FilterOptions from "../filters/FilterOptions"; +import "../../styles/layout/Nav.css"; + +const Nav = ({ filters, onFilterChange, companies }) => { + return ( + + ); +}; + +export default Nav; diff --git a/src/client/src/components/layout/Pagination.js b/src/client/src/components/layout/Pagination.js new file mode 100644 index 0000000..2458d84 --- /dev/null +++ b/src/client/src/components/layout/Pagination.js @@ -0,0 +1,75 @@ +// components/Pagination.js +import React from "react"; +import "../../styles/layout/Pagination.css"; + +const Pagination = ({ currentPage, totalPages, onPageChange }) => { + const getPageNumbers = () => { + const pages = []; + const maxVisiblePages = 5; + + let startPage = Math.max(1, currentPage - Math.floor(maxVisiblePages / 2)); + let endPage = Math.min(totalPages, startPage + maxVisiblePages - 1); + + // Adjust start page if we're near the end + if (endPage - startPage + 1 < maxVisiblePages) { + startPage = Math.max(1, endPage - maxVisiblePages + 1); + } + + for (let i = startPage; i <= endPage; i++) { + pages.push(i); + } + + return pages; + }; + + if (totalPages <= 1) return null; + + return ( +
+ {/* First Page Button */} + + + {/* Previous Page Button */} + + + {/* Page Numbers */} +
+ {getPageNumbers().map(page => ( + + ))} +
+ + {/* Next Page Button */} + +
+ ); +}; + +export default Pagination; \ No newline at end of file diff --git a/src/client/src/components/layout/ShuffleToggle.js b/src/client/src/components/layout/ShuffleToggle.js new file mode 100644 index 0000000..40684cb --- /dev/null +++ b/src/client/src/components/layout/ShuffleToggle.js @@ -0,0 +1,25 @@ +import React from "react"; +import "../../styles/layout/ShuffleToggle.css"; + +const ShuffleToggle = ({ shuffleState }) => { + const { isShuffleEnabled, toggleShuffle } = shuffleState; + + return ( +
+
+ +
+
+ ); +}; + +export default ShuffleToggle; \ No newline at end of file diff --git a/src/client/src/components/layout/ViewToggle.js b/src/client/src/components/layout/ViewToggle.js new file mode 100644 index 0000000..ab3bfa6 --- /dev/null +++ b/src/client/src/components/layout/ViewToggle.js @@ -0,0 +1,65 @@ +import React from "react"; +import ShuffleToggle from "./ShuffleToggle"; +import "../../styles/layout/ViewToggle.css"; + +const ViewToggle = ({ + currentView, + onViewChange, + solvedProblems, + shuffleState, +}) => { + const handleClearAll = () => { + if ( + window.confirm( + "Are you sure you want to clear all solved problems? This action cannot be undone." + ) + ) { + solvedProblems.clearAllSolved(); + } + }; + + const hasSolvedProblems = solvedProblems.solvedProblems.size > 0; + + return ( +
+
+
+ + +
+
+ +
+ {shuffleState && ( +
+ +
+ )} + + {hasSolvedProblems && ( + + )} +
+
+ ); +}; + +export default ViewToggle; diff --git a/src/client/src/components/problems/ProblemCard.js b/src/client/src/components/problems/ProblemCard.js new file mode 100644 index 0000000..369c5bd --- /dev/null +++ b/src/client/src/components/problems/ProblemCard.js @@ -0,0 +1,109 @@ +import React from "react"; +import { + getDifficultyText, + getDifficultyClass, +} from "../../constants/difficulty"; +import "../../styles/components/ProblemCard.css"; +import { Link } from "react-router-dom"; + +const TIME_PERIOD_LABELS = { + "thirty-days": "Last 30 Days", + "three-months": "Last 3 Months", + "six-months": "Last 6 Months", + "one-year": "Last Year", + all: "All Time", +}; + +const ProblemCard = ({ problem, solvedProblems }) => { + const difficultyText = getDifficultyText(problem.difficulty); + const difficultyClass = getDifficultyClass(problem.difficulty); + const isSolved = solvedProblems.isSolved(problem.id); + + const handleCheckboxChange = () => { + solvedProblems.toggleSolved(problem.id); + }; + + const getTopCompanies = (companies) => { + if (!companies) return []; + + return Object.entries(companies) + .map(([name, periods]) => ({ + name, + timePeriods: periods.sort((a, b) => { + const order = [ + "thirty-days", + "three-months", + "six-months", + "one-year", + "all", + ]; + return order.indexOf(a) - order.indexOf(b); + }), + })) + .slice(0, 5); + }; + + const topCompanies = getTopCompanies(problem.companies); + + return ( +
+ {/* Checkbox in top-right corner */} +
+ +
+ +
+

+ {problem.title} +

+ + {difficultyText} + +
+ +
+ Acceptance: {problem.acceptance}% + Frequency: {problem.frequency}% +
+ + {topCompanies.length > 0 && ( +
+ Top Companies: +
+ {topCompanies.map((company, index) => ( +
TIME_PERIOD_LABELS[p]) + .join(", ")} + > + + {company.name + .split("-") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" ")} + + {company.timePeriods.includes("thirty-days") && ( + + đŸ”Ĩ + + )} +
+ ))} +
+
+ )} +
+ ); +}; + +export default ProblemCard; \ No newline at end of file diff --git a/src/client/src/components/problems/ProblemGrid.js b/src/client/src/components/problems/ProblemGrid.js new file mode 100644 index 0000000..d8c219d --- /dev/null +++ b/src/client/src/components/problems/ProblemGrid.js @@ -0,0 +1,56 @@ +import React from "react"; +import ProblemCard from "./ProblemCard"; +import ProblemList from "./ProblemList"; +import ViewToggle from "../layout/ViewToggle"; +import "../../styles/components/ProblemGrid.css"; + +const ProblemGrid = ({ + problems, + hasActiveFilters, + currentView, + onViewChange, + solvedProblems, + shuffleState, +}) => { + if (problems.length === 0) { + return ( +
+

No problems found matching your criteria.

+ {hasActiveFilters && ( +

+ Try adjusting your filters or clearing them to see all problems. +

+ )} +
+ ); + } + + return ( +
+ + + {currentView === "grid" ? ( +
+ {problems.map((problem) => ( + + ))} +
+ ) : ( +
+ +
+ )} +
+ ); +}; + +export default ProblemGrid; diff --git a/src/client/src/components/problems/ProblemList.js b/src/client/src/components/problems/ProblemList.js new file mode 100644 index 0000000..e1c467c --- /dev/null +++ b/src/client/src/components/problems/ProblemList.js @@ -0,0 +1,72 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import { + getDifficultyText, + getDifficultyClass, +} from "../../constants/difficulty"; +import "../../styles/components/ProblemList.css"; + +const ProblemList = ({ problems, solvedProblems }) => { + if (problems.length === 0) { + return ( +
+

No problems found matching your criteria.

+
+ ); + } + + return ( +
+
+ Solved + ID + Problem Name + Difficulty + Acceptance +
+
+ {problems.map((problem, index) => ( + + ))} +
+
+ ); +}; + +const ProblemListItem = ({ problem, index, solvedProblems }) => { + const difficultyText = getDifficultyText(problem.difficulty); + const difficultyClass = getDifficultyClass(problem.difficulty); + const isSolved = solvedProblems.isSolved(problem.id); + + const handleCheckboxChange = () => { + solvedProblems.toggleSolved(problem.id); + }; + + return ( +
+
+ +
+
{problem.id}
+
+ {problem.title} +
+
+ {difficultyText} +
+
{problem.acceptance}%
+
+ ); +}; + +export default ProblemList; \ No newline at end of file diff --git a/src/client/src/components/problems/ProblemPage.js b/src/client/src/components/problems/ProblemPage.js new file mode 100644 index 0000000..7d4ccbd --- /dev/null +++ b/src/client/src/components/problems/ProblemPage.js @@ -0,0 +1,117 @@ +import React, { useEffect, useState } from "react"; +import { useParams } from "react-router-dom"; +import { getProblemById } from "../../services/api"; +import "../../styles/components/ProblemPage.css"; + +const tagOrder = ["thirty-days", "three-months", "six-months", "one-year", "all"]; + +const ProblemPage = () => { + const { id } = useParams(); + const [problem, setProblem] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); + const [tagMap, setTagMap] = useState({}); + + useEffect(() => { + const fetchProblem = async () => { + try { + const response = await getProblemById(id); + setProblem(response); + setTagMap(groupCompaniesByTag(response.companies)); + } catch (err) { + setError("Problem not found or failed to fetch."); + } finally { + setLoading(false); + } + }; + fetchProblem(); + }, [id]); + + if (loading) return
Loading...
; + if (error) return
{error}
; + if (!problem) return
No problem found
; + + return ( +
+
+

{problem.title}

+ + View on LeetCode + +
+
+ + {difficultyLabel(problem.difficulty)} + + + Acceptance: {problem.acceptance}% + + + Frequency: {problem.frequency}% + + + ID: {problem.id} + +
+

Companies by Tag

+ + + + + + + + + {tagOrder + .filter(tag => tagMap[tag]) + .map(tag => ( + + + + + ))} + +
TagCompanies
+ {tag} + + {tagMap[tag].map(company => ( + + {company} + + ))} +
+
+ ); +}; + +function groupCompaniesByTag(companies) { + const tagMap = {}; + Object.entries(companies).forEach(([company, tags]) => { + tags.forEach(tag => { + if (!tagMap[tag]) tagMap[tag] = []; + tagMap[tag].push(company); + }); + }); + return tagMap; +} + +function difficultyLabel(diff) { + if (diff === 1) return "Easy"; + if (diff === 2) return "Medium"; + if (diff === 3) return "Hard"; + return "Unknown"; +} + +function difficultyClass(diff) { + if (diff === 1) return "easy"; + if (diff === 2) return "medium"; + if (diff === 3) return "hard"; + return "unknown"; +} + +export default ProblemPage; \ No newline at end of file diff --git a/src/client/src/constants/difficulty.js b/src/client/src/constants/difficulty.js new file mode 100644 index 0000000..986731f --- /dev/null +++ b/src/client/src/constants/difficulty.js @@ -0,0 +1,37 @@ +/** + * Enum for LeetCode problem difficulty levels + * @readonly + * @enum {number} + */ +export const DifficultyLevel = { + EASY: 1, + MEDIUM: 2, + HARD: 3, +}; + +/** + * Configuration for difficulty levels including display text and styling + * @readonly + * @type {Object.} + */ +export const DifficultyConfig = { + [DifficultyLevel.EASY]: { text: "Easy", className: "easy" }, + [DifficultyLevel.MEDIUM]: { text: "Medium", className: "medium" }, + [DifficultyLevel.HARD]: { text: "Hard", className: "hard" }, +}; + +/** + * Get the display text for a difficulty level + * @param {DifficultyLevel} level + * @returns {string} + */ +export const getDifficultyText = (level) => + DifficultyConfig[level]?.text ?? "Unknown"; + +/** + * Get the CSS class name for a difficulty level + * @param {DifficultyLevel} level + * @returns {string} + */ +export const getDifficultyClass = (level) => + DifficultyConfig[level]?.className ?? ""; diff --git a/src/client/src/index.css b/src/client/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/src/client/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/src/client/src/index.js b/src/client/src/index.js new file mode 100644 index 0000000..24c23ee --- /dev/null +++ b/src/client/src/index.js @@ -0,0 +1,12 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; + + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + +); \ No newline at end of file diff --git a/src/client/src/services/api.js b/src/client/src/services/api.js new file mode 100644 index 0000000..ca72016 --- /dev/null +++ b/src/client/src/services/api.js @@ -0,0 +1,45 @@ +// services/api.js +const API_BASE_URL = + process.env.REACT_APP_API_BASE_URL || "http://default-fallback.com/api"; + +export const fetchProblems = async ( + page = 1, + limit = 50, + filters = {}, + shuffle = -1 +) => { + const skip = (page - 1) * limit; + const params = new URLSearchParams({ + skip: skip.toString(), + limit: limit.toString(), + }); + + // Add filter parameters if they exist + if (filters.company) { + params.append("company", filters.company); + } + if (filters.difficulty) { + params.append("difficulty", filters.difficulty); + } + if (filters.timePeriod) { + params.append("tag", filters.timePeriod); + } + + if (shuffle !== -1) { + params.append("shuffle", shuffle.toString()); + } + + const response = await fetch(`${API_BASE_URL}/problems?${params}`); + if (!response.ok) { + throw new Error(`Network response was not ok: ${response.status}`); + } + return await response.json(); +}; + +export const getProblemById = async (id) => { + const response = await fetch(`${API_BASE_URL}/problems/${id}`); + if (!response.ok) { + throw new Error(`Failed to fetch problem #${id}`); + } + return await response.json(); +}; diff --git a/src/client/src/styles/components/FilterOptions.css b/src/client/src/styles/components/FilterOptions.css new file mode 100644 index 0000000..0037ce7 --- /dev/null +++ b/src/client/src/styles/components/FilterOptions.css @@ -0,0 +1,164 @@ +/* styles/components/FilterOptions.css */ +.filter-options { + display: flex; + gap: 1rem; /* Reduced from 2rem */ + align-items: flex-end; + flex-wrap: wrap; + padding: 0.75rem 0; /* Reduced from 1.5rem */ + position: relative; + z-index: 10; +} + +.filter-group { + display: flex; + flex-direction: column; + gap: 0.4rem; /* Reduced from 0.75rem */ + min-width: 180px; /* Reduced from 220px */ + position: relative; + z-index: 1000; +} + +.filter-group label { + font-size: 0.75rem; /* Reduced from 0.85rem */ + color: #4a5568; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.3px; /* Reduced from 0.5px */ + margin-bottom: 0; +} + +.filter-group select { + padding: 0.5rem 0.75rem; /* Reduced from 0.75rem 1rem */ + border: 1px solid #e2e8f0; /* Reduced from 2px */ + border-radius: 6px; /* Reduced from 10px */ + background-color: white; + font-size: 0.85rem; /* Reduced from 0.95rem */ + color: #2d3748; + cursor: pointer; + transition: all 0.2s ease; /* Simplified transition */ + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%234a5568'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 0.75rem center; /* Adjusted */ + background-size: 0.875rem; /* Reduced from 1rem */ + padding-right: 2rem; /* Reduced from 2.5rem */ + font-weight: 500; + position: relative; + z-index: 1001; + height: 36px; /* Fixed height for consistency */ +} + +.filter-group select option { + background: white; + color: #2d3748; + padding: 8px 12px; /* Reduced from 12px 16px */ + font-size: 0.85rem; /* Reduced from 0.95rem */ + border-bottom: 1px solid #f1f5f9; + position: relative; + z-index: 10000; +} + +.filter-group select:focus { + outline: none; + border-color: #0066cc; + box-shadow: 0 0 0 2px rgba(0, 102, 204, 0.1); /* Reduced from 3px */ + background-color: white; + z-index: 1002; +} + +/* Clear filters button - more compact */ +.clear-filters { + padding: 0.5rem 1rem; /* Reduced from 0.75rem 1.5rem */ + background: linear-gradient(135deg, #dc3545, #c82333); + color: white; + border: none; + border-radius: 6px; /* Reduced from 10px */ + cursor: pointer; + font-size: 0.8rem; /* Reduced from 0.9rem */ + font-weight: 600; + height: 36px; /* Match select height */ + transition: all 0.2s ease; + text-transform: uppercase; + letter-spacing: 0.3px; /* Reduced from 0.5px */ + box-shadow: 0 1px 4px rgba(220, 53, 69, 0.3); /* Reduced shadow */ + position: relative; + z-index: 100; + white-space: nowrap; +} + +.clear-filters:hover:not(:disabled) { + transform: translateY(-1px); + box-shadow: 0 2px 6px rgba(220, 53, 69, 0.4); +} + +.clear-filters:disabled { + opacity: 0.5; + cursor: not-allowed; + transform: none; + box-shadow: none; +} + +/* Ensure the nav has proper z-index but minimal padding */ +.nav { + background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%); + border-bottom: 1px solid #e2e8f0; + padding: 0; + box-shadow: 0 1px 8px rgba(0, 0, 0, 0.04); /* Reduced shadow */ + position: relative; + z-index: 100; +} + +.nav-content { + max-width: 1200px; + margin: 0 auto; + padding: 0 1.5rem; + position: relative; + z-index: 101; +} + +/* Compact layout for filter groups */ +.filter-group select { + min-height: 36px; /* Reduced from 48px */ +} + +/* Responsive adjustments - more compact */ +@media (max-width: 768px) { + .filter-options { + flex-direction: column; + gap: 0.75rem; /* Reduced from 1.25rem */ + padding: 0.5rem 0; /* Reduced from 1.25rem */ + z-index: 1000; + } + + .filter-group { + width: 100%; + min-width: unset; + z-index: 1001; + gap: 0.3rem; /* Reduced gap */ + } + + .filter-group select { + width: 100%; + z-index: 1002; + } + + .clear-filters { + width: 100%; + margin-top: 0.25rem; /* Reduced from 0.5rem */ + z-index: 100; + } + + .filter-group label { + font-size: 0.7rem; /* Even smaller on mobile */ + } +} + +/* Emergency fix - if dropdown still doesn't show */ +.filter-group select { + transform: translateZ(0); +} + +/* Make sure the dropdown has enough space but compact */ +.filter-group { + margin-bottom: 0; +} \ No newline at end of file diff --git a/src/client/src/styles/components/ProblemCard.css b/src/client/src/styles/components/ProblemCard.css new file mode 100644 index 0000000..9615365 --- /dev/null +++ b/src/client/src/styles/components/ProblemCard.css @@ -0,0 +1,353 @@ +/* styles/components/ProblemCard.css */ +.problem-card { + background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%); + border-radius: 12px; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + padding: 1.25rem; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + border: 1px solid rgba(255, 255, 255, 0.8); + position: relative; + overflow: hidden; +} + +/* Solved state for grid cards */ +.problem-card.solved { + background: linear-gradient(135deg, #f0f9f0 0%, #e8f5e8 100%); + border-left: 4px solid #10b981; +} + +.problem-card.solved::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: linear-gradient(90deg, #10b981, #34d399); + transform: scaleX(1); +} + +.problem-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: linear-gradient(90deg, #0066cc, #0099ff); + transform: scaleX(0); + transition: transform 0.3s ease; +} + +.problem-card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12); +} + +.problem-card:hover::before { + transform: scaleX(1); +} + +/* Checkbox positioning in grid cards */ +.problem-card-checkbox { + position: absolute; + top: 12px; + right: 12px; + z-index: 10; +} + +/* Custom Checkbox Styling for Grid */ +.problem-card .solved-checkbox { + width: 20px; + height: 20px; + cursor: pointer; + border: 2px solid #d1d5db; + border-radius: 4px; + background: white; + position: relative; + transition: all 0.2s ease; + appearance: none; + -webkit-appearance: none; + margin: 0; +} + +.problem-card .solved-checkbox:checked { + background: #10b981; + border-color: #10b981; +} + +.problem-card .solved-checkbox:checked::before { + content: '✓'; + position: absolute; + color: white; + font-size: 14px; + font-weight: bold; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.problem-card .solved-checkbox:hover { + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); +} + +.problem-card .solved-checkbox:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.2); +} + +.problem-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 1rem; + gap: 1rem; + padding-right: 30px; /* Make space for checkbox */ +} + +.problem-header h3 { + margin: 0; + font-size: 1.1rem; + flex: 1; + font-weight: 600; + line-height: 1.3; +} + +.problem-header a { + color: #1a202c; + text-decoration: none; + background: linear-gradient(90deg, #1a202c, #2d3748); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + transition: all 0.3s ease; + position: relative; +} + +.problem-header a::after { + content: ''; + position: absolute; + bottom: -2px; + left: 0; + width: 0; + height: 2px; + background: linear-gradient(90deg, #0066cc, #0099ff); + transition: width 0.3s ease; +} + +.problem-header a:hover { + background: linear-gradient(90deg, #0066cc, #0099ff); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.problem-header a:hover::after { + width: 100%; +} + +.difficulty { + padding: 0.3rem 0.8rem; + border-radius: 20px; + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + white-space: nowrap; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); + border: 1px solid rgba(255, 255, 255, 0.3); +} + +.difficulty.easy { + background: linear-gradient(135deg, #43a047, #4caf50); + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} + +.difficulty.medium { + background: linear-gradient(135deg, #ffa116, #ffb74d); + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} + +.difficulty.hard { + background: linear-gradient(135deg, #d32f2f, #f44336); + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} + +.problem-stats { + display: flex; + gap: 1rem; + margin-bottom: 1rem; + font-size: 0.85rem; +} + +.problem-stats span { + display: flex; + align-items: center; + color: #4a5568; + font-weight: 500; + position: relative; +} + +.problem-stats span::before { + content: ''; + display: inline-block; + width: 4px; + height: 4px; + border-radius: 50%; + background: #cbd5e0; + margin-right: 0.5rem; +} + +.problem-stats span:first-child::before { + display: none; +} + +.acceptance { + color: #2d3748; + font-weight: 600; +} + +.frequency { + color: #4a5568; +} + +.problem-companies { + border-top: 1px solid #e2e8f0; + padding-top: 1rem; + margin-top: 0.75rem; +} + +.problem-companies small { + display: block; + margin-bottom: 0.5rem; + color: #718096; + font-weight: 600; + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.company-tags { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; +} + +.company-tag { + background: linear-gradient(135deg, #ffffff, #f7fafc); + padding: 0.4rem 0.8rem; + border-radius: 10px; + font-size: 0.75rem; + display: flex; + align-items: center; + gap: 0.3rem; + border: 1px solid #e2e8f0; + transition: all 0.2s ease; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); + font-weight: 500; + color: #2d3748; +} + +.company-tag:hover { + transform: translateY(-1px); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); + border-color: #ffa116; + background: linear-gradient(135deg, #fffaf0, #fffbeb); +} + +.company-name { + font-weight: 600; + color: #2d3748; +} + +.recent-indicator { + font-size: 0.65rem; + animation: pulse 2s infinite; +} + +@keyframes pulse { + 0%, 100% { + opacity: 1; + transform: scale(1); + } + 50% { + opacity: 0.7; + transform: scale(1.1); + } +} + +/* Responsive Design */ +@media (max-width: 768px) { + .problem-card { + padding: 1rem; + margin: 0.25rem; + } + + .problem-header { + flex-direction: column; + align-items: flex-start; + gap: 0.5rem; + padding-right: 0; + } + + .problem-header h3 { + font-size: 1rem; + padding-right: 0; + } + + .difficulty { + align-self: flex-start; + } + + .problem-stats { + flex-direction: column; + gap: 0.25rem; + } + + .problem-stats span::before { + display: none; + } + + .company-tags { + gap: 0.3rem; + } + + .company-tag { + padding: 0.3rem 0.6rem; + font-size: 0.7rem; + } + + .problem-card-checkbox { + top: 8px; + right: 8px; + } + + .problem-card .solved-checkbox { + width: 18px; + height: 18px; + } + + .problem-card .solved-checkbox:checked::before { + font-size: 12px; + } +} + +/* Animation for card entrance */ +@keyframes cardEntrance { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.problem-card { + animation: cardEntrance 0.6s ease-out; +} \ No newline at end of file diff --git a/src/client/src/styles/components/ProblemGrid.css b/src/client/src/styles/components/ProblemGrid.css new file mode 100644 index 0000000..7eeadfb --- /dev/null +++ b/src/client/src/styles/components/ProblemGrid.css @@ -0,0 +1,34 @@ +.problem-container { + margin-bottom: 1rem; + padding-bottom: 0; +} + +.problem-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 1rem; + padding: 0.5rem 0; +} + +.no-problems { + text-align: center; + padding: 1.5rem; + background: white; + border-radius: 8px; + color: #666; + margin: 1rem 0; +} + +/* Ensure list view takes only needed space */ +.problem-list-container { + margin-bottom: 0; + padding-bottom: 0; +} + +/* Responsive adjustments */ +@media (max-width: 640px) { + .problem-grid { + grid-template-columns: 1fr; + gap: 0.75rem; + } +} \ No newline at end of file diff --git a/src/client/src/styles/components/ProblemList.css b/src/client/src/styles/components/ProblemList.css new file mode 100644 index 0000000..aef5aa4 --- /dev/null +++ b/src/client/src/styles/components/ProblemList.css @@ -0,0 +1,271 @@ +/* styles/components/ProblemList.css */ +.problem-list { + background: white; + border-radius: 6px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08); + overflow: hidden; + margin: 0.25rem 0; +} + +.list-header { + display: grid; + grid-template-columns: 50px 60px 1fr 90px 80px; /* Adjusted column widths */ + gap: 0.75rem; + padding: 0.5rem 1rem; + background: #f8fafc; + border-bottom: 1px solid #e2e8f0; + font-weight: 600; + color: #4a5568; + font-size: 0.8rem; + align-items: center; +} + +/* Header alignment */ +.header-solved, +.header-id, +.header-title, +.header-difficulty, +.header-acceptance { + text-align: left; + justify-self: start; +} + +.header-solved { + text-align: center; + justify-self: center; +} + +.list-content { + min-height: auto; +} + +.problem-list-item { + display: grid; + grid-template-columns: 50px 60px 1fr 90px 80px; /* Adjusted column widths */ + gap: 0.75rem; + padding: 0.5rem 1rem; + border-bottom: 1px solid #f1f5f9; + transition: all 0.2s ease; + align-items: center; + min-height: 44px; +} + +/* Solved row styling */ +.problem-list-item.solved { + background-color: #f0f9f0 !important; + border-left: 2px solid #10b981; +} + +/* Alternate background colors for rows */ +.problem-list-item:nth-child(even) { + background-color: #fcfcfc; +} + +.problem-list-item:nth-child(odd) { + background-color: #ffffff; +} + +.problem-list-item:hover { + background: #f0f7ff !important; + border-left: 2px solid #0066cc; + margin-left: -2px; +} + +.problem-list-item:last-child { + border-bottom: none; +} + +/* Custom Checkbox Styling */ +.problem-solved { + display: flex; + justify-content: center; + align-items: center; + justify-self: center; +} + +.solved-checkbox { + width: 20px; + height: 20px; + cursor: pointer; + border: 2px solid #d1d5db; + border-radius: 4px; + background: white; + position: relative; + transition: all 0.2s ease; + appearance: none; + -webkit-appearance: none; + margin: 0; +} + +.solved-checkbox:checked { + background: #10b981; + border-color: #10b981; +} + +.solved-checkbox:checked::before { + content: '✓'; + position: absolute; + color: white; + font-size: 14px; + font-weight: bold; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.solved-checkbox:hover { + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); +} + +.solved-checkbox:focus { + outline: none; + border-color: #10b981; + box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.2); +} + +/* Left align all content cells */ +.problem-id { + color: #666; + font-weight: 500; + font-size: 0.8rem; + text-align: left; + justify-self: start; +} + +.problem-title { + font-weight: 500; + text-align: left; + justify-self: start; +} + +.problem-title a { + color: #2d3748; + text-decoration: none; + transition: color 0.2s ease; + display: block; + width: 100%; + font-size: 0.85rem; + line-height: 1.3; +} + +.problem-title a:hover { + color: #0066cc; +} + +.problem-difficulty { + padding: 0.2rem 0.5rem; + border-radius: 8px; + font-size: 0.7rem; + font-weight: 600; + text-align: center; + text-transform: uppercase; + justify-self: start; + width: fit-content; + min-width: 60px; +} + +.problem-acceptance { + color: #666; + font-size: 0.8rem; + text-align: left; + justify-self: start; + font-weight: 500; +} + +.problem-difficulty.easy { + background: #e7f6e7; + color: #2cbb5d; + border: 1px solid #c8e6c9; +} + +.problem-difficulty.medium { + background: #fff7e6; + color: #ffa116; + border: 1px solid #ffe0b2; +} + +.problem-difficulty.hard { + background: #ffe6e6; + color: #ff375f; + border: 1px solid #ffcdd2; +} + +/* Ensure no extra space when empty */ +.problem-list:empty { + display: none; +} + +/* Compact hover effects */ +.problem-list-item { + transition: all 0.2s ease; +} + +.problem-list-item:hover { + transform: translateX(2px); + box-shadow: 1px 0 4px rgba(0, 102, 204, 0.1); +} + +/* Responsive Design - More compact */ +@media (max-width: 768px) { + .list-header { + grid-template-columns: 40px 50px 1fr 70px; /* Hide acceptance on mobile */ + padding: 0.4rem 0.75rem; + font-size: 0.75rem; + gap: 0.5rem; + } + + .problem-list-item { + grid-template-columns: 40px 50px 1fr 70px; + padding: 0.4rem 0.75rem; + gap: 0.5rem; + min-height: 40px; + } + + .header-acceptance, + .problem-acceptance { + display: none; + } + + .problem-difficulty { + font-size: 0.65rem; + padding: 0.15rem 0.4rem; + min-width: 55px; + } + + .problem-title a { + font-size: 0.8rem; + } + + .problem-id { + font-size: 0.75rem; + } + + .solved-checkbox { + width: 18px; + height: 18px; + } + + .solved-checkbox:checked::before { + font-size: 12px; + } +} + +/* Ultra-compact for very small screens */ +@media (max-width: 480px) { + .list-header { + padding: 0.3rem 0.5rem; + gap: 0.4rem; + } + + .problem-list-item { + padding: 0.3rem 0.5rem; + gap: 0.4rem; + min-height: 36px; + } + + .problem-difficulty { + min-width: 50px; + font-size: 0.6rem; + } +} \ No newline at end of file diff --git a/src/client/src/styles/components/ProblemPage.css b/src/client/src/styles/components/ProblemPage.css new file mode 100644 index 0000000..3ddf68b --- /dev/null +++ b/src/client/src/styles/components/ProblemPage.css @@ -0,0 +1,271 @@ +.lcw-problem-page { + max-width: 900px; + margin: 32px auto; + background: #fff; + border-radius: 16px; + box-shadow: 0 4px 24px rgba(0, 0, 0, 0.1); + padding: 40px; + font-family: 'Segoe UI', 'Roboto', 'Arial', sans-serif; + color: #2d3748; + line-height: 1.6; +} + +/* Header Section */ +.lcw-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 24px; + border-bottom: 2px solid #f1f5f9; + padding-bottom: 20px; +} + +.lcw-header h2 { + margin: 0; + font-size: 28px; + font-weight: 700; + color: #1a202c; + line-height: 1.3; + flex: 1; +} + +.lcw-link { + color: #ffa116; + text-decoration: none; + font-weight: 600; + padding: 8px 16px; + border: 2px solid #ffa116; + border-radius: 8px; + transition: all 0.3s ease; + font-size: 14px; + white-space: nowrap; + margin-left: 20px; +} + +.lcw-link:hover { + background: #ffa116; + color: white; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(255, 161, 22, 0.3); +} + +/* Meta Information */ +.lcw-meta { + display: flex; + flex-wrap: wrap; + gap: 16px; + margin-bottom: 32px; + padding: 20px; + background: #f8fafc; + border-radius: 12px; + border-left: 4px solid #ffa116; +} + +.lcw-meta-item { + color: #4a5568; + font-size: 15px; + font-weight: 500; +} + +.lcw-difficulty { + padding: 6px 16px; + border-radius: 12px; + font-weight: 600; + color: #fff; + font-size: 14px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.lcw-difficulty-easy { + background: linear-gradient(135deg, #43a047, #4caf50); + box-shadow: 0 2px 8px rgba(67, 160, 71, 0.3); +} + +.lcw-difficulty-medium { + background: linear-gradient(135deg, #ffa116, #ffb74d); + box-shadow: 0 2px 8px rgba(255, 161, 22, 0.3); +} + +.lcw-difficulty-hard { + background: linear-gradient(135deg, #d32f2f, #f44336); + box-shadow: 0 2px 8px rgba(211, 47, 47, 0.3); +} + +.lcw-difficulty-unknown { + background: linear-gradient(135deg, #718096, #a0aec0); +} + +/* Section Title */ +.lcw-section-title { + margin: 40px 0 20px 0; + font-size: 22px; + color: #1a202c; + font-weight: 700; + position: relative; + padding-bottom: 12px; +} + +.lcw-section-title::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 60px; + height: 3px; + background: linear-gradient(90deg, #ffa116, #ffd54f); + border-radius: 2px; +} + +/* Table Styling */ +.lcw-table { + width: 100%; + border-collapse: separate; + border-spacing: 0; + margin-bottom: 32px; + background: #fff; + border-radius: 12px; + overflow: hidden; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08); +} + +.lcw-table th { + background: linear-gradient(135deg, #1a202c, #2d3748); + color: white; + font-weight: 600; + padding: 16px 20px; + text-align: left; + font-size: 15px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.lcw-table td { + padding: 20px; + border-bottom: 1px solid #e2e8f0; + background: #fff; + transition: background-color 0.2s ease; +} + +.lcw-table tr:last-child td { + border-bottom: none; +} + +.lcw-table tr:hover td { + background: #f7fafc; +} + +/* Tag Styling */ +.lcw-tag { + display: inline-block; + background: linear-gradient(135deg, #e2e8f0, #edf2f7); + color: #2d3748; + padding: 8px 16px; + border-radius: 8px; + font-size: 13px; + font-weight: 600; + text-transform: capitalize; + border: 1px solid #cbd5e0; + min-width: 100px; + text-align: center; +} + +/* Company Tags */ +.lcw-company { + display: inline-block; + background: linear-gradient(135deg, #ffffff, #f7fafc); + color: #2d3748; + margin: 4px 8px 4px 0; + padding: 6px 14px; + border-radius: 8px; + font-size: 13px; + font-weight: 500; + border: 1px solid #e2e8f0; + transition: all 0.2s ease; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); +} + +.lcw-company:hover { + transform: translateY(-1px); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + border-color: #ffa116; + background: linear-gradient(135deg, #fffaf0, #fffbeb); +} + +/* Loading and Error States */ +.lcw-loading, .lcw-error { + text-align: center; + margin-top: 60px; + font-size: 18px; + padding: 40px; + border-radius: 12px; +} + +.lcw-loading { + color: #4a5568; + background: #f7fafc; + border: 2px dashed #cbd5e0; +} + +.lcw-error { + color: #e53e3e; + background: #fed7d7; + border: 2px solid #feb2b2; + font-weight: 600; +} + +/* Responsive Design */ +@media (max-width: 768px) { + .lcw-problem-page { + margin: 16px; + padding: 24px; + border-radius: 12px; + } + + .lcw-header { + flex-direction: column; + align-items: flex-start; + } + + .lcw-link { + margin: 16px 0 0 0; + align-self: flex-start; + } + + .lcw-meta { + flex-direction: column; + gap: 12px; + align-items: flex-start; + } + + .lcw-table { + font-size: 14px; + } + + .lcw-table th, + .lcw-table td { + padding: 12px 8px; + } + + .lcw-company { + font-size: 12px; + padding: 4px 10px; + margin: 2px 4px 2px 0; + } +} + +/* Animation for page load */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.lcw-problem-page { + animation: fadeIn 0.6s ease-out; +} \ No newline at end of file diff --git a/src/client/src/styles/layout/Body.css b/src/client/src/styles/layout/Body.css new file mode 100644 index 0000000..a184219 --- /dev/null +++ b/src/client/src/styles/layout/Body.css @@ -0,0 +1,60 @@ +/* styles/layout/Body.css */ +.body { + flex: 1; + padding: 0.125rem 0; /* Further reduced */ + background-color: #f5f5f5; + min-height: auto; +} + +.body-content { + max-width: 1200px; + margin: 0 auto; + padding: 0 0.75rem; /* Reduced from 1rem */ + min-height: auto; + padding-bottom: 0; +} + +.loading { + display: flex; + justify-content: center; + align-items: center; + min-height: 150px; /* Reduced */ +} + +.loading-spinner { + color: #666; + font-size: 1rem; /* Smaller */ +} + +.error { + display: flex; + justify-content: center; + align-items: center; + min-height: 150px; /* Reduced */ +} + +.error-message { + color: #dc3545; + text-align: center; + font-size: 0.9rem; /* Smaller */ +} + +.error-message button { + margin-top: 0.75rem; + padding: 0.4rem 0.8rem; + background-color: #dc3545; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 0.8rem; +} + +.error-message button:hover { + background-color: #c82333; +} + +/* Remove any bottom margin from the last element in body */ +.body-content > *:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/src/client/src/styles/layout/Header.css b/src/client/src/styles/layout/Header.css new file mode 100644 index 0000000..fec5051 --- /dev/null +++ b/src/client/src/styles/layout/Header.css @@ -0,0 +1,224 @@ +/* styles/layout/Header.css */ +.header { + width: 100%; + background: linear-gradient(135deg, #1a1a1a 0%, #2d1b69 100%); + color: white; + padding: 0.75rem 0; /* Reduced from 1.25rem */ + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); /* Reduced shadow */ + position: relative; + overflow: hidden; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); +} + +.header::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: + radial-gradient(circle at 20% 80%, rgba(255, 161, 22, 0.08) 0%, transparent 50%), + radial-gradient(circle at 80% 20%, rgba(0, 102, 204, 0.08) 0%, transparent 50%); + pointer-events: none; +} + +.header::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 1px; + background: linear-gradient(90deg, + transparent 0%, + rgba(255, 161, 22, 0.4) 25%, + rgba(0, 102, 204, 0.4) 50%, + rgba(255, 161, 22, 0.4) 75%, + transparent 100%); +} + +.header-content { + max-width: 1200px; + margin: 0 auto; + padding: 0 1.5rem; /* Reduced from 2rem */ + display: flex; + align-items: center; + justify-content: center; + position: relative; + z-index: 2; +} + +.header-link { + text-decoration: none; + color: inherit; + cursor: pointer; + transition: all 0.3s ease; /* Simplified transition */ + position: relative; + padding: 0.375rem 0.75rem; /* Reduced from 0.5rem 1rem */ + border-radius: 8px; /* Reduced from 12px */ +} + +.header-link::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient(135deg, rgba(255, 161, 22, 0.08), rgba(0, 102, 204, 0.08)); + border-radius: 8px; + opacity: 0; + transition: opacity 0.2s ease; +} + +.header-link:hover { + transform: translateY(-1px); /* Reduced from -2px */ +} + +.header-link:hover::before { + opacity: 1; +} + +.header-link:active { + transform: translateY(0); +} + +.header h1 { + margin: 0; + font-size: 1.5rem; /* Reduced from 2rem */ + font-weight: 700; + background: linear-gradient(135deg, #ffffff 0%, #ffa116 50%, #0099ff 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-align: center; + line-height: 1.2; + letter-spacing: -0.25px; /* Reduced from -0.5px */ + position: relative; + padding: 0.25rem 0; /* Reduced from 0.5rem */ +} + +.header h1::after { + content: '🔍'; + position: absolute; + top: 50%; + right: -1.5rem; /* Reduced from -2rem */ + transform: translateY(-50%); + font-size: 1.1rem; /* Reduced from 1.5rem */ + opacity: 0.8; + animation: float 3s ease-in-out infinite; +} + +/* Code-inspired decoration - made smaller */ +.header-content::before { + content: '{ }'; + position: absolute; + left: 1.5rem; /* Reduced from 2rem */ + top: 50%; + transform: translateY(-50%); + font-size: 1rem; /* Reduced from 1.2rem */ + color: rgba(255, 161, 22, 0.5); /* More subtle */ + font-family: 'Courier New', monospace; + font-weight: bold; + opacity: 0.6; +} + +.header-content::after { + content: ''; + position: absolute; + right: 1.5rem; /* Reduced from 2rem */ + top: 50%; + transform: translateY(-50%); + font-size: 1rem; /* Reduced from 1.2rem */ + color: rgba(0, 102, 204, 0.5); /* More subtle */ + font-family: 'Courier New', monospace; + font-weight: bold; + opacity: 0.6; +} + +/* Floating animation - more subtle */ +@keyframes float { + 0%, 100% { + transform: translateY(-50%) rotate(0deg); + } + 50% { + transform: translateY(-50%) rotate(5deg); /* Reduced rotation */ + } +} + +/* Simplified glow effect */ +.header-link:hover h1 { + text-shadow: 0 2px 8px rgba(255, 255, 255, 0.2); +} + +/* Responsive Design - More compact */ +@media (max-width: 768px) { + .header { + padding: 0.5rem 0; /* Reduced from 1rem */ + } + + .header-content { + padding: 0 1rem; + } + + .header h1 { + font-size: 1.25rem; /* Reduced from 1.5rem */ + } + + .header h1::after { + right: -1.25rem; /* Reduced from -1.5rem */ + font-size: 1rem; /* Reduced from 1.2rem */ + } + + .header-content::before, + .header-content::after { + display: none; + } +} + +@media (max-width: 480px) { + .header h1 { + font-size: 1.1rem; /* Reduced from 1.25rem */ + letter-spacing: -0.1px; + } + + .header h1::after { + display: none; + } + + .header-link { + padding: 0.2rem 0.4rem; /* More compact */ + } + + .header-content { + padding: 0 0.75rem; + } +} + +/* Reduced motion support */ +@media (prefers-reduced-motion: reduce) { + .header-link { + transition: none; + } + + .header-link:hover { + transform: none; + } + + .header h1::after { + animation: none; + } + + .header-link:hover h1 { + animation: none; + text-shadow: none; + } +} + +/* Dark theme optimization */ +@media (prefers-color-scheme: dark) { + .header { + background: linear-gradient(135deg, #0a0a0a 0%, #1a0f4d 100%); + } +} \ No newline at end of file diff --git a/src/client/src/styles/layout/Main.css b/src/client/src/styles/layout/Main.css new file mode 100644 index 0000000..e6049f9 --- /dev/null +++ b/src/client/src/styles/layout/Main.css @@ -0,0 +1,7 @@ +.main-container { + display: flex; + flex-direction: column; + min-height: 100vh; + width: 100%; + background-color: #f5f5f5; +} \ No newline at end of file diff --git a/src/client/src/styles/layout/Nav.css b/src/client/src/styles/layout/Nav.css new file mode 100644 index 0000000..26d5a20 --- /dev/null +++ b/src/client/src/styles/layout/Nav.css @@ -0,0 +1,43 @@ +.nav { + background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%); + border-bottom: 1px solid #e2e8f0; + padding: 0; + box-shadow: 0 1px 8px rgba(0, 0, 0, 0.04); + position: relative; + z-index: 100; +} + +.nav-content { + max-width: 1200px; + margin: 0 auto; + padding: 0 1.5rem; + position: relative; + z-index: 101; + display: flex; + flex-direction: column; + gap: 1rem; + padding-top: 1rem; + padding-bottom: 1rem; +} + +/* Ensure filter options and shuffle toggle are properly aligned */ +.filter-options { + display: flex; + gap: 2rem; + align-items: flex-end; + flex-wrap: wrap; + padding: 0; /* Remove padding since nav-content handles it */ +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + .nav-content { + padding: 0 1rem; + gap: 0.75rem; + } + + .filter-options { + flex-direction: column; + gap: 1rem; + } +} \ No newline at end of file diff --git a/src/client/src/styles/layout/Pagination.css b/src/client/src/styles/layout/Pagination.css new file mode 100644 index 0000000..a29519d --- /dev/null +++ b/src/client/src/styles/layout/Pagination.css @@ -0,0 +1,94 @@ +/* styles/components/Pagination.css */ +.pagination { + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; + margin: 2rem 0; + padding: 1rem; +} + +.pagination-pages { + display: flex; + gap: 0.25rem; +} + +.pagination-btn { + padding: 0.5rem 0.75rem; + border: 1px solid #e2e8f0; + background: white; + color: #4a5568; + border-radius: 6px; + cursor: pointer; + transition: all 0.2s ease; + font-weight: 500; + min-width: 2.5rem; + display: flex; + align-items: center; + justify-content: center; +} + +.pagination-btn:hover:not(:disabled) { + background: #f7fafc; + border-color: #cbd5e0; + transform: translateY(-1px); +} + +.pagination-btn.active { + background: #0066cc; + color: white; + border-color: #0066cc; +} + +.pagination-btn:disabled { + opacity: 0.4; + cursor: not-allowed; + transform: none; +} + +/* Specific styles for navigation buttons */ +.pagination-first, +.pagination-last { + font-weight: bold; + font-size: 1.1rem; +} + +.pagination-prev, +.pagination-next { + font-weight: bold; +} + +.pagination-info { + text-align: center; + color: #666; + margin-bottom: 1rem; + font-size: 0.9rem; +} + +/* Responsive */ +@media (max-width: 768px) { + .pagination { + gap: 0.25rem; + } + + .pagination-btn { + padding: 0.4rem 0.6rem; + font-size: 0.9rem; + min-width: 2.25rem; + } + + .pagination-pages { + gap: 0.125rem; + } + + /* Hide page numbers on very small screens, keep only navigation */ + @media (max-width: 480px) { + .pagination-pages { + display: none; + } + + .pagination { + gap: 0.5rem; + } + } +} \ No newline at end of file diff --git a/src/client/src/styles/layout/ShuffleToggle.css b/src/client/src/styles/layout/ShuffleToggle.css new file mode 100644 index 0000000..df82379 --- /dev/null +++ b/src/client/src/styles/layout/ShuffleToggle.css @@ -0,0 +1,80 @@ +.shuffle-toggle-container { + display: flex; + align-items: center; +} + +.shuffle-toggle { + display: flex; + align-items: center; + padding: 0.5rem; + background: white; + border-radius: 6px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + border: 1px solid #e2e8f0; +} + +.shuffle-label { + display: flex; + align-items: center; + gap: 0.5rem; + cursor: pointer; + font-weight: 500; + color: #4a5568; + margin: 0; +} + +.shuffle-checkbox { + display: none; +} + +.shuffle-slider { + width: 40px; + height: 20px; + background: #cbd5e0; + border-radius: 20px; + position: relative; + transition: all 0.3s ease; + flex-shrink: 0; +} + +.shuffle-slider::before { + content: ''; + position: absolute; + width: 16px; + height: 16px; + border-radius: 50%; + background: white; + top: 2px; + left: 2px; + transition: all 0.3s ease; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} + +.shuffle-checkbox:checked + .shuffle-slider { + background: #0066cc; +} + +.shuffle-checkbox:checked + .shuffle-slider::before { + transform: translateX(20px); +} + +.shuffle-text { + font-size: 0.8rem; + font-weight: 600; + white-space: nowrap; +} + +/* Responsive Design */ +@media (max-width: 768px) { + .shuffle-toggle { + padding: 0.4rem; + } + + .shuffle-label { + gap: 0.4rem; + } + + .shuffle-text { + font-size: 0.75rem; + } +} \ No newline at end of file diff --git a/src/client/src/styles/layout/ViewToggle.css b/src/client/src/styles/layout/ViewToggle.css new file mode 100644 index 0000000..475d59c --- /dev/null +++ b/src/client/src/styles/layout/ViewToggle.css @@ -0,0 +1,107 @@ +.view-toggle-container { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.5rem; + gap: 1rem; +} + +.left-controls { + display: flex; + align-items: center; + gap: 1rem; +} + +.right-controls { + display: flex; + align-items: center; + gap: 1rem; +} + +.view-toggle { + display: flex; + gap: 0.5rem; +} + +.shuffle-control { + display: flex; + align-items: center; +} + +.toggle-btn { + padding: 0.4rem 0.8rem; + border: 1px solid #e2e8f0; + background: white; + color: #4a5568; + border-radius: 6px; + cursor: pointer; + transition: all 0.2s ease; + font-size: 0.85rem; +} + +.toggle-btn:hover { + background: #f7fafc; + border-color: #cbd5e0; +} + +.toggle-btn.active { + background: #0066cc; + color: white; + border-color: #0066cc; +} + +.clear-all-btn { + padding: 0.4rem 0.8rem; + border: 1px solid #e2e8f0; + background: #dc3545; + color: white; + border-radius: 6px; + cursor: pointer; + transition: all 0.2s ease; + font-size: 0.85rem; + font-weight: 500; +} + +.clear-all-btn:hover { + background: #c82333; + border-color: #bd2130; + transform: translateY(-1px); +} + +.clear-all-btn:active { + transform: translateY(0); +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + .view-toggle-container { + flex-direction: column; + align-items: stretch; + gap: 0.75rem; + } + + .left-controls { + justify-content: center; + width: 100%; + } + + .right-controls { + justify-content: space-between; + width: 100%; + order: -1; + } + + .view-toggle { + justify-content: center; + } + + .toggle-btn { + padding: 0.35rem 0.7rem; + font-size: 0.8rem; + } + + .clear-all-btn { + padding: 0.35rem 0.7rem; + font-size: 0.8rem; + } +} \ No newline at end of file diff --git a/src/lcw.sln b/src/lcw.sln new file mode 100644 index 0000000..424b481 --- /dev/null +++ b/src/lcw.sln @@ -0,0 +1,76 @@ +īģŋ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csproj", "{D9C22474-6B6F-48CC-88BC-308CAB16BB57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backend", "Backend\Backend.csproj", "{D80E9786-FF6D-4227-B4F4-F3B3960A7843}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Synchronizer", "Synchronizer\Synchronizer.csproj", "{BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PetProjectAzFunctions", "PetProjectAzFunctions\PetProjectAzFunctions.csproj", "{31C50D63-3018-4679-92FD-F080D47A32D0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Debug|x64.ActiveCfg = Debug|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Debug|x64.Build.0 = Debug|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Debug|x86.ActiveCfg = Debug|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Debug|x86.Build.0 = Debug|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Release|Any CPU.Build.0 = Release|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Release|x64.ActiveCfg = Release|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Release|x64.Build.0 = Release|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Release|x86.ActiveCfg = Release|Any CPU + {D9C22474-6B6F-48CC-88BC-308CAB16BB57}.Release|x86.Build.0 = Release|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Debug|x64.ActiveCfg = Debug|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Debug|x64.Build.0 = Debug|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Debug|x86.ActiveCfg = Debug|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Debug|x86.Build.0 = Debug|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Release|Any CPU.Build.0 = Release|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Release|x64.ActiveCfg = Release|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Release|x64.Build.0 = Release|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Release|x86.ActiveCfg = Release|Any CPU + {D80E9786-FF6D-4227-B4F4-F3B3960A7843}.Release|x86.Build.0 = Release|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Debug|x64.ActiveCfg = Debug|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Debug|x64.Build.0 = Debug|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Debug|x86.ActiveCfg = Debug|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Debug|x86.Build.0 = Debug|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Release|Any CPU.Build.0 = Release|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Release|x64.ActiveCfg = Release|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Release|x64.Build.0 = Release|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Release|x86.ActiveCfg = Release|Any CPU + {BF0FF8B1-3D65-459E-8CA1-A7C0ED4F97B9}.Release|x86.Build.0 = Release|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Debug|x64.ActiveCfg = Debug|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Debug|x64.Build.0 = Debug|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Debug|x86.ActiveCfg = Debug|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Debug|x86.Build.0 = Debug|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Release|Any CPU.Build.0 = Release|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Release|x64.ActiveCfg = Release|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Release|x64.Build.0 = Release|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Release|x86.ActiveCfg = Release|Any CPU + {31C50D63-3018-4679-92FD-F080D47A32D0}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal