From 5223b82bec84f72318238449c9355391bf91461a Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Wed, 5 Jun 2024 22:13:09 -0700 Subject: [PATCH 01/64] Add or update the Azure App Service build and deployment workflow config --- .github/workflows/main_safehaven2.yml | 65 +++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 .github/workflows/main_safehaven2.yml diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml new file mode 100644 index 0000000..9e833a9 --- /dev/null +++ b/.github/workflows/main_safehaven2.yml @@ -0,0 +1,65 @@ +# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy +# More GitHub Actions for Azure: https://github.com/Azure/actions + +name: Build and deploy Node.js app to Azure Web App - SafeHaven2 + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + build: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Node.js version + uses: actions/setup-node@v3 + with: + node-version: '20.x' + + - name: npm install, build, and test + run: | + npm install + npm run build --if-present + npm run test --if-present + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@v3 + with: + name: node-app + path: . + + deploy: + runs-on: ubuntu-latest + needs: build + environment: + name: 'Production' + url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} + permissions: + id-token: write #This is required for requesting the JWT + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v3 + with: + name: node-app + + - name: Login to Azure + uses: azure/login@v1 + with: + client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_F78BFACEB8754DF0B3920B38D34A736F }} + tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_DB909594BB3047A0814E70CF6073DBB2 }} + subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_608B604CBDDF458FBBD38EB943ADE02F }} + + - name: 'Deploy to Azure Web App' + uses: azure/webapps-deploy@v2 + id: deploy-to-webapp + with: + app-name: 'SafeHaven2' + slot-name: 'Production' + package: . + \ No newline at end of file From 8e93509af46fd5233dc93d41ba1ae68749cfb807 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Wed, 5 Jun 2024 22:13:15 -0700 Subject: [PATCH 02/64] Delete .github/workflows/azure-static-web-apps-red-field-0505d1e1e.yml --- ...re-static-web-apps-red-field-0505d1e1e.yml | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 .github/workflows/azure-static-web-apps-red-field-0505d1e1e.yml diff --git a/.github/workflows/azure-static-web-apps-red-field-0505d1e1e.yml b/.github/workflows/azure-static-web-apps-red-field-0505d1e1e.yml deleted file mode 100644 index a4b246c..0000000 --- a/.github/workflows/azure-static-web-apps-red-field-0505d1e1e.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Azure Static Web Apps CI/CD - -on: - push: - branches: - - main - pull_request: - types: [opened, synchronize, reopened, closed] - branches: - - main - -jobs: - build_and_deploy_job: - if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') - runs-on: ubuntu-latest - name: Build and Deploy Job - steps: - - uses: actions/checkout@v3 - with: - submodules: true - lfs: false - - name: Install dependencies - run: npm ci - - name: Build And Deploy - id: builddeploy - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_RED_FIELD_0505D1E1E }} - repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) - action: "upload" - ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### - # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig - app_location: "./packages/react-frontend" # App source code path - api_location: "" # Api source code path - optional - output_location: "dist" # Built app content directory - optional - ###### End of Repository/Build Configurations ###### - - close_pull_request_job: - if: github.event_name == 'pull_request' && github.event.action == 'closed' - runs-on: ubuntu-latest - name: Close Pull Request Job - steps: - - name: Close Pull Request - id: closepullrequest - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_RED_FIELD_0505D1E1E }} - action: "close" From 55d9363205a6f60b192f372ea1313240957a95ff Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Wed, 5 Jun 2024 22:13:43 -0700 Subject: [PATCH 03/64] Delete .github/workflows/main_safehaven307.yml --- .github/workflows/main_safehaven307.yml | 76 ------------------------- 1 file changed, 76 deletions(-) delete mode 100644 .github/workflows/main_safehaven307.yml diff --git a/.github/workflows/main_safehaven307.yml b/.github/workflows/main_safehaven307.yml deleted file mode 100644 index 18a1b37..0000000 --- a/.github/workflows/main_safehaven307.yml +++ /dev/null @@ -1,76 +0,0 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - -name: Build and deploy Node.js app to Azure Web App - SafeHaven307 - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set up Node.js version - uses: actions/setup-node@v3 - with: - node-version: '18.x' - - - name: npm install, build, and test - run: | - npm install --workspaces=false - npm install multer --workspaces=false - npm install jsonwebtoken --workspaces=false - npm install bcrypt --workspaces=false - npm run build --if-present - npm run test --if-present - working-directory: packages/express-backend - - - name: Zip artifact for deployment - run: zip release.zip ./* -r - working-directory: packages/express-backend - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v3 - with: - name: node-app - path: packages/express-backend/release.zip - - deploy: - runs-on: ubuntu-latest - needs: build - environment: - name: 'Production' - url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - permissions: - id-token: write #This is required for requesting the JWT - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v3 - with: - name: node-app - - - name: Unzip artifact for deployment - run: unzip release.zip - - - name: Login to Azure - uses: azure/login@v1 - with: - client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_8E035D0A5DBB427DB4E111FD5E29588D }} - tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_DF80774E585345278225BFF2A80D3DAC }} - subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_88658FF7ABDD4CC29352BE0098BD19FB }} - - - name: 'Deploy to Azure Web App' - id: deploy-to-webapp - uses: azure/webapps-deploy@v2 - with: - app-name: 'SafeHaven307' - slot-name: 'Production' - package: . - From a87329f3aea954a2051b421834865f177090cfd6 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Wed, 5 Jun 2024 22:51:30 -0700 Subject: [PATCH 04/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 9e833a9..5447fda 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -23,7 +23,7 @@ jobs: - name: npm install, build, and test run: | - npm install + npm install --workspaces=false npm run build --if-present npm run test --if-present @@ -39,21 +39,21 @@ jobs: environment: name: 'Production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - permissions: - id-token: write #This is required for requesting the JWT + permissions: + id-token: write #This is required for requesting the JWT steps: - name: Download artifact from build job uses: actions/download-artifact@v3 with: name: node-app - - - name: Login to Azure - uses: azure/login@v1 - with: - client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_F78BFACEB8754DF0B3920B38D34A736F }} - tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_DB909594BB3047A0814E70CF6073DBB2 }} - subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_608B604CBDDF458FBBD38EB943ADE02F }} + + - name: Login to Azure + uses: azure/login@v1 + with: + client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_F78BFACEB8754DF0B3920B38D34A736F }} + tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_DB909594BB3047A0814E70CF6073DBB2 }} + subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_608B604CBDDF458FBBD38EB943ADE02F }} - name: 'Deploy to Azure Web App' uses: azure/webapps-deploy@v2 @@ -62,4 +62,4 @@ jobs: app-name: 'SafeHaven2' slot-name: 'Production' package: . - \ No newline at end of file + From 41197b97a145e5b31c4f0762960c25de0b27777e Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Wed, 5 Jun 2024 22:54:53 -0700 Subject: [PATCH 05/64] ci: add Azure Static Web Apps workflow file on-behalf-of: @Azure opensource@microsoft.com --- ...tatic-web-apps-lively-ground-0cd068c1e.yml | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml diff --git a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml new file mode 100644 index 0000000..2423ad8 --- /dev/null +++ b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml @@ -0,0 +1,46 @@ +name: Azure Static Web Apps CI/CD + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v3 + with: + submodules: true + lfs: false + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_LIVELY_GROUND_0CD068C1E }} + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: "upload" + ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### + # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig + app_location: "./packages/react-frontend" # App source code path + api_location: "" # Api source code path - optional + output_location: "build" # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + + close_pull_request_job: + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + id: closepullrequest + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_LIVELY_GROUND_0CD068C1E }} + action: "close" From 5ad94fa0eb9e615aba2901f401b30df055a99bda Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Wed, 5 Jun 2024 22:58:51 -0700 Subject: [PATCH 06/64] Update azure-static-web-apps-lively-ground-0cd068c1e.yml --- .../workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml index 2423ad8..ac2006c 100644 --- a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml +++ b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml @@ -19,6 +19,7 @@ jobs: with: submodules: true lfs: false + - run: npm ci - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 From 134d7050d8fe403f47b134a5624a8fdf56705ef5 Mon Sep 17 00:00:00 2001 From: Cameron Date: Wed, 5 Jun 2024 23:06:50 -0700 Subject: [PATCH 07/64] Make deploy work --- ...azure-static-web-apps-lively-ground-0cd068c1e.yml | 3 ++- packages/express-backend/backend.js | 2 +- packages/react-frontend/src/Components/Table.jsx | 2 +- packages/react-frontend/src/Views/AddOrders.jsx | 8 ++++---- packages/react-frontend/src/Views/EditProfile.jsx | 2 +- packages/react-frontend/src/Views/Inventory.jsx | 6 +++--- packages/react-frontend/src/Views/LoginPage.jsx | 2 +- packages/react-frontend/src/Views/ManageOrders.jsx | 6 +++--- .../react-frontend/src/Views/OrderStatistics.jsx | 6 +++--- packages/react-frontend/src/Views/ProductPage.jsx | 4 ++-- packages/react-frontend/src/Views/Profile.jsx | 12 ++++++------ packages/react-frontend/src/Views/SignUpPage.jsx | 2 +- 12 files changed, 28 insertions(+), 27 deletions(-) diff --git a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml index ac2006c..a96ba5a 100644 --- a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml +++ b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml @@ -20,6 +20,7 @@ jobs: submodules: true lfs: false - run: npm ci + - run: npm build - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 @@ -31,7 +32,7 @@ jobs: # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: "./packages/react-frontend" # App source code path api_location: "" # Api source code path - optional - output_location: "build" # Built app content directory - optional + output_location: "dist" # Built app content directory - optional ###### End of Repository/Build Configurations ###### close_pull_request_job: diff --git a/packages/express-backend/backend.js b/packages/express-backend/backend.js index 2734a9e..ea76c63 100644 --- a/packages/express-backend/backend.js +++ b/packages/express-backend/backend.js @@ -34,7 +34,7 @@ app.post( const pfp = { profilePicture: result._id }; - fetch(`safehaven307.azurewebsites.net/users/${user._id}`, { + fetch(`https://safehaven2.azurewebsites.net/users/${user._id}`, { method: "PATCH", headers: { "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Components/Table.jsx b/packages/react-frontend/src/Components/Table.jsx index e8422d7..264bde5 100644 --- a/packages/react-frontend/src/Components/Table.jsx +++ b/packages/react-frontend/src/Components/Table.jsx @@ -31,7 +31,7 @@ function TableBody(props) { - + diff --git a/packages/react-frontend/src/Views/AddOrders.jsx b/packages/react-frontend/src/Views/AddOrders.jsx index 3662160..4c2eba1 100644 --- a/packages/react-frontend/src/Views/AddOrders.jsx +++ b/packages/react-frontend/src/Views/AddOrders.jsx @@ -76,13 +76,13 @@ function AddOrders() { } function fetchOrders() { - return fetch("safehaven307.azurewebsites.net/order-units", { + return fetch("https://safehaven2.azurewebsites.net/order-units", { headers: addAuthHeader() }); } function postOrderUnit(order) { - return fetch("safehaven307.azurewebsites.net/order-units", { + return fetch("https://safehaven2.azurewebsites.net/order-units", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" @@ -92,7 +92,7 @@ function AddOrders() { } function deleteOrder(id) { - const uri = `safehaven307.azurewebsites.net/order-units/${id}`; + const uri = `https://safehaven2.azurewebsites.net/order-units/${id}`; return fetch(uri, { method: "DELETE", headers: addAuthHeader({ @@ -102,7 +102,7 @@ function AddOrders() { } function runPost(order_str) { - return fetch("safehaven307.azurewebsites.net/orders", { + return fetch("https://safehaven2.azurewebsites.net/orders", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/EditProfile.jsx b/packages/react-frontend/src/Views/EditProfile.jsx index 7ca8116..b3e766b 100644 --- a/packages/react-frontend/src/Views/EditProfile.jsx +++ b/packages/react-frontend/src/Views/EditProfile.jsx @@ -8,7 +8,7 @@ import { useNavigate } from "react-router-dom"; function EditProfile() { const navigate = useNavigate(); function changeProfile(profile){ - fetch("safehaven307.azurewebsites.net/users/profile", { + fetch("https://safehaven2.azurewebsites.net/users/profile", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/Inventory.jsx b/packages/react-frontend/src/Views/Inventory.jsx index 875f49d..ecbe48e 100644 --- a/packages/react-frontend/src/Views/Inventory.jsx +++ b/packages/react-frontend/src/Views/Inventory.jsx @@ -71,7 +71,7 @@ function Inventory() { } function fetchProducts() { - const promise = fetch("safehaven307.azurewebsites.net/products", { + const promise = fetch("https://safehaven2.azurewebsites.net/products", { headers: addAuthHeader() }); return promise; @@ -79,7 +79,7 @@ function Inventory() { function postProduct(product) { console.log("posting:", product); - return fetch("safehaven307.azurewebsites.net/products", { + return fetch("https://safehaven2.azurewebsites.net/products", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" @@ -89,7 +89,7 @@ function Inventory() { } function deleteProduct(id) { - const uri = `safehaven307.azurewebsites.net/products/${id}`; + const uri = `https://safehaven2.azurewebsites.net/products/${id}`; return fetch(uri, { method: "DELETE", headers: addAuthHeader({ diff --git a/packages/react-frontend/src/Views/LoginPage.jsx b/packages/react-frontend/src/Views/LoginPage.jsx index 4678311..06814cf 100644 --- a/packages/react-frontend/src/Views/LoginPage.jsx +++ b/packages/react-frontend/src/Views/LoginPage.jsx @@ -9,7 +9,7 @@ function Login() { const navigate = useNavigate(); function authenticateUser(user) { console.log(user); - fetch("safehaven307.azurewebsites.net/login", { + fetch("https://safehaven2.azurewebsites.net/login", { method: "POST", headers: { "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/ManageOrders.jsx b/packages/react-frontend/src/Views/ManageOrders.jsx index d32eae8..1c29873 100644 --- a/packages/react-frontend/src/Views/ManageOrders.jsx +++ b/packages/react-frontend/src/Views/ManageOrders.jsx @@ -42,14 +42,14 @@ function ManageOrders() { }; function fetchOrders() { - return fetch("safehaven307.azurewebsites.net/orders", { + return fetch("https://safehaven2.azurewebsites.net/orders", { headers: addAuthHeader() }); } function fetchSearch(search) { search = "search=" + search; - const uri = `safehaven307.azurewebsites.net/orders/?${search}`; + const uri = `https://safehaven2.azurewebsites.net/orders/?${search}`; console.log(uri); return fetch(uri, { headers: addAuthHeader() @@ -57,7 +57,7 @@ function ManageOrders() { } function deleteOrder(id) { - const uri = `safehaven307.azurewebsites.net/orders/${id}`; + const uri = `https://safehaven2.azurewebsites.net/orders/${id}`; return fetch(uri, { method: "DELETE", headers: addAuthHeader({ diff --git a/packages/react-frontend/src/Views/OrderStatistics.jsx b/packages/react-frontend/src/Views/OrderStatistics.jsx index 80cde4a..e1dfd0d 100644 --- a/packages/react-frontend/src/Views/OrderStatistics.jsx +++ b/packages/react-frontend/src/Views/OrderStatistics.jsx @@ -64,13 +64,13 @@ function Inventory() { } function fetchProducts() { - return fetch("safehaven307.azurewebsites.net/products", { + return fetch("https://safehaven2.azurewebsites.net/products", { headers: addAuthHeader() }); } function postProduct(product) { - return fetch("safehaven307.azurewebsites.net/products", { + return fetch("https://safehaven2.azurewebsites.net/products", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" @@ -80,7 +80,7 @@ function Inventory() { } function deleteProduct(id) { - const uri = `safehaven307.azurewebsites.net/products/${id}`; + const uri = `https://safehaven2.azurewebsites.net/products/${id}`; return fetch(uri, { method: "DELETE", headers: addAuthHeader({ diff --git a/packages/react-frontend/src/Views/ProductPage.jsx b/packages/react-frontend/src/Views/ProductPage.jsx index c14a34e..84760c2 100644 --- a/packages/react-frontend/src/Views/ProductPage.jsx +++ b/packages/react-frontend/src/Views/ProductPage.jsx @@ -33,7 +33,7 @@ function ProductPage() { function fetchProduct(id) { console.log(`Fetching product with id: ${id}`); - return fetch(`safehaven307.azurewebsites.net/products/${id}`, { + return fetch(`https://safehaven2.azurewebsites.net/products/${id}`, { headers: addAuthHeader() }) .then((res) => { @@ -76,7 +76,7 @@ function ProductPage() { function patchProduct(product) { console.log("patching: ", product); - return fetch(`safehaven307.azurewebsites.net/products/${id}`, { + return fetch(`https://safehaven2.azurewebsites.net/products/${id}`, { method: "PATCH", headers: addAuthHeader({ "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/Profile.jsx b/packages/react-frontend/src/Views/Profile.jsx index 7f17ee1..8e31f8c 100644 --- a/packages/react-frontend/src/Views/Profile.jsx +++ b/packages/react-frontend/src/Views/Profile.jsx @@ -13,19 +13,19 @@ function Profile() { useEffect(() => { async function getUser() { - const user_details = await axios.get(`safehaven307.azurewebsites.net/users`, { + const user_details = await axios.get(`https://safehaven2.azurewebsites.net/users`, { headers: addAuthHeader() }); const user = user_details.data; setUser(user); - const imageUrl = `safehaven307.azurewebsites.net/profile-picture/${user.profilePicture}`; + const imageUrl = `https://safehaven2.azurewebsites.net/profile-picture/${user.profilePicture}`; setProfilePicture(imageUrl); } async function fetchProfilePicture() { try { - const imageUrl = `safehaven307.azurewebsites.net/profile-picture/${user.profilePicture}`; + const imageUrl = `https://safehaven2.azurewebsites.net/profile-picture/${user.profilePicture}`; setProfilePicture(imageUrl); } catch (error) { console.error("Failed to load user profile picture", error); @@ -49,14 +49,14 @@ function Profile() { try { // Send the file to the server for processing and storage in MongoDB - const response = await axios.post("safehaven307.azurewebsites.net/profile-picture", formData, { + const response = await axios.post("https://safehaven2.azurewebsites.net/profile-picture", formData, { headers: addAuthHeader({ "Content-Type": "multipart/form-data" }) }); console.log(response); - const imageUrl = `safehaven307.azurewebsites.net/profile-picture/${response.data}`; + const imageUrl = `https://safehaven2.azurewebsites.net/profile-picture/${response.data}`; setProfilePicture(imageUrl); @@ -68,7 +68,7 @@ function Profile() { }; function deleteProfile() { - fetch("safehaven307.azurewebsites.net/users", { + fetch("https://safehaven2.azurewebsites.net/users", { method: "DELETE", headers: addAuthHeader({ "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/SignUpPage.jsx b/packages/react-frontend/src/Views/SignUpPage.jsx index 869b2ad..b1e63a1 100644 --- a/packages/react-frontend/src/Views/SignUpPage.jsx +++ b/packages/react-frontend/src/Views/SignUpPage.jsx @@ -8,7 +8,7 @@ function Signup() { const navigate = useNavigate(); function createUser(user) { console.log(user); - fetch("safehaven307.azurewebsites.net/users", { + fetch("https://safehaven2.azurewebsites.net/users", { method: "POST", headers: { "Content-Type": "application/json" From 1b8d4074e30ad65456423853e338dd671d6fb6e2 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Wed, 5 Jun 2024 23:08:04 -0700 Subject: [PATCH 08/64] Update azure-static-web-apps-lively-ground-0cd068c1e.yml --- .../workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml index a96ba5a..c903dd2 100644 --- a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml +++ b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml @@ -20,7 +20,6 @@ jobs: submodules: true lfs: false - run: npm ci - - run: npm build - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 From b6ed0f1ffbabe04c210cab1d5cc3fd7b76ce6833 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 01:51:53 -0700 Subject: [PATCH 09/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 5447fda..638a324 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -23,9 +23,12 @@ jobs: - name: npm install, build, and test run: | - npm install --workspaces=false + npm install + cd packages/express-backend + npm install npm run build --if-present npm run test --if-present + cd ../../ - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 From 5de27d90acb2978ff5ea6bba3bdd79f8004ce911 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 01:55:31 -0700 Subject: [PATCH 10/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 638a324..e1bee1d 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -23,11 +23,9 @@ jobs: - name: npm install, build, and test run: | - npm install + npm ci cd packages/express-backend - npm install - npm run build --if-present - npm run test --if-present + npm ci cd ../../ - name: Upload artifact for deployment job From 27f0905b5b8a0b0578baf8e73123c85d341932b1 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 12:37:10 -0700 Subject: [PATCH 11/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index e1bee1d..e21c65a 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -23,9 +23,9 @@ jobs: - name: npm install, build, and test run: | - npm ci + npm install cd packages/express-backend - npm ci + npm install cd ../../ - name: Upload artifact for deployment job From 669bf4742cee221fb192d11944a60ab92a4b1dce Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 12:43:44 -0700 Subject: [PATCH 12/64] Fun --- packages/express-backend/package.json | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/express-backend/package.json b/packages/express-backend/package.json index adb9834..7c9b547 100644 --- a/packages/express-backend/package.json +++ b/packages/express-backend/package.json @@ -11,14 +11,29 @@ }, "author": "", "license": "ISC", + "devDependencies": { + "@babel/plugin-syntax-jsx": "^7.24.6", + "@babel/preset-env": "^7.24.6", + "@babel/preset-react": "^7.24.6", + "globals": "^15.2.0", + "identity-obj-proxy": "^3.0.0", + "nodemon": "^3.1.0" + }, "dependencies": { "cors": "^2.8.5", + "@mui/material": "^5.15.16", + "axios": "^1.6.8", + "bcrypt": "^5.1.1", + "buffer": "^6.0.3", "dotenv": "^16.4.5", + "eslint-config-google": "^0.14.0", + "js-cookie": "^3.0.5", + "jsonwebtoken": "^9.0.2", + "mdb-react-ui-kit": "^8.0.0", + "mongoose": "^8.3.2", + "multer": "^1.4.5-lts.1", + "react-router-dom": "^6.23.1", + "reactjs-popup": "^2.0.6", "express": "^4.19.2", - "mongoose": "^8.3.3" - }, - "devDependencies": { - "@eslint/js": "^9.2.0", - "eslint": "^9.2.0" } } From de102b5327ab0b8b7b7342548ebd29da45fd74bf Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 12:44:02 -0700 Subject: [PATCH 13/64] Fun --- .github/workflows/main_safehaven2.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index e21c65a..e765c79 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -23,7 +23,6 @@ jobs: - name: npm install, build, and test run: | - npm install cd packages/express-backend npm install cd ../../ From 57143ef9164816b14cc6862167711abbbcfe2413 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 12:50:04 -0700 Subject: [PATCH 14/64] Clean install --- package-lock.json | 2617 ++++++++++++------------- packages/express-backend/package.json | 2 +- 2 files changed, 1267 insertions(+), 1352 deletions(-) diff --git a/package-lock.json b/package-lock.json index 025e833..729aa63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,18 +45,10 @@ "nodemon": "^3.1.0" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@adobe/css-tools": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", - "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", "dev": true }, "node_modules/@ampproject/remapping": { @@ -73,12 +65,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", - "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.24.6", + "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" }, "engines": { @@ -86,30 +78,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", - "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", - "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.4", - "@babel/parser": "^7.24.4", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -125,12 +117,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", - "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -140,37 +132,38 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz", - "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz", - "integrity": "sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", - "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -180,19 +173,19 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz", - "integrity": "sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-member-expression-to-functions": "^7.24.6", - "@babel/helper-optimise-call-expression": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", + "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "semver": "^6.3.1" }, "engines": { @@ -203,12 +196,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz", - "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", + "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -235,92 +228,80 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dev": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@babel/types": "^7.24.7" }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", - "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", - "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", - "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dev": true, "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", - "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz", - "integrity": "sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", + "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", - "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", - "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-simple-access": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -330,35 +311,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz", - "integrity": "sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", - "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz", - "integrity": "sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", + "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-wrap-function": "^7.24.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -368,14 +349,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz", - "integrity": "sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", + "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-member-expression-to-functions": "^7.24.6", - "@babel/helper-optimise-call-expression": "^7.24.6" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -385,103 +366,105 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", - "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz", - "integrity": "sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", - "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.6" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", - "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", - "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", - "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz", - "integrity": "sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", + "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.24.6", - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/helper-function-name": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", - "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", "dev": true, "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", - "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -491,9 +474,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", - "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -503,13 +486,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz", - "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", + "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -519,12 +502,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.6", - "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.24.6.tgz", - "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", + "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -534,14 +517,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz", - "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", - "@babel/plugin-transform-optional-chaining": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -551,13 +534,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz", - "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", + "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -654,12 +637,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz", - "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -669,12 +652,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz", - "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -708,12 +691,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz", - "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -825,12 +808,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz", - "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -856,12 +839,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz", - "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -871,14 +854,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz", - "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-remap-async-to-generator": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -889,14 +872,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz", - "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-remap-async-to-generator": "^7.24.6" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -906,12 +889,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz", - "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -921,12 +904,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz", - "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -936,13 +919,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz", - "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -952,13 +935,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz", - "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -969,18 +952,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz", - "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", + "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "globals": "^11.1.0" }, "engines": { @@ -1000,13 +983,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz", - "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/template": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1016,12 +999,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz", - "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", + "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1031,13 +1014,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz", - "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1047,12 +1030,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz", - "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1062,12 +1045,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz", - "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1078,13 +1061,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz", - "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1094,12 +1077,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz", - "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1110,13 +1093,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz", - "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1126,14 +1109,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz", - "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1143,12 +1126,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz", - "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1159,12 +1142,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz", - "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1174,12 +1157,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz", - "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1190,12 +1173,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz", - "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1205,13 +1188,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz", - "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1221,14 +1204,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz", - "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", + "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-simple-access": "^7.24.6" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1238,15 +1221,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz", - "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", + "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.24.6", - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6" + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1256,13 +1239,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz", - "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1272,13 +1255,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz", - "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1288,12 +1271,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz", - "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1303,12 +1286,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz", - "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1319,12 +1302,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz", - "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1335,15 +1318,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz", - "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.6" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1353,13 +1336,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz", - "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1369,12 +1352,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz", - "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1385,13 +1368,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz", - "integrity": "sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", + "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1402,12 +1385,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz", - "integrity": "sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1417,13 +1400,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz", - "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1433,14 +1416,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz", - "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1451,12 +1434,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz", - "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1466,12 +1449,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz", - "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1481,16 +1464,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz", - "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", + "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-jsx": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1500,12 +1483,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz", - "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.6" + "@babel/plugin-transform-react-jsx": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1515,12 +1498,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", - "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1530,12 +1513,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", - "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1545,13 +1528,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz", - "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1561,12 +1544,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz", - "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1577,12 +1560,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz", - "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1592,12 +1575,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz", - "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1607,13 +1590,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz", - "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1623,12 +1606,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz", - "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1638,12 +1621,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz", - "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1653,12 +1636,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz", - "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", + "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1668,12 +1651,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz", - "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1683,13 +1666,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz", - "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1699,13 +1682,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz", - "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1715,13 +1698,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz", - "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1731,27 +1714,27 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.6.tgz", - "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", + "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.6", - "@babel/plugin-syntax-import-attributes": "^7.24.6", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@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", @@ -1763,54 +1746,54 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.6", - "@babel/plugin-transform-async-generator-functions": "^7.24.6", - "@babel/plugin-transform-async-to-generator": "^7.24.6", - "@babel/plugin-transform-block-scoped-functions": "^7.24.6", - "@babel/plugin-transform-block-scoping": "^7.24.6", - "@babel/plugin-transform-class-properties": "^7.24.6", - "@babel/plugin-transform-class-static-block": "^7.24.6", - "@babel/plugin-transform-classes": "^7.24.6", - "@babel/plugin-transform-computed-properties": "^7.24.6", - "@babel/plugin-transform-destructuring": "^7.24.6", - "@babel/plugin-transform-dotall-regex": "^7.24.6", - "@babel/plugin-transform-duplicate-keys": "^7.24.6", - "@babel/plugin-transform-dynamic-import": "^7.24.6", - "@babel/plugin-transform-exponentiation-operator": "^7.24.6", - "@babel/plugin-transform-export-namespace-from": "^7.24.6", - "@babel/plugin-transform-for-of": "^7.24.6", - "@babel/plugin-transform-function-name": "^7.24.6", - "@babel/plugin-transform-json-strings": "^7.24.6", - "@babel/plugin-transform-literals": "^7.24.6", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.6", - "@babel/plugin-transform-member-expression-literals": "^7.24.6", - "@babel/plugin-transform-modules-amd": "^7.24.6", - "@babel/plugin-transform-modules-commonjs": "^7.24.6", - "@babel/plugin-transform-modules-systemjs": "^7.24.6", - "@babel/plugin-transform-modules-umd": "^7.24.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6", - "@babel/plugin-transform-new-target": "^7.24.6", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6", - "@babel/plugin-transform-numeric-separator": "^7.24.6", - "@babel/plugin-transform-object-rest-spread": "^7.24.6", - "@babel/plugin-transform-object-super": "^7.24.6", - "@babel/plugin-transform-optional-catch-binding": "^7.24.6", - "@babel/plugin-transform-optional-chaining": "^7.24.6", - "@babel/plugin-transform-parameters": "^7.24.6", - "@babel/plugin-transform-private-methods": "^7.24.6", - "@babel/plugin-transform-private-property-in-object": "^7.24.6", - "@babel/plugin-transform-property-literals": "^7.24.6", - "@babel/plugin-transform-regenerator": "^7.24.6", - "@babel/plugin-transform-reserved-words": "^7.24.6", - "@babel/plugin-transform-shorthand-properties": "^7.24.6", - "@babel/plugin-transform-spread": "^7.24.6", - "@babel/plugin-transform-sticky-regex": "^7.24.6", - "@babel/plugin-transform-template-literals": "^7.24.6", - "@babel/plugin-transform-typeof-symbol": "^7.24.6", - "@babel/plugin-transform-unicode-escapes": "^7.24.6", - "@babel/plugin-transform-unicode-property-regex": "^7.24.6", - "@babel/plugin-transform-unicode-regex": "^7.24.6", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", @@ -1840,17 +1823,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.6.tgz", - "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "@babel/plugin-transform-react-display-name": "^7.24.6", - "@babel/plugin-transform-react-jsx": "^7.24.6", - "@babel/plugin-transform-react-jsx-development": "^7.24.6", - "@babel/plugin-transform-react-pure-annotations": "^7.24.6" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1866,9 +1849,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", - "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1877,33 +1860,33 @@ } }, "node_modules/@babel/template": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", - "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1921,13 +1904,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", - "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1952,11 +1935,6 @@ "stylis": "4.2.0" } }, - "node_modules/@emotion/cache/node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, "node_modules/@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", @@ -1966,12 +1944,17 @@ "@emotion/memoize": "0.7.4" } }, - "node_modules/@emotion/memoize": { + "node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", "optional": true }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, "node_modules/@emotion/sheet": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", @@ -2370,9 +2353,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -2413,36 +2396,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.2.0.tgz", - "integrity": "sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.4.0.tgz", + "integrity": "sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@floating-ui/core": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", - "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", + "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", "dependencies": { "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.4.tgz", - "integrity": "sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", "dependencies": { "@floating-ui/core": "^1.0.0", "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", - "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", + "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -2486,19 +2480,6 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" }, - "node_modules/@humanwhocodes/retry": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.2.4.tgz", - "integrity": "sha512-Ttl/jHpxfS3st5sxwICYfk4pOH0WrLI1SpW283GgQL7sCWU7EHIOhX4b4fkIxr3tkfzwg8+FNojtzsIEE7Ecgg==", - "dev": true, - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "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", @@ -2799,6 +2780,32 @@ "node": ">=8" } }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3302,20 +3309,6 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -3328,9 +3321,9 @@ } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", - "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", "dependencies": { "sparse-bitfield": "^3.0.3" } @@ -3366,40 +3359,23 @@ } } }, - "node_modules/@mui/base/node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@mui/base/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.16", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.16.tgz", - "integrity": "sha512-PTIbMJs5C/vYMfyJNW8ArOezh4eyHkg2pTeA7bBxh2kLP1Uzs0Nm+krXWbWGJPwTWjM8EhnDrr4aCF26+2oleg==", + "version": "5.15.19", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.19.tgz", + "integrity": "sha512-tCHSi/Tomez9ERynFhZRvFO6n9ATyrPs+2N80DMDzp6xDVirbBjEwhPcE+x7Lj+nwYw0SqFkOxyvMP0irnm55w==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/material": { - "version": "5.15.16", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.16.tgz", - "integrity": "sha512-ery2hFReewko9gpDBqOr2VmXwQG9ifXofPhGzIx09/b9JqCQC/06kZXZDGGrOTpIddK9HlIf4yrS+G70jPAzUQ==", + "version": "5.15.19", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.19.tgz", + "integrity": "sha512-lp5xQBbcRuxNtjpWU0BWZgIrv2XLUz4RJ0RqFXBdESIsKoGCQZ6P3wwU5ZPuj5TjssNiKv9AlM+vHopRxZhvVQ==", "dependencies": { "@babel/runtime": "^7.23.9", "@mui/base": "5.0.0-beta.40", - "@mui/core-downloads-tracker": "^5.15.16", + "@mui/core-downloads-tracker": "^5.15.19", "@mui/system": "^5.15.15", "@mui/types": "^7.2.14", "@mui/utils": "^5.15.14", @@ -3436,19 +3412,6 @@ } } }, - "node_modules/@mui/material/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@mui/material/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, "node_modules/@mui/private-theming": { "version": "5.15.14", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz", @@ -3545,14 +3508,6 @@ } } }, - "node_modules/@mui/system/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, "node_modules/@mui/types": { "version": "7.2.14", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", @@ -3593,11 +3548,6 @@ } } }, - "node_modules/@mui/utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3631,9 +3581,9 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.5", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", - "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -3648,9 +3598,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.0.tgz", - "integrity": "sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", "cpu": [ "arm" ], @@ -3661,9 +3611,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.0.tgz", - "integrity": "sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", "cpu": [ "arm64" ], @@ -3674,9 +3624,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.0.tgz", - "integrity": "sha512-BcnSPRM76/cD2gQC+rQNGBN6GStBs2pl/FpweW8JYuz5J/IEa0Fr4AtrPv766DB/6b2MZ/AfSIOSGw3nEIP8SA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", "cpu": [ "arm64" ], @@ -3687,9 +3637,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.0.tgz", - "integrity": "sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", "cpu": [ "x64" ], @@ -3700,9 +3650,22 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.0.tgz", - "integrity": "sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", "cpu": [ "arm" ], @@ -3713,9 +3676,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.0.tgz", - "integrity": "sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", "cpu": [ "arm64" ], @@ -3726,9 +3689,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.0.tgz", - "integrity": "sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", "cpu": [ "arm64" ], @@ -3739,11 +3702,11 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.0.tgz", - "integrity": "sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", "cpu": [ - "ppc64le" + "ppc64" ], "dev": true, "optional": true, @@ -3752,9 +3715,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.0.tgz", - "integrity": "sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", "cpu": [ "riscv64" ], @@ -3765,9 +3728,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.0.tgz", - "integrity": "sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", "cpu": [ "s390x" ], @@ -3778,9 +3741,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.0.tgz", - "integrity": "sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", "cpu": [ "x64" ], @@ -3791,9 +3754,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.0.tgz", - "integrity": "sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", "cpu": [ "x64" ], @@ -3804,9 +3767,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.0.tgz", - "integrity": "sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", "cpu": [ "arm64" ], @@ -3817,9 +3780,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.0.tgz", - "integrity": "sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", "cpu": [ "ia32" ], @@ -3830,9 +3793,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.0.tgz", - "integrity": "sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", "cpu": [ "x64" ], @@ -3943,38 +3906,6 @@ "node": ">=8" } }, - "node_modules/@testing-library/dom/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==", - "dev": true, - "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/@testing-library/dom/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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/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==", - "dev": true - }, "node_modules/@testing-library/dom/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4190,9 +4121,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" @@ -4249,9 +4180,9 @@ } }, "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -4263,18 +4194,18 @@ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { - "version": "18.2.74", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", - "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.24", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.24.tgz", - "integrity": "sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "dependencies": { "@types/react": "*" } @@ -4305,9 +4236,9 @@ "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" }, "node_modules/@types/whatwg-url": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", - "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", "dependencies": { "@types/webidl-conversions": "*" } @@ -4333,16 +4264,16 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.0.tgz", + "integrity": "sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw==", "dev": true, "dependencies": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.0" + "react-refresh": "^0.14.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -4454,18 +4385,6 @@ "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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4513,6 +4432,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -4658,16 +4578,19 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", + "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": { @@ -4713,9 +4636,9 @@ } }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -5018,6 +4941,17 @@ "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==", + "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", @@ -5086,9 +5020,9 @@ } }, "node_modules/bson": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.6.0.tgz", - "integrity": "sha512-BVINv2SgcMjL4oYbBuCQTpE3/VKOSxrOA8Cj/wQP7izSzlBGVomdm+TcUd0Pzy0ytLSSDweCKQ6X3f5veM5LQA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", + "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==", "engines": { "node": ">=16.20.1" } @@ -5181,9 +5115,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001606", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz", - "integrity": "sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==", + "version": "1.0.30001629", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001629.tgz", + "integrity": "sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==", "dev": true, "funding": [ { @@ -5303,9 +5237,9 @@ } }, "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "engines": { "node": ">=6" } @@ -5717,31 +5651,6 @@ "node": ">=12" } }, - "node_modules/data-urls/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -5810,9 +5719,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -6021,9 +5930,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.728", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.728.tgz", - "integrity": "sha512-Ud1v7hJJYIqehlUJGqR6PF1Ek8l80zWwxA6nGxigBsGJ9f9M2fciHyrIiNMerSHSH3p+0/Ia7jIlnDkt41h5cw==", + "version": "1.4.792", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.792.tgz", + "integrity": "sha512-rkg5/N3L+Y844JyfgPUyuKK0Hk0efo3JNxUDKvz3HgP6EmN4rNGhr2D8boLsfTV/hGo7ZGAL8djw+jlg99zQyA==", "dev": true }, "node_modules/emittery": { @@ -6152,14 +6061,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -6376,29 +6285,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", "array.prototype.toreversed": "^1.1.2", "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "string.prototype.matchall": "^4.0.11" }, "engines": { "node": ">=4" @@ -6408,9 +6317,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "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==", "dev": true, "engines": { "node": ">=10" @@ -6420,9 +6329,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", - "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz", + "integrity": "sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==", "dev": true, "peerDependencies": { "eslint": ">=7" @@ -6440,6 +6349,23 @@ "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==", + "dev": true, + "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-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -6563,9 +6489,20 @@ "node": ">=8" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dependencies": { "acorn": "^8.9.0", @@ -7027,6 +6964,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -7120,6 +7058,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7147,9 +7086,9 @@ } }, "node_modules/globals": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.2.0.tgz", - "integrity": "sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.4.0.tgz", + "integrity": "sha512-unnwvMZpv0eDUyjNyh9DH/yxUaRYrEjW/qK4QcdrHg3oO11igUQrCSgODHEqxlKg8v2CD2Sd7UkqqEBoz5U7TQ==", "dev": true, "engines": { "node": ">=18" @@ -7159,12 +7098,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7352,11 +7292,12 @@ } }, "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==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -7462,6 +7403,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7891,10 +7833,9 @@ } }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", @@ -8169,6 +8110,32 @@ "node": ">=8" } }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-circus/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8387,6 +8354,32 @@ "node": ">=8" } }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8472,6 +8465,32 @@ "node": ">=8" } }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8570,6 +8589,32 @@ "node": ">=8" } }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-each/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8673,6 +8718,32 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-leak-detector/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-matcher-utils": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", @@ -8746,6 +8817,32 @@ "node": ">=8" } }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8836,6 +8933,32 @@ "node": ">=8" } }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8979,23 +9102,6 @@ "node": ">=8" } }, - "node_modules/jest-resolve/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "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/jest-resolve/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9302,6 +9408,32 @@ "node": ">=8" } }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -9500,20 +9632,46 @@ "node": ">=8" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", + "node_modules/jest-validate/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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, @@ -9709,31 +9867,6 @@ } } }, - "node_modules/jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -9801,9 +9934,9 @@ } }, "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -10032,6 +10165,23 @@ "react-dom": "^18.1.0" } }, + "node_modules/mdb-react-ui-kit/node_modules/@popperjs/core": { + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", + "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/mdb-react-ui-kit/node_modules/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "engines": { + "node": ">=6" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -10192,12 +10342,12 @@ } }, "node_modules/mongodb": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.5.0.tgz", - "integrity": "sha512-Fozq68InT+JKABGLqctgtb8P56pRrJFkbhW0ux+x1mdHeyinor8oNzJqwLjV/t5X5nJGfTlluxfyMnOXNggIUA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", + "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", "dependencies": { "@mongodb-js/saslprep": "^1.1.5", - "bson": "^6.4.0", + "bson": "^6.7.0", "mongodb-connection-string-url": "^3.0.0" }, "engines": { @@ -10237,26 +10387,49 @@ } }, "node_modules/mongodb-connection-string-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", - "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^13.0.0" } }, + "node_modules/mongodb-connection-string-url/node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/mongoose": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.3.3.tgz", - "integrity": "sha512-3kSk0db9DM2tLttCdS6WNRqewPleamFEa4Vz/Qldc0dB4Zow/FiZxb9GExHTJjBZQ9T2xiGleQ3GzRrES3hhsA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.1.tgz", + "integrity": "sha512-odQ2WEWGL3hb0Qex+QMN4eH6D34WdMEw7F1If2MGABApSDmG9cMmqv/G1H6WsXmuaH9mkuuadW/WbLE5+tHJwA==", "dependencies": { - "bson": "^6.5.0", + "bson": "^6.7.0", "kareem": "2.6.3", - "mongodb": "6.5.0", + "mongodb": "6.6.2", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", - "sift": "16.0.1" + "sift": "17.1.3" }, "engines": { "node": ">=16.20.1" @@ -10399,9 +10572,9 @@ "dev": true }, "node_modules/nodemon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", - "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", + "integrity": "sha512-m4Vqs+APdKzDFpuaL9F9EVOF85+h070FnkHVEoU4+rmT6Vw0bmNl7s61VEkY/cJkL7RCv1p4urnUDUMrS5rk2w==", "dev": true, "dependencies": { "chokidar": "^3.5.2", @@ -10426,26 +10599,11 @@ "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/nodemon/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -10453,17 +10611,10 @@ "node": ">=10" } }, - "node_modules/nodemon/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { "abbrev": "1" }, @@ -10471,7 +10622,7 @@ "nopt": "bin/nopt.js" }, "engines": { - "node": "*" + "node": ">=6" } }, "node_modules/normalize-path": { @@ -10499,6 +10650,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -10656,16 +10808,16 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -10793,9 +10945,9 @@ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -10929,9 +11081,9 @@ } }, "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "bin": { "prettier": "bin/prettier.cjs" }, @@ -10943,17 +11095,17 @@ } }, "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -10969,9 +11121,9 @@ } }, "node_modules/pretty-format/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==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "node_modules/process-nextick-args": { @@ -11002,6 +11154,11 @@ "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==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -11116,10 +11273,21 @@ "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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -11128,15 +11296,15 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-fast-compare": { @@ -11149,9 +11317,9 @@ "link": true }, "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/react-popper": { "version": "2.3.0", @@ -11168,9 +11336,9 @@ } }, "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -11247,11 +11415,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -11407,9 +11570,9 @@ "dev": true }, "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==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -11474,6 +11637,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -11485,9 +11649,9 @@ } }, "node_modules/rollup": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.0.tgz", - "integrity": "sha512-Qe7w62TyawbDzB4yt32R0+AbIo6m1/sqO7UPzFS8Z/ksL5mrfhA0v4CavfdmFav3D+ub4QeAgsGEe84DoWe/nQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -11500,21 +11664,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.14.0", - "@rollup/rollup-android-arm64": "4.14.0", - "@rollup/rollup-darwin-arm64": "4.14.0", - "@rollup/rollup-darwin-x64": "4.14.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.14.0", - "@rollup/rollup-linux-arm64-gnu": "4.14.0", - "@rollup/rollup-linux-arm64-musl": "4.14.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.14.0", - "@rollup/rollup-linux-riscv64-gnu": "4.14.0", - "@rollup/rollup-linux-s390x-gnu": "4.14.0", - "@rollup/rollup-linux-x64-gnu": "4.14.0", - "@rollup/rollup-linux-x64-musl": "4.14.0", - "@rollup/rollup-win32-arm64-msvc": "4.14.0", - "@rollup/rollup-win32-ia32-msvc": "4.14.0", - "@rollup/rollup-win32-x64-msvc": "4.14.0", + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", "fsevents": "~2.3.2" } }, @@ -11567,6 +11732,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -11621,9 +11792,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -11778,9 +11949,9 @@ } }, "node_modules/sift": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", - "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, "node_modules/signal-exit": { "version": "3.0.7", @@ -11799,26 +11970,11 @@ "node": ">=10" } }, - "node_modules/simple-update-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -11826,12 +11982,6 @@ "node": ">=10" } }, - "node_modules/simple-update-notifier/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -12220,13 +12370,10 @@ } }, "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, "bin": { "nodetouch": "bin/nodetouch.js" } @@ -12247,14 +12394,15 @@ } }, "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, "dependencies": { - "punycode": "^2.3.0" + "punycode": "^2.1.1" }, "engines": { - "node": ">=14" + "node": ">=12" } }, "node_modules/tree-kill": { @@ -12267,9 +12415,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/type-check": { "version": "0.4.0", @@ -12292,9 +12440,10 @@ } }, "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==", + "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==", + "dev": true, "engines": { "node": ">=10" }, @@ -12477,9 +12626,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -12496,8 +12645,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -12560,9 +12709,9 @@ } }, "node_modules/vite": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz", - "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==", + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz", + "integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==", "dev": true, "dependencies": { "esbuild": "^0.20.1", @@ -12663,18 +12812,6 @@ "node": ">=12" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", @@ -12685,15 +12822,16 @@ } }, "node_modules/whatwg-url": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", - "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, "dependencies": { - "tr46": "^4.1.1", + "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=16" + "node": ">=12" } }, "node_modules/which": { @@ -12752,6 +12890,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", @@ -12797,6 +12941,14 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -12966,266 +13118,29 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@mui/material": "^5.15.16", + "axios": "^1.6.8", + "bcrypt": "^5.1.1", + "buffer": "^6.0.3", "cors": "^2.8.5", "dotenv": "^16.4.5", + "eslint-config-google": "^0.14.0", "express": "^4.19.2", - "mongoose": "^8.3.3" + "js-cookie": "^3.0.5", + "jsonwebtoken": "^9.0.2", + "mdb-react-ui-kit": "^8.0.0", + "mongoose": "^8.3.2", + "multer": "^1.4.5-lts.1", + "react-router-dom": "^6.23.1", + "reactjs-popup": "^2.0.6" }, "devDependencies": { - "@eslint/js": "^9.2.0", - "eslint": "^9.2.0" - } - }, - "packages/express-backend/node_modules/@eslint/eslintrc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.0.2.tgz", - "integrity": "sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.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": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/express-backend/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==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "packages/express-backend/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "packages/express-backend/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "packages/express-backend/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "packages/express-backend/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==", - "dev": true - }, - "packages/express-backend/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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/express-backend/node_modules/eslint": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.2.0.tgz", - "integrity": "sha512-0n/I88vZpCOzO+PQpt0lbsqmn9AsnsJAQseIqhZFI8ibQT0U1AkEKRxA3EVMos0BoHSXDQvCXY25TUjB5tr8Og==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^3.0.2", - "@eslint/js": "9.2.0", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.2.3", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.1", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.0.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "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": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/express-backend/node_modules/eslint-scope": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", - "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/express-backend/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/express-backend/node_modules/espree": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", - "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", - "dev": true, - "dependencies": { - "acorn": "^8.11.3", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "packages/express-backend/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/express-backend/node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "packages/express-backend/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/express-backend/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "packages/express-backend/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@babel/plugin-syntax-jsx": "^7.24.6", + "@babel/preset-env": "^7.24.6", + "@babel/preset-react": "^7.24.6", + "globals": "^15.2.0", + "identity-obj-proxy": "^3.0.0", + "nodemon": "^3.1.0" } }, "packages/react-frontend": { diff --git a/packages/express-backend/package.json b/packages/express-backend/package.json index 7c9b547..f0e42cc 100644 --- a/packages/express-backend/package.json +++ b/packages/express-backend/package.json @@ -34,6 +34,6 @@ "multer": "^1.4.5-lts.1", "react-router-dom": "^6.23.1", "reactjs-popup": "^2.0.6", - "express": "^4.19.2", + "express": "^4.19.2" } } From c79d8c1b54f11e33f5f2a13138f51a38b6d6e861 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 12:54:45 -0700 Subject: [PATCH 15/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index e765c79..c77b079 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -1,6 +1,3 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - name: Build and deploy Node.js app to Azure Web App - SafeHaven2 on: @@ -26,12 +23,17 @@ jobs: cd packages/express-backend npm install cd ../../ - + + - name: Create artifact archive + run: | + mkdir -p artifact + zip -r artifact/node-app.zip . + - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: name: node-app - path: . + path: artifact/node-app.zip deploy: runs-on: ubuntu-latest @@ -40,14 +42,18 @@ jobs: name: 'Production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} permissions: - id-token: write #This is required for requesting the JWT + id-token: write # This is required for requesting the JWT steps: - name: Download artifact from build job uses: actions/download-artifact@v3 with: name: node-app - + path: ./artifact + + - name: Unzip artifact + run: unzip artifact/node-app.zip -d ./artifact + - name: Login to Azure uses: azure/login@v1 with: @@ -61,5 +67,4 @@ jobs: with: app-name: 'SafeHaven2' slot-name: 'Production' - package: . - + package: ./artifact From 8e9a9d33b37a13f4892588956010ab9677571f26 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 12:56:34 -0700 Subject: [PATCH 16/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index c77b079..ea0fe7e 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -26,8 +26,10 @@ jobs: - name: Create artifact archive run: | - mkdir -p artifact - zip -r artifact/node-app.zip . + $zipfile = "artifact\node-app.zip" + $source = "." + [IO.Compression.ZipFile]::CreateFromDirectory($source, $zipfile) + shell: powershell - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 From 9e18629327b2ef28b38d7e035d1c40b88344a8fb Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 12:59:05 -0700 Subject: [PATCH 17/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index ea0fe7e..a29d870 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -26,9 +26,8 @@ jobs: - name: Create artifact archive run: | - $zipfile = "artifact\node-app.zip" - $source = "." - [IO.Compression.ZipFile]::CreateFromDirectory($source, $zipfile) + New-Item -Path artifact -ItemType Directory + Compress-Archive -Path .\* -DestinationPath artifact\node-app.zip shell: powershell - name: Upload artifact for deployment job From 795f55d4df0319c9d449330033ef5e9525a80f8b Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:02:31 -0700 Subject: [PATCH 18/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index a29d870..b5074c9 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -22,6 +22,14 @@ jobs: run: | cd packages/express-backend npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm ci cd ../../ - name: Create artifact archive From fca33adf1abe3a02f65314c24eb8d843c0fbd925 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:04:32 -0700 Subject: [PATCH 19/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index b5074c9..621327c 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -29,6 +29,22 @@ jobs: npm install npm install npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install + npm install npm ci cd ../../ From ea2178d90959eb2d14eae05c086c16a20d47e876 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:07:21 -0700 Subject: [PATCH 20/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 43 ++++++++------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 621327c..6bb0af7 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -22,43 +22,26 @@ jobs: run: | cd packages/express-backend npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm install - npm ci cd ../../ - - name: Create artifact archive + - name: Create artifact directory run: | + if (Test-Path -Path artifact) { + Remove-Item -Recurse -Force artifact + } New-Item -Path artifact -ItemType Directory - Compress-Archive -Path .\* -DestinationPath artifact\node-app.zip + shell: powershell + + - name: Create artifact archive + run: | + Compress-Archive -Path .\* -DestinationPath artifact\nodeapp.zip shell: powershell - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: - name: node-app - path: artifact/node-app.zip + name: nodeapp + path: artifact/nodeapp.zip deploy: runs-on: ubuntu-latest @@ -73,11 +56,11 @@ jobs: - name: Download artifact from build job uses: actions/download-artifact@v3 with: - name: node-app + name: nodeapp path: ./artifact - name: Unzip artifact - run: unzip artifact/node-app.zip -d ./artifact + run: unzip artifact/nodeapp.zip -d ./artifact - name: Login to Azure uses: azure/login@v1 From 3b00c3c18234083c40295dd1869f101040428343 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:10:01 -0700 Subject: [PATCH 21/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 6bb0af7..7a6dc10 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -24,24 +24,27 @@ jobs: npm install cd ../../ - - name: Create artifact directory + - name: Prepare artifact directory run: | - if (Test-Path -Path artifact) { - Remove-Item -Recurse -Force artifact + if (Test-Path -Path artifact\node-app.zip) { + Remove-Item -Path artifact\node-app.zip -Force + } + if (-Not (Test-Path -Path artifact)) { + New-Item -Path artifact -ItemType Directory } - New-Item -Path artifact -ItemType Directory shell: powershell - name: Create artifact archive run: | - Compress-Archive -Path .\* -DestinationPath artifact\nodeapp.zip + Start-Sleep -Seconds 20 + Compress-Archive -Path .\* -DestinationPath artifact\node-app.zip shell: powershell - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: - name: nodeapp - path: artifact/nodeapp.zip + name: node-app + path: artifact/node-app.zip deploy: runs-on: ubuntu-latest @@ -56,11 +59,11 @@ jobs: - name: Download artifact from build job uses: actions/download-artifact@v3 with: - name: nodeapp + name: node-app path: ./artifact - name: Unzip artifact - run: unzip artifact/nodeapp.zip -d ./artifact + run: unzip artifact/node-app.zip -d ./artifact - name: Login to Azure uses: azure/login@v1 From 0a71339c35be92bd5d578986b12dfbd3bf190485 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:13:56 -0700 Subject: [PATCH 22/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 7a6dc10..778ea54 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -36,8 +36,9 @@ jobs: - name: Create artifact archive run: | - Start-Sleep -Seconds 20 - Compress-Archive -Path .\* -DestinationPath artifact\node-app.zip + Copy-Item -Path "artifact\node-app.zip" -Force -PassThru | + Get-ChildItem | + Compress-Archive -Path .\* -DestinationPath "artifact\node-app.zip" shell: powershell - name: Upload artifact for deployment job From 34d61f9a808d4f2b87b48d2f1b72f1d7ad7a5de5 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:19:39 -0700 Subject: [PATCH 23/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 778ea54..3f0742a 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -26,19 +26,25 @@ jobs: - name: Prepare artifact directory run: | - if (Test-Path -Path artifact\node-app.zip) { - Remove-Item -Path artifact\node-app.zip -Force + $artifactDir = "artifact" + $zipPath = "$artifactDir\node-app.zip" + if (Test-Path -Path $zipPath) { + Remove-Item -Path $zipPath -Force } - if (-Not (Test-Path -Path artifact)) { - New-Item -Path artifact -ItemType Directory + if (Test-Path -Path $artifactDir) { + Remove-Item -Recurse -Force $artifactDir } + New-Item -Path $artifactDir -ItemType Directory + shell: powershell + + - name: Copy files to artifact directory + run: | + Get-ChildItem -Path . -Recurse | Copy-Item -Destination artifact -Force -PassThru shell: powershell - name: Create artifact archive run: | - Copy-Item -Path "artifact\node-app.zip" -Force -PassThru | - Get-ChildItem | - Compress-Archive -Path .\* -DestinationPath "artifact\node-app.zip" + Compress-Archive -Path artifact\* -DestinationPath artifact\node-app.zip shell: powershell - name: Upload artifact for deployment job From da8469c007f849f81c3ad2474db2255a5e38ae94 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:22:29 -0700 Subject: [PATCH 24/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 3f0742a..cf6ac7a 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -39,19 +39,19 @@ jobs: - name: Copy files to artifact directory run: | - Get-ChildItem -Path . -Recurse | Copy-Item -Destination artifact -Force -PassThru + Get-ChildItem -Path . -Recurse | Copy-Item -Destination artifact2 -Force -PassThru shell: powershell - name: Create artifact archive run: | - Compress-Archive -Path artifact\* -DestinationPath artifact\node-app.zip + Compress-Archive -Path artifact2\* -DestinationPath artifact2\node-app.zip shell: powershell - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: name: node-app - path: artifact/node-app.zip + path: artifact2/node-app.zip deploy: runs-on: ubuntu-latest @@ -67,10 +67,10 @@ jobs: uses: actions/download-artifact@v3 with: name: node-app - path: ./artifact + path: ./artifact2 - name: Unzip artifact - run: unzip artifact/node-app.zip -d ./artifact + run: unzip artifact2/node-app.zip -d ./artifact2 - name: Login to Azure uses: azure/login@v1 @@ -85,4 +85,4 @@ jobs: with: app-name: 'SafeHaven2' slot-name: 'Production' - package: ./artifact + package: ./artifact2 From 0f180f6ed9034b5a0ecebaab2d94f75571840ef9 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:26:36 -0700 Subject: [PATCH 25/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 40 ++++++--------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index cf6ac7a..e7c202c 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -1,3 +1,6 @@ +# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy +# More GitHub Actions for Azure: https://github.com/Azure/actions + name: Build and deploy Node.js app to Azure Web App - SafeHaven2 on: @@ -23,35 +26,12 @@ jobs: cd packages/express-backend npm install cd ../../ - - - name: Prepare artifact directory - run: | - $artifactDir = "artifact" - $zipPath = "$artifactDir\node-app.zip" - if (Test-Path -Path $zipPath) { - Remove-Item -Path $zipPath -Force - } - if (Test-Path -Path $artifactDir) { - Remove-Item -Recurse -Force $artifactDir - } - New-Item -Path $artifactDir -ItemType Directory - shell: powershell - - - name: Copy files to artifact directory - run: | - Get-ChildItem -Path . -Recurse | Copy-Item -Destination artifact2 -Force -PassThru - shell: powershell - - - name: Create artifact archive - run: | - Compress-Archive -Path artifact2\* -DestinationPath artifact2\node-app.zip - shell: powershell - + - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: name: node-app - path: artifact2/node-app.zip + path: . deploy: runs-on: ubuntu-latest @@ -60,18 +40,14 @@ jobs: name: 'Production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} permissions: - id-token: write # This is required for requesting the JWT + id-token: write #This is required for requesting the JWT steps: - name: Download artifact from build job uses: actions/download-artifact@v3 with: name: node-app - path: ./artifact2 - - - name: Unzip artifact - run: unzip artifact2/node-app.zip -d ./artifact2 - + - name: Login to Azure uses: azure/login@v1 with: @@ -85,4 +61,4 @@ jobs: with: app-name: 'SafeHaven2' slot-name: 'Production' - package: ./artifact2 + package: . From a845b0c056ce4737272847a7b522b2dfcf9e8778 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 13:36:16 -0700 Subject: [PATCH 26/64] FINALLY --- .github/workflows/main_safehaven2.yml | 31 ++++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index e7c202c..c70e8de 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -1,6 +1,3 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - name: Build and deploy Node.js app to Azure Web App - SafeHaven2 on: @@ -21,26 +18,41 @@ jobs: with: node-version: '20.x' - - name: npm install, build, and test + - name: npm install run: | cd packages/express-backend npm install + npm install multer + npm install jsonwebtoken + npm install bcrypt cd ../../ + + zip-and-upload: + runs-on: ubuntu-latest + needs: build + + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Zip artifact for deployment + run: zip -r release.zip packages/express-backend + working-directory: packages/express-backend + - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: name: node-app - path: . + path: packages/express-backend/release.zip deploy: runs-on: ubuntu-latest - needs: build + needs: zip-and-upload environment: name: 'Production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} permissions: - id-token: write #This is required for requesting the JWT + id-token: write # This is required for requesting the JWT steps: - name: Download artifact from build job @@ -48,6 +60,9 @@ jobs: with: name: node-app + - name: Unzip artifact + run: unzip -o node-app/release.zip -d node-app + - name: Login to Azure uses: azure/login@v1 with: @@ -61,4 +76,4 @@ jobs: with: app-name: 'SafeHaven2' slot-name: 'Production' - package: . + package: node-app/packages/express-backend From a1b3a5a927857585993ce015fe48e4773993d0dc Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:39:06 -0700 Subject: [PATCH 27/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index c70e8de..e6317fc 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -36,13 +36,13 @@ jobs: uses: actions/checkout@v4 - name: Zip artifact for deployment - run: zip -r release.zip packages/express-backend + run: zip release.zip ./* -r working-directory: packages/express-backend - + - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: - name: node-app + name: node-app path: packages/express-backend/release.zip deploy: From ddb0a15add8f52349fabcca123e2ba7aa3a0a1bd Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:41:59 -0700 Subject: [PATCH 28/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index e6317fc..03a3515 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -52,16 +52,16 @@ jobs: name: 'Production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} permissions: - id-token: write # This is required for requesting the JWT + id-token: write #This is required for requesting the JWT steps: - name: Download artifact from build job uses: actions/download-artifact@v3 with: name: node-app - - - name: Unzip artifact - run: unzip -o node-app/release.zip -d node-app + + - name: Unzip artifact for deployment + run: unzip release.zip - name: Login to Azure uses: azure/login@v1 From ad56154f0a6f184ead13434780c9ff448d85242f Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 13:44:32 -0700 Subject: [PATCH 29/64] Update main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 03a3515..21f3ad0 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -71,9 +71,9 @@ jobs: subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_608B604CBDDF458FBBD38EB943ADE02F }} - name: 'Deploy to Azure Web App' - uses: azure/webapps-deploy@v2 id: deploy-to-webapp + uses: azure/webapps-deploy@v2 with: app-name: 'SafeHaven2' slot-name: 'Production' - package: node-app/packages/express-backend + package: . From f06b74011d5294d9ea79e9b05c8fcb4a3589c66a Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 14:07:43 -0700 Subject: [PATCH 30/64] web config --- packages/express-backend/web.config | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/express-backend/web.config diff --git a/packages/express-backend/web.config b/packages/express-backend/web.config new file mode 100644 index 0000000..f13aca7 --- /dev/null +++ b/packages/express-backend/web.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + From ada0ddddac19a57e6fdf08b3b13dc895b8e25372 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 14:08:12 -0700 Subject: [PATCH 31/64] web config --- .github/workflows/main_safehaven2.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index 21f3ad0..c9e306d 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -77,3 +77,4 @@ jobs: app-name: 'SafeHaven2' slot-name: 'Production' package: . + configuration-files: 'web.config' From ad987e3bd58aa6f75493bfc5fe3d69652a443d89 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 14:17:28 -0700 Subject: [PATCH 32/64] SEE DIRECTORY --- packages/express-backend/web.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/express-backend/web.config b/packages/express-backend/web.config index f13aca7..770c8f8 100644 --- a/packages/express-backend/web.config +++ b/packages/express-backend/web.config @@ -9,7 +9,7 @@ - + From c58e1d9899f8d1b7b7bbde7ea76fa933444e6683 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 14:29:46 -0700 Subject: [PATCH 33/64] Who knows at this point --- packages/express-backend/web.config | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/express-backend/web.config b/packages/express-backend/web.config index 770c8f8..baea9ef 100644 --- a/packages/express-backend/web.config +++ b/packages/express-backend/web.config @@ -10,6 +10,18 @@ + + + + + + + + + + + + From 66f6e9cd86f09a6a2b3b6c61c64f087bc3c46f19 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 14:49:56 -0700 Subject: [PATCH 34/64] PLEASE --- packages/express-backend/web.config | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/express-backend/web.config b/packages/express-backend/web.config index baea9ef..bcee953 100644 --- a/packages/express-backend/web.config +++ b/packages/express-backend/web.config @@ -22,6 +22,13 @@ + + + + + + + From fd83b4b7da577d5081bdb0d03a357d5faeae6dc9 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 15:06:55 -0700 Subject: [PATCH 35/64] OMG --- .github/workflows/main_safehaven2.yml | 1 + packages/express-backend/web.config | 13 ------------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml index c9e306d..4eac2c4 100644 --- a/.github/workflows/main_safehaven2.yml +++ b/.github/workflows/main_safehaven2.yml @@ -23,6 +23,7 @@ jobs: cd packages/express-backend npm install npm install multer + npm install cors npm install jsonwebtoken npm install bcrypt cd ../../ diff --git a/packages/express-backend/web.config b/packages/express-backend/web.config index bcee953..ccc6151 100644 --- a/packages/express-backend/web.config +++ b/packages/express-backend/web.config @@ -10,21 +10,8 @@ - - - - - - - - - - - - - From 9c4bbb51f0bd00a73b27e03a8219abc21e658b10 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 15:25:30 -0700 Subject: [PATCH 36/64] rename --- .../express-backend/{backend.js => app.js} | 766 +++++++++--------- 1 file changed, 383 insertions(+), 383 deletions(-) rename packages/express-backend/{backend.js => app.js} (96%) diff --git a/packages/express-backend/backend.js b/packages/express-backend/app.js similarity index 96% rename from packages/express-backend/backend.js rename to packages/express-backend/app.js index ea76c63..ea087c0 100644 --- a/packages/express-backend/backend.js +++ b/packages/express-backend/app.js @@ -1,383 +1,383 @@ -import cors from "cors"; -import orderService from "./services/order-service.js"; -import orderUnitService from "./services/order-unit-service.js"; -import productService from "./services/product-service.js"; -import userService from "./services/user-service.js"; -import express from "express"; -import multer from "multer"; - -const app = express(); -const port = 8000; - -app.use(cors()); -app.use(express.json()); - -// Routes -const upload = multer({ dest: "uploads/" }); -app.use("/uploads", express.static("uploads")); - -app.post( - "/profile-picture", - upload.single("profilePicture"), - userService.authenticateUser, - async (req, res) => { - const file = req.file; - const id = req.userID; - if (!file) { - res.status(400).send("No file uploaded"); - return; - } - - try { - const result = await userService.uploadProfilePicture(file); - const user = await userService.findUserById(id); - - const pfp = { profilePicture: result._id }; - - fetch(`https://safehaven2.azurewebsites.net/users/${user._id}`, { - method: "PATCH", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(pfp) - }); - res.status(201).send(result._id.toString()); - } catch (error) { - res.status(500).send(error.name); - } - } -); - -app.patch("/users/:id", (req, res) => { - const id = req.params["id"]; - userService - .changeUserProfilePicture(id, req.body.profilePicture) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - console.log(error); - res.status(500).send(error); - }); -}); - -app.get("/profile-picture/:id", (req, res) => { - const id = req.params["id"]; - userService - .findProfilePictureById(id) - .then((result) => { - if (result) { - res.contentType(result.contentType); - res.send(result.data); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/users", (req, res) => { - userService.signupUser(req, res); -}); - -app.post("/users/profile", userService.authenticateUser, (req, res) => { - const { bio, skills } = req.body; // from form - const id = req.userID; - userService.editProfile(id, bio, skills) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - console.log(error); - res.status(500).send(error); - }); -}); - -app.get("/users", userService.authenticateUser, (req, res) => { - const id = req.userID; - userService - .findUserById(id) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.get("/users/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - userService - .findUserById(id) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/login", (req, res) => { - userService.loginUser(req, res); -}); - -app.delete("/users", userService.authenticateUser, (req, res) => { - const id = req.userID; - userService - .removeUser(id) - .then((result) => { - res.status(204).send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.delete("/products/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - const userID = req.userID; - console.log(userID); - productService - .removeProduct(id) - .then((result) => { - console.log("plz"); - userService.removeProductFromUserID(userID, id).then((Result) => { - console.log("hi"); - res.status(204).send(Result); - }); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/products", userService.authenticateUser, (req, res) => { - const productToAdd = req.body; - productService - .addProduct(productToAdd) - .then((result) => { - const UserID = req.userID; - userService.addProductToUser(UserID, result.id); - console.log(result); - res.status(201).send(result); - }) - .catch((error) => { - console.log(error); - res.status(500).send(error.name); - }); -}); - -app.get("/products/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - productService - .findProductById(id) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.patch("/products/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - const productChanges = req.body; - productService - .changeProductById(id, productChanges) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.get("/products", userService.authenticateUser, async (req, res) => { - // const product = req.query.product; - // const quantity = req.query.quantity; - const UserID = req.userID; - try { - const user = await userService.findUserById(UserID); - productService.findProductsByIds(user.products).then((result) => { - if (result) { - res.send(result); - } else { - res.status(500).send("Error retrieving user products"); - } - }); - } catch (error) { - res.status(500).send("Error retrieving user products"); - } -}); - -app.get("/", (req, res) => { - res.send("Hello World!"); -}); - -//add_orders routes -app.get("/orders", userService.authenticateUser, async (req, res) => { - //const id = req.query.id; - //const product = req.query.product; - //const quantity = req.query.quantity; - const search = req.query.search; - const UserID = req.userID; - const user = await userService.findUserById(UserID); - console.log(search); - let srch ={"items.product" : { $regex: search, $options: "i" }}; - console.log(srch); - if(search === undefined){ - console.log("Normal"); - orderService - .findOrdersByIds(user.orders) - .then((result) => { - console.log(result); - res.send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); - } else { - console.log("Searching"); - orderService - .search(user.orders, srch) - .then((result) => { - console.log(result); - res.send(result); - }) - .catch((error) => { - console.log(error); - res.status(500).send(error.name); - }); - } -}); - - -app.get("/orders/:find", userService.authenticateUser, (req, res) => { - const find = req.params["find"]; - console.log(find); - let srch = "{$or:{_id:{$regex:\"" + find + "\"}},{product:{$regex:\"" + find + "\"}},{quantity:{$regex:\"" + find + "\"}}]"; - console.log("HERE"); - orderService - .find({srch}) - .then((result) => { - res.send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/orders", userService.authenticateUser, (req, res) => { - //console.log(req.body); - const orderToAdd = req.body; - orderService - .addOrder(orderToAdd) - .then((result) => { - const UserID = req.userID; - userService.addOrderToUser(UserID, result.id); - console.log(result); - res.status(201).send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.delete("/orders/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - const userID = req.userID; - orderService - .removeOrder(id) - .then((result) => { - userService.removeOrderFromUserID(userID, id).then((Result) => { - console.log("hi"); - res.status(204).send(Result); - }); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - - -//order-units routes -app.get("/order-units", userService.authenticateUser, (req, res) => { - const id = req.query.id; - const product = req.query.product; - const quantity = req.query.quantity; - orderUnitService - .getOrder(id, product, quantity) - .then((result) => { - res.send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.get("/order-units/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - orderUnitService - .findOrderById(id) - .then((result) => { - res.send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/order-units", userService.authenticateUser, (req, res) => { - const orderToAdd = req.body; - //console.log("POST: ", req.body); - orderUnitService - .addOrder(orderToAdd) - .then((result) => { - res.status(201).send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.delete("/order-units/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - orderUnitService - .removeOrder(id) - .then((result) => { - res.status(204).send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.listen(port, () => { - console.log(`Example app listening at safehaven307.azurewebsites.net:${port}`); -}); +import cors from "cors"; +import orderService from "./services/order-service.js"; +import orderUnitService from "./services/order-unit-service.js"; +import productService from "./services/product-service.js"; +import userService from "./services/user-service.js"; +import express from "express"; +import multer from "multer"; + +const app = express(); +const port = 8000; + +app.use(cors()); +app.use(express.json()); + +// Routes +const upload = multer({ dest: "uploads/" }); +app.use("/uploads", express.static("uploads")); + +app.post( + "/profile-picture", + upload.single("profilePicture"), + userService.authenticateUser, + async (req, res) => { + const file = req.file; + const id = req.userID; + if (!file) { + res.status(400).send("No file uploaded"); + return; + } + + try { + const result = await userService.uploadProfilePicture(file); + const user = await userService.findUserById(id); + + const pfp = { profilePicture: result._id }; + + fetch(`https://safehaven2.azurewebsites.net/users/${user._id}`, { + method: "PATCH", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(pfp) + }); + res.status(201).send(result._id.toString()); + } catch (error) { + res.status(500).send(error.name); + } + } +); + +app.patch("/users/:id", (req, res) => { + const id = req.params["id"]; + userService + .changeUserProfilePicture(id, req.body.profilePicture) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + console.log(error); + res.status(500).send(error); + }); +}); + +app.get("/profile-picture/:id", (req, res) => { + const id = req.params["id"]; + userService + .findProfilePictureById(id) + .then((result) => { + if (result) { + res.contentType(result.contentType); + res.send(result.data); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/users", (req, res) => { + userService.signupUser(req, res); +}); + +app.post("/users/profile", userService.authenticateUser, (req, res) => { + const { bio, skills } = req.body; // from form + const id = req.userID; + userService.editProfile(id, bio, skills) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + console.log(error); + res.status(500).send(error); + }); +}); + +app.get("/users", userService.authenticateUser, (req, res) => { + const id = req.userID; + userService + .findUserById(id) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.get("/users/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + userService + .findUserById(id) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/login", (req, res) => { + userService.loginUser(req, res); +}); + +app.delete("/users", userService.authenticateUser, (req, res) => { + const id = req.userID; + userService + .removeUser(id) + .then((result) => { + res.status(204).send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.delete("/products/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + const userID = req.userID; + console.log(userID); + productService + .removeProduct(id) + .then((result) => { + console.log("plz"); + userService.removeProductFromUserID(userID, id).then((Result) => { + console.log("hi"); + res.status(204).send(Result); + }); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/products", userService.authenticateUser, (req, res) => { + const productToAdd = req.body; + productService + .addProduct(productToAdd) + .then((result) => { + const UserID = req.userID; + userService.addProductToUser(UserID, result.id); + console.log(result); + res.status(201).send(result); + }) + .catch((error) => { + console.log(error); + res.status(500).send(error.name); + }); +}); + +app.get("/products/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + productService + .findProductById(id) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.patch("/products/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + const productChanges = req.body; + productService + .changeProductById(id, productChanges) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.get("/products", userService.authenticateUser, async (req, res) => { + // const product = req.query.product; + // const quantity = req.query.quantity; + const UserID = req.userID; + try { + const user = await userService.findUserById(UserID); + productService.findProductsByIds(user.products).then((result) => { + if (result) { + res.send(result); + } else { + res.status(500).send("Error retrieving user products"); + } + }); + } catch (error) { + res.status(500).send("Error retrieving user products"); + } +}); + +app.get("/", (req, res) => { + res.send("Hello World!"); +}); + +//add_orders routes +app.get("/orders", userService.authenticateUser, async (req, res) => { + //const id = req.query.id; + //const product = req.query.product; + //const quantity = req.query.quantity; + const search = req.query.search; + const UserID = req.userID; + const user = await userService.findUserById(UserID); + console.log(search); + let srch ={"items.product" : { $regex: search, $options: "i" }}; + console.log(srch); + if(search === undefined){ + console.log("Normal"); + orderService + .findOrdersByIds(user.orders) + .then((result) => { + console.log(result); + res.send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); + } else { + console.log("Searching"); + orderService + .search(user.orders, srch) + .then((result) => { + console.log(result); + res.send(result); + }) + .catch((error) => { + console.log(error); + res.status(500).send(error.name); + }); + } +}); + + +app.get("/orders/:find", userService.authenticateUser, (req, res) => { + const find = req.params["find"]; + console.log(find); + let srch = "{$or:{_id:{$regex:\"" + find + "\"}},{product:{$regex:\"" + find + "\"}},{quantity:{$regex:\"" + find + "\"}}]"; + console.log("HERE"); + orderService + .find({srch}) + .then((result) => { + res.send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/orders", userService.authenticateUser, (req, res) => { + //console.log(req.body); + const orderToAdd = req.body; + orderService + .addOrder(orderToAdd) + .then((result) => { + const UserID = req.userID; + userService.addOrderToUser(UserID, result.id); + console.log(result); + res.status(201).send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.delete("/orders/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + const userID = req.userID; + orderService + .removeOrder(id) + .then((result) => { + userService.removeOrderFromUserID(userID, id).then((Result) => { + console.log("hi"); + res.status(204).send(Result); + }); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + + +//order-units routes +app.get("/order-units", userService.authenticateUser, (req, res) => { + const id = req.query.id; + const product = req.query.product; + const quantity = req.query.quantity; + orderUnitService + .getOrder(id, product, quantity) + .then((result) => { + res.send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.get("/order-units/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + orderUnitService + .findOrderById(id) + .then((result) => { + res.send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/order-units", userService.authenticateUser, (req, res) => { + const orderToAdd = req.body; + //console.log("POST: ", req.body); + orderUnitService + .addOrder(orderToAdd) + .then((result) => { + res.status(201).send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.delete("/order-units/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + orderUnitService + .removeOrder(id) + .then((result) => { + res.status(204).send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.listen(port, () => { + console.log(`Example app listening at safehaven307.azurewebsites.net:${port}`); +}); From 9139082ad70f35fac712984b2298ecc988c53f45 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 15:32:20 -0700 Subject: [PATCH 37/64] PLEASE AGAIN --- packages/express-backend/package.json | 2 +- packages/express-backend/web.config | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/express-backend/package.json b/packages/express-backend/package.json index f0e42cc..b944c17 100644 --- a/packages/express-backend/package.json +++ b/packages/express-backend/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "description": "", "type": "module", - "main": "backend.js", + "main": "app.js", "scripts": { "dev": "npx nodemon backend.js", "lint": "npx eslint .", diff --git a/packages/express-backend/web.config b/packages/express-backend/web.config index ccc6151..be65299 100644 --- a/packages/express-backend/web.config +++ b/packages/express-backend/web.config @@ -1,14 +1,6 @@ - - - - - - - - From c9c42dbdd1ebe5ef5463fe86aa039a77f4ddcae5 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 15:48:36 -0700 Subject: [PATCH 38/64] OMGOMGOMG --- packages/express-backend/web.config | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/express-backend/web.config b/packages/express-backend/web.config index be65299..a974545 100644 --- a/packages/express-backend/web.config +++ b/packages/express-backend/web.config @@ -3,6 +3,19 @@ + + + + + + + + + + + + + From 3c71c8775246cb9d3993a79dbb97af0ce6bce8f5 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 15:57:20 -0700 Subject: [PATCH 39/64] OK --- packages/express-backend/web.config | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/packages/express-backend/web.config b/packages/express-backend/web.config index a974545..be65299 100644 --- a/packages/express-backend/web.config +++ b/packages/express-backend/web.config @@ -3,19 +3,6 @@ - - - - - - - - - - - - - From 6be570c376218943d7b60392e20db67db4a01917 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 23:09:58 -0700 Subject: [PATCH 40/64] Delete .github/workflows/main_safehaven2.yml --- .github/workflows/main_safehaven2.yml | 81 --------------------------- 1 file changed, 81 deletions(-) delete mode 100644 .github/workflows/main_safehaven2.yml diff --git a/.github/workflows/main_safehaven2.yml b/.github/workflows/main_safehaven2.yml deleted file mode 100644 index 4eac2c4..0000000 --- a/.github/workflows/main_safehaven2.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: Build and deploy Node.js app to Azure Web App - SafeHaven2 - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - build: - runs-on: windows-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set up Node.js version - uses: actions/setup-node@v3 - with: - node-version: '20.x' - - - name: npm install - run: | - cd packages/express-backend - npm install - npm install multer - npm install cors - npm install jsonwebtoken - npm install bcrypt - cd ../../ - - zip-and-upload: - runs-on: ubuntu-latest - needs: build - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Zip artifact for deployment - run: zip release.zip ./* -r - working-directory: packages/express-backend - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v3 - with: - name: node-app - path: packages/express-backend/release.zip - - deploy: - runs-on: ubuntu-latest - needs: zip-and-upload - environment: - name: 'Production' - url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - permissions: - id-token: write #This is required for requesting the JWT - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v3 - with: - name: node-app - - - name: Unzip artifact for deployment - run: unzip release.zip - - - name: Login to Azure - uses: azure/login@v1 - with: - client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_F78BFACEB8754DF0B3920B38D34A736F }} - tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_DB909594BB3047A0814E70CF6073DBB2 }} - subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_608B604CBDDF458FBBD38EB943ADE02F }} - - - name: 'Deploy to Azure Web App' - id: deploy-to-webapp - uses: azure/webapps-deploy@v2 - with: - app-name: 'SafeHaven2' - slot-name: 'Production' - package: . - configuration-files: 'web.config' From b759fa54b6a85662267437577bf5c9ba2b5e971a Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 23:12:47 -0700 Subject: [PATCH 41/64] PLEASE WOKR --- package.json | 2 +- packages/express-backend/app.js | 383 ------------------ packages/react-frontend/package.json | 2 +- .../react-frontend/src/Components/Table.jsx | 2 +- .../react-frontend/src/Views/AddOrders.jsx | 8 +- .../react-frontend/src/Views/EditProfile.jsx | 2 +- .../react-frontend/src/Views/Inventory.jsx | 6 +- .../react-frontend/src/Views/LoginPage.jsx | 2 +- .../react-frontend/src/Views/ManageOrders.jsx | 6 +- .../src/Views/OrderStatistics.jsx | 6 +- .../react-frontend/src/Views/ProductPage.jsx | 4 +- packages/react-frontend/src/Views/Profile.jsx | 12 +- .../react-frontend/src/Views/SignUpPage.jsx | 2 +- 13 files changed, 27 insertions(+), 410 deletions(-) delete mode 100644 packages/express-backend/app.js diff --git a/package.json b/package.json index cdf0aec..40ca38f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "test": "jest", "build": "cd packages/react-frontend && npm run build", - "start": "cd packages/express-backend && npm start", + "start": "concurrently \"cd packages/express-backend && npm start\" \"cd packages/react-frontend && npm start\"", "dev": "concurrently \"cd packages/express-backend && npm run dev\" \"cd packages/react-frontend && npm run dev\"", "prettier": "npx prettier . --write", "eslint": "npx eslint ." diff --git a/packages/express-backend/app.js b/packages/express-backend/app.js deleted file mode 100644 index ea087c0..0000000 --- a/packages/express-backend/app.js +++ /dev/null @@ -1,383 +0,0 @@ -import cors from "cors"; -import orderService from "./services/order-service.js"; -import orderUnitService from "./services/order-unit-service.js"; -import productService from "./services/product-service.js"; -import userService from "./services/user-service.js"; -import express from "express"; -import multer from "multer"; - -const app = express(); -const port = 8000; - -app.use(cors()); -app.use(express.json()); - -// Routes -const upload = multer({ dest: "uploads/" }); -app.use("/uploads", express.static("uploads")); - -app.post( - "/profile-picture", - upload.single("profilePicture"), - userService.authenticateUser, - async (req, res) => { - const file = req.file; - const id = req.userID; - if (!file) { - res.status(400).send("No file uploaded"); - return; - } - - try { - const result = await userService.uploadProfilePicture(file); - const user = await userService.findUserById(id); - - const pfp = { profilePicture: result._id }; - - fetch(`https://safehaven2.azurewebsites.net/users/${user._id}`, { - method: "PATCH", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(pfp) - }); - res.status(201).send(result._id.toString()); - } catch (error) { - res.status(500).send(error.name); - } - } -); - -app.patch("/users/:id", (req, res) => { - const id = req.params["id"]; - userService - .changeUserProfilePicture(id, req.body.profilePicture) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - console.log(error); - res.status(500).send(error); - }); -}); - -app.get("/profile-picture/:id", (req, res) => { - const id = req.params["id"]; - userService - .findProfilePictureById(id) - .then((result) => { - if (result) { - res.contentType(result.contentType); - res.send(result.data); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/users", (req, res) => { - userService.signupUser(req, res); -}); - -app.post("/users/profile", userService.authenticateUser, (req, res) => { - const { bio, skills } = req.body; // from form - const id = req.userID; - userService.editProfile(id, bio, skills) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - console.log(error); - res.status(500).send(error); - }); -}); - -app.get("/users", userService.authenticateUser, (req, res) => { - const id = req.userID; - userService - .findUserById(id) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.get("/users/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - userService - .findUserById(id) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/login", (req, res) => { - userService.loginUser(req, res); -}); - -app.delete("/users", userService.authenticateUser, (req, res) => { - const id = req.userID; - userService - .removeUser(id) - .then((result) => { - res.status(204).send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.delete("/products/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - const userID = req.userID; - console.log(userID); - productService - .removeProduct(id) - .then((result) => { - console.log("plz"); - userService.removeProductFromUserID(userID, id).then((Result) => { - console.log("hi"); - res.status(204).send(Result); - }); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/products", userService.authenticateUser, (req, res) => { - const productToAdd = req.body; - productService - .addProduct(productToAdd) - .then((result) => { - const UserID = req.userID; - userService.addProductToUser(UserID, result.id); - console.log(result); - res.status(201).send(result); - }) - .catch((error) => { - console.log(error); - res.status(500).send(error.name); - }); -}); - -app.get("/products/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - productService - .findProductById(id) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.patch("/products/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - const productChanges = req.body; - productService - .changeProductById(id, productChanges) - .then((result) => { - if (result) { - res.send(result); - } else { - res.status(404).send(`Not found: ${id}`); - } - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.get("/products", userService.authenticateUser, async (req, res) => { - // const product = req.query.product; - // const quantity = req.query.quantity; - const UserID = req.userID; - try { - const user = await userService.findUserById(UserID); - productService.findProductsByIds(user.products).then((result) => { - if (result) { - res.send(result); - } else { - res.status(500).send("Error retrieving user products"); - } - }); - } catch (error) { - res.status(500).send("Error retrieving user products"); - } -}); - -app.get("/", (req, res) => { - res.send("Hello World!"); -}); - -//add_orders routes -app.get("/orders", userService.authenticateUser, async (req, res) => { - //const id = req.query.id; - //const product = req.query.product; - //const quantity = req.query.quantity; - const search = req.query.search; - const UserID = req.userID; - const user = await userService.findUserById(UserID); - console.log(search); - let srch ={"items.product" : { $regex: search, $options: "i" }}; - console.log(srch); - if(search === undefined){ - console.log("Normal"); - orderService - .findOrdersByIds(user.orders) - .then((result) => { - console.log(result); - res.send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); - } else { - console.log("Searching"); - orderService - .search(user.orders, srch) - .then((result) => { - console.log(result); - res.send(result); - }) - .catch((error) => { - console.log(error); - res.status(500).send(error.name); - }); - } -}); - - -app.get("/orders/:find", userService.authenticateUser, (req, res) => { - const find = req.params["find"]; - console.log(find); - let srch = "{$or:{_id:{$regex:\"" + find + "\"}},{product:{$regex:\"" + find + "\"}},{quantity:{$regex:\"" + find + "\"}}]"; - console.log("HERE"); - orderService - .find({srch}) - .then((result) => { - res.send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/orders", userService.authenticateUser, (req, res) => { - //console.log(req.body); - const orderToAdd = req.body; - orderService - .addOrder(orderToAdd) - .then((result) => { - const UserID = req.userID; - userService.addOrderToUser(UserID, result.id); - console.log(result); - res.status(201).send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.delete("/orders/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - const userID = req.userID; - orderService - .removeOrder(id) - .then((result) => { - userService.removeOrderFromUserID(userID, id).then((Result) => { - console.log("hi"); - res.status(204).send(Result); - }); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - - -//order-units routes -app.get("/order-units", userService.authenticateUser, (req, res) => { - const id = req.query.id; - const product = req.query.product; - const quantity = req.query.quantity; - orderUnitService - .getOrder(id, product, quantity) - .then((result) => { - res.send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.get("/order-units/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - orderUnitService - .findOrderById(id) - .then((result) => { - res.send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.post("/order-units", userService.authenticateUser, (req, res) => { - const orderToAdd = req.body; - //console.log("POST: ", req.body); - orderUnitService - .addOrder(orderToAdd) - .then((result) => { - res.status(201).send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.delete("/order-units/:id", userService.authenticateUser, (req, res) => { - const id = req.params["id"]; - orderUnitService - .removeOrder(id) - .then((result) => { - res.status(204).send(result); - }) - .catch((error) => { - res.status(500).send(error.name); - }); -}); - -app.listen(port, () => { - console.log(`Example app listening at safehaven307.azurewebsites.net:${port}`); -}); diff --git a/packages/react-frontend/package.json b/packages/react-frontend/package.json index 0b32495..3398f04 100644 --- a/packages/react-frontend/package.json +++ b/packages/react-frontend/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite", - "start": "vite --host", + "start": "vite --host --port 80", "build": "vite build", "lint": "npx eslint .", "preview": "vite preview" diff --git a/packages/react-frontend/src/Components/Table.jsx b/packages/react-frontend/src/Components/Table.jsx index 264bde5..b1db279 100644 --- a/packages/react-frontend/src/Components/Table.jsx +++ b/packages/react-frontend/src/Components/Table.jsx @@ -31,7 +31,7 @@ function TableBody(props) { - + diff --git a/packages/react-frontend/src/Views/AddOrders.jsx b/packages/react-frontend/src/Views/AddOrders.jsx index 4c2eba1..e8ae935 100644 --- a/packages/react-frontend/src/Views/AddOrders.jsx +++ b/packages/react-frontend/src/Views/AddOrders.jsx @@ -76,13 +76,13 @@ function AddOrders() { } function fetchOrders() { - return fetch("https://safehaven2.azurewebsites.net/order-units", { + return fetch("https://safehavenapp.azurewebsites.net/order-units", { headers: addAuthHeader() }); } function postOrderUnit(order) { - return fetch("https://safehaven2.azurewebsites.net/order-units", { + return fetch("https://safehavenapp.azurewebsites.net/order-units", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" @@ -92,7 +92,7 @@ function AddOrders() { } function deleteOrder(id) { - const uri = `https://safehaven2.azurewebsites.net/order-units/${id}`; + const uri = `https://safehavenapp.azurewebsites.net/order-units/${id}`; return fetch(uri, { method: "DELETE", headers: addAuthHeader({ @@ -102,7 +102,7 @@ function AddOrders() { } function runPost(order_str) { - return fetch("https://safehaven2.azurewebsites.net/orders", { + return fetch("https://safehavenapp.azurewebsites.net/orders", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/EditProfile.jsx b/packages/react-frontend/src/Views/EditProfile.jsx index b3e766b..744efcc 100644 --- a/packages/react-frontend/src/Views/EditProfile.jsx +++ b/packages/react-frontend/src/Views/EditProfile.jsx @@ -8,7 +8,7 @@ import { useNavigate } from "react-router-dom"; function EditProfile() { const navigate = useNavigate(); function changeProfile(profile){ - fetch("https://safehaven2.azurewebsites.net/users/profile", { + fetch("https://safehavenapp.azurewebsites.net/users/profile", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/Inventory.jsx b/packages/react-frontend/src/Views/Inventory.jsx index ecbe48e..f166377 100644 --- a/packages/react-frontend/src/Views/Inventory.jsx +++ b/packages/react-frontend/src/Views/Inventory.jsx @@ -71,7 +71,7 @@ function Inventory() { } function fetchProducts() { - const promise = fetch("https://safehaven2.azurewebsites.net/products", { + const promise = fetch("https://safehavenapp.azurewebsites.net/products", { headers: addAuthHeader() }); return promise; @@ -79,7 +79,7 @@ function Inventory() { function postProduct(product) { console.log("posting:", product); - return fetch("https://safehaven2.azurewebsites.net/products", { + return fetch("https://safehavenapp.azurewebsites.net/products", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" @@ -89,7 +89,7 @@ function Inventory() { } function deleteProduct(id) { - const uri = `https://safehaven2.azurewebsites.net/products/${id}`; + const uri = `https://safehavenapp.azurewebsites.net/products/${id}`; return fetch(uri, { method: "DELETE", headers: addAuthHeader({ diff --git a/packages/react-frontend/src/Views/LoginPage.jsx b/packages/react-frontend/src/Views/LoginPage.jsx index 06814cf..823af14 100644 --- a/packages/react-frontend/src/Views/LoginPage.jsx +++ b/packages/react-frontend/src/Views/LoginPage.jsx @@ -9,7 +9,7 @@ function Login() { const navigate = useNavigate(); function authenticateUser(user) { console.log(user); - fetch("https://safehaven2.azurewebsites.net/login", { + fetch("https://safehavenapp.azurewebsites.net/login", { method: "POST", headers: { "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/ManageOrders.jsx b/packages/react-frontend/src/Views/ManageOrders.jsx index 1c29873..36c53de 100644 --- a/packages/react-frontend/src/Views/ManageOrders.jsx +++ b/packages/react-frontend/src/Views/ManageOrders.jsx @@ -42,14 +42,14 @@ function ManageOrders() { }; function fetchOrders() { - return fetch("https://safehaven2.azurewebsites.net/orders", { + return fetch("https://safehavenapp.azurewebsites.net/orders", { headers: addAuthHeader() }); } function fetchSearch(search) { search = "search=" + search; - const uri = `https://safehaven2.azurewebsites.net/orders/?${search}`; + const uri = `https://safehavenapp.azurewebsites.net/orders/?${search}`; console.log(uri); return fetch(uri, { headers: addAuthHeader() @@ -57,7 +57,7 @@ function ManageOrders() { } function deleteOrder(id) { - const uri = `https://safehaven2.azurewebsites.net/orders/${id}`; + const uri = `https://safehavenapp.azurewebsites.net/orders/${id}`; return fetch(uri, { method: "DELETE", headers: addAuthHeader({ diff --git a/packages/react-frontend/src/Views/OrderStatistics.jsx b/packages/react-frontend/src/Views/OrderStatistics.jsx index e1dfd0d..46e5a3f 100644 --- a/packages/react-frontend/src/Views/OrderStatistics.jsx +++ b/packages/react-frontend/src/Views/OrderStatistics.jsx @@ -64,13 +64,13 @@ function Inventory() { } function fetchProducts() { - return fetch("https://safehaven2.azurewebsites.net/products", { + return fetch("https://safehavenapp.azurewebsites.net/products", { headers: addAuthHeader() }); } function postProduct(product) { - return fetch("https://safehaven2.azurewebsites.net/products", { + return fetch("https://safehavenapp.azurewebsites.net/products", { method: "POST", headers: addAuthHeader({ "Content-Type": "application/json" @@ -80,7 +80,7 @@ function Inventory() { } function deleteProduct(id) { - const uri = `https://safehaven2.azurewebsites.net/products/${id}`; + const uri = `https://safehavenapp.azurewebsites.net/products/${id}`; return fetch(uri, { method: "DELETE", headers: addAuthHeader({ diff --git a/packages/react-frontend/src/Views/ProductPage.jsx b/packages/react-frontend/src/Views/ProductPage.jsx index 84760c2..7a1bb82 100644 --- a/packages/react-frontend/src/Views/ProductPage.jsx +++ b/packages/react-frontend/src/Views/ProductPage.jsx @@ -33,7 +33,7 @@ function ProductPage() { function fetchProduct(id) { console.log(`Fetching product with id: ${id}`); - return fetch(`https://safehaven2.azurewebsites.net/products/${id}`, { + return fetch(`https://safehavenapp.azurewebsites.net/products/${id}`, { headers: addAuthHeader() }) .then((res) => { @@ -76,7 +76,7 @@ function ProductPage() { function patchProduct(product) { console.log("patching: ", product); - return fetch(`https://safehaven2.azurewebsites.net/products/${id}`, { + return fetch(`https://safehavenapp.azurewebsites.net/products/${id}`, { method: "PATCH", headers: addAuthHeader({ "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/Profile.jsx b/packages/react-frontend/src/Views/Profile.jsx index 8e31f8c..b2ce5dd 100644 --- a/packages/react-frontend/src/Views/Profile.jsx +++ b/packages/react-frontend/src/Views/Profile.jsx @@ -13,19 +13,19 @@ function Profile() { useEffect(() => { async function getUser() { - const user_details = await axios.get(`https://safehaven2.azurewebsites.net/users`, { + const user_details = await axios.get(`https://safehavenapp.azurewebsites.net/users`, { headers: addAuthHeader() }); const user = user_details.data; setUser(user); - const imageUrl = `https://safehaven2.azurewebsites.net/profile-picture/${user.profilePicture}`; + const imageUrl = `https://safehavenapp.azurewebsites.net/profile-picture/${user.profilePicture}`; setProfilePicture(imageUrl); } async function fetchProfilePicture() { try { - const imageUrl = `https://safehaven2.azurewebsites.net/profile-picture/${user.profilePicture}`; + const imageUrl = `https://safehavenapp.azurewebsites.net/profile-picture/${user.profilePicture}`; setProfilePicture(imageUrl); } catch (error) { console.error("Failed to load user profile picture", error); @@ -49,14 +49,14 @@ function Profile() { try { // Send the file to the server for processing and storage in MongoDB - const response = await axios.post("https://safehaven2.azurewebsites.net/profile-picture", formData, { + const response = await axios.post("https://safehavenapp.azurewebsites.net/profile-picture", formData, { headers: addAuthHeader({ "Content-Type": "multipart/form-data" }) }); console.log(response); - const imageUrl = `https://safehaven2.azurewebsites.net/profile-picture/${response.data}`; + const imageUrl = `https://safehavenapp.azurewebsites.net/profile-picture/${response.data}`; setProfilePicture(imageUrl); @@ -68,7 +68,7 @@ function Profile() { }; function deleteProfile() { - fetch("https://safehaven2.azurewebsites.net/users", { + fetch("https://safehavenapp.azurewebsites.net/users", { method: "DELETE", headers: addAuthHeader({ "Content-Type": "application/json" diff --git a/packages/react-frontend/src/Views/SignUpPage.jsx b/packages/react-frontend/src/Views/SignUpPage.jsx index b1e63a1..2c23a06 100644 --- a/packages/react-frontend/src/Views/SignUpPage.jsx +++ b/packages/react-frontend/src/Views/SignUpPage.jsx @@ -8,7 +8,7 @@ function Signup() { const navigate = useNavigate(); function createUser(user) { console.log(user); - fetch("https://safehaven2.azurewebsites.net/users", { + fetch("https://safehavenapp.azurewebsites.net/users", { method: "POST", headers: { "Content-Type": "application/json" From b5e3d4b04ac41618eef23fca95fb432e7ffd93a1 Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 23:19:28 -0700 Subject: [PATCH 42/64] Update azure-static-web-apps-lively-ground-0cd068c1e.yml --- .../workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml index c903dd2..da9eb36 100644 --- a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml +++ b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml @@ -33,6 +33,7 @@ jobs: api_location: "" # Api source code path - optional output_location: "dist" # Built app content directory - optional ###### End of Repository/Build Configurations ###### + - run: tree close_pull_request_job: if: github.event_name == 'pull_request' && github.event.action == 'closed' From e351cd2f7bce13d4977cf1938751fd846cf3df86 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 23:21:04 -0700 Subject: [PATCH 43/64] ASSETS --- packages/react-frontend/assets/yes.png | Bin 52422 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/react-frontend/assets/yes.png diff --git a/packages/react-frontend/assets/yes.png b/packages/react-frontend/assets/yes.png deleted file mode 100644 index e2b14cb92f331d10af093b25fb0b6bf65e0dd023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52422 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 UG=}f^V1R$hiW&;#au#9#4-(O*yZ`_I From eec55d41cc668bba27fdddd87f858b620236e2c4 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 23:31:05 -0700 Subject: [PATCH 44/64] NO ASSETS --- packages/react-frontend/src/Components/Navbar.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-frontend/src/Components/Navbar.jsx b/packages/react-frontend/src/Components/Navbar.jsx index 8ac7b6b..a071dad 100644 --- a/packages/react-frontend/src/Components/Navbar.jsx +++ b/packages/react-frontend/src/Components/Navbar.jsx @@ -48,7 +48,7 @@ function NavBar() {
  • - +
  • From af98a4ed6ba746d21ae24cb023c2ed1092c7202e Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 23:35:38 -0700 Subject: [PATCH 45/64] Update azure-static-web-apps-lively-ground-0cd068c1e.yml --- .../workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml index da9eb36..d2ac0ec 100644 --- a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml +++ b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml @@ -33,6 +33,7 @@ jobs: api_location: "" # Api source code path - optional output_location: "dist" # Built app content directory - optional ###### End of Repository/Build Configurations ###### + - run: cd ../ - run: tree close_pull_request_job: From ed0289eedde0a8d8f25348449362c8be3e6fcbd9 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 23:40:31 -0700 Subject: [PATCH 46/64] HOMEPAGE --- packages/react-frontend/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-frontend/package.json b/packages/react-frontend/package.json index 3398f04..35edb5d 100644 --- a/packages/react-frontend/package.json +++ b/packages/react-frontend/package.json @@ -3,6 +3,7 @@ "private": true, "version": "0.0.0", "type": "module", + "homepage": ".", "scripts": { "dev": "vite", "start": "vite --host --port 80", From 6b6f60415afe83ddedc8174b8c22c7b2c48a7a86 Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 23:42:31 -0700 Subject: [PATCH 47/64] VITRE --- packages/react-frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-frontend/package.json b/packages/react-frontend/package.json index 35edb5d..329a97c 100644 --- a/packages/react-frontend/package.json +++ b/packages/react-frontend/package.json @@ -3,7 +3,7 @@ "private": true, "version": "0.0.0", "type": "module", - "homepage": ".", + "homepage": "./", "scripts": { "dev": "vite", "start": "vite --host --port 80", From 3bc2f6033f315b616c0df5927ad24a8f5771e4cf Mon Sep 17 00:00:00 2001 From: Cameron Maloney Date: Thu, 6 Jun 2024 23:46:30 -0700 Subject: [PATCH 48/64] Update azure-static-web-apps-lively-ground-0cd068c1e.yml --- .../azure-static-web-apps-lively-ground-0cd068c1e.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml index d2ac0ec..9b087eb 100644 --- a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml +++ b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml @@ -33,8 +33,7 @@ jobs: api_location: "" # Api source code path - optional output_location: "dist" # Built app content directory - optional ###### End of Repository/Build Configurations ###### - - run: cd ../ - - run: tree + - run: cd packages/react-frontend && tree close_pull_request_job: if: github.event_name == 'pull_request' && github.event.action == 'closed' From f8aa833118486728eaafb25a0a9b438edea7dc3c Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 23:52:43 -0700 Subject: [PATCH 49/64] WORKPLS --- packages/react-frontend/src/Components/Navbar.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-frontend/src/Components/Navbar.jsx b/packages/react-frontend/src/Components/Navbar.jsx index a071dad..a18739f 100644 --- a/packages/react-frontend/src/Components/Navbar.jsx +++ b/packages/react-frontend/src/Components/Navbar.jsx @@ -48,7 +48,9 @@ function NavBar() {
    • - + + +
    • From 661d5a044fdd843ff244b990113d4f218186166e Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 6 Jun 2024 23:59:58 -0700 Subject: [PATCH 50/64] GET VITE --- packages/react-frontend/src/Components/Navbar.jsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/react-frontend/src/Components/Navbar.jsx b/packages/react-frontend/src/Components/Navbar.jsx index a18739f..acea481 100644 --- a/packages/react-frontend/src/Components/Navbar.jsx +++ b/packages/react-frontend/src/Components/Navbar.jsx @@ -48,9 +48,11 @@ function NavBar() {
      • - - - + + + + +
      • From 14a82f84b7bfa24989f0c424c60dafa955daa47f Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 00:05:32 -0700 Subject: [PATCH 51/64] YES PNG --- packages/react-frontend/src/Components/Navbar.jsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/react-frontend/src/Components/Navbar.jsx b/packages/react-frontend/src/Components/Navbar.jsx index acea481..35aff73 100644 --- a/packages/react-frontend/src/Components/Navbar.jsx +++ b/packages/react-frontend/src/Components/Navbar.jsx @@ -48,11 +48,12 @@ function NavBar() {
        • - - - - - + + + + + +
        • From 98b7a0e38eacb95051dfa065e63a9bd44a73b8f7 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 00:24:54 -0700 Subject: [PATCH 52/64] CAPS --- packages/express-backend/backend.js | 383 ++++++++++++++++++ packages/react-frontend/src/Images/yes.png | Bin 0 -> 52422 bytes .../react-frontend/staticwebapp.config.json | 6 + 3 files changed, 389 insertions(+) create mode 100644 packages/express-backend/backend.js create mode 100644 packages/react-frontend/src/Images/yes.png create mode 100644 packages/react-frontend/staticwebapp.config.json diff --git a/packages/express-backend/backend.js b/packages/express-backend/backend.js new file mode 100644 index 0000000..ea087c0 --- /dev/null +++ b/packages/express-backend/backend.js @@ -0,0 +1,383 @@ +import cors from "cors"; +import orderService from "./services/order-service.js"; +import orderUnitService from "./services/order-unit-service.js"; +import productService from "./services/product-service.js"; +import userService from "./services/user-service.js"; +import express from "express"; +import multer from "multer"; + +const app = express(); +const port = 8000; + +app.use(cors()); +app.use(express.json()); + +// Routes +const upload = multer({ dest: "uploads/" }); +app.use("/uploads", express.static("uploads")); + +app.post( + "/profile-picture", + upload.single("profilePicture"), + userService.authenticateUser, + async (req, res) => { + const file = req.file; + const id = req.userID; + if (!file) { + res.status(400).send("No file uploaded"); + return; + } + + try { + const result = await userService.uploadProfilePicture(file); + const user = await userService.findUserById(id); + + const pfp = { profilePicture: result._id }; + + fetch(`https://safehaven2.azurewebsites.net/users/${user._id}`, { + method: "PATCH", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(pfp) + }); + res.status(201).send(result._id.toString()); + } catch (error) { + res.status(500).send(error.name); + } + } +); + +app.patch("/users/:id", (req, res) => { + const id = req.params["id"]; + userService + .changeUserProfilePicture(id, req.body.profilePicture) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + console.log(error); + res.status(500).send(error); + }); +}); + +app.get("/profile-picture/:id", (req, res) => { + const id = req.params["id"]; + userService + .findProfilePictureById(id) + .then((result) => { + if (result) { + res.contentType(result.contentType); + res.send(result.data); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/users", (req, res) => { + userService.signupUser(req, res); +}); + +app.post("/users/profile", userService.authenticateUser, (req, res) => { + const { bio, skills } = req.body; // from form + const id = req.userID; + userService.editProfile(id, bio, skills) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + console.log(error); + res.status(500).send(error); + }); +}); + +app.get("/users", userService.authenticateUser, (req, res) => { + const id = req.userID; + userService + .findUserById(id) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.get("/users/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + userService + .findUserById(id) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/login", (req, res) => { + userService.loginUser(req, res); +}); + +app.delete("/users", userService.authenticateUser, (req, res) => { + const id = req.userID; + userService + .removeUser(id) + .then((result) => { + res.status(204).send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.delete("/products/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + const userID = req.userID; + console.log(userID); + productService + .removeProduct(id) + .then((result) => { + console.log("plz"); + userService.removeProductFromUserID(userID, id).then((Result) => { + console.log("hi"); + res.status(204).send(Result); + }); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/products", userService.authenticateUser, (req, res) => { + const productToAdd = req.body; + productService + .addProduct(productToAdd) + .then((result) => { + const UserID = req.userID; + userService.addProductToUser(UserID, result.id); + console.log(result); + res.status(201).send(result); + }) + .catch((error) => { + console.log(error); + res.status(500).send(error.name); + }); +}); + +app.get("/products/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + productService + .findProductById(id) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.patch("/products/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + const productChanges = req.body; + productService + .changeProductById(id, productChanges) + .then((result) => { + if (result) { + res.send(result); + } else { + res.status(404).send(`Not found: ${id}`); + } + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.get("/products", userService.authenticateUser, async (req, res) => { + // const product = req.query.product; + // const quantity = req.query.quantity; + const UserID = req.userID; + try { + const user = await userService.findUserById(UserID); + productService.findProductsByIds(user.products).then((result) => { + if (result) { + res.send(result); + } else { + res.status(500).send("Error retrieving user products"); + } + }); + } catch (error) { + res.status(500).send("Error retrieving user products"); + } +}); + +app.get("/", (req, res) => { + res.send("Hello World!"); +}); + +//add_orders routes +app.get("/orders", userService.authenticateUser, async (req, res) => { + //const id = req.query.id; + //const product = req.query.product; + //const quantity = req.query.quantity; + const search = req.query.search; + const UserID = req.userID; + const user = await userService.findUserById(UserID); + console.log(search); + let srch ={"items.product" : { $regex: search, $options: "i" }}; + console.log(srch); + if(search === undefined){ + console.log("Normal"); + orderService + .findOrdersByIds(user.orders) + .then((result) => { + console.log(result); + res.send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); + } else { + console.log("Searching"); + orderService + .search(user.orders, srch) + .then((result) => { + console.log(result); + res.send(result); + }) + .catch((error) => { + console.log(error); + res.status(500).send(error.name); + }); + } +}); + + +app.get("/orders/:find", userService.authenticateUser, (req, res) => { + const find = req.params["find"]; + console.log(find); + let srch = "{$or:{_id:{$regex:\"" + find + "\"}},{product:{$regex:\"" + find + "\"}},{quantity:{$regex:\"" + find + "\"}}]"; + console.log("HERE"); + orderService + .find({srch}) + .then((result) => { + res.send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/orders", userService.authenticateUser, (req, res) => { + //console.log(req.body); + const orderToAdd = req.body; + orderService + .addOrder(orderToAdd) + .then((result) => { + const UserID = req.userID; + userService.addOrderToUser(UserID, result.id); + console.log(result); + res.status(201).send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.delete("/orders/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + const userID = req.userID; + orderService + .removeOrder(id) + .then((result) => { + userService.removeOrderFromUserID(userID, id).then((Result) => { + console.log("hi"); + res.status(204).send(Result); + }); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + + +//order-units routes +app.get("/order-units", userService.authenticateUser, (req, res) => { + const id = req.query.id; + const product = req.query.product; + const quantity = req.query.quantity; + orderUnitService + .getOrder(id, product, quantity) + .then((result) => { + res.send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.get("/order-units/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + orderUnitService + .findOrderById(id) + .then((result) => { + res.send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.post("/order-units", userService.authenticateUser, (req, res) => { + const orderToAdd = req.body; + //console.log("POST: ", req.body); + orderUnitService + .addOrder(orderToAdd) + .then((result) => { + res.status(201).send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.delete("/order-units/:id", userService.authenticateUser, (req, res) => { + const id = req.params["id"]; + orderUnitService + .removeOrder(id) + .then((result) => { + res.status(204).send(result); + }) + .catch((error) => { + res.status(500).send(error.name); + }); +}); + +app.listen(port, () => { + console.log(`Example app listening at safehaven307.azurewebsites.net:${port}`); +}); diff --git a/packages/react-frontend/src/Images/yes.png b/packages/react-frontend/src/Images/yes.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b14cb92f331d10af093b25fb0b6bf65e0dd023 GIT binary patch literal 52422 zcmd3N^*CSUAIZ3qg5sED|G-@;jX$ei($DK^f49&^Y{(awDYzm7ku{4=Tk3#HEm=?;2DUcfzTdNqhWkT0}tRo$|&&rO8&pE(9nTf)L;lF z7I5o-F3 z{y#ILh8p3Z{r5_b4y~KcwkU`0Kexrv;F!bzy)8~{3rxxE1+N>%|9%=6`t!kOLA3u~ znMI+2V#;!YqyPKaz=)if|GoPEY7qhg={jlPgz(td%2o;*o?j>@r8O_VN@G%JAE`5i zr9MK-k+d%XlyeHA5t9t1hSP@K6VG>c83Bvq9RqylqUkfX#{rVGoubb^h36)!y_NYe zJ$qk)px?65(u#TWT&j}wnflu}d*tE$p4TCCR2md-o+_I+R$-59H;B*Y;Oa|UX>{Tt zvlj=Y24Ot0dx9=bef+S%S+8nA7}x=yrQ-9A;j!Fsa10oqZAj4ewP^xWae90&Od7(s1#FF&AhdvPMzrp{%3I8-#{nW(MS;{xgfh75*AG;1GNj9T zR!*L+mMN{ zGR~Snd7#G6x;4`idJZ~6a03>e1UQx&^sRh5T}Hi3oiNC})^Gj%dYT$;bM)h5PW?_O81`WtRvB0E})DsQ0M`jOI zmmNZ>BBg0@^$>MR0q3+0w-cSZ6Lhj7;D9B$83G*@W-hRs?TrAx zHWpTyc@aeMV<0~Q2?zD1?1mO^c!{pM2^G^TAh)--IV3>7S%Y_9*?*zOz=gZ`G{4mj%dJR6TvTc99O`S z&t|8z>ND#K>$t91Cm}ekY{ru)Cu(&<{TsjgwLt3D(URgLC{>s=ZQ0kCfAF?w3}Mef zCyBszWW|5k_}p0z>Jx{nB~gR$6)&VgQAzaHjD0Y;xgJy>VttL-=_28=9d~ zXs$Q4E>G{0%^dzcml$`KUc*w+% z3`-Tg#-8$8TH5dORVHe+a+&$Ua;-L-@2afRvO7moKb_Og=rBJVyYRx!kwx0h#mA3f zSz^&LZ)Oma(qrF!x%&DKpoUZR?nE9*`FrSETKCin<34HMsva*#vvP2Vu@Pb`q<#A_ z>OXiMfrZDIk#fNK{L5OHI7i=NU_zJ&!Pu8~_DH{|UB)x2%HgX4UCg*@T;pnG{{WP;)(H;az{rjpDYnk`ixv{8_WKb=NS;HuA-b zZCs)d<_cB1WhJexH`?&uu~So1fw~A|Q<5Ka@v{ec^=l)$Lt}blzCu z-;C7ZQ5LHz7;p-iA%rMHfTh6x`(e}@F9>1i&F zUK;GTau*m4rOsLYZz8zb>!(K&r!(Gth8*ZtTx-&nUV)4}N|s@QM=zI&Wt_n@l3}2K zVBwST7+Thba1_kVG{g9=)(s};pC^Lk*P5&VQrV6xSqnn zk4?)2DRBO|3DKo}`##OHiw9S8?e@@K7rB4qc>I!QMmzSwcJh(obDJM~O6B(0H0)Wp_v)eMC8uSkeyb2Qr{>&c%;Tzts=s;4wjOAL=y-@L=T z4iNVQMt73~ecV?@XAK-1MLB7zzgR6@K8z9y?swl7~cx+9pW~LyzWB#3=A0<0ec-pzTz9EVD@j6pw!>NZ;*DT+t zUQjWbSqXCecfV+Ft7hm_i>_jDJ=Jb!{c|lb=rNX zY#vqNbqAvSia%(zQ4l|@dsYTXvG$kb})%M7D%%^1GBQFI> z)tI__qQF;!Dy|3*OMJy)O|2wGY)^Z2LWX}HEo>jA@2BSHZweth_^-|{KNV`cE#*-* z-PqV!aT6MycK^WjJdYY-KKCzlpqfHaT9R+B{?>$<@XFB>igKrpb$swb>2lcfkcw#^ z+P;fLD;{r7eaF%B1~*O%Pg0vc!O%P4*d(WYYZ6^pE85Y+7I_q~PXJ`vHMH+A4C3iObUV*;7`NDdizT)Y z&Sb5Fd1jq?PmX+AE3oBVO)DkR!-cSK&Jzb6RX>|%*0pbcreH8GI_!!4gk7*#N|WvEz= zcbG=5#J$Mc2rDW1HoYC?cXQZ(C^Gx9d1fOIum(MeH|!KRxZjJ4V81yd>3UF{*#bF@ z--|v3H!D@VWSsMmg`Q2i-2;V9O99p_W z4f_p_txDFR`q7OQ;7b(W>+2^`3VT#OZu4Fs-u!!wA*5$x9C%VFoGjtDc!*W+%Yz?Q z`L;GlyFwCS?xkREzGhO-N)Yjb9v+*lQ9@74rI$*EHI?8A`E=otrl_P>g)8(3eeeN` zc*WtNE5UY@W_(Jks<`NOt7KCet*$w)&6Qq7X}oQC7WmiFyoeGfWNH8WJ_~$=l&9C& zIQ7P*g2E0=+1S`j|NZ;-l~KMA8uw8u6NFp;$AwpNGdTMD>aUD~w7K`T{nl@MS_$bj>Z|LB>+Zbs)Kc1$$w zm!u?Z!XSLfz~*xQzJJ0nC`5bO*p`{ldx}R{8)-c16wGZl5Zlk$_r}J?rdOIs(@75p ze!7-lLo@{Nb^xnp&qV2JDPHHh`0) zQl7XuA2Ixyd6#w!gI?oHs^DXw){QuIu^6UYg~f#NAnnqUR1CT5gw3SB$RKz^Hy7;ZyY#);mvrN`f5 z?3nsxwZ!qcOezGqjQWj+I$;6>;PL|QrD@}$C{^}%rUs6Vjuhar5$+$vxX7ZsCEVO1 z%BCGRrD2sq5FjtmA`D_H)RM~^OZ&+G+Fz)%EUjX6gPbbj2Su=PW9!F#nQzwKyvh+9 z3-LvM-$SwH?ocqOG>p6)_ZNr?IPw9IwAv}n=a0jVBVrCX!l>%XY zxdg}((7-{EJG`YH*BQOAuqb=Ix?`P+*BSQd~_sO zUJC}K{Qpk9sb-qpS&;8j&(@AFKc#(JU=3f^{4k9v8T6+X@9gSvF>75Vh6()lWxahz zEeU$A|W19&<% zBwrU!TzwKXBke1ar$18ni(%ZJN)n)m#vI3kuqSV?I0--@i1*cdESr@f5B3M9fYu8K zXwpHp*z1Z)ej?tn8*g+1V+SzH-Ho>H(L#1k?{2Rf0FXZD*U>T4F#c`3(nU*)s+QIE zeF+|J#q{;LI5j6RT&}qYb!YHE=&&5gOgReS#Spqe1(Ju{KhrBT^qEw>%Nr|to}0(X zsO}h*^&}ODuiB-gnS62i18}M z#tnrLZb&n)s|Oq~TkKmn+gXEfJurj_Aa=s`<3qb1`%FVe3&6RL)MZ8dP#4!prT#sr z$5!^4lmIfFl$cmaMr2v->cKr`7*`ipf56Pba$VchbUBb|hx(;qmXM2&KU3{|s1)s|1)mo_?zu_!C2NV6P@t zhzgckQi7|C;H8_qG}P0(^pcY5!KGe)R8y?>067R%*P1c`$F)~Kfk;eL(j;8l1p-*- z{IF}br^QEZR8GmiuRv^m7QLdPqjjpGJdwrn8+BSgdyC(_5~vv@r=>NiQ&(4q`Q>2K zep>uGl@^U^FO_z-A34~op=fPg%tRKoNDb=d%~30gAz+(FF(D_r;UVSQ4K#2dZi;QM zVD`AL&HscSG=kxBsCLZGqjG>m`1~>+54~6x+WhlybGl;bpt`!+-|z4T$%v+y+Zz)o zPrN$%AUq_OS;`LC{y}T9BCzZ4=$koXXWl6>8t91XsR*Z0=jZ!fAmgG2%x4-fpE2ND z|Hph-muZHM^Z|C@!`aWb=1kb3yG@zI!kHsdpG23$fcR8xCFqu9jgE!l!lS9hq9GJh zE6mSdRqNq|tb5%>8F9jFzg@E;&HySXW8?DL4w;ovan~8#A z+E;f!QrMOVLLf0AnJPZ_XS>LXJu4M=_qw;QZfkRLjIBzj8ruXYth_lu^l(gJ;nmxE zi?@o3xa01=S=68kAVj_J8T+Iz_F7>)fTDlF5qYLi+>V=}vcZ)0E$U0n`*3d?!pXmY z-%1j85kPHHm$>jE~!=G?;33GgEgNc*ORy=xm=+lpLu`Wk->ZVk$tHiG}Kr~#zMN3 zGH*W}4Rr7O_wToQaz4S&UydK`HY_1JxfLC~UkTd-*rk^=_FG_S-*V%=beci;V zq27Bib;204?w;y0QwiX4I%w(=uuQ8B{@8uZfOVCWJd#o0v$D5uOMg+`-0Te`?LCQ_ zJwKm3&c`KB14HugB&p7fpNo(+Gl%C9bel?+bORQ9JF$QMX3;xFC@AE!IO1VpxerWs zqZyJ*O0Kj`O-+-f63u7#-Gm$+t*x7;R}LeIFpSNq!2&b&yMdBD?FKUH(iHtPXHV3v z&dwR_fCRNL9Sk{tkKpA3q9W4TXM{X!_yv$JHK9JbwS6NyR3j_^D8~7z@o|^?uM%JO z0PceX^NWNW&6?){bQDJ<4@lhkkD&Y8fO{#3ii)zK$A2Z%ab_m26p1G(O9L1EH+bxO z`BF=3wqBPJsu2xKOia8nw6$efd4U(x4)wye+5y<-0liB*8?x@aSzxHK@$sX9&yOBY z0rZpgm=%h!#>}vUJ-KwGem6Dko4qXP5E8Q?{$aX;SmuyIK#zoG;BfO&81V7Vq$@sb z6GC&G?@E`qPrdJnK^R6lilbFM33@=@NjKCPQP%>jJ90NVDLMI`i#Wob@42Z5U?238 zu`Z&OEU#XLkp?^OjZBCeItm|A(!kq3?we_8=>S%~m$&VE9b!oX!hMVP@%Xx_oU}sg zUDk!P#CHjKECJ=HYOilTW+hKD`^=fdOpGFz{fGM2T$-X+z@Dl~F_dv72cJXb_@Iw{ z&Ef$QR2tvuu`hTpKD>Q8j_L_%n5(z<2mDV#fcR&QL~}$h$v<;Y&KiiuRn_x+f9W0{ zSx;qeVF{cSO&I;iqb^^WQWE)mhE!k#Umd*P>~&M9)}OzP<=r#bT56|ukC2286` z7o?cwxFi_4tp>^nZ=c1yKWr1MY=HWTE^*lvGvJ3szU4(V``_PXPft$XqR|i{k#{IB z>ev^6c~?s`;hq3925h^iqy)RFNZi*~FBQ0?{`8Mn_f5=qEef0EZU)0+hmiC)COjLtu_-ONwzbd-BpHA%}8}@O#=@@jn zmA!y^m>fhPhg3=4y;uf}k&C0?qiv5aPO+%x5Cv)ZeIsrQd0522F1-KYrx_qBm zUouY|b1Wsl*Y4o*6r1g8>vM(;EJjn(;T&dsZfs;8+pg7JXz?=Map==tnbWE8|CR~x#LDKcC(25fiM#SC^T|PS^|X+okLk{p zozFtT0ykw-W_su9Zi4WLm2Bj4$7V2-v+s6DD1F`U*N^|Ww48V=bn)ZQ>FYP@X@Iac zy;ox>)J3}}auMd!a$%Qy1@E#J(nj<Oo;1jFK}x zn+H9()8ypjiuI059|iR0w!}aCL_`CInCoio@H8>{U?3{UXUW#HTMDt}3zqbJ_jdGE zK0|&RQ;pBFSuljfFx{QLBHorkK~(lH1AlHWV`A+y+@X4@_i7#XW4PIVxq0qGORYuo z8}apXnx1Cf^O#;tnO5oajMq zipP$LDAP84m#C z&B>2RXG1V#ZEY=a4dzz=C%43gw;&NK=Gk@i!R9VS3=z3SjE3f(p9CS}S9;+OT-^ga zJ4@2~bP>c^cLwkJJ?ConIqW1;64ypsV)P=|Cb&Ba_&T(vO_4W`>}6K(aTcoGw#Mg+ z^KKqtAP8xI50=^dWAOad*ixnF9(1LAaF48VG0f&?i>rlgwCCL z-=o~0BJ_$!ShWdOm{kYc!R6V4mPZM@?rac0_q4*?;aiUIU5TI*;{3#ap)Sq#^0a2A$tdkYn?_CW3Au;Ax^vJ|++hqWT@xcN^mSn!h0Hl(yvxlW1By4rO z1&ih#u!-{K#paiWmb-MOIbtDRcBX;qx$}r1R%xz!`=KkBLj_fSw@?1x{oT|0PX>}% z;$bW@gX2`X?HK2SPx7(_s#jcX`Gy76oE11|qbYP*_orbNpmkn0iZ;CT3r8+wS9^%MZ1z%D9=BZr&p%T;F_HMl6PI~6^btj=Q! zRXh|kL(1gj*FUnvRozvwzJq}TS?{Nv(Zw$J0>7B0`lo9MTe~pJ8bqdC+*z+=H|FdL z5;J%?4CRtk%8#1+n(e-bdn@-6EBG($QB6^~eg3zDP-V5<*1=MK%i~X}n!(tBjYne~ zZAXFHU+DsV9~^J)wIod$Q*-Uona7I~Llsn)_ zd$q1%3_AbyvP9}u+0uN(i=OwdBUyr1)pqKI zwu>H6{=gbv0<5uGlUwqEks=#BmcY1p?b@=A)yH18peM+IK*n6+$ecKfy1N4EKWrM| z5#iCwXBnHPc^9m9?ZYcDQ{femu>FN=H`I&3gRO@CpYO0bp>vS3vM3z^w1V6iX*!d1 z)ZY|^SEv`<*2+uT_I>ROo-y-i)-(>g(27P@u?)WpshTX-2_CA;1uC?llCEoGJXlb8 zwiYU9+44SXUSI=VVLchh1qT_a7*0BZtv?7_E+_c!U0f+<8{C=?AJruIcX&Ey$e)Ia z)|=Lv{s>N`V<1{$3LCe6nYk)6O)6V&zWe)yi#@$b`={B#QMeJg!9adV{BI8@NTR(=8q8DN$v5sbV=oFo3HuCr z)s&pg###KX^Ce5Qw;G1W|1z-0zW8-1E=vyV%HO`BSI5$dftyY!H(VTb=V_-Di@oqf z|F67b0V|-r`p>vlFCe}Flrfe_YgHg3eCZ*@3y79rv{5~4-Do;ydI3?tYE>TgQwYNR zVYuBaYI??{YX9%zszR*!NF+hFk3J%vI{e;V_WP3>#_zM^XT$&a*Y7&l)Wzz<#xPxk zy-_Qnv}}K;iP=TBW-YyQ+^z6Iy$^g&SS%j;4~j#hj=x@6asW#~WSq7HU=c}fD*%0H zfZ>L7^&)Z;Jks*j$I{$^!hm&ke<6WaeY0*~ve*>i$ngIci(0GDl~z4U{el-$py~(x zH?}aMt9RH}_GO;^beb^k_B`@q<=UeKP6sUVpKZxXe$e47y}O?>IC3wWmBGK020ebQ z^47L;MdP#K`-G4l@m)%MrNYRt9T@%fhe z`uZKak=6YxFIk3;qN-V`fJ*NlCxJ+}50(nWP0mU<-sY0Z>hP+uO?H&?qSwZuX`#!8 z=8MC&*c~VS$VvrfKjXQSwF%+0>*4i?eH4ZdmrQTd1}BWQPbtBG+jpM8cJ8D8@kj=C zNQs|R(bhm$WkjB0xXGQ-!E%J^#pK*FDL9gr>H&<(RS*-9K&6V&M8m_qs?FCrLjf#nLF5A)xN8aZ2dXK*BPFQ$g2}I}`>7JnfpoY%ysU;5u z0n}&r>FH_V+xS0rNDq5zu$A&7iE8}|ARPFz4v_)O;BI(sq$N6BMm+q|q`PNVyYK0j zF<9@)&udjdv*C*zN3b1&iM*k6(EVMEx0`tX^i(UCX=MJ-7+0ugZ`Keil!?~ltDyns z-eJ11=y547dvQaYy56vzkE>k@n_*C{+%M6+;uxPADl75_hbRcxVNiy_&vs@lt%9Va zByUBPmNiprxX; z3wws^efqeNlItqPn2JHn@<~m&p`(F-#aiNmbnkWYQVeWcBc0SIQMjMgbDcoM!hqLt zy!mW=$@ZhLf9(5zw`m&a3I!r*U{byMs@dqAS3cTNyXvk7VDM((gYFUXl18lv4_6^x zO+i6nfalj*u<<+rP6#^! zs~74Q?ygo?+Ij5QtmCS7qTA8D6*c!eKKSSLw4 zFfxp;W<{Eto4Z3tmjH;pB$}d(pp%Pk?X51m1Zc5`Qh#wuubcr)v$3y^2kwCtBd037 zTv;_36w*1gIYIaHvH)h?a`pbWFM}&Sp(DFzzELDukCQkpEX-ffetzY={?hhz+qKj{ z^pcKTuZ3;eY$E%~gbw~#0G?`{l~r`%BFy36ACd&k4=gET0Xa`3fgCVE;PuikRvuK9 z>qZ!0ruWfYevJU5wPkSNE|eJpYg@Dh3U3tvUv1TkNdO@tDnESjf=1ggPZ5;^8u=@R zd!FP*2pMhjzdQ{Tci`QfaTsDO8z3s^E(P52&7bHy?|%!IxDogkcwhz+Kh_;luI|Kp z&XRtMQ4x#X!XOdi%J%CU%YW{0^{(<&a~h+E!dtG17hVMA-pbi@&CHum;x z;d4}F(Q=n)(-*;W;zFnJ4<=ZgXftqxZrQwK8;`F`L$6xY#^GmExi{f)tC<;m{_SZSpif`>CIbKBT| z{`1_}D|A}^kRd)g|4!a0yd#oyDrQ~T;5de_<2$m^DwsLJP(wN)V=W$c@s}aFhfM5+ z&Pk~6uZ%&KyYvo3p!tsnS#OmWkKD>D3{;miK-XuJ2RkdU5+h^jG! zZ+L~jR#tPaB>9VJX}y#!aa^|Nt61h6XLl6@*>TddnaS%1+EjE!bWE!K8Ll>A8K87f zpFaH&ApX}JuGYS5zGlEa{RrT?RbGj_AvBqseRgcpod=+?dOsh|kNtFBF0W(<*6%nh z{=Hj=)FA9XL>rDe=s^v^O-W10M^etZ4Ut3Zk^a@UW`B7dhXu7gK)9wjRM?o^1^hZQ z2uozXYI?IXuokLQ1?N0~w({(O6lhz)RAmCK)*KiOM&DkY);#agof#kR#_9Mujr~y) zPy<+(l(3gpRO|y4Uu+k@0zhEn7h*lLfx}(uFXnYL-Uu?dTbEf2H@j8B|B=0;_dZk3 zBRZa-VdDaQmL$ z4Sch>-gq&zU-{hij)7%>#B!*E!TLOExj8kA}N>bShwHKx_SVYgb<@%>37 zwT1^mF)b7z;magn)g2xyvvuz<6hh-GXj>hHiwERzyYmJpGrptNN)OZsgTkT#T4$3D zl(VksrKzcTg8TH##&b%cld-fkvSF2UHVzKU!apO$rKPsG=bm<>0A))9pD*3M!Z78|84t0 zr+hbr@C|KVVT?bN9m*^NyZ!c~kfr3J+FH(&j(~&v+jjD=w92!wdXlWgPls#qp$;|0 zTW==|ov7$OD!t`>;+*dEPx$iZqQc_#|~LO=^reDF{rvrZhx z1X7iA>j=%z+yNKGG(fd#5WRAT7bPn!GFzYL`{n5ip?6?-%fIdI^9boV9TJU~k|X=Z zNb3brFXJCG{|ei0CX$6p4ZJtu5>$9LyH~9_q=WfX;qiYrw^pdapT$`6v9sr7_)>B> zPyZId30kR&yqSq5hSbqQ?)1**o-=s}A;P&mi7por$P8Su(HEV>RgKBtVtkhSy&RZR zbb5jFNLb}sBgn%DrC0Edu*dwBtcX}Eq6R%kgpM^4x+SHhxI`GJ5nWb~Pp+;twHw@W z3JO@raAffTsesd8FC`ccAD_1SCxi?d1y0B-h4H5oJQY|WJ@;>e#wv|_*a1xuKOZ08 zSYlsHg)07HfypcHhf6+bbZFFpV=IA|RBNE|32IH`_RZx_LWoW0)wx;9|0;yXIpmI+I3K9x3n6?0) z0Ti{P^Ai_s^``Pi;w4iroP;vTb>mCES?>l_3e`BzR2siy8}fGQkEVQ#y~cx-j_!9> zb~o1k8g;YUo`6fm>%56csE2+%pbqntpFWkjIlD5fsgcn2>wiN|5|u!4)8gZhMw>wO$}8BbsK*&MNFakf`+tXpz_Sk!-2cuoj7TW(e0XsxH74H6$K zz(9fGzzJHkwzGr2q^b4!whUQ(#m4rX5pEy@O8st~)=6f(y8Ny})p!7xw=V}iDySR8FjTjWd@gyM)tlQCh9>|mZ zCI3X^uHS8GMf(v^Hx9|L@oKS?3f7;HB@?_DmOW8aI<(-zOwTJ_wj(SX7$W8Wl{RYTPCO@D@^8f47n>sDs$U+;NuzIn~{y?(-lu6?$$rZ+4k-%6*TQ?;sVeQVkxX`(Q7IZ!)~`>;R?RzH&Xh64u$PerafYR$cllb}5cSjP~-KJ)eu#DNv11kb5Aex?zS)F`U zWB#)yYF7WNAvf1#o5b)_-1$bMQ;Jj;cfa%9w-164oq4}*7=#LsBTrX}e*`Pk-)(h5;bwq8~k`;^E=RZ`IFl zZOveGfo8p(@)J^IvmdP)05XEx!lnIt34T6Tl|t7S!qV(yyWI8+8#Q5JPaRWDt2?Z9 z9#usos|eZM;L17lQ6!y^wwaG`mHLg14KVSmbjZg~u2J6inbr@RWb@kIxOkMS+`MnG z?lNYVxkY9@>2neN3*|#I&FVFoN}MIoZhO(cxKWjNm10c|y-Mlvv2DBrP@{ws!u&%7 zxVfd&xq5sZ5EmfZ@2+f{S_~qiciotv(&{&lMvqyWPA)WQA@=q_-wmLmkQbo1Q`PZE zMj&upgff=^(V0j^9>lKrhyFTrYKe4lfG?M|)%pmRF{^cyF@o&ZSf%^zazd8*##%2& z{U_QT;l@`MPkfi6DCq(c$n(Z#f@&DcBeQ8UbS(sxH7=Lbu^GnS`BIsN-xtg5SRXT0 z?0E=sO!A>bsVn~Ej=cl>R7hPel~ zZ$4|-!s`3q72O&S>&yOWHktx9>O+w!T1!L%a3q&cY^UUsY*AeZRzRb1H!(iWO-%F0 zdOWzKx{X$`kSIEA$j4fM!WeJrVP9 zfcTVehE0gGA%OE5c;NM%D6ZX~dAO-AQ+|%>swl2OY1 zDCo2N+Jp9ufjD)=!x3chBrNA@8aV{Qyfh&G`sySw->&Scnr6oo(ZAx=P+soP;g&~P z_MH&kAAp5&e%svrrH&)qBm#g$EMSmZTAs$ok0bRvqTA=!G4lK+@!w~E;Dos*y*3T} zH3qwldSglDH4rAYcrNqCqM~(q$8c$y9lF@KniyXle@fHVp1jwqQMEt3kSQ9(3p9vNJ(u`d0&3TU0l9q`f%{&%eM@XRS6N<{Z{LB7RTDz!}MSL z6)TA|m+GZjcGu(~Uefk^BqWi(H|x=701IA#kU0^-i5;2>J!+!5YD?hYTxUhnc4YXS z{7gTZb*cQmj}L@LPv7jZxD5^10W=1d)iKB!83LBf8F|VFJNP?IMnIub~CD zvgiHSjLp{T z@T6Tp9J$nLxih09aGTHkHSlL2>r3Se3_u*sUO`TkJnjwlmQ$@sHa*^O7ai| zZuV%1(!>qW_)t-k5ok6{uOK8IpI?|awizd)XW=YBArFR!c&wYSo?hP`W)csU8}|e+ zlx$zU0DcTS8Dpv(Eqss+Np6M?9iN;v9^g6>PCnBQ7Ad z@9K#Wvi=>DywJFn4D#Q|Uh;EV!4$HA$ix!yhq2Xw!?W?|ZgPtgs2n*=ueM|Ss((<^ zAb6hZ@MCbUGuJg0a*)>8@%`ETycPd{TC}i-%ME0qPjM(nCwO+vI+jL9o+^01pcHcR zvbEiwH{xW@uNm%+7ZriT(1b6q0J)=>6v&-~9WNM{>h4(&Cp(~LbRrLqoAQbDwRWXw zn6KYe1WWEtiU{NUTyvom2N@Us%^FW&$Xv{NZ&xg%9;6;OQ2wu~2d8|;^I&rvtD@|3 z-%;r7w)!B-X z5=9AQjt~LrsNEJWjes{!e>=B<1|h(#5)0FP5$wdG?X{=Po zP*Q#gBH2_dl)AG~kgaqbx7+bHaxOx*D$vMGe$t0fF2+VU4$%`B1nSti;fi6mCO-iR z@tVxxC%Eu|&zgj@Q!5Ie*|6bmIBMV3vkE@91WmGV#MwYeGcQy9Y-MlwARF^qalCV zg=CvJl!n^9r!KU1&Bv!5)9%4c%MoD7x2m6h7iQ(u3VuUQ{{qOd5>Z|UQoAl7l~s3Q zA5#6|$^bQBua^iK0lI#+Mh2dfa{dhlx@x4T!D{b5SODEYLYX6;k~!eg(y`mIx=gqB z`@8E3fREMh#P%x~Mrd!RAtnn;9$0%so~_8ZTx!|!$v=zEVlH|WuW*bJ6EeA5v!;ve~7(QO!0*X_BN}(k6)MF*Sw&f-VI%xcn_4~EvY~TImC6f`+1X}$2=iTt@iehBp zFw|pm+Fthl-xtN~ycwYwHFE3__br9U=O6rGXT62&qhUQc@2F!Lft14<{R=XIU?Atf zNZ(-p-_Eo0>S~v#lA8fQ_^Z}TrU&{l{2vFPUH`}`PM9Ig9&Lzai^^}F?+MR!rf2}V z112-0zWd+bHOSJ&r61W_KGWyRS-^^6i!hXJ_3bNXAdD2CzuCPRi=i5G_7FM0%Uz<0 z&Qh@U`6(CBdRtBY1|^7hsox`I^vpg$377Lt*1;1J@Qf{blRUe*A}#64wr=Xt$Wyfs zAADb4cUM$YsBWq8o&|Nh;YVpA>kYTdqGeT$k`Rb!*CvDXdV3_|$VHJht!KpET6t;% z5F0Lc=M@w%Wb*l#_`M(H>`;5#5(z8wckCLX2pI{L69&sY89D6ok`wv;k=||%`6l>P z^$Go`bASG%S2Dk)4%lpDuUvnbt3w1oIx6MO<=~#pu-Op(CML*@An&obIQ3%;7ra9w zrtu@F{|6qjT}{}@_OxS|bsBCJ$A%`bj@*DK2?yx9Yg?CoJ?ieMDkJj)^|9i-4uFQ* z`DqD2lk5^5oOPUs&HC=A==F}PtpG)PaZXOoS9t#%zvVSX>NOF^0n^@c-(_7WpL8|;5w$FXFp~*;dh8jx*(keA}fgxyFoiQA%FC&bLF%e(s6%pPyrPRHvE?K=N@%ce6 z=P5XCOt6_*KCT5(*cm+Oe$N4?dt02^5G3A9X9!jQ>#-^c1DYxR$y6@9&cu!ZgxQS; z^6r8r2Y4sYw|^JC;-JJk=)Uv~3z*4;jpf4rZ zysp0fP&?rpi|s|e-jX)_aW6n-#m@o#7+Zk(L;}jpE*z`odADia!VoK3v$kyBDo%`- zRtwu+Oq;p;)cXFlNq1m`Z^CpH5HR8oRYR~tkTG|gBMdvMv$kN#7Yhq1d)uPf`#?YH|6=N`qoQoXZ{b%( z0a02)V2}pst^pJY0g)1EknWNiTDrSiN$Kv+0YMrBh90`RIHIwp7B2NVgfD5D8t3>8M6LEdF9h$K+7n48TASa>3lcy?v0I{aT>=`J0&DJ{%HM( z%Xc^gje>LR2?HaeU<$G>L2>SD<9^HaDEN=k0PQ=fPWj*|&DQJUfsy0~l_Y9_Vt54^ zvQRt0hL6e6Q$jVW%Pg<9LbFuTXL_#los7cQ#FkppG;-(+W>61ZC{)pKQ(C;x@5_yR zGm>3*W-MJ1L&qsBf(qE(YWRp43xlsXe=u9N=jdbG`g0+Zbbt9ASJ#@W$zCJ%pn`2hzY7TZZZHMQso0@D2iA0*zy;`&&_6aP$Dn zh!%PmYq9m^>sOX>hg(8Gyr7IbtKhx`)uC-(R@EL17*2mgTcBjrx0O0)c&TgU-xgyY zttwx_dIVYpvb&qZPM6w-l7s2i5Qj14_PzdP2j180X7eC%eQdL+gw&%?Hgb*et>2?M zwJ4cw>E{bASQL$>qO>(Urj<8e-G7c)WYkTf;p9Y7?}I#~ZTec{LaWlSz)YAW=(RSd zwHtQ$FjoUY+?UHrU-%g{{0q7CsxU1SU)zknTQe$QCpPdQq%QCKEOcC5BCtgtxHt(iV?L$%rwq+JH z-@d?YRVGVC+IRng=B6ZD{~MKA1Ar;n2CKiR+`5LN^-=ZdKWW}XIs*^OF;pd2lgPL< zf+52!0sw#pvk{-bHYAn@g0gy_z1BaqE`53MsBzYxNf@PW+%xGT^e@TOxo)~{^wXOY zu(W!+N_`nS%bb4S9owO)qi z|AEO;c>AF7Ph&+GdgK#>d*{yy=3%+KjE?@G-KrEHw6|)p7jBA|KvR4;s$_IPirxF{ z;fVa4MZM}3e^d_YsQrf<_9`+B{1ERqsRn9aN42P3w0$#MV zZQ2w)hbQ}1QIShY{|IdIei5V1Zn=|%wfm9^Mu4^w46--PDAo!OI|=|MMP+>BXz2tH zw$l?GxRi5NwN{9;{N!93p+rk-t*@Zp+4Kf&8>FMpvK9OFL2c4j^)f4kqE*(EYO zrcOk3EI`|Fbqt3Jh{RZzt=BTuV}(rOrX+eZ@hNDv+30Xw9>#`rvT39*xLt}$E$xq5 z{zZ)G=`#`ks~OfB3)gnkqJ^VcKJv172<2sG#Aj7ld;{o%4=dGQbZ&fsfmUJHHtgc| zZhypBCo-BE&>}|F9siiy*&Vz1%9mz*oGjI8AP&WUNL$`_;bRR%lbQFMs+{ly$5fn5NXvfl4Ymxj;Z^@ay*g$ z;WvGKq?KX!bY%ro3LtZE`VP;5@_?LiOaZkND&V<+eiJa~l>=i+$9@NyS<1tsHu4lD3Ss`K!20K*G|Foq3=+VQJl_VwWpnSzr z|Kf7nOj9VI;A-4I$*`c-fUJA1kB7bS=4OtwnaX3U^lx*iU#1EZ-%{WCj77^%Ma-%s ztXLZUO>vQC5>NviM zY5&HiqJg^#`lgJ0;f?hzE%PIX2X&a4Te`mTqjN-{wrsl;#grV=F9jGuMO*ZRzo)eW zEdd1f71N>ywOZXXDonp8Bb8>pOP&@oH*PLt%SwiR_dbSs_hf%`+e5dOD%U>28sN@Y zg?G@>FSfzPy6FuJzuva5!Nk9RY9n2*3>?vZ@o9~$mu5?v zw_%KOq`*EC!lXMndFep-8D{@A#gp*H;7@O9%K;X%lK=f_H(_g`U$o5qhlO`P1%W|t zph79l6MLfqP=sBR4bvs@*>MtpMuU#_>l$c(Q0#=HxibLHFc4?TAof4h0M$Eb(;v;S zvBh>DwW!J*KqjKGl*-##(Rz=)CP^7Jk>;QUS_0-=ubUadz8^I61@9++MvDkS`vtl` zM^onOSc=L^nBod~mBBgcy`-F;f3~ouVq`WItv1$@D-DCL9U3mNm~g)#HYQE=<5@w9 zk+SzL!`W$s3nL{4UrHED7k{Wd@LqJIGCY#cM&+DpKz#m_ z7nD~wUKY5Q{nccure>=QYy$v*?DhG^xjl|>vht{i@!+dP++qOg6L09vRm=ZRYNl$)9s zQsP0Q#1+)@pZEn^VxwpLa0o>Jr(PFvGSpS39k-?KkzqCuzmg@)_)S0R(mDB7ag$Y> zG7U{*%iMci+j;Mb%yNj7e{GmIl7@7Ac9vr$#kwWv{|Ib-e}K7{2+335uD@Ldpq@Om zUouSn(k}K;gzFTrSb{G*>%J<)V)rNgE-p5d$|e>;v0~Ng1DD?C>3dag_H>dUG2v*# z%V2r>uFPi(jes-!-x$|EweNs*Jb6Vz&CUc8q&d7s=?sMz3SJ2X;wwBi#qG8jpVd#< zw=Hf3F|cCEMxVuWJ=>Xdjus#w(=l#@+EY2s|LcidIL-bFSK4PvWnr9UWvD>St=u_G zdujVflx?|Idg{0uQZ3A3y4X$(FESxS?fX{o8%}=bJf@O7!p9W1TYWfY&%DYiB7F7! z>!^rF+EJFR@!fW3F&5^Aj+U~L5)uK>ZrZOtA{g^JJKw!|U{a0#cv|cD8Qg`=P5X-9 z-AtesushHY9UUD4t^!U$f$;kIwVI;#l@!Xft?>HsrN=k5$qB*jAUC2giG*EEY3VD* zNuVWTfjILSF|jugeubrkm?>mXIYA2%8R~Gu}lA9gibIFrDfr zA{-b~dyH`s zWhL(EVQ-3ClUAmvL#tK4|qFzy8#E)HZoX_4d^$F<@PFI@C%8mJi0*#LE8G`)&|D#J=d_ zUF4p5KQ!$Kobh7XxLDi2IE^ZD;NRufmS=uiA884dfJXQI7nzLEQ6%JW|B zwx9)Xz>!q+RoTH3oVk9_pG{3rkhgqPz!!cUX2taGpbGJzxu9c!ILoxDQ~no^`Jxdi z&dCWu#TEU^i-9Fk7w~nkMgBD8+(+N^t~3)F!xv@M%}MxUHwcqi zQ8um9<<19ksiEYR7>KLu9@dwLo9NYzB;z-d2JQMYf^|+AXg;jFRGv0v8aC0C9CCMlGvn8$)vkBR|LzG7@y!5kL$FkYn z)v_~NDu#9h)L@?3^iX9m{&yT7{onHl#nF9n%LGLj44Pib7cTf=tg5Q@9lIhZ*>C~f zi0}IPSvt|#aeW53gW_uYJron`$I1Zb7nVuCE)%^XMU5+osCn7Q8{NI30SM`=NuRXE z8JgMSwmkZ;iqRtq6UcTE`WtOeg)`hLdkd){BXa0snL`~Ick^+C*FI)jU*BW1nuW=k zTS1_7^6>9#8N!x*x0f8Ug0W_k3>5{?p5E|-RqSVJRHJt6oVM*x#~}7OYw^vT#)*=L zEY(TEUN%J{Xm7C=7J?))Q8VmT(y%+JjlBijwD+HNTJ4W6B1b;n9E3zTS6p7DJ8oo) zc${APKV7nU0`PVQt{|*^j}PIu)%Uj&{m)O5mt9P5UxML5^&l=rI>#gN6Ri$&PsK-i zd;tz@w40oo8lL|&Y;?^Fsimyd;~jv2)_%5P{#vEDV|faE`*cs1K_~-Rr<5#Oo#1ot z2S=K6y+8`6#oy;{U-^g6G-PHj|JO4$3WK&_?Tl|)F_3Kp^9%lkF*WUX;dJ&q^UQJ? zA2XcK2$ejIF($94CwqSPtJdfo%eH;XKd_Hr4=O_DgIbUDy|qP>2=b=HbCKyHq4Zc{CHm*^?e+ zc&Q|9I#9E#ObS;EEoUz%2(Mx)j7HWWiS?Bf^S{_-e@T3VEnW^_QmOR8At_>t+N`x& ztRe4xo{_OijoPK~SS~lF=rf#fQ$ZbrHC@J{V{$`DRSti=IY1`TG^Ko+Nf_jJ*?ir5 zfAA*+)mL5 ztbX;T8Ks+BrU1)3ceJSej4~#6Z;tTJ6)_nHi0? zaw1IPR6bk1f|8OFTt7+F7hd9xvA~Y7bkDhxFvcD9ic!+|>kdqCy>zTuArq5|&PE4O zn9ua{F)q}GB=H}P&gpX2WPUeRe}0_4uL4#lLUv3uQaWdzVI>&tna{OgcqPD?yT9z* z?Qe*Tf6h3j-g`olkb2Wu9`md@a=2q#(blnBT*Pg8)gpF8av|BhqUaCfjBr#7L{)}#pqWo%9=3T9#mqrwEiTH5WRY27|)u)kp0ZpWBJti ztLn*h0*l3_rAc5|lG6#5jxl1&b@q3L_59Sqb&o`%7?r`z#o?h1pJrG`mOSIP`V!h7 z9a)7z=c8xROUOt4shwY zLQBLma=#|;BriKtuGeV*4aLgTFYt!Ms5#Mn=c86Jf5JTMUJAa)?R>DHSKiCnu%>C( zS1!kM-B5I~augR|OtzLQJN0*&Zf~Xt{jqC7Uqgv!#e^<-V#cr|s6g%8jrno5!hXW6pG+ z5`Rwo`=|2jfZm_GEWG3mctb||b1xpylX{{(@BPNDgQyXh{$|o3F-NysyNtSTY<$z} z$3k<%!)&t^MJH7bDm01A58_#dYOD&4_%F-xbTPH{PF9vqn51SQmJ6j4ddtTfa`8}eE({n#^;n?}l>?Q8As8=U1 zhJ|lT^jABk1%2V;oBDE77qSMXma>+uJ4}eKAiS`KhKBF>5WitKN6y2`;*Y!PrfBga zA9)aXw0c(R617fp6-RQa@Bt~xQXnPAgBuiE4SiL^C>wJ~%zk~of4{r-H|3n^nr0xA8yEWLX&fuv2D1&DO;qusvvKw= z%X60j7fmg^T#U8=4dvM-JScAvj}$~E1SL%Yn5JOq%Sp@XH){ldaR!Lsu5av5VQ^=)ejm?nqI$p-3V ziB^h-?%mB9(gV7**zPGylWMed*e0@uRr>tQb$D^hSUw>(771$aAPEx*(x;QaH&2fCCjhDRIvmk`bDLss6#p` zGVifkU6*`+zP`$P@05NR=}a!wrO4}cJ*m>FRd?{xwI@`Fu~nU4CMze@gXrbh_h-wh`zt0>zB`!s22->&B90>MC90{Gy^A z21Lz0>hhb|@A3cj0MW56+@LOc(cW{y%Q+qO*^5J@&P;>DHqMC27ZyXeh|q&NixZOy zgI#q!Ce4o*b@v-FXDPxr#8i8;u=yygd6Z6X zn7L<{W*7@G`-39#QB4sVntJ2sS^nR}R`5Ick5n2U*W9ds_CIRWSUXmV6HrbHgew8w zE!v2g-PK;3u5CoCka6ZelA9?TM*@g;d9=l}x`^YQEtcCOWFn9LtQSeE8O#w;Gvmel z)DCE^Bmm_`J&N#&JyzC%Ae3N95ceFao^2)z*yTUHp}6sARnykKt9?nrldAb*7!*-_ z#1!1Pf$RnI>R{x%H;Y`%r%a&l@K2nGP{e2;5!KwxESJQ;TqD2dDZE>7;8J0%@#vN4 z=&$$n{hqGl5p)m^lYD}l)`p8ZctV?MLbHIeYU|cgA>~!AV8%zpGqeNeMWXxBd?iA1 z4V14d`R8jxKN6YaV`f4)u3d*j(*wnD9{-fN=Zy-UCkxCAwR5n4}H$|(7hCqn(yAtg98kBRrb5y?{ z!l2an&xN#3z0I zylqy}b7E=+8T?sFxS@!CUiRubsk1)C1j+wk0j%Gb>&*aaUBvg+`{Vc#8C{a%d_j!X zdBtnEU**?qoXbivFf5Dq^I(J4e`9lQBUFnS z`&bm)_nZ{&44e~Pup1gFlkFFkFJG9rWbLeg`0qLofh4=dQ_KoL^)^AAH93lw5zgT2 zXlu7b0DT}?jwC1xL5M^Cg^4UI^}ceGvxki9fKNME$8I{pkxyE5eDK@v!#ztbS za5_>P9RY_w&Ej~F;Rw2gh7EbiY zaUkDK*3o(HT;XSz|Mscr?b#HCUAS7Z@aow{7W`WHzQV{OTi8~nz|Rxa?d$(1erA9V zA!B@m4LN%z(97=t3TjQAP!B zzx!sjWyOd!uzUc;^4>DWb`+{49f^9Y!K|UCR_Q4PH*T-($&+a zgxiiye{9u{F;)ZHLb__EIT@I1PQ0noFC^JRi zjGm0w(~mnpSK)Oc8-M2_R8@gavT$({>Ayp2EjPf}4_LHNgqh1ur;T4jGe_`h)G zd>!@`z+{Yp%4~_PPcy)H*su|40)~m8rRn2%6@WM%=lYw%kmKou$7Qk78^sH>%lKtw zIJg^17Ni;6XaB;~*BDq?$$_jsd1-NRnpLu(HTmCK7T!w@97soOr^HFh_Z2qN5eIAT zR{jjF(?Y_0qFb-s4N;BLJyNDL{l`&vPLp@%cT=(=&;M4st#*6JROC%H+5UQaEtmD# ze1I=N{Y2>RI7_PQh0>;4kSOj&J@jhu>Gh@ie8eZ$fa_=`7b$3TGPi3_^s9sGfh0~p z<&36Fq*#{+3+~+=LrrjIlOa*h2tD+9`G4^YPeGcN^K%{p!4!WWuRH-B+|vkTxyG-` zP?pHKOokBk2nONb+mMr0O>(`5OTMe*rqJ z%de#wNKyBtAH4vQVcp;`=)Y(CUGVzQrFn>#iz{{A2+Dj6dcT3d93|)SXL1_b|C9}1 zN3&C{wARrUzNAKLfFI_%3A&9-6toQiV zni~&XE{(Q|x}%b{O8z_(Iok#qW0D2Yf{rad%964)!@%SEhTNlFsx`^S-48MQl-RY2 zyZG$Hk!1`XL)RvZ1uHh1TFUj>tz{kf_CSjl7_e!^;G=hxQL2kZjueP_UvxZeAUnGK zKI&sO?$%as$ZI1TYAI=D6_wT&TVxLsog%#7Hs1#o%m3Ke2#&Nxzlsbp?0D?eCId1< zV{Fl*=XeXPp7(Nql||=RgST7437MGa$~!A0t-05hym9Ide)Sjgx##8L4Au+W^o~(M zE4#dtb~iDX%~(pogf+9vk=h{$m2`RviUQw=t%YCYzUcOG>PO;NkgKiL0%r_D7JGBV z8ZEi!X6Vn^(q&8Ofx}RKQ(ME=XBi|lNv(C?Cy`|XA2Eetn$GUca|f#lI^M_d^M;TP zs)VP9$9odM`8!p9#M+fBH-e&3?Bj}t+g$H5W21dBOLojIC}^E@a6i|o?Jg)VJA`^x z=9+r;8Z%lcg+};Dgc8~Ag8(>yt>>+74+Z(7$EZ_M(FVXH4lP0B#V8N^-9Bv}!agJU z_GyA=h!9^;lv41R;K>>%#Dh- zRPL_OQ0KnsYMoqF(>@rnsLOUn)~Fs_n>NYZ=&GWY-!3$DYrPg>3cw8b=icRi@PnH*BXAPzr+|Crv7t)H&yY_tOxF*f-ebc0hX~L1( zMxkkoYp;82Jrl{%?VkY~lJ>qDYf=q_N0b!D*p|23TK>fa1ym_U_$8dO$6xv@W`qWX zIj;}c;I^%A*^K-b&#$qbKl8cI+HRnW`bZydsLa`OWsIT-23))@{g-lbeajW~u_^r{ zbz1}#Yx|=Qg};9j0j*-${4dYrRcF!+y=-ks&tL0X5a-}K_HtdzRXL(#5_7D?Bqt|- z&N%#`_FqqG{G%>6ABkuF7Fy)in0Bphm!G^|kXHqN&+jYVB{jVzc)Wmfx1T4caPX*t1|x_R5ZkN{lTyW$v2Jw6!_ywlR)$r(OxzMe2V4Vv8pF|>DU#&uz!`y(0Kza z9IjNf$EygqGH(mf;s+qT4gdrhA8BKFYgYR~-i-R(`#_yCiYR3$T7e>xgJMkMIhI3j z;-5c%?=4LTVq|n0f6nZyXzMm{w{W-m)yz1Mt`}#UrV5-#!nIi0Uvc=?{DGdFIcK>+ zh7jZIsD{VceyDh!ymsI3I`l6kF(&2XXPn?Ko=Y;t+%;2J+@JhGlHWSj+yR@$?Qyq1 z-o)vK9$N$1-?xZzF`D`Vtasw7PP z7v0Wd87_Y;>rof@uIVzV$=-gCJ~(B3!ou2xUS+7^c?WB+rIp1Tx|79)hVpgn8-1>) zVikeV-`^x>*79tNl{FFAX(00nDaW=8xb%}84wcloiZkOn-L z2sq~_Y+pjf{Bd75F-gZ4ZL;x(w86_`{<=^TgrnUTS*d7Dd3-~Kw{gj;ALlN=n=yyO ze@gkp7L!|B61YY*IWJ8_cieg-)fyFKbct!n`i>h7W-vAE&mLiEF6HXTXbWC{?CxJ+ z3Ob?=M>-oF%cVQEWmaNn6?pv>XB2L+Z{FSb+woy#m9N?_<+I?TTy6cP63@_w(hPTR z5h6`pL5ZtSBCmuX2wiQe-9_`?a^s#*Vh%on%GUh+e1(~O60xazdg#%w2xl27;2sz@ z&ogU6XrQADH!#Sc!t~@xwB~Qq*F_Hd^Y+2pry%|L#IU<>gr3PofoKsi48=Ulc0L-zV59-lhjDM{QbRA zIG)9tji+3;UTeDD6kZ7>qQ+unsdgwi|LuHtD4%J2?3wYeS@U@D^$bpT2ENON&y2!N z%R(tMSl@heGCCXj2g%Vd%qvHV0? zfstCI85+_ZJNg> z25_z&$Ya*D;?lBS>wUl6@k_ntgDh(HOMLZ|O=9Oj2-~IJ^Z18l=-gz%GluRgmsbwS z@2+)pK5@tv3SE2g1<>%|LoSK%j^jh$B?yH|^N3p1$)MqD!0g4rM5A2b=vbpZqCjQ< zV`HOXC4jl5pg{ZAwu_;pk!?ds|DL*;p$Z1ncrnizYYVukyY3}LI)N^h72?>6{K|u! zC*)1sDiIK8{WHUgw^}l=(F_A40>@Y{`rnVMEsxoKDi%Vb^Rx+zre^zOTF#F=V5{|S z_Z{3IEj#ZeijWNbXGv6#muiV=8#i}+_H|MVS(!yV*E(f%>;o^K^rTiDcqfte>oL|$ zj2(M=bbR>R`0I?A_bkQJ^RD|hsW(a2*d;j9<^QcQ(|CzmT`8UsBKC4oTrv;-i!DQl z0}c*-&cCe&OhKCDgeL+R)j*T~C;gw@T+_i%v@zmI-J3-%1d7&-oREb=qsuME^gPWi zlv)KDjj#W)nx>2*UJ*1}O;)`U#N;!jV|HEd(D@i$_QU3L>rRCPkKp*zfC_erE!nXP zV!1j`0m>nip1j&f`Tix?$fXy3Fb0wC6VfxSSmkh}r9`(#hDRId>5A4)XGz}Mo_(WP zyeFYL>)QGBf-hdtN5iqF{oE_Y#13dPT=0_cSPalWAr!s?@0X&srQ3!YF&sZ1KNF@jrxjEeJCmov5uxyvki^m}AkTADktUCYGsBsU=tjZCsg z!=v3h{zG_w>Ef?TRDT6iQCh6aSPqpGo@{H%p$17&?1`%aqFEePh5x34DUYe&MJqb{ zG_<_9q2xXc`zXWlbE4n1X&oHN{~6nNj=3NA&2SQZ@CRN0tXhn4CPCf~WFOXATlD1N zr5LlN_JOJgA{Lji5x69`hCN9`o@i7D|+0`g*CW zSZuUK>gO|U0mtZK&kjW(&eu&K2dwi$^4ZwW<+H{y%2;O58HEC+ls`@yQ z2H2(Ay9Jb!!j%=Iov}%}rykG7l)L~0l?gvqY>2NUJQ_Ltcf2a%ukj=mVmU**;Y)rI z8!OPO5C~A)3@lk(c;wa8w&275%+b-ptcdsbZT3fB&m4>6+ha@@6OEQfy%25Zc3nuR z8y0e7zLAC1%ZD**xiF8sZet^!OCo~!bkP4a1@pV@Z*o%B1J2aLjj3wioW}5n+J*jH zp~hA*AZ(0q(9PxEzE=lh6dv85ahI1f($(1Yo}}5dpM4pjf-)Z5Lq*DiF_R8 zUrnV-Slz|H8P=$jlQ+2g8omzyF%^ko9cH>&nYf#s_l|UGu462lDJHCvc0HVAbOr{2 zo!$i9{k*|OrlJ>LR%Mf^=O1k`px)%G!9vLdzka69w6>U2bp0vYijW$6#tI5)t&wH^ zEDwhSL-%|wH`w8;jJ46YO3$-OvGB^V%__l{?$eFNr|YmysrT4M_(4HrGXAV-u2Yrg z>wOa_(S;{&u6AhP` zPvg|a_Mo&HL%-Rd|H9ByR)$GEtP7q*AQYSNKk)B?Kre1D4K%*Rc1;1I*5E_f-5eqnMyID*TXj1m zv@v2mJKkuss=I8%aV0RpIvXh*KabNIEV;R4=UImGxbIc!Xn3}Ds$eR+v5s}ywOjvB z{o=2GK6Z?53ayh~4YO8c$jx{z!0)fS8^)FoVI^eD@+f|i?UNne|F>;L4|VyafI+Ir zvUJ#sSWjgRzA1HnPx|#6o+Sa2sP-%8Zp=`|-Edz0miEc==4!NL-3XyPtKVw)#}97d zt6!KJcO;#h=v{U{ln$kDon8~*h3{>11*ljz@`jdMhJ{@A#$Y+7d(`F2?C*i z(j>#E#>-oOh9BozqMd8oT=---NoasN&Wa>y#oaq?oV6pU6A;bmJPPVb7S0Zb-3yuD z3#RzNA*j1JCYt0PnZH=B^aY4= zISw{}vv6&p8%1D2my0Z^I0nxU(|MsvX+MQw-+B$AtjZKVc~xh>`t$?zxhDp^QV6*C z($miM8FDRkn9bdgv24A&CeQlRVW-i!MbN?sQCL`3y*}(+c}ntNlFz{|xB@`ZZ!6?s z;cfZOF4ft>B{N!4k{_+$L&!B9njxgwMA>mfS>($v{zlc6e?NDZ8`s>p9Y$Kw>T>9Te-IDBCkIG@|FA#_FTLk z%L)r5hL+r|$9xpyjKjOXJdgCKtd0|YOCQ*W+q~~!pNgU)81~Z&N%Xgx)V4Z9 z_K|^4Iy#lz(_;H{Lla5i3LQi_;l=Dm=A^8Dpl}(%_#v(&-#o<&?<8sBa)qjO zT74#n^(RvH{f#`4E2|#;o3!oLc{gXiSvPG>7L>9$0>_%42fgCYMfM3$f*qeYgp7Qn zlYXe%^$j~U`tzsL6{SUPzJa3sIv#!BC_q(>Ggrl#yk(LW8dX+BG2=N|^y=?hi-jQ9 z`D$JFzlI~fx1TtbQuyBB_(@6@d#yGGKR6)DxqifZ@(69KMW}y*3=G6=VESu=Eic@5KQl~JeP;n(fD09Jd~X0I$j91;(~h-F9coMuO|Hp$mw2vp-fB&^R1Qz4+MlVY->VSI{ChyvnEc#NvYbV`C{O00 zDTO=G+=_z_X5O`Ro-S zAoW~v()Gn?X)<%s9d2{pUvi_|rE z6`2=mzPe!3pHL$2oUg`dt_@{&s{geuX_({Hn%mw|C#+Y!QwY^eM*TjZ?gGq>w6%}+ z$P=(~9iigHD9^FZiSjM)Z;MQ^?&&r3&TS{M%y>Onf5e8_E-4Cilr z^swJ;XwAPcHjpDEMXIUnE6?Bf59Tb`hMR|}3<_CXl1;aUlJeWY+}&>+wRn%z%<8?c zk2F#b=?70ks_lir=hKGjyX~fNeI(+rLM(ar z*j_M_FC7Ys_MU>Zw1cPSJalfWZd_%zfy)bH5QJib9meU=8!=^;>m_5$v=GajZ<=E( z%2+8Mf1LTG3-t%pqEaar3Myhj}Aw5sp$DYG0M57ys73v+DIJ87&^s%v{v{}caU`(dQ0!Udb)WsxF;$1 zJ7dP+RBbFCa*%dF1pAcz`PwI!2Cf!wt}{a88!2OxpF^igdW{CYdeK21AHcQ^)I6w2 zF$r^oi?Y{od(k3HeIu0{pGRElq~RT1$YMi`PiAo%cKQ1+1FK)0t?`eM^D${47nkBB zyQn5D^J96~v6gIkDOTPBm%i(LDJ=`kTt4%#%nUpyUR$r167Y$0;saFD3xgpZQEeEN zA;VvIizsWSOr|$sl!uk|lF-wDorPzZg~_pjM75g@9;y%-W+z-x5C4uV5^c<>oUh=T zwP9raAMl5M>F;czrFNpFbXE5y_qswq?6Fax36jurf8!gltk$XWviNnjq@oj%KR+YZ zl2@a;OLy9s(=#uC9hhoRk__(1QaU{Q{m1pTB>sk$o1+HlSY&QT%K37eb1a)2bWHE4 z4mW*`30O2Y3|<0pCJ2Wt5)51({QCjc7TQ-$^sY#9j@G@Q5*)9p%Me}|KBQZJddz(5 zw4*b}YgEw(nTRZ7Zm??FAeyC>CJv!FiKs3+8|Zm9ZAiI z9Y1tbsb~qBi)*ojob2m3=UT>SkdS0OVQ?S|JOQ)VFP!UGA`8hc_;EKrfx93OV?|y- z;wMSY;TZnw?8TD8u!~ek)V`{K?qY%NHaW3?ySHkGOTS~HzU{zp)k~GMvmF&uRJHH4 zElo4EwQ+icL77mhoK5{too_gKOL8>2pCTc8h5N49OD%bK%#GnTh-{2M!Jawi;CCg<-zU zKjb&7Z1^ZmlY0bXFZsh6#Y}btf@9DqSb^>CuS=}=1@9A!?O|>9`hlDVoMTF;`l6~d z9aMlV?LC@ds2@7=W%z--0$0+gD^e zbdG1;c(&02LlP}35wyNdHRfeCZj9|WAAc4;xX!nu%}r$BMOL2;>cevIAXb7&heO|( z_V^6&bg6X_jnV#eh*`~zRZ^LX{y;sDlj)VOSTqvpUOx84>b&{wMKgcQF zRQ*GAA9d5o+}8;PFc6iz($dwbldWYl_F0)C^)ULwse3%$qM9?bUPyqlTqc8gnd;;5D=||1c*}#zS13kdWzww_$^R_89R09e&VNaEP{UYB5frCqrbD=$3#EOmfA~%-h;L^=_ zs{!)gqsJQPx`wcUXN(n3X;y?5=K<5QL%iq+{K}Wsd=tJ!T{_h+F50lg1wCeFl zD*4A%y{`XziT3gbms@FpSH6UcUsp(gcqaP@$1X=WS|@#uD4mrZbFh1x7k<~Xo8F2S z2oG{FQu}Ks8xNkSCMq+dv~d|OwLHp0>h>Q_;f1glAeUWo%N}#~@Qrbu69aY9eV}ws z3m}nbV1(%pqDK^uv2OS77A3FOBtev@dN%*`JcyEazft{Rxu}~zP!*-j;Px*&i#gl6P#iW}3L+jE$XR#@h8dq7l*nslV z6FMXU2E@Pp4Q898P*7{zbgN>c$0h>9j!W{hl&7>{>o;gAXMkB;zKTdJugT{x;e~;XT&;O%3^D3QT|FwFGL`wsNwBO6} zzk_t(_8t@KW3c@1=dJ+H%|WQvnjo$`VGYJr_J|8>h3hc#n@q$S!9T#U*pj22G`o!=+&|_9I69ktD;%ht{Rb}1W4J+L;uP$bfSIBHbO15--~mhtwsUTG0|8!u$x`6WHefQ< zynxID@WL9Om58`P0T>F-+#gK}PXaKe2!l}N*ZxuIxkGye@7WcbFfeM`1wv&heBH(+ zisyraE0k!|k`qT2^%P|=|5tl&`4&~Q|AEqsbceJc4oHK5Fw!V3Al;21EirV5fRso| zhzu&--8CQ*f^;(=A|WuO)LoqOJO99ad7tY$9%s*a!Qy$BP`VmC#tr;-UM+%C&`(M$g?1<(gdDL7b>;jW(> z`x>mLjqLiZN!Zr4Al4d?WJRqHzW|_QQ@mVyM|@S>#axyQZ!WEGf+Ei+w{bP9A()Q;ROtco$Ld7#34e)x%-)hi2)6dAVD20cG7sU1z%+50S>yT_zzacvNYFw zm97-^8nUgyd11nJBeyC50Z}i2200t10nU)@iY_EfAcMR>oc<;|?BU-q;08*joWh!b zcLyg-6cS=1)C82?T-jput*zNVyqw?DdCE%mW!<-(b#?Xhf*qKL09Fxcvqj?!4#n^P z!WhLwr)WZf9NeVKLSt2MXaoT@bJ?Q@=U3N4DqIk9gM`rZUk3o*M~EX!m#Tt*#E_qH z+3dD=9vnAX38;3uf566EXGCtDjMD$EsI@)`J8Lxq#$UPz@Jntjss<5Wl%N(B5cMN@ zL7Qf5O~nHfmxCvC3&0o5psIyf_z9G6N{ z#9Dk0w!l5d%=YPukKpuTU{6+J8;RVclml(BRL2U08YC0QwQd5q-xIZob)udSVHrF( zMtz5QZ$JB|LwW7?OXKn4Ep^n_)QUei8PD~S--BJ2%r`)h`@PYE;bsnSz9TS9+XiSY z+1mOnBbN@`Rh}UaVx;>t$2;YiHG(yKN{ZiJx06}o-N_6lmwYry;A4t6j9Ds(aY>DZ z?=&`MJe!&->0UL-{y^QY0?0!l3$?lK^gh(AfLmJa`yMmTj_rb;Qj(X4l~Y`CRjuKC5W^tMF<$_Se4|>Ug$|wWzvWanjuG zHJ3}<(cv+^PP}vH$Os%;eq|2+OP!ZN!NC>N{;%#O&ww5dS0%1!OHW~$g<3U_B#1md zZT~|p2K2UaD5K;)j?n}A_pN3UwkqoW84dthxNE1R8Ncq@RXP?z+r*)wpk>RO`BO?u z_xP1^3X%GR*_6nxuDCJp&77oJH`rF*ajc$3S?&(H2RybOF)~bR0N}6iWhLOl`7m`{ zUuCi*A(8Br4AwcQlqE|G^ZaPSQK*=f`~lqS$EtbyMARqUKU~Rw91Bu^7V6J7B0ojS zfi64nLb{i$aK3vb(O{gT?f-7%kXaXKdI}0Z#5#ByHBcRp!7~)DHW9Hr(c&mUfm`#! z&#XXYVnj5Pea+Ipq_kL1Wx@8mgA!)1ozgHTAjpk4^%rmI|K6n&$ z>^8D}OtS8K-ANNVs*}6nRLyZ0ixT;GzYI%R!>_W*tE#al-I2pqo$;J$4W<$;zuZo4OVRmnqoDbw4F(|=D% ze|VWbB0@oc&-2gPlv2j^Kd-c;qBkfp?Swg!2dc4>W$OS4a~Uka_t4lCnN}dU7_0#q zlorz0@{4)TipeoXew(Dpkq+GpEx+FhoMd}$jgPbL*?T(=6f=9@)J)t6SSb2aII;u9I14VE%7EXH*zOIT;jteo}0y{c~ zgPCq!U?>LgOfcUNAHf~85lS%>tx=_mL(CL)|4YK4c==xnZ;}k@y(DU80Tia(#}H3q zw)Hf%CQU%VQwD;58uszJJ+mT}uLeZa#f9-nhAEBu=^f~k>&m>1@pi%xlv)&&1*|Ry z=K*Q9hOfF;_np&h1C3-lsvs0HSZxtt$1$@~Vtl&H3MwTf;7PTAkEC@)B$e&{0G`c_ zz=br=)i8}^q$rekICb0-HcARWfZukwRsQmYrF!F0<7E7>h_CXKC7UWP&fHNz zsJXehc?cW)m(p^hf_thG>+O7aOm2zCF%}4+l7$m-MEqPAz9;@V0@Y{@(4<`ns54K~ z==*mkMTUQ<*E}Hm=p~HPr>#5rL&W*5^Zd{w_4%o1-b@?e6zF@H97#`(2$XN9f-odi z4qhwU&mX%+)o%cJ*!)C2XU+Cxy=LH3nvPiFC@n`qiwh-IQc%0eDrhcWYIL{$sLJaL zida9Me2>Ke13YjG0@6^(z`Wzha{K;Xd>a~CHf?Y*otrKQiRk`>@zMb24r}PzZ5JGt zW&rj_Pb|P1!R((w0Q9g}B{m{NB!&#@nl=M`nGDu_HV`&(%v5P{Xo`mdO-ia!^z(ky zLGezgukX(&VP@aX?ouU;|5d&E?k3CFQ<70BKGvq{%ZBH&e0Ip{rbE@pcFYl6<3^V~ zP6+S*R8tmy%nqKG4~!u^lr@xDO-3t~CH?(-(|fUNz}Wjthx@*8Ki&%!TNQ^IZ0_DU zQ02Wv{bNJej-S8>X1q8;aQwu<#ZMMOW&%0JQbGXI5rlAZV8h~}ynJ|7#WTcl_w7iZ za|OH&3@aEoP;+(0bYi&!{t5weoaMImOG?iW{htw&0qf@{I3rT$ux6ydBZJ3b4V6*= z!^k2eN<#g=i~cVUs|>vTirb+Hi~& zzl#vJu;!mMohQk+Ujc4)#0GxdzoaVnFSqx-z3BhSXd$~`kp6S4-}1L77@IXp^M4nm z{ukwjF%Q=Mf36yfz6~nn`};qFnev~DppU?<5%n1LiU0kzO8KO>g@Ne!xAKbrchUbp zF#mZ6|KA)K6*gGD`eQUZh1|;N)W20SIVZUoSx6NSq{W}d?Z>x%4`J)(Lk%Z9REC5K z`b78I|04(ty^+sbT`tYZAKia<)ixUhB2>xQ6v4FX98{y|Zu&6x`N~Zg>zEQpfxVMC z5wjJb-6N}c$p5&`nhkxc30$bFXt`c8IyXfo*cghbyxJuQ;?^Xr}YS#D}wi%-Hgx5vTSS@q&yx&hpu^&?roHHT^ zJ?6IlVVO0T8~=Do<+RLo>H~xe5>eu={d`*&JpMq=7KoBiaz>2Zn}29*nuUqbaoUiw zFM!S^D=7@Yka0h75v8Ty<+-Ty+v@l9&-^(k9NGhnVHKSuZe^jvA+(nyPAleT#{WK- zmd3lDx4!gE1UmLp)6>W}!3;I?m8*Qaxe>DmCiSGV7nuLZ;`&xhG5_|Fdk!i%6>euFB^x zD3d4ShOxkZhwX+nB47;bh(=B+F#3&;EN-Yw{x^Ym#|e?}h@>ZX*iaC*PeKKRei*cp zmjb%Ff5*M9%0~Reo0!T0MLk`K>bgNFe^vYO-yi)VuwhK&PX z!&p1z^+SU1E2mH^YH=uQD`-(^e@z9(MN98F9D>9dmwqN6cq-0HEQQ--Y@{eZr@xeU(+D1^&}V zW$QnuqS7vn5iv+fHBG03*N^=+Bji4^C7?Q0r?T`yk;I&R=+M5(fCxwC zhc>WH?*syr<_V0C53%O!nTD#>8ow4YDbwJv1?Jq6V|2{TZ?voO_`$TdZ7$E-IlZ6- z0jAcN6cNcDaV6Vjt{NvG;4Bq5%-wi?cHc;nZ10rmyBt6v&VDL>(-$$txo4#xX24EvF)G!?+HNIX*aB~8~$x_ZW2U7I{D5w zH&|tQRaI{rfY3pR&m50L(KePg)Ks5SEBbZ|#G_t6VufIFJuG>d#9?Wvu0H&v=@1AC z0pZP+f7hs!-TBqXNxL7R*!U?gMI=Du*m>mh^~s^0jt&kJ($FI7*V`;S%DZI`@(w^Kt zp06TV1QLq4*(t)}FaX3y1sJpRh{%LF)|~o&HIT7;1^kFCX};JfQ}u;&AynzC{ofZ; zc7~xEA21@Ds@cV8jyj5q|A-^qT>z1@1&F_p$xX!;K$caOd8qXpcERIaK4v7jd0u`A z?7N46{>|g2!=|f+?PKO`@sYSEvY@0U)W3NeOzq;IUpPSSG=s^URN6<1gHJvJYX7V z(C+d#{rP^}ghXZj5hsBphNFG8HjBlUM;|8`_t8m~(y1~>LP#q=qr^82(~jXEYxqDF zpn;R(jjGzj(K;FPXHAtn-e20Lf|2-YEq@n96g?@~)_Vhp4K1$eM$!DhOC;LXu!NxW z(~DSL9i0ya+y7i&eEs?5r2S2;6O0TZ(vNaCh~@g@>6DAjIPAV494~0#$fX<>O+AV} z)l{h%P+^rDsOU)2_Hm)C=Al&7N_(7uM%xG(q6lJ!)NWn7_;X|U6Od~w@>6zqfj`*^ zpk7nG;(Uib4|oQ+XddDVCn$n`ptzVv5Z&{+g;Aqr7T7EU3!rS2I5O1$-ioA?Y@};{ zTFsNUF0NrF%#85{)mTAi4P=P2m<$gsfo}PVKkyh>0BT02BsXRU-{X;LDqJ!B1?N!e z7w``Q?h7XUGo**~0py29jL0j{L}6lEkGuC%Kb0HQ!hE8O9MZwjIvua5C4wE=nFl7r z^SJRh-Q4uU=u6=QRH_ktA%~oKFL%c|9tcG2f<1$U5&5{dw;RPSH$a|wywS}wp@;y! z4etcKn+UrCd?zH%^I|7?6}1vJ#Q8SkffPR}=exlazB*v-_H(Azf$~hONrklt2o~GP zl9j)7a=NT3k@K~gb3SsJ6MNO+fX;rXLrsK-O0(U~Q9(%T*sr6{i?c6{m_ftP)#s@` zRo^b)*GyL#ltNY2faXjXJt@*XXq-3#DeIf@Ww?}yjCmh-S50M$GV;h8xL2J%5)t{X z%=vDZWW8nT9XYdfQEIz^5`*)5_bcu1lV6~*=9(&}o(GlRbaj{VUNh3#$Me24n)5Bp zDCYT_5TGyfo?}ZxWox0nh}F1+fms7g$s324FGDgvX(OsCzjx7PYZjB(q#4mjCSVIQ zJM*8l{LbeY0;(|6^7+Ntob*qw?e-RPQ z3VCqQx*u?xz*I#8Q$ktxyp9Wh2ncWqi z>5o(poD)c-oVn9%HLmwTtr4wwdTl<{TP-)w{z5Pn<$W zAIyYkja8ok?aRGr!xo@EQ$+H6uN%dhySePm`1z$A=W>f&+J>udZXU49VmMFZ^}Ysu z2w~o#uw&twAMf;2IJnff+D6~hu zZ@c7ocz^~3v*V4+E*UXiI>#1hmW=|L)lR~W9!ctITEpk$%z(aY+GacSi_6)0$Yr}I zG`f*P`L8>p&(|V{JSz0BLpZD_tZOW4ZmwS6eFg9livJY=-xVkPc|9H7Ho&%sn|sYo zt(csap56i0VfqB7SmL$Lw`!tO^o}+Gsoa2nL{iEK+$KX1=v=iHIXu|t63Fp7+h0`$ zy8pNb@cG1<_~a>6FxJHijAlxmz!w z3UDMVB?a*DK!@BJ;mcB+&6GK*KR^+6p}KUr#hrVxj<5h)Z6R=W>LwoG^uUW>zYgDx z@s!oN^b_f4lik{L->2|PE_RqiZ8<1k=Q1L@!v8d4b!bt+5=;rY)7%Uw`4*?{rn9g5 zUb`UO`P`G40`y2df}sDy0>su64%O`^ZQ#Gl(kn*Lu+c$+DC3Y(Ei33Y9uR?uB0TkA z%=~{|6L@EU{de|c*Q;mFUpl71V3h8H3qfTUO{h|d04w;m#{6R6WssrRj?()87 ze6Z$RB^snmy*6dM$|~1o(CXBoE6)iPah{o)?#9*Xr(r2f29h@-WhASlACjl z%@)c*iO)=8&3~L%3+h0LjgMD0kNqbG|Yr!wr zD-p_aCjApzmEs2$a?C_cS9iwH>mkC^&cC~7`&h0u!QRW%e5n@q(pV0%LmF|yW}sW2 zC{RbT{c#q~FHcdQU#>RONbDI1UsCigU8XM1~oT()3aiUq~OpJO8l%nQq`SwRQEZ;?0i~QpgN9bhJUyvlGRw~tQ)v_?W;y^K-KTh?=FyUk zcqBkgz2QDz^sL`XFa!6Y5djXCf7<)^WwWimHREY7BW4wVLV#6#jw2mjfaQSXTROqD zlHqKzM2Ek=-_fmm;v-z@p^%#_AM9OPh+PEo!^s@joCx<{{JC=~3`rz8gWEWC(PnSo zVN+c=^k#<%sq!v9hlAGTpIz`REI+9ficHB-rx()d92Au=?*09W#>B=mS)eL7{|ARH z?db_*(5(5k+jL{!d!JS0`_|S_e*>k{yd85NNL>8FuArr)1S3ifxwJJuKi=(gO|{p!V);x)4mZ#K`Dd+MLl%15}?p63 zeoTG&^*$Yund|TV_fZb(M39-Kknk>yDrfYwEW1l{w$YyYKT$cHDIB~i2<->-Pv^<& zfMGV!dq@VA$<~gUkR-s}JM$Pyfwp9#G*mk;BXjiy~qA*99hS(R$Wf)`*aB@={9b z^?V9~$Xr#dJ-R z0wS8szg93*Hlv;N>*P^gn(6LO3iA%pB=m<)rh!+=ySU=7g*DH@3XA_xhOwIH?U4Pk z4Z2wkkpC^N$KTlothp|jXrKB|h)Zt_0r+!TApu30=DB0_7s=XM7gP=Kx z?2STE<5?8xW*`+~xerhb5B^$KcBRZcc~T8+t)#cMf8@;XSA?SxKsI`V1O z`y?Szq0tj%$x6M$V$V+-oD)8P5h0P{ju#ZKK(yg}+_sF$Pwg7t!S-zTuT|f94#`PUM(ujL{dg-a<{Qfsf3;o z$hf!sgzkG?!=|S;r9Nv93o`!f#orfZuPKRY-2CYv?u+8PX>&()+#CkNf~yF*NR5&^ zt2cA~v7&Li5bei$r6smDHtXrfet|2o&%WwN%vP5^WJJz7H>Iu&9nIW%V{7Q#Bal$V zL&*8L+*HDnkori{Oa&Z-%iY~!6>;6@3O+luOeld+^qOAk&_>XPRjNs2Wo5`Y5kgbN z{IAE538<8WIchfb%YWUK#PCd_lwayVi8r$4Fxngd@vY~4Gvp?IF{Zv|w7HuVhbw=2 z)+<%5VBV1>wqQi{Cmrk1e~z2^zp*1=pP>#WLE?p(c(|KINrMk!^ISx;_lJ;afr0aC$q zbl3;R51g0!I%JA)!?69sl6Gw;c%Hl)wlfEE+&!|ghyjDltgPyOBywmJh9)vKFvx(6 z&!Nv@Abq`btdoGevqf&j7M%H%JBdjoP^KYpSh%a->506klj zH&U!u@=+`@=w#3l4it|o9JBC-EDbP;PQ<#o6|bIn=*4j?mXZkO(D*B*6utsYjd|8r zc1Bu_#Qu8@Y)L^AMe0^$0+do@z~-Z_sp)ZVS)ZJHJIAI8pHC}FeBhEEjedpV`DP>3 zvFUp)Cs6j(@Kf8#+;-@#aVhh<8ZVQT3-OxI`UH`w_KQtrYtW*+kMr>1jEzi` zCuwzJ{~$Mgtu^}m@~Qd+*)|!C%;`H%i7Qbc6|l8o%P=MURp-wmi@!wHH6OCFgm{M} z0$p5Oz6d_*Ns$-3Qd3g{y7=jA4V_4keEo3$0R6zH)l3UTxKiU_##gi-TmE|=RSH*A zS8sbZeLPe==_m?82xkwEsHPkN<+I@TgLbaV|BfbJh1p~b+dh^T6AfE@6dO`7#YIK% z$s$9P7!5-iru|E}pFR}ocopVYcbCBbuU$7|^iH>3&3RaUO}i#keAgQgm&!?Tprl&| zGJLl2ZI53v&N`jYBi%=|bstTMjD2}ErrrjP#it;N?OWpDP2op0_7gJpVzoV&6ad<~SLC0uz?!{6wP891^B2bIfyyksmb z=B84LCwy&y_0uS8G~uRTuF_(C+xb# zTQhEKt&LPM8IS3xlT>@><3gEx;tw)De1PS$FVKFg+4u@J8=&%uh6OKmcXv}HglXPo zasB>&2%{Ix3--zx~Hs=%gIk&W~U|-c0&w*o*w9MKT_w4lsmWzkphCE z2Nl!X$CTky4{|hsnQVen!+dzHa<|Qo}iS8qhUKK&@ECskP;_Gi^^-bo_V$ z>uxmCGt(oC$kzCr2L!E8zl0@xVn);wk5Ow;NpmTW2LM-G+bTTf#UuDwE0rQh)ascw z+8DOof#@QObDfb)!;Zne_C72a)FNo>=XXP`)ihO>iB6vN8?bVSm_@vKb4OHI7=2^9 zkn$A7iFNb4Le@@8@+^wE9ZHboMTTz$C+p%QW3rEsZ%@=dPbf}^bb!11WDj$urVqsU zFYd5tQJMFlVM=Qx^msNB2+tSX@8yyl$7Gj=siMq$8Wz1TFq3$DOnBv4W>VG!TRn}0 zq@;o*Fpll)uO5%&!w+CLqs`^PFMTE^}gs|*x~EYn1XMV9%+_zRV`wg%QTHz#mkx{6$c!*>bDY(O>fRW6c^)9Z67P;i!FK+ zm{35OKElCL_!D0xY-ew8eUs!Vd1|)(w+hKDy;N;GRN@~Plr+j~1dA$!V~~xx ze;@_=-Lhj#$_Q;Q@cx%xij!xTl+NXc=7ch5Tbu=u8udJOOpP&00)M5$hLJJ_#@bQ{zO`^-;7TF^+$D^nptUr zFgMRSBPOL%B^`a$-!kla`&5ZO!y_YWcum|x;1w<6% zG{bnML1_7*QPww1^q{x5HxJB2!mwXEcCl{9eoWD$8kqVZUBIY)+#_&8vZhbR!0;k_ z_*XkPrw1F&iZyn@L6_k?FBXy9+xI96#2PUu@d_rLB*&kgbB({ivaIa49~mC*OS8K> zJyTE*g1>_*tkM41hojughr_&elaCgB(%*dqqI9xUk*?F&`vNjoxhe=35U=J``=@Gu z^>irHla!`=q(4S||9H}_##b-hny5@lNa#>YS9es52wUMLQylFlv=2aADugDDZYGQG z(*yh&h0P=P(Rxx=gCL0e%K~WZfa7C+EFxi zC312k& z9&^C1=EA0W_U1!o?nw^wNDSDn-Wioeg)AA2@?tP(tNa}k+1-$}_uxyvARVesm=}aL z8}MKeqQ2#S$5&2K!(jT;d_4<&HDk{tOV#&~&U%wn{$L+#!tw_*4#9Q-w4fKhLuS%! z649OY=#^cA^Zc(1VmaH~O<-Zx!0(fJyMi;j5JLzIbYh9DYhh}xVVNGe=FFzl_TGV~ z#I8X9$xjhyRiEeH<}Ethi!GIv`&sz|R;)NcDnG@NF2wyWlt_zem7%R)UH;*}w^%B= zRR)*C3kwTu*dyz2zG=+2bxOcMY}ITyQ9DiaErpU==tqk+ek_TSjz#MW2{!WrPct~Il;DgKAHPEI?0eO3pw&tV4& zd;yozeEl+I@0(BtXVL67+n}IpCU?Ro?*{$*V~#^mUI}#`vic&(F_=!^Z0M!%Gko7jmzg7QSqn z7lPX^F-ySWFV_Rdw~j6#Z1`V`RSJ3&;0o^M?sv9UuoK>6Tb|QBd-klWW}kUN+bU!#mT_vRt3Qzt7Ov4BqbFEv_GpSn6S=E^_Ok4q zW-iFR96*;<;aXtE9&JQ(W*?gH{w2mFs{smuIxUM&MPtpYyHW~%ZnZ=#hmc3Y9E0t~ zzdR(<?xUN6RNl>x7tfzipS`^warw}i=)m~x@%Hqx&Q~2Q zs`m?1NRKI(;k_*_4tG zv8^#Q)uLK_5la&~o<@SPoQ*|M?jek2QGETvxn(%2RW;xiWHApN6HqqG)!VtzmmWP*Bjp)4TSv{dcT)9Q!l)=NPDQ zH1dxmOsDzj=;q#?8DPTwnw^j4;I3>r6_^jwBQIQ(e8F~1DX z+5wG?=1@-HP|kZLnjJ)ol{ILiVG|!n?9XfQmlX%|Wzo$oA7r~^@{eRVl@+(<4vLx{ zg~{@w2m~ea9Rb~ObA?3?X9Fv!@l#?qN5?-29!;13DqA;_lgahU^gdP+DIAdDtU~AO z4=9ki{w&@zAYh5IH5_oEr^=X-&Fy0sX!NwQvMSdrVanhBCle;uvrcw=%4Y=&X>kWd z_wbZgKiU2s`oTtnr`#D?Iijcya4Z(z+*YL?#;z^OitT_s19;%w`~(V~*vbCZnfoMf zWqipM51#7kO4IoyaW!)%&=|jujCFMs_)`ib*#speFF=petN?1pY!#(Xt#}Sn2D&0+ zzLdV6$n<}$k}Q=I|JXZ-t;qdf3ajV=k-T~^I3RP7lojIf${gJ!%}-r2D49GV*7A@g z^Pc|w`?vYaEN>;ct>svbH>#f}F6!o;HNSS4k>P}z>m0j(w1*txXm7|Xy{>a+Ad0!F z7QotGb8lsl-7bL=049GmegPbGeM{zcPkf^+BaEPaGtr@mokw-vyK~E~ORe9dmC6&C2D6D3lEyQn3FCvLJpZVPad_nQ_NjG4zF!1cCA5d&S@;yZum3j0 zml6;Y!{3RPSx$k*#$+V0)7}*ue-aiEs|JW;_y~CXn}Qgb+!qDCA9@4fD{kCW1ke98 z2Su=qTjT}qfx7Qq>z#_Qxln1Nl)?rg0ch>01JK2yBJHPpS-Z?w0Kd$J#>#w&-<7{R zgySvC4vyMi;v_2_J>LWwk$rgg+bDRL&jYSG>L&jcQ+MssbAB)jLe45enjl?a?k)T> z(X2y4;!=L}bKaw!B^*QJr}Mifm7%}#;hkQ0X-t|Oc`~$2cvH3I$#5FG_(%*}bvWNO z{j4q}?1m>6IE7J{z;6w}I|6_no;khfpb6h;-P2D8CsL+-m7W-xBAVH+e<;lJ1qfb_ zRvE)Ml(CqEUB;?}Ri4g5a-$YN7BvmBqC|zjqBuW(tW_rKoej2FWW|1Wsi#owmstE! zG${5lH+-?g9rUW=kgp(EhEo-Lg-0)`?!vVaGowLS-|m)TTZs z+Yb`F_lM^ObmF?lW#50C2jYzx$2zQJzE9s1$%H@&@B+U}ka9d&Cl0w=9(mQnh%9@l zU+I&Zhp|+ZAD2w%uw0aCW^G7=Rf#=xc6L_PTyFluNz|NzMxSbG3Y4)<=3P7Tr2hT> zgdc_YMnixLRy5{|_D$A85ZWncWYJlN2B~OK-AsrKU*VC}W&orCdjiS?wxUzsc@;9O z$wLzila%zgnd#qJJtdAvaux13BR||p1l2B}wkS0r&m!*+m|9O3uCNpjddV2WKZB-1 zNwLJ(&!&&+tsMz&C0O3F2AEJYr_vlPYEtDC7rn_dQ{FIEMlQ%vy|*#xce^{3Djgk( z@l=fcjSbE1el`Yuh6=J|WFO$R(wnrU<)8p5nEuB1uQ)z!RoNFo=1%qQXMXugqvS|N z1K!v^Y%&7aX!tKF?WfjN2Ce0jjya#U{ml7#z{>`KP7X*arC!nD@esB5q0R3xK~=_# zklx_zmv`apljVD$YGA|{;Gg$rqPcp44uHUcEzGw11W_$sZxwxy%~nx!=={1B?Kirt zzz?=!as#IERaf$N16gx4@>&U~66Oo5VN&D+cr(Zj5;f^VbEX2Zi ziRyNlYf&f4$`&OiCI*8#IU@^AE3<=8piTmPU;urSZosPzs%q9;tYEqS zx{sT=lkgqKmV1u?)*?$1kjVscsLO8QX{@aSg%$HDiapFvkQ(v`{3z?~Y$_|s9&B=vO2z1r7!Z0ki3 zLA92r2XsV|Wf`NJEFhh~IDM6yz`C5o9l=1)r9;#s{#19;{CIikrZ#ENrbum~^@l+G z^zmGIoc5f8ovD~TyduyGPJ&?-a{xg(%9hfUN=nC7{S6hN);hp={QEuMzw-wLBvv3C z7qU>_YTi@Trkk2l(Suo>1bbRqvI!XZIfTJR86uK+w>*trTV_7YD!S?)j*%VX%3yL= zN(2ZJAz3mrz_2pISRk1Y3BA#@isxloYd@4zxr^}Z!5CMk7JIb47(u34dU3+9Od)p& z(k^UBTHDISI~{H>3-0&L^;81+j$Z4lLLnIIZ&vhtU6{t~sti0wNxl9y3QGY5MM&KqfE`ZX#OdfOr?ju)nOMnV?Uqj` zeg~wCnESpyW1OJk;s-YA06#y8lyly-D5m=nph+YtP$>0sIr)VYZPlWwu5&jwng2x+ z>xAUU3$4_rV3`Mj7^*5->R9-~S~t|eqVf%m;o^%|S9m@k1(1l!YMIZ&{10R@`} zbWy7p$)FKa8OsFdX@OV0#qNyJK0EmFf`#lpJQ4dQ5@oRObdnM-K1Bsk{6@o9KA`&e zD7moaHNt>;gbyjeGjLRC*;R1eFJ3A|PEC5&&j%F8g)Om-uO(N0nih^fE17hB{;F*) zSrw!WV!9=hGUdrGI8&;oxtm_;{b!H~k>I5vH0CHIbzDrSzn$79%4@KzI9||+h_&Zf zci}f0=s7fqWUJ$>d-Du5rQ4prKK8r97NkJhJ`wsDF3%YKVdp0PCFem@C)0 z&Ba1#$e8uzoA=Hm$S~F;cURA-NfQiX?4rQfiiXz9jv z>HNZLv(zSqFYgYhNGn$Wr^&Ue8Z~;#^sz=(Up5|KDm7tPY!moTND@%_L@Ym}shuG5 z0p)RtjZ^*46*OUM5o*yCOk6p7v9oJcAVM3R{8RUu!7F(53&)#Ixm&X(pS~)xNV(N< zy^=_A+$1S)9`Pd}^_5-ZtHEgh?N9@l#{(ee!{TD^?Hgnt0i@$8qsQ-$#6RK=Ft9xV zAoB!b^{kuEK3O8}3mn6ls+`8)Ni(k}SR|XEh!@PXnzK~CJDCr+==5*aY-s?^e76S5 z9laFEpRSa0L3oaKiBnCZzv|Q5IF#Yau7us(A5*Kr0UT~rhS$fQRsj8`*hzFp=%#4G z!I&%py?rd9^m`3T89@eh3++MxoYq2s;|Hm0al8&|22+_L(t?W(XSoB&Yja{hqU1Sz zNnY!n0?1#t(sncy!zxu9Fz)z)&OxLqr)PU?0S3cwiRoguFy{;Ve{lsd;INY$8 zCq88rwLxDd^;K0pwGCnxbh)<6A2ZxD0hB^oP)~Vmy%X`Jt2QFZkpJXiy;>1-)W}eE z0K$2m7B)&nT8PX3r15j9q)8`;k9+uvzw%GGeXaxNF@FCw1wRJbO|e?iyQZ$ho3Jl_mSoj({!|NQF}v=|?2?>2ahN_@q6z%~oGgGnKxl8Jb!c9;;7L%T zr9}NsAt*!I>gqm6hy9T}$r-f4FmGSR-~;eosKs!*+_aau&)%V|Z%lnU^20H;Wwx_^ zV=JDtWer!QLN=TOh&17YxYU$S0}gb7-nW zQdk}psZ3E^0bIRhF+t9DOe?oB!k0ch*|%LU!0qek2xg$<_aUX^KwbpZukS(MYZ^_l z?J+Z{Vh$Bm>~DIpyMV_d`f?D|K$!0~ZL^#C(NK{uP!&fcT|wOQP2j|8eWwH(sPF|FPk+a_@JsniLh@fJgEk3{bw>O5 zu}SeS82yQZ-HO@Cux2QhH^fQY72T`PyLB%}>z!Hf1M+PhlIXBcBp~-(0h>W~LWF!_ z+La9iw1C!&|77~!8gJT(1kYnPt`+TYBD^EoO%qxqs826Vx-={gx-%{{-5+itGKp^Qsw+Ra{XtnjVzk@1gtzp;wV<^ z%N8ZSW*$*Op)P+SLOUKPGIe}fu)lpve8htkvp=*cwdw|nSO%@vWU14@EN#D1=Xngh zo}l>yg63hL&B`#(zts>Ka!k8H&y!ieVFXo%8cNda`fntG23DJl5 zG<2tu>mbbK*iEVVz4Fh0N|9mw@U4wi9NA9JD&C>)p>U`_4ojq&7Q1&$lV$svKMBw9 zHYHc&bKk&zJG(^jaE&j3WwYa{PeN#&4`KO$XbUu;L zc8j{+rI?a<>;^}N_@&v1c0m@XuI9;FY)Pox%{^H%&h*`54YWZD>As_tzG(DUcyFDO zvg8{aiaQ(>N*qZ_tjV3+?_~<$rQ?yRQ90mGnR}rMSZ{FjKH*UGSwAW_68d%f=YKz5 zsd7IF%3R{Pnqv9j|E>lfpM-`g92mSUNsE8{zpE+klxpAMh(&UnHrmYm@9HEai$^M~ zS};9S@qKHJ|J?gOH!IP>db3ugLd!?*{oi}v-pt@Fg%VZbWTWFCP>lP3_fz+m&Ba5e UG=}f^V1R$hiW&;#au#9#4-(O*yZ`_I literal 0 HcmV?d00001 diff --git a/packages/react-frontend/staticwebapp.config.json b/packages/react-frontend/staticwebapp.config.json new file mode 100644 index 0000000..cc56cae --- /dev/null +++ b/packages/react-frontend/staticwebapp.config.json @@ -0,0 +1,6 @@ +{ + "navigationFallback": { + "rewrite": "/index.html", + "exclude": ["/Images/*.{png,jpg,gif}"] + } +} \ No newline at end of file From cded0f5e11ff5169a9d1c851ffe070aba6c2ce35 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 00:29:31 -0700 Subject: [PATCH 53/64] PUSH --- .../react-frontend/src/Components/Navbar.jsx | 6 ++--- .../react-frontend/staticwebapp.config.json | 27 ++++++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/packages/react-frontend/src/Components/Navbar.jsx b/packages/react-frontend/src/Components/Navbar.jsx index 35aff73..2f2ff5d 100644 --- a/packages/react-frontend/src/Components/Navbar.jsx +++ b/packages/react-frontend/src/Components/Navbar.jsx @@ -48,12 +48,12 @@ function NavBar() {
          • - + - - + +
          • diff --git a/packages/react-frontend/staticwebapp.config.json b/packages/react-frontend/staticwebapp.config.json index cc56cae..e7cee54 100644 --- a/packages/react-frontend/staticwebapp.config.json +++ b/packages/react-frontend/staticwebapp.config.json @@ -1,6 +1,27 @@ { + "routes": [ + { + "route": "/images/*", + "serve": "/images" + }, + { + "route": "/*", + "serve": "/index.html", + "statusCode": 200 + } + ], "navigationFallback": { - "rewrite": "/index.html", - "exclude": ["/Images/*.{png,jpg,gif}"] + "rewrite": "/index.html", + "exclude": ["/images/*"] + }, + "headers": { + "source": "/images/*", + "headers": [ + { + "name": "Content-Type", + "value": "image/png" + } + ] } -} \ No newline at end of file + } + \ No newline at end of file From 9790e7561ff98402a3040a41e4ee7058405abf94 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 00:35:47 -0700 Subject: [PATCH 54/64] WESTWARLINESSES --- ...-static-web-apps-lively-ground-0cd068c1e.yml | 1 + .../react-frontend/src/Components/Navbar.jsx | 4 ---- packages/react-frontend/src/Images/yes.png | Bin 52422 -> 0 bytes 3 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 packages/react-frontend/src/Images/yes.png diff --git a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml index 9b087eb..7ba18d7 100644 --- a/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml +++ b/.github/workflows/azure-static-web-apps-lively-ground-0cd068c1e.yml @@ -20,6 +20,7 @@ jobs: submodules: true lfs: false - run: npm ci + - run: npm run build - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 diff --git a/packages/react-frontend/src/Components/Navbar.jsx b/packages/react-frontend/src/Components/Navbar.jsx index 2f2ff5d..feddaba 100644 --- a/packages/react-frontend/src/Components/Navbar.jsx +++ b/packages/react-frontend/src/Components/Navbar.jsx @@ -48,12 +48,8 @@ function NavBar() {
            • - - - -
            • diff --git a/packages/react-frontend/src/Images/yes.png b/packages/react-frontend/src/Images/yes.png deleted file mode 100644 index e2b14cb92f331d10af093b25fb0b6bf65e0dd023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52422 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 UG=}f^V1R$hiW&;#au#9#4-(O*yZ`_I From 1cedcc4337844c701329bd8616e773cfc2b44e40 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 00:39:12 -0700 Subject: [PATCH 55/64] WHY NON ADD --- packages/react-frontend/public/yes.png | Bin 0 -> 52422 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/react-frontend/public/yes.png diff --git a/packages/react-frontend/public/yes.png b/packages/react-frontend/public/yes.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b14cb92f331d10af093b25fb0b6bf65e0dd023 GIT binary patch literal 52422 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 UG=}f^V1R$hiW&;#au#9#4-(O*yZ`_I literal 0 HcmV?d00001 From 40e59491ba41cae119a7111689514e9f1495c96c Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 00:50:10 -0700 Subject: [PATCH 56/64] products not product --- packages/react-frontend/src/Components/Navbar.jsx | 1 - packages/react-frontend/src/Components/Table.jsx | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-frontend/src/Components/Navbar.jsx b/packages/react-frontend/src/Components/Navbar.jsx index feddaba..f86ee2b 100644 --- a/packages/react-frontend/src/Components/Navbar.jsx +++ b/packages/react-frontend/src/Components/Navbar.jsx @@ -49,7 +49,6 @@ function NavBar() {
            • -
            • diff --git a/packages/react-frontend/src/Components/Table.jsx b/packages/react-frontend/src/Components/Table.jsx index b1db279..46022cb 100644 --- a/packages/react-frontend/src/Components/Table.jsx +++ b/packages/react-frontend/src/Components/Table.jsx @@ -31,7 +31,7 @@ function TableBody(props) { - + From 36c0fd30e07b3b6cdc1d2db5fa7def41c3ca94b1 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 00:58:27 -0700 Subject: [PATCH 57/64] EASTWARD --- packages/react-frontend/src/Components/Table.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-frontend/src/Components/Table.jsx b/packages/react-frontend/src/Components/Table.jsx index 46022cb..9384e5c 100644 --- a/packages/react-frontend/src/Components/Table.jsx +++ b/packages/react-frontend/src/Components/Table.jsx @@ -31,7 +31,7 @@ function TableBody(props) { - + From 2366bc6e9e10e064733f0e4fdf9c83a7b954bd5f Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 01:01:49 -0700 Subject: [PATCH 58/64] NO LOADING --- packages/react-frontend/src/Views/ProductPage.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-frontend/src/Views/ProductPage.jsx b/packages/react-frontend/src/Views/ProductPage.jsx index 7a1bb82..a2256cb 100644 --- a/packages/react-frontend/src/Views/ProductPage.jsx +++ b/packages/react-frontend/src/Views/ProductPage.jsx @@ -107,7 +107,7 @@ function ProductPage() { return (
            • - Loading + Loading
            • Your Product: {product.product}

              From d4749f1c4828713c21301e014b3d10a40af3aec3 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Jun 2024 01:07:16 -0700 Subject: [PATCH 59/64] LEVELSTEIN --- packages/react-frontend/src/Components/Navbar.jsx | 13 +++++++++++-- packages/react-frontend/src/Views/ProductPage.jsx | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/react-frontend/src/Components/Navbar.jsx b/packages/react-frontend/src/Components/Navbar.jsx index f86ee2b..5db451f 100644 --- a/packages/react-frontend/src/Components/Navbar.jsx +++ b/packages/react-frontend/src/Components/Navbar.jsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useState, useEffect } from "react"; import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom"; import Inventory from "../Views/Inventory"; import LoginPage from "../Views/LoginPage"; @@ -42,13 +42,22 @@ function App() { } function NavBar() { + const [src, setSrc] = useState('yes.png'); + + useEffect(() => { + const img = new Image(); + img.onload = () => setSrc('../yes.png'); + img.onerror = () => setSrc('yes.png'); + img.src = '../yes.png'; + }, []); + return (