From 6193afbbb9bad03fa5fed90daf01b59ee783a792 Mon Sep 17 00:00:00 2001 From: Anseri Date: Sun, 7 Jul 2024 22:17:46 +0600 Subject: [PATCH 1/5] added pro-weather application --- pro-weather-client/.editorconfig | 16 + pro-weather-client/.gitignore | 42 + pro-weather-client/.vscode/extensions.json | 4 + pro-weather-client/.vscode/launch.json | 20 + pro-weather-client/.vscode/tasks.json | 42 + pro-weather-client/README.md | 29 + pro-weather-client/angular.json | 109 + pro-weather-client/package-lock.json | 12682 ++++++++++++++++ pro-weather-client/package.json | 43 + .../src/app/app-routing.module.ts | 25 + pro-weather-client/src/app/app.component.css | 0 pro-weather-client/src/app/app.component.html | 3 + .../src/app/app.component.spec.ts | 35 + pro-weather-client/src/app/app.component.ts | 41 + pro-weather-client/src/app/app.module.ts | 45 + .../favorite-location.component.css | 0 .../favorite-location.component.html | 45 + .../favorite-location.component.spec.ts | 23 + .../favorite-location.component.ts | 36 + .../app/favorite-locations.service.spec.ts | 16 + .../src/app/favorite-locations.service.ts | 40 + .../src/app/location-data.service.spec.ts | 16 + .../src/app/location-data.service.ts | 30 + .../location-detail.component.css | 0 .../location-detail.component.html | 101 + .../location-detail.component.spec.ts | 23 + .../location-detail.component.ts | 119 + .../location-list/location-list.component.css | 0 .../location-list.component.html | 60 + .../location-list.component.spec.ts | 23 + .../location-list/location-list.component.ts | 143 + .../location-search.component.css | 0 .../location-search.component.html | 14 + .../location-search.component.spec.ts | 23 + .../location-search.component.ts | 26 + .../src/app/login/login.component.css | 0 .../src/app/login/login.component.html | 20 + .../src/app/login/login.component.spec.ts | 23 + .../src/app/login/login.component.ts | 32 + .../src/app/menu/menu.component.css | 0 .../src/app/menu/menu.component.html | 25 + .../src/app/menu/menu.component.spec.ts | 23 + .../src/app/menu/menu.component.ts | 16 + .../src/app/model/favorite-location.model.ts | 16 + .../src/app/weather.service.spec.ts | 16 + pro-weather-client/src/app/weather.service.ts | 24 + pro-weather-client/src/assets/.gitkeep | 0 pro-weather-client/src/favicon.ico | Bin 0 -> 15086 bytes pro-weather-client/src/index.html | 13 + pro-weather-client/src/main.ts | 7 + pro-weather-client/src/styles.css | 1 + pro-weather-client/tsconfig.app.json | 14 + pro-weather-client/tsconfig.json | 32 + pro-weather-client/tsconfig.spec.json | 14 + pro-weather-server/.gitignore | 35 + .../.mvn/wrapper/maven-wrapper.properties | 19 + pro-weather-server/README.md | 45 + pro-weather-server/mvnw | 259 + pro-weather-server/mvnw.cmd | 149 + pro-weather-server/pom.xml | 90 + pro-weather-server/pro-weather/.gitignore | 35 + .../.mvn/wrapper/maven-wrapper.properties | 19 + pro-weather-server/pro-weather/README.md | 45 + .../pro-weather/docker-compose.yml | 9 + pro-weather-server/pro-weather/mvnw | 259 + pro-weather-server/pro-weather/mvnw.cmd | 149 + pro-weather-server/pro-weather/pom.xml | 86 + .../pro_weather/ProWeatherApplication.java | 14 + .../pro_weather/config/DomainConfig.java | 14 + .../pro_weather/config/JacksonConfig.java | 23 + .../pro_weather/rest/HomeResource.java | 15 + .../src/main/resources/application.properties | 15 + .../proit/weather/ProWeatherApplication.java | 14 + .../proit/weather/config/DomainConfig.java | 14 + .../proit/weather/config/SecurityConfig.java | 38 + ...avoriteLocationAlreadyExistsException.java | 7 + .../FavoriteLocationNotFoundException.java | 7 + .../proit/weather/model/FavoriteLocation.java | 31 + .../repo/FavoriteLocationRepository.java | 12 + .../rest/FavoriteLocationController.java | 56 + .../weather/rest/LocationController.java | 25 + .../proit/weather/rest/WeatherController.java | 25 + .../service/FavoriteLocationsService.java | 14 + .../weather/service/LocationService.java | 16 + .../proit/weather/service/WeatherService.java | 23 + .../impl/FavoriteLocationServiceImpl.java | 61 + .../src/main/resources/application.properties | 12 + 87 files changed, 15785 insertions(+) create mode 100644 pro-weather-client/.editorconfig create mode 100644 pro-weather-client/.gitignore create mode 100644 pro-weather-client/.vscode/extensions.json create mode 100644 pro-weather-client/.vscode/launch.json create mode 100644 pro-weather-client/.vscode/tasks.json create mode 100644 pro-weather-client/README.md create mode 100644 pro-weather-client/angular.json create mode 100644 pro-weather-client/package-lock.json create mode 100644 pro-weather-client/package.json create mode 100644 pro-weather-client/src/app/app-routing.module.ts create mode 100644 pro-weather-client/src/app/app.component.css create mode 100644 pro-weather-client/src/app/app.component.html create mode 100644 pro-weather-client/src/app/app.component.spec.ts create mode 100644 pro-weather-client/src/app/app.component.ts create mode 100644 pro-weather-client/src/app/app.module.ts create mode 100644 pro-weather-client/src/app/favorite-location/favorite-location.component.css create mode 100644 pro-weather-client/src/app/favorite-location/favorite-location.component.html create mode 100644 pro-weather-client/src/app/favorite-location/favorite-location.component.spec.ts create mode 100644 pro-weather-client/src/app/favorite-location/favorite-location.component.ts create mode 100644 pro-weather-client/src/app/favorite-locations.service.spec.ts create mode 100644 pro-weather-client/src/app/favorite-locations.service.ts create mode 100644 pro-weather-client/src/app/location-data.service.spec.ts create mode 100644 pro-weather-client/src/app/location-data.service.ts create mode 100644 pro-weather-client/src/app/location-detail/location-detail.component.css create mode 100644 pro-weather-client/src/app/location-detail/location-detail.component.html create mode 100644 pro-weather-client/src/app/location-detail/location-detail.component.spec.ts create mode 100644 pro-weather-client/src/app/location-detail/location-detail.component.ts create mode 100644 pro-weather-client/src/app/location-list/location-list.component.css create mode 100644 pro-weather-client/src/app/location-list/location-list.component.html create mode 100644 pro-weather-client/src/app/location-list/location-list.component.spec.ts create mode 100644 pro-weather-client/src/app/location-list/location-list.component.ts create mode 100644 pro-weather-client/src/app/location-search/location-search.component.css create mode 100644 pro-weather-client/src/app/location-search/location-search.component.html create mode 100644 pro-weather-client/src/app/location-search/location-search.component.spec.ts create mode 100644 pro-weather-client/src/app/location-search/location-search.component.ts create mode 100644 pro-weather-client/src/app/login/login.component.css create mode 100644 pro-weather-client/src/app/login/login.component.html create mode 100644 pro-weather-client/src/app/login/login.component.spec.ts create mode 100644 pro-weather-client/src/app/login/login.component.ts create mode 100644 pro-weather-client/src/app/menu/menu.component.css create mode 100644 pro-weather-client/src/app/menu/menu.component.html create mode 100644 pro-weather-client/src/app/menu/menu.component.spec.ts create mode 100644 pro-weather-client/src/app/menu/menu.component.ts create mode 100644 pro-weather-client/src/app/model/favorite-location.model.ts create mode 100644 pro-weather-client/src/app/weather.service.spec.ts create mode 100644 pro-weather-client/src/app/weather.service.ts create mode 100644 pro-weather-client/src/assets/.gitkeep create mode 100644 pro-weather-client/src/favicon.ico create mode 100644 pro-weather-client/src/index.html create mode 100644 pro-weather-client/src/main.ts create mode 100644 pro-weather-client/src/styles.css create mode 100644 pro-weather-client/tsconfig.app.json create mode 100644 pro-weather-client/tsconfig.json create mode 100644 pro-weather-client/tsconfig.spec.json create mode 100644 pro-weather-server/.gitignore create mode 100644 pro-weather-server/.mvn/wrapper/maven-wrapper.properties create mode 100644 pro-weather-server/README.md create mode 100644 pro-weather-server/mvnw create mode 100644 pro-weather-server/mvnw.cmd create mode 100644 pro-weather-server/pom.xml create mode 100644 pro-weather-server/pro-weather/.gitignore create mode 100644 pro-weather-server/pro-weather/.mvn/wrapper/maven-wrapper.properties create mode 100644 pro-weather-server/pro-weather/README.md create mode 100644 pro-weather-server/pro-weather/docker-compose.yml create mode 100644 pro-weather-server/pro-weather/mvnw create mode 100644 pro-weather-server/pro-weather/mvnw.cmd create mode 100644 pro-weather-server/pro-weather/pom.xml create mode 100644 pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/ProWeatherApplication.java create mode 100644 pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/config/DomainConfig.java create mode 100644 pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/config/JacksonConfig.java create mode 100644 pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/rest/HomeResource.java create mode 100644 pro-weather-server/pro-weather/src/main/resources/application.properties create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/ProWeatherApplication.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/config/DomainConfig.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/config/SecurityConfig.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/exception/FavoriteLocationAlreadyExistsException.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/exception/FavoriteLocationNotFoundException.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/model/FavoriteLocation.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/repo/FavoriteLocationRepository.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/FavoriteLocationController.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/LocationController.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/WeatherController.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/FavoriteLocationsService.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/LocationService.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/WeatherService.java create mode 100644 pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/impl/FavoriteLocationServiceImpl.java create mode 100644 pro-weather-server/src/main/resources/application.properties diff --git a/pro-weather-client/.editorconfig b/pro-weather-client/.editorconfig new file mode 100644 index 000000000..59d9a3a3e --- /dev/null +++ b/pro-weather-client/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/pro-weather-client/.gitignore b/pro-weather-client/.gitignore new file mode 100644 index 000000000..cc7b14135 --- /dev/null +++ b/pro-weather-client/.gitignore @@ -0,0 +1,42 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/pro-weather-client/.vscode/extensions.json b/pro-weather-client/.vscode/extensions.json new file mode 100644 index 000000000..77b374577 --- /dev/null +++ b/pro-weather-client/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/pro-weather-client/.vscode/launch.json b/pro-weather-client/.vscode/launch.json new file mode 100644 index 000000000..925af8370 --- /dev/null +++ b/pro-weather-client/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/pro-weather-client/.vscode/tasks.json b/pro-weather-client/.vscode/tasks.json new file mode 100644 index 000000000..a298b5bd8 --- /dev/null +++ b/pro-weather-client/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + } + ] +} diff --git a/pro-weather-client/README.md b/pro-weather-client/README.md new file mode 100644 index 000000000..104e6bce3 --- /dev/null +++ b/pro-weather-client/README.md @@ -0,0 +1,29 @@ +# Angular17Crud + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.8. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. + +test \ No newline at end of file diff --git a/pro-weather-client/angular.json b/pro-weather-client/angular.json new file mode 100644 index 000000000..0198217cd --- /dev/null +++ b/pro-weather-client/angular.json @@ -0,0 +1,109 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "pro-weather-client": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "standalone": false + }, + "@schematics/angular:directive": { + "standalone": false + }, + "@schematics/angular:pipe": { + "standalone": false + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/pro-weather-client", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.css", + "node_modules/bootstrap/dist/css/bootstrap.min.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "pro-weather-client:build:production" + }, + "development": { + "buildTarget": "pro-weather-client:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "pro-weather-client:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.css" + ], + "scripts": [] + } + } + } + } + }, + "cli": { + "analytics": "12493342-360c-406f-abac-2f7dd77fac6c" + } +} diff --git a/pro-weather-client/package-lock.json b/pro-weather-client/package-lock.json new file mode 100644 index 000000000..05259562e --- /dev/null +++ b/pro-weather-client/package-lock.json @@ -0,0 +1,12682 @@ +{ + "name": "pro-weather-app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pro-weather-app", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^17.3.0", + "@angular/cdk": "^17.0.0", + "@angular/common": "^17.3.11", + "@angular/compiler": "^17.3.0", + "@angular/core": "^17.3.0", + "@angular/forms": "^17.3.0", + "@angular/platform-browser": "^17.3.0", + "@angular/platform-browser-dynamic": "^17.3.0", + "@angular/router": "^17.3.0", + "bootstrap": "^5.3.3", + "chart.js": "^4.4.3", + "font-awesome": "^4.7.0", + "ng2-charts": "^5.0.4", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.3" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.3.8", + "@angular/cli": "^17.3.8", + "@angular/compiler-cli": "^17.3.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1703.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.8.tgz", + "integrity": "sha512-lKxwG4/QABXZvJpqeSIn/kAwnY6MM9HdHZUV+o5o3UiTi+vO8rZApG4CCaITH3Bxebm7Nam7Xbk8RuukC5rq6g==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.8.tgz", + "integrity": "sha512-ixsdXggWaFRP7Jvxd0AMukImnePuGflT9Yy7NJ9/y0cL/k//S/3RnkQv5i411KzN+7D4RIbNkRGGTYeqH24zlg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1703.8", + "@angular-devkit/build-webpack": "0.1703.8", + "@angular-devkit/core": "17.3.8", + "@babel/core": "7.24.0", + "@babel/generator": "7.23.6", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.6", + "@babel/plugin-transform-async-generator-functions": "7.23.9", + "@babel/plugin-transform-async-to-generator": "7.23.3", + "@babel/plugin-transform-runtime": "7.24.0", + "@babel/preset-env": "7.24.0", + "@babel/runtime": "7.24.0", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "17.3.8", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.18", + "babel-loader": "9.1.3", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.22", + "css-loader": "6.10.0", + "esbuild-wasm": "0.20.1", + "fast-glob": "3.3.2", + "http-proxy-middleware": "2.0.6", + "https-proxy-agent": "7.0.4", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.8", + "mini-css-extract-plugin": "2.8.1", + "mrmime": "2.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.1", + "piscina": "4.4.0", + "postcss": "8.4.35", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.71.1", + "sass-loader": "14.1.1", + "semver": "7.6.0", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.29.1", + "tree-kill": "1.2.2", + "tslib": "2.6.2", + "undici": "6.11.1", + "vite": "5.1.7", + "watchpack": "2.4.0", + "webpack": "5.90.3", + "webpack-dev-middleware": "6.1.2", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.20.1" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "@angular/localize": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/service-worker": "^17.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^17.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.2 <5.5" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1703.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.8.tgz", + "integrity": "sha512-9u6fl8VVOxcLOEMzrUeaybSvi9hSLSRucHnybneYrabsgreDo32tuy/4G8p6YAHQjpWEj9jvF9Um13ertdni5Q==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1703.8", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz", + "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz", + "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.11.tgz", + "integrity": "sha512-1y1Egag5jbdUSUWVK+KA39N9VFDrzq9ObjbAhrXFlXKa0npBRw5bprEEeLFQMETMP9Mpjbmj2PoASfl4vqj/Iw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.11" + } + }, + "node_modules/@angular/cdk": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.0.0.tgz", + "integrity": "sha512-8F1z0YhDjKWqB29+AUh33OKr2Ts5PVUUogVXEVmmPipPDtj82iIQLbtBnR6xpWvmsw9mS3oD76EwBoUhHQgi6g==", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.8.tgz", + "integrity": "sha512-X5ZOQ6ZTKVHjhIsfl32ZRqbs+FUoeHLbT7x4fh2Os/8ObDDwrUcCJPqxe2b2RB5E2d0vepYigknHeLE7gwzlNQ==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1703.8", + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "@schematics/angular": "17.3.8", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.2", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "17.0.6", + "resolve": "1.22.8", + "semver": "7.6.0", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.11.tgz", + "integrity": "sha512-WG+HQjUaQziYLGdbcv2aW+G73uroN5VF9yk4qWYcolW+VB8SV/DOAol8uFVgCF21cIOl5+wfJZvA4r5oG3dYaw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.11", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.11.tgz", + "integrity": "sha512-ingRoREDPkeZGSa13DlztSjZgGArNcmsAWjj+f+vQgQekTjkfQD/N+Bix/LSt5ZdbSjHMtrkDMyRPwbNyk5Keg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.11" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.11.tgz", + "integrity": "sha512-O44H/BKGw0TYq0aNTOKYZfQiTrfjbmcTl8y4UX6C9Xey8hXvijzZOAsjA0TGvvDJxeLR+sxaRF4i9Ihoatnd8g==", + "dev": true, + "dependencies": { + "@babel/core": "7.23.9", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/compiler": "17.3.11", + "typescript": ">=5.2 <5.5" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/core": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.11.tgz", + "integrity": "sha512-2wPZwXFei3kVxK2ylIH6CdGebrC4kvooFx7qoX+250OITAEFMODJGdh/e3x0DpFUjlRvQtIFQ+YpQlfC5JnL4g==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.0" + } + }, + "node_modules/@angular/forms": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.11.tgz", + "integrity": "sha512-719flo/1L64YOAxL3pzszTK+7bczVVOQDXT1khnjb48GVZdBUBwW2D+cFbqSW1VMuWWr2Amwy1lL4YM5S7qPJQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.11", + "@angular/core": "17.3.11", + "@angular/platform-browser": "17.3.11", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.11.tgz", + "integrity": "sha512-sWjMy8qKH6AOt5YV4OMoPhExCbGdRIPjNSwUrxCm8a8Zz5DamoX3Sib9yRk1etjBuRj+oJySSxISJim2OYXJQQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/animations": "17.3.11", + "@angular/common": "17.3.11", + "@angular/core": "17.3.11" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.11.tgz", + "integrity": "sha512-JPA0enJyJQ5H340WQ2wfXbCCHzjBiAljEDMr/Siw/CzSe0XI8aQYDqKMLUMtRyCdYhNCEYjnBWgXBi9Za9blZg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.11", + "@angular/compiler": "17.3.11", + "@angular/core": "17.3.11", + "@angular/platform-browser": "17.3.11" + } + }, + "node_modules/@angular/router": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.11.tgz", + "integrity": "sha512-A3aU6uHAeJfsfCw1dgNXHn2Kjw/UieRMnFwENkzz96YFCvFPCEZjy/mODuE3zHludMuqVsJhM/uUxWu8ATRTcA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.11", + "@angular/core": "17.3.11", + "@angular/platform-browser": "17.3.11", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@babel/code-frame": { + "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.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "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.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "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/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "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.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "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": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "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.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-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": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "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.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "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/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "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/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "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.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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "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.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.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "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.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "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/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.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/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "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.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.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.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.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.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.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "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.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.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" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.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.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "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": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-split-export-declaration": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "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.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "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.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "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.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "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.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "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.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "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.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "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.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "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.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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "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.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "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.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "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.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "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.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "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.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "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.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": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "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.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", + "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "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.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "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.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", + "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.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.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.24.0", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "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.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "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" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "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.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "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.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "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.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@ngtools/webpack": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.8.tgz", + "integrity": "sha512-CjSVVa/9fzMpEDQP01SC4colKCbZwj7vUq0H2bivp8jVsmd21x9Fu0gDBH0Y9NdfAIm4eGZvmiZKMII3vIOaYQ==", + "dev": true, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.5", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", + "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "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==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "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": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "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" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.8.tgz", + "integrity": "sha512-2g4OmSyE9YGq50Uj7fNI26P/TSAFJ7ZuirwTF2O7Xc4XRQ29/tYIIqhezpNlTb6rlYblcQuMcUZBrMfWJHcqJw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "jsonc-parser": "3.2.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", + "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001639", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz", + "integrity": "sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chart.js": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz", + "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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" + } + }, + "node_modules/cliui/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" + } + }, + "node_modules/cliui/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 + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", + "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" + } + }, + "node_modules/critters/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" + } + }, + "node_modules/critters/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" + } + }, + "node_modules/critters/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" + } + }, + "node_modules/critters/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 + }, + "node_modules/critters/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" + } + }, + "node_modules/critters/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/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.816", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", + "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/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, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "devOptional": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", + "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==", + "engines": { + "node": ">=0.10.3" + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", + "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", + "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", + "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/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" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/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" + } + }, + "node_modules/karma/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 + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", + "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/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" + } + }, + "node_modules/log-symbols/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" + } + }, + "node_modules/log-symbols/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" + } + }, + "node_modules/log-symbols/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 + }, + "node_modules/log-symbols/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" + } + }, + "node_modules/log-symbols/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/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/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/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/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, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/ng2-charts": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-5.0.4.tgz", + "integrity": "sha512-AnOZ2KSRw7QjiMMNtXz9tdnO+XrIKP/2MX1TfqEEo2fwFU5c8LFJIYqmkMPkIzAEm/U9y/1psA5TDNmxxjEdgA==", + "dependencies": { + "lodash-es": "^4.17.15", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": ">=16.0.0", + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/platform-browser": ">=16.0.0", + "chart.js": "^3.4.0 || ^4.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", + "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", + "dev": true, + "dependencies": { + "@npmcli/redact": "^1.1.0", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/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" + } + }, + "node_modules/ora/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" + } + }, + "node_modules/ora/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" + } + }, + "node_modules/ora/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 + }, + "node_modules/ora/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" + } + }, + "node_modules/ora/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/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/pacote": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "devOptional": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "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": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", + "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", + "dev": true, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.1.tgz", + "integrity": "sha512-8PcDiZ8DXUjLf687Ol4BR8Bpm2umR7vhoZOzNRt+uxD9GpBh/K+CAAALVIiYFknmvlmyg7hM7BSNUXPaCCqd0Q==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "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/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "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" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@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" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", + "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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/semver/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/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/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/terser": { + "version": "5.29.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", + "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "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/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", + "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz", + "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==", + "dev": true, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "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": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz", + "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.2.tgz", + "integrity": "sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.7.tgz", + "integrity": "sha512-0w6DGkX2BPuiK/NLf+4A8FLE43QwBfuqz2dVgi/40Rj1WmqUskCqj329O/pwrqFJLG5X8wkeG2RhIAro441xtg==" + } + } +} diff --git a/pro-weather-client/package.json b/pro-weather-client/package.json new file mode 100644 index 000000000..b684b1c29 --- /dev/null +++ b/pro-weather-client/package.json @@ -0,0 +1,43 @@ +{ + "name": "angular-17-crud", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^17.3.0", + "@angular/cdk": "^17.0.0", + "@angular/common": "^17.3.11", + "@angular/compiler": "^17.3.0", + "@angular/core": "^17.3.0", + "@angular/forms": "^17.3.0", + "@angular/platform-browser": "^17.3.0", + "@angular/platform-browser-dynamic": "^17.3.0", + "@angular/router": "^17.3.0", + "bootstrap": "^5.3.3", + "chart.js": "^4.4.3", + "font-awesome": "^4.7.0", + "ng2-charts": "^5.0.4", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.3" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.3.8", + "@angular/cli": "^17.3.8", + "@angular/compiler-cli": "^17.3.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.2" + } +} diff --git a/pro-weather-client/src/app/app-routing.module.ts b/pro-weather-client/src/app/app-routing.module.ts new file mode 100644 index 000000000..fff282fad --- /dev/null +++ b/pro-weather-client/src/app/app-routing.module.ts @@ -0,0 +1,25 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { LoginComponent } from './login/login.component'; +import { LocationSearchComponent } from './location-search/location-search.component'; +import { LocationDetailComponent } from './location-detail/location-detail.component'; +import { LocationListComponent } from './location-list/location-list.component'; + +import { FavoriteLocationComponent } from './favorite-location/favorite-location.component'; + +const routes: Routes = [ + { path: '', redirectTo: '/login', pathMatch: 'full' }, + { path: 'login', component: LoginComponent }, + { path: 'logout', component: LoginComponent }, + { path: 'locations', component: LocationListComponent }, + { path: 'location-detail/:latitude/:longitude/:isHour', component: LocationDetailComponent }, + { path: 'location-detail/:latitude/:longitude/:isHour/:day', component: LocationDetailComponent }, + { path: 'favorites', component: FavoriteLocationComponent } + +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/pro-weather-client/src/app/app.component.css b/pro-weather-client/src/app/app.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/pro-weather-client/src/app/app.component.html b/pro-weather-client/src/app/app.component.html new file mode 100644 index 000000000..61fc8516f --- /dev/null +++ b/pro-weather-client/src/app/app.component.html @@ -0,0 +1,3 @@ + + + diff --git a/pro-weather-client/src/app/app.component.spec.ts b/pro-weather-client/src/app/app.component.spec.ts new file mode 100644 index 000000000..8c9f8cd28 --- /dev/null +++ b/pro-weather-client/src/app/app.component.spec.ts @@ -0,0 +1,35 @@ +import { TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + RouterTestingModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'angular-17-crud'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('angular-17-crud'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, angular-17-crud'); + }); +}); diff --git a/pro-weather-client/src/app/app.component.ts b/pro-weather-client/src/app/app.component.ts new file mode 100644 index 000000000..5a29b6c14 --- /dev/null +++ b/pro-weather-client/src/app/app.component.ts @@ -0,0 +1,41 @@ +import { Component } from '@angular/core'; +import { LocationDataService } from './location-data.service'; +import { Router } from '@angular/router'; + + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'], +}) +export class AppComponent { + isLoggedIn: boolean = false; + locations: any[] = []; + dataMap:any; + filteredLocations: any[] = []; + currentPage: number = 1; + itemsPerPage: number = 10; + totalPages: number = 0; + + constructor(private locationService: LocationDataService,private router: Router) {} + + + onLoginSuccess(isLoggedIn: boolean) { + this.isLoggedIn = isLoggedIn; + if (this.isLoggedIn) { + this.router.navigate(['locations']); + + } + } + + + isLoggedInUser(): boolean { + return localStorage.getItem('isLoggedIn') === 'true'; + } + logout() { + console.log("logout call"); + localStorage.setItem('isLoggedIn', 'false'); // Store login state in localStorage + + } + +} diff --git a/pro-weather-client/src/app/app.module.ts b/pro-weather-client/src/app/app.module.ts new file mode 100644 index 000000000..f7874675c --- /dev/null +++ b/pro-weather-client/src/app/app.module.ts @@ -0,0 +1,45 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { HttpClientModule } from '@angular/common/http'; +import { AppRoutingModule } from './app-routing.module'; + +import { NgChartsModule } from 'ng2-charts'; + + + + +import { AppComponent } from './app.component'; +import { LoginComponent } from './login/login.component'; +import { LocationSearchComponent } from './location-search/location-search.component'; +import { LocationListComponent } from './location-list/location-list.component'; +import { LocationDetailComponent } from './location-detail/location-detail.component'; +import { MenuComponent } from './menu/menu.component'; +import { FavoriteLocationComponent } from './favorite-location/favorite-location.component'; + +@NgModule({ + declarations: [ + AppComponent, + LoginComponent, + LocationSearchComponent, + LocationListComponent, + LocationDetailComponent, + MenuComponent, + FavoriteLocationComponent + + //FavoriteLocationComponent, + //ForecastComponent + ], + imports: [ + BrowserModule, + FormsModule, + HttpClientModule, + AppRoutingModule , + NgChartsModule + ], + providers: [], + + + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/pro-weather-client/src/app/favorite-location/favorite-location.component.css b/pro-weather-client/src/app/favorite-location/favorite-location.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/pro-weather-client/src/app/favorite-location/favorite-location.component.html b/pro-weather-client/src/app/favorite-location/favorite-location.component.html new file mode 100644 index 000000000..0ad3f5980 --- /dev/null +++ b/pro-weather-client/src/app/favorite-location/favorite-location.component.html @@ -0,0 +1,45 @@ + +
+

Locations

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameUser IdLatitudeLongitudeElevationPopulationAdmin1Admin2Admin3Admin4Feature CodeActions
+ + {{ location.name }} + + {{ location.userId }}{{ location.latitude }}{{ location.longitude }}{{ location.elevation }}{{ location.population }}{{ location.admin1 }}{{ location.admin2 }}{{ location.admin3 }}{{ location.admin4 }}{{ location.featureCode }} + +
+
+ \ No newline at end of file diff --git a/pro-weather-client/src/app/favorite-location/favorite-location.component.spec.ts b/pro-weather-client/src/app/favorite-location/favorite-location.component.spec.ts new file mode 100644 index 000000000..09391ba28 --- /dev/null +++ b/pro-weather-client/src/app/favorite-location/favorite-location.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FavoriteLocationComponent } from './favorite-location.component'; + +describe('FavoriteLocationComponent', () => { + let component: FavoriteLocationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [FavoriteLocationComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(FavoriteLocationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/favorite-location/favorite-location.component.ts b/pro-weather-client/src/app/favorite-location/favorite-location.component.ts new file mode 100644 index 000000000..ac840cd31 --- /dev/null +++ b/pro-weather-client/src/app/favorite-location/favorite-location.component.ts @@ -0,0 +1,36 @@ + + +// location.component.ts +import { Component, OnInit } from '@angular/core'; +import { FavoriteLocationsService } from '../favorite-locations.service'; +import { FavoriteLocation } from '../model/favorite-location.model'; + +@Component({ + selector: 'app-location', + templateUrl: './favorite-location.component.html', + styleUrls: ['./favorite-location.component.css'] +}) +export class FavoriteLocationComponent implements OnInit { + favoritelocations: FavoriteLocation[] = []; + + constructor(private favoriteLocationsService: FavoriteLocationsService) { } + + ngOnInit(): void { + this.loadLocations(); + } + + loadLocations(): void { + this.favoriteLocationsService.getFavoriteLocations().subscribe( + data => this.favoritelocations = data, + error => console.error('Error fetching locations', error) + ); + } + + deleteLocation(id: number): void { + this.favoriteLocationsService.deleteFavoriteLocation(id).subscribe( + () => this.loadLocations(), + error => console.error('Error deleting location', error) + ); + } +} + diff --git a/pro-weather-client/src/app/favorite-locations.service.spec.ts b/pro-weather-client/src/app/favorite-locations.service.spec.ts new file mode 100644 index 000000000..e84e43f73 --- /dev/null +++ b/pro-weather-client/src/app/favorite-locations.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { FavoriteLocationsService } from './favorite-locations.service'; + +describe('FavoriteLocationsService', () => { + let service: FavoriteLocationsService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(FavoriteLocationsService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/favorite-locations.service.ts b/pro-weather-client/src/app/favorite-locations.service.ts new file mode 100644 index 000000000..a812fd86c --- /dev/null +++ b/pro-weather-client/src/app/favorite-locations.service.ts @@ -0,0 +1,40 @@ + +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { FavoriteLocation } from './model/favorite-location.model'; + +@Injectable({ + providedIn: 'root' +}) +export class FavoriteLocationsService { + private apiUrl = 'http://localhost:8080/api/favlocations'; + + private headers = new HttpHeaders({ + 'Content-Type': 'application/json', + 'Authorization': 'Basic ' + btoa('user:user@123') // Replace with your actual credentials + }); + + constructor(private http: HttpClient) { } + + getFavoriteLocations(): Observable { + return this.http.get(this.apiUrl, { headers: this.headers }); + } + + getFavoriteLocationById(id: number): Observable { + return this.http.get(`${this.apiUrl}/${id}`, { headers: this.headers }); + } + + creaFavoriteteLocation(location: FavoriteLocation): Observable { + console.log(location); + return this.http.post(this.apiUrl, location, { headers: this.headers }); + } + + updateFavoriteLocation(id: number, location: FavoriteLocation): Observable { + return this.http.put(`${this.apiUrl}/${id}`, location, { headers: this.headers }); + } + + deleteFavoriteLocation(id: number): Observable { + return this.http.delete(`${this.apiUrl}/${id}`, { headers: this.headers }); + } +} diff --git a/pro-weather-client/src/app/location-data.service.spec.ts b/pro-weather-client/src/app/location-data.service.spec.ts new file mode 100644 index 000000000..2cd8a3604 --- /dev/null +++ b/pro-weather-client/src/app/location-data.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { LocationDataService } from './location-data.service'; + +describe('LocationDataService', () => { + let service: LocationDataService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(LocationDataService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/location-data.service.ts b/pro-weather-client/src/app/location-data.service.ts new file mode 100644 index 000000000..75a1edd57 --- /dev/null +++ b/pro-weather-client/src/app/location-data.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { FavoriteLocation } from './model/favorite-location.model'; + +@Injectable({ + providedIn: 'root' +}) +export class LocationDataService { + private apiUrlLoc = 'http://localhost:8080/api/locations'; + private apiUrl = 'http://localhost:8080/api/'; + + private headers = new HttpHeaders({ + 'Content-Type': 'application/json', + 'Authorization': 'Basic ' + btoa('user:user@123') // Replace with your actual credentials + }); + + constructor(private http: HttpClient) { } + + // Example of making a GET request with headers to fetch locations + getLocations(cityName: string): Observable { + const url = `${this.apiUrl}locations?cityName=${cityName}`; + return this.http.get(url, { headers: this.headers }); + } + getLocationDetails(latitude: string, longitude: string, isHour: boolean, day: string): Observable { + const url = `${this.apiUrl}weather?latitude=${latitude}&longitude=${longitude}&isHour=${isHour}&day=${day}`; + return this.http.get(url, { headers: this.headers }); + } + +} diff --git a/pro-weather-client/src/app/location-detail/location-detail.component.css b/pro-weather-client/src/app/location-detail/location-detail.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/pro-weather-client/src/app/location-detail/location-detail.component.html b/pro-weather-client/src/app/location-detail/location-detail.component.html new file mode 100644 index 000000000..5b2d68e8a --- /dev/null +++ b/pro-weather-client/src/app/location-detail/location-detail.component.html @@ -0,0 +1,101 @@ +
+

Location Details

+
+
Latitude: {{ locationDetails.latitude }}
+
Longitude: {{ locationDetails.longitude }}
+
Elevation: {{ locationDetails.elevation }} meters
+
Timezone: {{ locationDetails.timezone }}
+
+ +

Weather Forecast

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
DateMax TempMin TempSunriseSunsetRainWind Speed
+ + + {{ day }} + + {{ locationDetails.daily.temperature_2m_max[i] }}°C{{ locationDetails.daily.temperature_2m_min[i] }}°C{{ locationDetails.daily.sunrise[i] }}{{ locationDetails.daily.sunset[i] }}{{ locationDetails.daily.rain_sum[i] }} mm{{ locationDetails.daily.wind_speed_10m_max[i] }} km/h
+
+
+ +
+ + +
+
+
+ +
+

Location Details By Hour

+
+
Latitude: {{ locationDetailsHour.latitude }}
+
Longitude: {{ locationDetailsHour.longitude }}
+
Elevation: {{ locationDetailsHour.elevation }} meters
+
Timezone: {{ locationDetailsHour.timezone }}
+
Timezone Abbreviation: {{ locationDetailsHour.timezone_abbreviation }}
+
+ +

Hourly Weather Forecast

+
+
+
+ + + + + + + + + + + + + + + + + +
TimeTemperature (2m)Rain (mm)Wind Speed (10m)
{{ time }}{{ locationDetailsHour.hourly.temperature_2m[i] }} {{ locationDetailsHour.hourly_units.temperature_2m }}{{ locationDetailsHour.hourly.rain[i] }} {{ locationDetailsHour.hourly_units.rain }}{{ locationDetailsHour.hourly.wind_speed_10m[i] }} {{ locationDetailsHour.hourly_units.wind_speed_10m }}
+
+
+ +
+ + +
+
+
diff --git a/pro-weather-client/src/app/location-detail/location-detail.component.spec.ts b/pro-weather-client/src/app/location-detail/location-detail.component.spec.ts new file mode 100644 index 000000000..cac281ae4 --- /dev/null +++ b/pro-weather-client/src/app/location-detail/location-detail.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationDetailComponent } from './location-detail.component'; + +describe('LocationDetailComponent', () => { + let component: LocationDetailComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LocationDetailComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LocationDetailComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/location-detail/location-detail.component.ts b/pro-weather-client/src/app/location-detail/location-detail.component.ts new file mode 100644 index 000000000..31013c5ac --- /dev/null +++ b/pro-weather-client/src/app/location-detail/location-detail.component.ts @@ -0,0 +1,119 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import { LocationDataService } from '../location-data.service'; +import { NgChartsModule } from 'ng2-charts' +import { ChartConfiguration, ChartOptions, ChartType } from 'chart.js'; + + + +@Component({ + selector: 'app-location-detail', + templateUrl: './location-detail.component.html', + styleUrls: ['./location-detail.component.css'], + +}) +export class LocationDetailComponent implements OnInit { + + + latitude: string | null = null; + longitude: string | null = null; + day: string | null = null; + isHour: boolean = false; + locationDetails: any = null; + locationDetailsHour: any = null; + + + // Chart data and options + public lineChartData: ChartConfiguration['data']['datasets'] = []; + public lineChartOptions: ChartOptions = { + responsive: true, + }; + public lineChartPlugins = []; + public lineChartLabels: string[] = []; + public lineChartType: ChartType = 'line'; + + constructor(private route: ActivatedRoute,private router: Router, + private locationService: LocationDataService + ) {} + + ngOnInit(): void { + this.latitude = this.route.snapshot.paramMap.get('latitude'); + this.longitude = this.route.snapshot.paramMap.get('longitude'); + this.day = this.route.snapshot.paramMap.get('day'); + const isHourParam = this.route.snapshot.paramMap.get('isHour'); + + if (isHourParam) { + this.isHour = isHourParam.toLowerCase() === 'true'; + } + + if (this.latitude && this.longitude ) { + this.fetchLocationDetails(this.latitude, this.longitude, this.isHour, this.day!); + } + } + + fetchLocationDetails(latitude: string, longitude: string, isHour: boolean, day: string): void { + this.locationService.getLocationDetails(latitude, longitude, isHour, day).subscribe( + (data: any) => { + if(isHour) { + this.locationDetailsHour = data; + this.initializeChartDataHour(); + this.locationDetails = null; + } else { + this.locationDetails = data; + this.initializeChartDataDay(); + this.locationDetailsHour = null; + } + + }, + (error: any) => { + console.error('Error fetching location details:', error); + } + ); + } + + + + +initializeChartDataHour(): void { + const temperatures = this.locationDetailsHour.hourly.temperature_2m; + const times = this.locationDetailsHour.hourly.time; + const rains = this.locationDetailsHour.hourly.rain + const winds = this.locationDetailsHour.hourly.wind_speed_10m + this.lineChartData = [ + { data: temperatures, label: 'Temperature (°C)' }, + { data: rains, label: 'Rain (mm)' }, + { data: winds, label: 'Wind Speed (10m)' } + ]; + + this.lineChartLabels = times.map((time: string) => { + const date = new Date(time); + return `${date.getHours()}:00`; + }); + //this.lineChartLabels = times; +} + +initializeChartDataDay(): void { + const maxTemps = this.locationDetails.daily.temperature_2m_max; + const minTemps = this.locationDetails.daily.temperature_2m_min; + const sunrises = this.locationDetails.daily.sunrise; + const sunsets = this.locationDetails.daily.sunset; + const rain_sums = this.locationDetails.daily.rain_sum; + const wind_speed_10m_max = this.locationDetails.daily.wind_speed_10m_max; + + const times = this.locationDetails.daily.time; + + this.lineChartData = [ + { data: maxTemps, label: 'Max Temperature (°C)' }, + { data: minTemps, label: 'Min Temperature (°C)' }, + { data: sunrises, label: 'Sunrise' }, + { data: sunsets, label: 'Sunset' }, + { data: rain_sums, label: 'Rain (mm)' }, + { data: minTemps, label: 'Wind Speed (km/h)' } + ]; + + this.lineChartLabels = times; +} +} + + + diff --git a/pro-weather-client/src/app/location-list/location-list.component.css b/pro-weather-client/src/app/location-list/location-list.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/pro-weather-client/src/app/location-list/location-list.component.html b/pro-weather-client/src/app/location-list/location-list.component.html new file mode 100644 index 000000000..2bf226bcf --- /dev/null +++ b/pro-weather-client/src/app/location-list/location-list.component.html @@ -0,0 +1,60 @@ + + +
+

Locations

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLatitudeLongitudeElevationPopulationAdmin1Admin2Admin3Admin4Action
+ + + {{ location.name }} + + {{ location.latitude }}{{ location.longitude }}{{ location.elevation }}{{ location.population }}{{ location.admin1 }}{{ location.admin2 }}{{ location.admin3 }}{{ location.admin4 }} + + +
+
+
+ + +
diff --git a/pro-weather-client/src/app/location-list/location-list.component.spec.ts b/pro-weather-client/src/app/location-list/location-list.component.spec.ts new file mode 100644 index 000000000..89bb9440f --- /dev/null +++ b/pro-weather-client/src/app/location-list/location-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationListComponent } from './location-list.component'; + +describe('LocationListComponent', () => { + let component: LocationListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LocationListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LocationListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/location-list/location-list.component.ts b/pro-weather-client/src/app/location-list/location-list.component.ts new file mode 100644 index 000000000..bce15a99b --- /dev/null +++ b/pro-weather-client/src/app/location-list/location-list.component.ts @@ -0,0 +1,143 @@ +import { Component, Input } from '@angular/core'; +import { Router } from '@angular/router'; +import { LocationDataService } from '../location-data.service'; +import { FavoriteLocationsService } from '../favorite-locations.service'; + +@Component({ + selector: 'app-location-list', + templateUrl: './location-list.component.html', + styleUrls: ['./location-list.component.css'] +}) +export class LocationListComponent { + isLoggedIn: boolean = false; + locations: any[] = []; + dataMap:any; + filteredLocations: any[] = []; + currentPage: number = 1; + itemsPerPage: number = 10; + totalPages: number = 0; + + // @Input() locations: any[] = []; + // @Input() isLoggedIn: boolean = true; + // currentPage: number = 1; + // itemsPerPage: number = 10; + // @Input() totalPages: number = 10; + + constructor(private router: Router, + private locationService: LocationDataService, private favoriteLocationService: FavoriteLocationsService + ) {} + + get paginatedLocations(): any[] { + const startIndex = (this.currentPage - 1) * this.itemsPerPage; + return this.filteredLocations.slice(startIndex, startIndex + this.itemsPerPage); + } + + + + + calculateTotalPages() { + const totalItems = this.filteredLocations.length; + this.totalPages = Math.ceil(totalItems / this.itemsPerPage); + } + + ngOnInit() { + // Check if user is already logged in (example: check localStorage or token) + this.isLoggedIn = this.isLoggedInUser(); // Implement this method as per your authentication mechanism + if (this.isLoggedIn) { + this.locationService.getLocations('dhaka').subscribe( + data => { + this.dataMap = data; + this.filteredLocations = this.dataMap.results; + this.calculateTotalPages(); + }); + } + } + + onSearch(query: string) { + if (query.trim() === '') { + this.filteredLocations = [...this.locations]; // Reset to all locations if search query is empty + } else { + this.locationService.getLocations(query).subscribe( + data => { + this.dataMap = data; + this.filteredLocations = this.dataMap.results; + this.calculateTotalPages(); + }, + error => { + console.error('Error fetching locations:', error); + } + ); + } + } + +// Function to handle page change +onPageChange(pageNumber: number) { + this.currentPage = pageNumber; +} + +onNext() { + if (this.currentPage < this.totalPages) { + this.currentPage++; + } +} + +onPrev() { + if (this.currentPage > 1) { + this.currentPage--; + } +} + +onLast() { + this.currentPage = this.totalPages; +} + +getPaginationNumbers(): number[] { + const maxPagesToShow = 5; + let pages: number[] = []; + if (this.totalPages <= maxPagesToShow) { + pages = Array.from({ length: this.totalPages }, (_, i) => i + 1); + } else { + const start = Math.max(1, this.currentPage - Math.floor(maxPagesToShow / 2)); + const end = Math.min(this.totalPages, start + maxPagesToShow - 1); + + pages = Array.from({ length: end - start + 1 }, (_, i) => start + i); + + if (start > 1) { + pages.unshift(1); + if (start > 2) { + pages.splice(1, 0, -1); // -1 indicates "..." + } + } + if (end < this.totalPages) { + pages.push(this.totalPages); + if (end < this.totalPages - 1) { + pages.splice(pages.length - 1, 0, -1); // -1 indicates "..." + } + } + } + return pages; +} + +// navigateTab(path:string) { + +// this.router.navigate([path], { +// relativeTo: this.activatedRoute // to make the navigation happen relative to the current route! +// }) +// } + + +isLoggedInUser(): boolean { + // Example: Check localStorage or token for authentication state + return this.isLoggedIn =localStorage.getItem('isLoggedIn') === 'true'; +} + + +toggleFavorite(favoritelocation: any): void { + + this.favoriteLocationService.creaFavoriteteLocation(favoritelocation).subscribe( + data => { + console.log("added fav===="+favoritelocation); + } + ) +} +} diff --git a/pro-weather-client/src/app/location-search/location-search.component.css b/pro-weather-client/src/app/location-search/location-search.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/pro-weather-client/src/app/location-search/location-search.component.html b/pro-weather-client/src/app/location-search/location-search.component.html new file mode 100644 index 000000000..2efe21f9b --- /dev/null +++ b/pro-weather-client/src/app/location-search/location-search.component.html @@ -0,0 +1,14 @@ +
+

Search Locations

+
+
+ +
+ +
+
+ Please enter a location to search. +
+
+
+
\ No newline at end of file diff --git a/pro-weather-client/src/app/location-search/location-search.component.spec.ts b/pro-weather-client/src/app/location-search/location-search.component.spec.ts new file mode 100644 index 000000000..a8567f69e --- /dev/null +++ b/pro-weather-client/src/app/location-search/location-search.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationSearchComponent } from './location-search.component'; + +describe('LocationSearchComponent', () => { + let component: LocationSearchComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LocationSearchComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LocationSearchComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/location-search/location-search.component.ts b/pro-weather-client/src/app/location-search/location-search.component.ts new file mode 100644 index 000000000..4fc5bf32d --- /dev/null +++ b/pro-weather-client/src/app/location-search/location-search.component.ts @@ -0,0 +1,26 @@ +import { Component , Output, EventEmitter} from '@angular/core'; + +@Component({ + selector: 'app-location-search', + templateUrl: './location-search.component.html', + styleUrls: ['./location-search.component.css'] +}) +export class LocationSearchComponent { + searchQuery: string = ''; + @Output() search = new EventEmitter(); + constructor() {} + + onSearch() { + if (!this.searchQuery) { + // Add your validation logic here if needed + return; + } + + + + //@Input() isLoggedIn: boolean = true; + console.log('Search query:', this.searchQuery); + // Handle the search logic here + } +} + diff --git a/pro-weather-client/src/app/login/login.component.css b/pro-weather-client/src/app/login/login.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/pro-weather-client/src/app/login/login.component.html b/pro-weather-client/src/app/login/login.component.html new file mode 100644 index 000000000..d9444f39f --- /dev/null +++ b/pro-weather-client/src/app/login/login.component.html @@ -0,0 +1,20 @@ +
+

Login

+
+
+ + +
+ Please enter your username. +
+
+
+ + +
+ Please enter your password. +
+
+ +
+
diff --git a/pro-weather-client/src/app/login/login.component.spec.ts b/pro-weather-client/src/app/login/login.component.spec.ts new file mode 100644 index 000000000..f1c475b7e --- /dev/null +++ b/pro-weather-client/src/app/login/login.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginComponent } from './login.component'; + +describe('LoginComponent', () => { + let component: LoginComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LoginComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/login/login.component.ts b/pro-weather-client/src/app/login/login.component.ts new file mode 100644 index 000000000..565caf810 --- /dev/null +++ b/pro-weather-client/src/app/login/login.component.ts @@ -0,0 +1,32 @@ +import { Component, Output, EventEmitter } from '@angular/core'; +import { Router } from '@angular/router'; + +@Component({ + + selector: 'app-login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.css'] +}) +export class LoginComponent { + username: string = ''; + password: string = ''; + + @Output() loginSuccess = new EventEmitter(); + constructor(private router: Router + ) {} + + ngOnInit(): void { + localStorage.setItem('isLoggedIn', 'false'); // Store login state in localStorage + } + + login() { + if (this.username === 'user' && this.password === 'user@123') { + localStorage.setItem('isLoggedIn', 'true'); // Store login state in localStorage + this.loginSuccess.emit(true); + this.router.navigate(['locations']); + + } else { + alert('Invalid username or password==='+this.username ); + } + } +} diff --git a/pro-weather-client/src/app/menu/menu.component.css b/pro-weather-client/src/app/menu/menu.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/pro-weather-client/src/app/menu/menu.component.html b/pro-weather-client/src/app/menu/menu.component.html new file mode 100644 index 000000000..6288cc745 --- /dev/null +++ b/pro-weather-client/src/app/menu/menu.component.html @@ -0,0 +1,25 @@ + +
+

WeatherApp

+
\ No newline at end of file diff --git a/pro-weather-client/src/app/menu/menu.component.spec.ts b/pro-weather-client/src/app/menu/menu.component.spec.ts new file mode 100644 index 000000000..2f7de1928 --- /dev/null +++ b/pro-weather-client/src/app/menu/menu.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MenuComponent } from './menu.component'; + +describe('MenuComponent', () => { + let component: MenuComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MenuComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(MenuComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/menu/menu.component.ts b/pro-weather-client/src/app/menu/menu.component.ts new file mode 100644 index 000000000..ff26f2316 --- /dev/null +++ b/pro-weather-client/src/app/menu/menu.component.ts @@ -0,0 +1,16 @@ +// menu.component.ts +import { Component } from '@angular/core'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-menu', + templateUrl: './menu.component.html' +}) +export class MenuComponent { + constructor( private router: Router) {} + + get isLoggedIn(): boolean { + return localStorage.getItem('isLoggedIn') === 'true'; + } + +} diff --git a/pro-weather-client/src/app/model/favorite-location.model.ts b/pro-weather-client/src/app/model/favorite-location.model.ts new file mode 100644 index 000000000..ee349d53f --- /dev/null +++ b/pro-weather-client/src/app/model/favorite-location.model.ts @@ -0,0 +1,16 @@ +// location.model.ts +export interface FavoriteLocation { + id?: number; + name: string; + userId: string; + latitude: number; + longitude: number; + elevation: number; + population: number; + admin1: string; + admin2: string; + admin3: string; + admin4: string; + featureCode: string; + } + \ No newline at end of file diff --git a/pro-weather-client/src/app/weather.service.spec.ts b/pro-weather-client/src/app/weather.service.spec.ts new file mode 100644 index 000000000..7cb89412f --- /dev/null +++ b/pro-weather-client/src/app/weather.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { WeatherService } from './weather.service'; + +describe('WeatherService', () => { + let service: WeatherService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(WeatherService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro-weather-client/src/app/weather.service.ts b/pro-weather-client/src/app/weather.service.ts new file mode 100644 index 000000000..599bbaeff --- /dev/null +++ b/pro-weather-client/src/app/weather.service.ts @@ -0,0 +1,24 @@ + +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { FavoriteLocation } from './model/favorite-location.model'; + +@Injectable({ + providedIn: 'root' +}) +export class WeatherService { + private apiUrl = 'http://localhost:8080/api/weather'; + + private headers = new HttpHeaders({ + 'Content-Type': 'application/json', + 'Authorization': 'Basic ' + btoa('user:user@123') // Replace with your actual credentials + }); + + constructor(private http: HttpClient) { } + + getLocationDetails(latitude: string, longitude: string, isHour: boolean, day: string): Observable { + const url = `${this.apiUrl}weather?latitude=${latitude}&longitude=${longitude}&isHour=${isHour}&day=${day}`; + return this.http.get(url, { headers: this.headers }); + } +} diff --git a/pro-weather-client/src/assets/.gitkeep b/pro-weather-client/src/assets/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/pro-weather-client/src/favicon.ico b/pro-weather-client/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/pro-weather-client/src/index.html b/pro-weather-client/src/index.html new file mode 100644 index 000000000..f2881e820 --- /dev/null +++ b/pro-weather-client/src/index.html @@ -0,0 +1,13 @@ + + + + + Weather App + + + + + + + + diff --git a/pro-weather-client/src/main.ts b/pro-weather-client/src/main.ts new file mode 100644 index 000000000..c58dc05cb --- /dev/null +++ b/pro-weather-client/src/main.ts @@ -0,0 +1,7 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/pro-weather-client/src/styles.css b/pro-weather-client/src/styles.css new file mode 100644 index 000000000..90d4ee007 --- /dev/null +++ b/pro-weather-client/src/styles.css @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/pro-weather-client/tsconfig.app.json b/pro-weather-client/tsconfig.app.json new file mode 100644 index 000000000..374cc9d29 --- /dev/null +++ b/pro-weather-client/tsconfig.app.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/pro-weather-client/tsconfig.json b/pro-weather-client/tsconfig.json new file mode 100644 index 000000000..eb49734a4 --- /dev/null +++ b/pro-weather-client/tsconfig.json @@ -0,0 +1,32 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/pro-weather-client/tsconfig.spec.json b/pro-weather-client/tsconfig.spec.json new file mode 100644 index 000000000..be7e9da76 --- /dev/null +++ b/pro-weather-client/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/pro-weather-server/.gitignore b/pro-weather-server/.gitignore new file mode 100644 index 000000000..107630460 --- /dev/null +++ b/pro-weather-server/.gitignore @@ -0,0 +1,35 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +application-local.properties +*.log + +## IntelliJ IDEA +.idea +*.iws +*.iml +*.ipr + +## VS Code +.vscode/ + +## STS +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +## NetBeans +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ diff --git a/pro-weather-server/.mvn/wrapper/maven-wrapper.properties b/pro-weather-server/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..8f96f52c6 --- /dev/null +++ b/pro-weather-server/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip diff --git a/pro-weather-server/README.md b/pro-weather-server/README.md new file mode 100644 index 000000000..47abd18cc --- /dev/null +++ b/pro-weather-server/README.md @@ -0,0 +1,45 @@ +# ProWeather + +This app was created with Bootify.io - tips on working with the code [can be found here](https://bootify.io/next-steps/). +Feel free to contact us for further questions. + +## Development + +When starting the application `docker compose up` is called and the app will connect to the contained services. +[Docker](https://www.docker.com/get-started/) must be available on the current system. + +During development it is recommended to use the profile `local`. In IntelliJ `-Dspring.profiles.active=local` can be +added in the VM options of the Run Configuration after enabling this property in "Modify options". Create your own +`application-local.properties` file to override settings for development. + +Lombok must be supported by your IDE. For IntelliJ install the Lombok plugin and enable annotation processing - +[learn more](https://bootify.io/next-steps/spring-boot-with-lombok.html). + +After starting the application it is accessible under `localhost:8080`. + +## Build + +The application can be built using the following command: + +``` +mvnw clean package +``` + +Start your application with the following command - here with the profile `production`: + +``` +java -Dspring.profiles.active=production -jar ./target/pro-weather-0.0.1-SNAPSHOT.jar +``` + +If required, a Docker image can be created with the Spring Boot plugin. Add `SPRING_PROFILES_ACTIVE=production` as +environment variable when running the container. + +``` +mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=com.proit.weather/pro-weather +``` + +## Further readings + +* [Maven docs](https://maven.apache.org/guides/index.html) +* [Spring Boot reference](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/) +* [Spring Data JPA reference](https://docs.spring.io/spring-data/jpa/reference/jpa.html) diff --git a/pro-weather-server/mvnw b/pro-weather-server/mvnw new file mode 100644 index 000000000..d7c358e5a --- /dev/null +++ b/pro-weather-server/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/pro-weather-server/mvnw.cmd b/pro-weather-server/mvnw.cmd new file mode 100644 index 000000000..6f779cff2 --- /dev/null +++ b/pro-weather-server/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pro-weather-server/pom.xml b/pro-weather-server/pom.xml new file mode 100644 index 000000000..dbdaba1fa --- /dev/null +++ b/pro-weather-server/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.1 + + + com.proit.weather + pro-weather + 0.0.1-SNAPSHOT + pro-weather + + + 17 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + + + + io.jsonwebtoken + jjwt + 0.9.1 + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.postgresql + postgresql + runtime + + + io.github.wimdeblauwe + error-handling-spring-boot-starter + 4.3.0 + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.5.0 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + local + + + + org.projectlombok + lombok + + + + + + + diff --git a/pro-weather-server/pro-weather/.gitignore b/pro-weather-server/pro-weather/.gitignore new file mode 100644 index 000000000..107630460 --- /dev/null +++ b/pro-weather-server/pro-weather/.gitignore @@ -0,0 +1,35 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +application-local.properties +*.log + +## IntelliJ IDEA +.idea +*.iws +*.iml +*.ipr + +## VS Code +.vscode/ + +## STS +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +## NetBeans +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ diff --git a/pro-weather-server/pro-weather/.mvn/wrapper/maven-wrapper.properties b/pro-weather-server/pro-weather/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..8f96f52c6 --- /dev/null +++ b/pro-weather-server/pro-weather/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip diff --git a/pro-weather-server/pro-weather/README.md b/pro-weather-server/pro-weather/README.md new file mode 100644 index 000000000..47abd18cc --- /dev/null +++ b/pro-weather-server/pro-weather/README.md @@ -0,0 +1,45 @@ +# ProWeather + +This app was created with Bootify.io - tips on working with the code [can be found here](https://bootify.io/next-steps/). +Feel free to contact us for further questions. + +## Development + +When starting the application `docker compose up` is called and the app will connect to the contained services. +[Docker](https://www.docker.com/get-started/) must be available on the current system. + +During development it is recommended to use the profile `local`. In IntelliJ `-Dspring.profiles.active=local` can be +added in the VM options of the Run Configuration after enabling this property in "Modify options". Create your own +`application-local.properties` file to override settings for development. + +Lombok must be supported by your IDE. For IntelliJ install the Lombok plugin and enable annotation processing - +[learn more](https://bootify.io/next-steps/spring-boot-with-lombok.html). + +After starting the application it is accessible under `localhost:8080`. + +## Build + +The application can be built using the following command: + +``` +mvnw clean package +``` + +Start your application with the following command - here with the profile `production`: + +``` +java -Dspring.profiles.active=production -jar ./target/pro-weather-0.0.1-SNAPSHOT.jar +``` + +If required, a Docker image can be created with the Spring Boot plugin. Add `SPRING_PROFILES_ACTIVE=production` as +environment variable when running the container. + +``` +mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=com.proit.weather/pro-weather +``` + +## Further readings + +* [Maven docs](https://maven.apache.org/guides/index.html) +* [Spring Boot reference](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/) +* [Spring Data JPA reference](https://docs.spring.io/spring-data/jpa/reference/jpa.html) diff --git a/pro-weather-server/pro-weather/docker-compose.yml b/pro-weather-server/pro-weather/docker-compose.yml new file mode 100644 index 000000000..216a4ef7f --- /dev/null +++ b/pro-weather-server/pro-weather/docker-compose.yml @@ -0,0 +1,9 @@ +services: + postgres: + image: postgres:16.3 + environment: + - POSTGRES_DB=pro-weather + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=P4ssword! + ports: + - 5433:5432 diff --git a/pro-weather-server/pro-weather/mvnw b/pro-weather-server/pro-weather/mvnw new file mode 100644 index 000000000..d7c358e5a --- /dev/null +++ b/pro-weather-server/pro-weather/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/pro-weather-server/pro-weather/mvnw.cmd b/pro-weather-server/pro-weather/mvnw.cmd new file mode 100644 index 000000000..6f779cff2 --- /dev/null +++ b/pro-weather-server/pro-weather/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pro-weather-server/pro-weather/pom.xml b/pro-weather-server/pro-weather/pom.xml new file mode 100644 index 000000000..b6ea9481f --- /dev/null +++ b/pro-weather-server/pro-weather/pom.xml @@ -0,0 +1,86 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.1 + + + com.proit.weather + pro-weather + 0.0.1-SNAPSHOT + pro-weather + + + 17 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.postgresql + postgresql + runtime + + + io.github.wimdeblauwe + error-handling-spring-boot-starter + 4.3.0 + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.5.0 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-docker-compose + runtime + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + local + + + + org.projectlombok + lombok + + + + + + + diff --git a/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/ProWeatherApplication.java b/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/ProWeatherApplication.java new file mode 100644 index 000000000..772286948 --- /dev/null +++ b/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/ProWeatherApplication.java @@ -0,0 +1,14 @@ +package com.proit.weather.pro_weather; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + + +@SpringBootApplication +public class ProWeatherApplication { + + public static void main(final String[] args) { + SpringApplication.run(ProWeatherApplication.class, args); + } + +} diff --git a/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/config/DomainConfig.java b/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/config/DomainConfig.java new file mode 100644 index 000000000..06ade4cfb --- /dev/null +++ b/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/config/DomainConfig.java @@ -0,0 +1,14 @@ +package com.proit.weather.pro_weather.config; + +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +@Configuration +@EntityScan("com.proit.weather.pro_weather.domain") +@EnableJpaRepositories("com.proit.weather.pro_weather.repos") +@EnableTransactionManagement +public class DomainConfig { +} diff --git a/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/config/JacksonConfig.java b/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/config/JacksonConfig.java new file mode 100644 index 000000000..1c5e854a9 --- /dev/null +++ b/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/config/JacksonConfig.java @@ -0,0 +1,23 @@ +package com.proit.weather.pro_weather.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.SerializationFeature; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration +public class JacksonConfig { + + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() { + return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder + .featuresToDisable( + DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, + DeserializationFeature.ACCEPT_FLOAT_AS_INT, + SerializationFeature.WRITE_DATES_AS_TIMESTAMPS + ); + } + +} diff --git a/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/rest/HomeResource.java b/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/rest/HomeResource.java new file mode 100644 index 000000000..d20358b14 --- /dev/null +++ b/pro-weather-server/pro-weather/src/main/java/com/proit/weather/pro_weather/rest/HomeResource.java @@ -0,0 +1,15 @@ +package com.proit.weather.pro_weather.rest; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +public class HomeResource { + + @GetMapping("/") + public String index() { + return "\"Hello World!\""; + } + +} diff --git a/pro-weather-server/pro-weather/src/main/resources/application.properties b/pro-weather-server/pro-weather/src/main/resources/application.properties new file mode 100644 index 000000000..d3a6cf02f --- /dev/null +++ b/pro-weather-server/pro-weather/src/main/resources/application.properties @@ -0,0 +1,15 @@ +spring.datasource.url=${JDBC_DATABASE_URL\:jdbc\:postgresql\://localhost\:5432/pro-weather} +spring.datasource.username=${JDBC_DATABASE_USERNAME\:postgres} +spring.datasource.password=${JDBC_DATABASE_PASSWORD\:<>} +spring.datasource.hikari.connection-timeout=30000 +spring.datasource.hikari.maximum-pool-size=10 +spring.jpa.hibernate.ddl-auto=update +spring.jpa.open-in-view=false +spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true +spring.jpa.properties.hibernate.id.new_generator_mappings=true +error.handling.http-status-in-json-response=true +error.handling.exception-logging=NO_LOGGING +error.handling.full-stacktrace-http-statuses=5xx +error.handling.log-levels.5xx=ERROR +spring.docker.compose.lifecycle-management=start-only +springdoc.pathsToMatch=/ diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/ProWeatherApplication.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/ProWeatherApplication.java new file mode 100644 index 000000000..a00c2144e --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/ProWeatherApplication.java @@ -0,0 +1,14 @@ +package com.proit.weather.proit.weather; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + + +@SpringBootApplication +public class ProWeatherApplication { + + public static void main(final String[] args) { + SpringApplication.run(ProWeatherApplication.class, args); + } + +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/config/DomainConfig.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/config/DomainConfig.java new file mode 100644 index 000000000..3a04bbb29 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/config/DomainConfig.java @@ -0,0 +1,14 @@ +package com.proit.weather.proit.weather.config; + +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +@Configuration +@EntityScan("com.proit.weather.proit.weather.model") +@EnableJpaRepositories("com.proit.weather.proit.weather.repo") +@EnableTransactionManagement +public class DomainConfig { +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/config/SecurityConfig.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/config/SecurityConfig.java new file mode 100644 index 000000000..c72e64338 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/config/SecurityConfig.java @@ -0,0 +1,38 @@ +package com.proit.weather.proit.weather.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@EnableWebSecurity +public class SecurityConfig { + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + + @Bean + public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + httpSecurity.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic(); + return httpSecurity.build(); + } + + @Bean + public UserDetailsService userDetailsService() { + UserDetails user = User.builder().username("user").password(passwordEncoder().encode("user@123")).roles("USER") + .build(); + UserDetails admin = User.builder().username("admin").password(passwordEncoder().encode("admin@123")) + .roles("ADMIN").build(); + return new InMemoryUserDetailsManager(user, admin); + } + +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/exception/FavoriteLocationAlreadyExistsException.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/exception/FavoriteLocationAlreadyExistsException.java new file mode 100644 index 000000000..138daf3d0 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/exception/FavoriteLocationAlreadyExistsException.java @@ -0,0 +1,7 @@ +package com.proit.weather.proit.weather.exception; + +public class FavoriteLocationAlreadyExistsException extends RuntimeException { + public FavoriteLocationAlreadyExistsException(String message) { + super(message); + } +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/exception/FavoriteLocationNotFoundException.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/exception/FavoriteLocationNotFoundException.java new file mode 100644 index 000000000..f9191a781 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/exception/FavoriteLocationNotFoundException.java @@ -0,0 +1,7 @@ +package com.proit.weather.proit.weather.exception; + +public class FavoriteLocationNotFoundException extends RuntimeException { + public FavoriteLocationNotFoundException(String message) { + super(message); + } +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/model/FavoriteLocation.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/model/FavoriteLocation.java new file mode 100644 index 000000000..153a12f9a --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/model/FavoriteLocation.java @@ -0,0 +1,31 @@ +package com.proit.weather.proit.weather.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Getter +@Setter +public class FavoriteLocation { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + private String userId; + private float latitude; + private float longitude; + private Double elevation; + private Integer population; + private String admin1; + private String admin2; + private String admin3; + private String admin4; + private String featureCode; + + // Getters and setters... +} + diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/repo/FavoriteLocationRepository.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/repo/FavoriteLocationRepository.java new file mode 100644 index 000000000..4795432da --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/repo/FavoriteLocationRepository.java @@ -0,0 +1,12 @@ +package com.proit.weather.proit.weather.repo; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.proit.weather.proit.weather.model.FavoriteLocation; + +public interface FavoriteLocationRepository extends JpaRepository { + List findByUserId(String userId); +} + diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/FavoriteLocationController.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/FavoriteLocationController.java new file mode 100644 index 000000000..61773dd49 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/FavoriteLocationController.java @@ -0,0 +1,56 @@ +package com.proit.weather.proit.weather.rest; + + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.proit.weather.proit.weather.model.FavoriteLocation; +import com.proit.weather.proit.weather.service.FavoriteLocationsService; + +@CrossOrigin(origins = "http://localhost:4200") +@RestController +@RequestMapping("/api/favlocations") +public class FavoriteLocationController { + + @Autowired + private FavoriteLocationsService favoriteLocationsService; + + @GetMapping + public List getAllLocations() { + return favoriteLocationsService.getFavoriteAllLocations(); + } + + @GetMapping("/{id}") + public ResponseEntity getLocationById(@PathVariable Long id) { + FavoriteLocation location = favoriteLocationsService.getFavoriteLocationById(id); + return ResponseEntity.ok(location); + } + + @PostMapping + public FavoriteLocation createLocation(@RequestBody FavoriteLocation favoriteLocation) { + return favoriteLocationsService.createFavoriteLocation(favoriteLocation); + } + + @PutMapping("/{id}") + public ResponseEntity updateLocation(@PathVariable Long id, @RequestBody FavoriteLocation favoriteLocation) { + FavoriteLocation updatedLocation = favoriteLocationsService.updateFavoriteLocation(id, favoriteLocation); + return ResponseEntity.ok(updatedLocation); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteLocation(@PathVariable Long id) { + favoriteLocationsService.deleteFavoriteLocation(id); + return ResponseEntity.noContent().build(); + } +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/LocationController.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/LocationController.java new file mode 100644 index 000000000..e486b27c2 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/LocationController.java @@ -0,0 +1,25 @@ +package com.proit.weather.proit.weather.rest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.proit.weather.proit.weather.service.LocationService; + +@CrossOrigin(origins = "http://localhost:4200") +@RestController +@RequestMapping("/api/locations") +public class LocationController { + + @Autowired + private LocationService locationService; + + @GetMapping + public String getLocations(@RequestParam String cityName) { + return locationService.getLocationData(cityName); + } +} + diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/WeatherController.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/WeatherController.java new file mode 100644 index 000000000..6f5f91b25 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/rest/WeatherController.java @@ -0,0 +1,25 @@ +package com.proit.weather.proit.weather.rest; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.proit.weather.proit.weather.service.WeatherService; + +@CrossOrigin(origins = "http://localhost:4200") +@RestController +@RequestMapping("/api/weather") +public class WeatherController { + + @Autowired + private WeatherService weatherService; + + @GetMapping + public String getWeather(@RequestParam Float latitude, @RequestParam Float longitude, @RequestParam boolean isHour, @RequestParam String day) { + System.out.println("success call weather=============================+"+isHour); + return weatherService.getWeatherData(latitude, longitude, isHour, day); + } +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/FavoriteLocationsService.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/FavoriteLocationsService.java new file mode 100644 index 000000000..cdbeb17db --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/FavoriteLocationsService.java @@ -0,0 +1,14 @@ +package com.proit.weather.proit.weather.service; + +import java.util.List; + +import com.proit.weather.proit.weather.model.FavoriteLocation; + +public interface FavoriteLocationsService { + List getFavoriteAllLocations(); + FavoriteLocation getFavoriteLocationById(Long id); + FavoriteLocation createFavoriteLocation(FavoriteLocation favoriteLocation); + FavoriteLocation updateFavoriteLocation(Long id, FavoriteLocation favoriteLocation); + void deleteFavoriteLocation(Long id); +} + diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/LocationService.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/LocationService.java new file mode 100644 index 000000000..4dd9b9ca9 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/LocationService.java @@ -0,0 +1,16 @@ +package com.proit.weather.proit.weather.service; + +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +@Service +public class LocationService { + + private static final String API_BASE_URL = "https://geocoding-api.open-meteo.com/v1/"; + + public String getLocationData(String cityName) { + RestTemplate restTemplate = new RestTemplate(); + String url = API_BASE_URL + "search?name=" + cityName + "&count=" +100; + return restTemplate.getForObject(url, String.class); + } +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/WeatherService.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/WeatherService.java new file mode 100644 index 000000000..0b99a661e --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/WeatherService.java @@ -0,0 +1,23 @@ +package com.proit.weather.proit.weather.service; + +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +@Service +public class WeatherService { + + private static final String API_BASE_URL = "https://api.open-meteo.com/v1/"; + + public String getWeatherData(Float latitude, Float longitude, boolean isHour, String day) { + RestTemplate restTemplate = new RestTemplate(); + String url = ""; + if(!isHour) { + url = API_BASE_URL + "forecast?latitude=" + latitude + "&longitude="+longitude+"&daily=temperature_2m_max,temperature_2m_min,sunrise,sunset,rain_sum,wind_speed_10m_max&forecast_days=16"; + + }else { + url = API_BASE_URL + "forecast?latitude=" + latitude + "&longitude="+longitude+"&hourly=temperature_2m,rain,wind_speed_10m&start_date="+ day+"&end_date="+day; + + } + return restTemplate.getForObject(url, String.class); + } +} diff --git a/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/impl/FavoriteLocationServiceImpl.java b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/impl/FavoriteLocationServiceImpl.java new file mode 100644 index 000000000..56f17e635 --- /dev/null +++ b/pro-weather-server/src/main/java/com/proit/weather/proit/weather/service/impl/FavoriteLocationServiceImpl.java @@ -0,0 +1,61 @@ +package com.proit.weather.proit.weather.service.impl; + +import java.util.List; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.proit.weather.proit.weather.exception.FavoriteLocationAlreadyExistsException; +import com.proit.weather.proit.weather.exception.FavoriteLocationNotFoundException; +import com.proit.weather.proit.weather.model.FavoriteLocation; +import com.proit.weather.proit.weather.repo.FavoriteLocationRepository; +import com.proit.weather.proit.weather.service.FavoriteLocationsService; + +@Service +public class FavoriteLocationServiceImpl implements FavoriteLocationsService{ + + @Autowired + private FavoriteLocationRepository favoriteLocationRepository; + + @Override + public List getFavoriteAllLocations() { + return favoriteLocationRepository.findAll(); + } + + @Override + public FavoriteLocation getFavoriteLocationById(Long id) { + Optional location = favoriteLocationRepository.findById(id); + if (location.isPresent()) { + return location.get(); + } else { + throw new FavoriteLocationNotFoundException("Favorite Location with id " + id + " not found"); + } + } + + @Override + public FavoriteLocation createFavoriteLocation(FavoriteLocation location) { + + if (favoriteLocationRepository.existsById(location.getId())) { + throw new FavoriteLocationAlreadyExistsException("Favorite location already exists with id " + location.getId()); + } + return favoriteLocationRepository.save(location); + } + + @Override + public FavoriteLocation updateFavoriteLocation(Long id, FavoriteLocation location) { + if (!favoriteLocationRepository.existsById(id)) { + throw new FavoriteLocationNotFoundException("Favorite location not found with id " + id); + } + location.setId(id); + return favoriteLocationRepository.save(location); + } + + @Override + public void deleteFavoriteLocation(Long id) { + if (!favoriteLocationRepository.existsById(id)) { + throw new FavoriteLocationNotFoundException("Favorite location not found with id " + id); + } + favoriteLocationRepository.deleteById(id); + } +} diff --git a/pro-weather-server/src/main/resources/application.properties b/pro-weather-server/src/main/resources/application.properties new file mode 100644 index 000000000..b43c4f1ab --- /dev/null +++ b/pro-weather-server/src/main/resources/application.properties @@ -0,0 +1,12 @@ +spring.datasource.url=jdbc:postgresql://localhost:5432/proitweather?currentSchema=weather +spring.datasource.username=postgres +spring.datasource.password=root +spring.datasource.driver-class-name=org.postgresql.Driver +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true +spring.datasource.hikari.connection-timeout=30000 +spring.datasource.hikari.maximum-pool-size=10 +spring.jpa.hibernate.ddl-auto=update +spring.jpa.open-in-view=false +##logging.level.org.hibernate=DEBUG From 9d69b5b2a34188fbf04c7c4df4e52c5a86b9a352 Mon Sep 17 00:00:00 2001 From: Anseri Date: Sun, 7 Jul 2024 22:40:01 +0600 Subject: [PATCH 2/5] added image for readme --- README.MD | 53 ++++++++++++++++++++++++ image/Weather-App-a-day-24-weather.png | Bin 0 -> 367526 bytes image/Weather-App-locations-16-days.png | Bin 0 -> 361427 bytes image/Weather-App-locations.png | Bin 0 -> 215958 bytes image/Weather-App-login.png | Bin 0 -> 27325 bytes 5 files changed, 53 insertions(+) create mode 100644 image/Weather-App-a-day-24-weather.png create mode 100644 image/Weather-App-locations-16-days.png create mode 100644 image/Weather-App-locations.png create mode 100644 image/Weather-App-login.png diff --git a/README.MD b/README.MD index 8f100a89b..7dc7b2f20 100644 --- a/README.MD +++ b/README.MD @@ -27,3 +27,56 @@ All the other specific requirements are up to you * Use best practises * Use naming conventions * Show understanding of software development concepts + +### User Manual +# 1. Login +Description +The login page is where users can enter their credentials to access the WeatherApp. + +Steps +Open the WeatherApp. +Enter your username =user and password = user@123. +Click the "Login" button to access the application. +Image ![alt text](image/Weather-App-login.png) + + +2. Locations List with Search +Description +The Locations List page displays a list of locations by default "dhaka". Users can search for specific locations using the search bar. +![alt text](image/Weather-App-locations.png) + +Steps +Navigate to the "Locations" page from the main menu. +Use the search bar at the top of the page to search for a specific location. +Click on the location name to view detailed weather information. + + +3. Details of Location for 16 Days Weather +Description +The Details page provides 16-day weather forecasts including temperature, rain, wind, sunrise, and sunset for the selected location. +![alt text](image/Weather-App-locations-16-days.png) + +Steps +From the Locations List, click on a location name. +The Details page will display the weather forecast for the next 16 days. +View the temperature, rain, and wind information along with sunrise and sunset times for each day. +Image + +4. Details of Location for a Day of Hourly Weather +Description +The Hourly Details page provides hourly weather information for a selected day including temperature, rain, and wind. + +Steps +From the 16 Days Weather Details page, click on the desired date. +The Hourly Details page will display the hourly weather forecast for the selected day. +View the temperature, rain, and wind information for each hour of the day. +![alt text](image/Weather-App-a-day-24-weather.png) + +5. Logout +Description +The logout option allows users to securely log out of the WeatherApp. + +Steps +Click on the "Logout" button located at the right side of the navigation menu. +You will be redirected to the login page. +Image \ No newline at end of file diff --git a/image/Weather-App-a-day-24-weather.png b/image/Weather-App-a-day-24-weather.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc57291adbca96e011662a3377afcb43d74c2a1 GIT binary patch literal 367526 zcmeFZXIvBe);4TcKmr23s%<)xI*?Jb!=MMs={G&Ua(W9S3j-5Ei_Uu3Yp=CJE z#11vioH=#;6s`QR|MchGsdM1rbANZjXYyB1p943)&@lSjBagB3`~Sx){zIN~Z;!D< zuU5=Z{wLY~aU@&5EzRHDE}#sn%WV179AY5$|Ew6`+fdZ}-(FLmEfP4+>Qe#V->Faj zS!}Y*-(K@vsLr!kvB)8hu>ZJhhv%WiRi6EuC6hlEe20=27k)9L>~D`eu3)u%l{%ErNVHEz>5CG#l`L`zZU*r4#F~fgjeA;Zm z4gMRm3*Hm>ChlGQ*4E0e_L=#K29dSlLIbpB)`{x&h`(CR3ol^#9W1S;B955K<#@nH z*+1ZJAGHekekxj=;@&0U`(#qRQvCMwtKPQF@Ld_XfY9V};~B9R$^51cpO&mP5rBNAT5~HtQm%QN8Z9cQM z;X5PR62Eqr9qM4@zZ1>uw-6;xn#t#JrcU8EQyj;58Laf!4;1M%_jsv7{$fLqZpbT} z-JJJ$_2&)AuTc#xctJ-{CN`DueF%wI8}1iOyz7S2 z%#!@IK0MW#KC_kAUF450JC63Du<7a^KeDstCJPyvwQqZv`2zuJP$4SxPl*nVYmV}D=hp-qUf(Jtwsa6!A3K|O@zYK)YNC}Uh`uJyhV^+j(U0~QTQ~4 zp-fn0!T0B<8jow;cx7=jpL*Qd?#cC@!h}MH`P${Jz-N#B5W4VJ0tch;?dfKkVqGVv z-;xEKWXlIwMDUG^Z2A0`yd)p}>9n~|&Rv)B)337Yu85YNKnr$C%uv!>_csyh{H74x z`c;Zi&+e%Intzp40%$Fff!`vYDExs%XC8?|=PGfZ6?u6M_H}4cO|9=^*lU!-GO-xM zt%IKMNQew8kBAi$p_(n39qSE2{B|BKs8)pEscT;N&j(E;xF3_Xe z#A78M;-rR$hev9lSlKj@M})wQEKiYY-(sWkGN$q-LvMobS$1eD!~9Ui?Y*^CK}Ip@ zM_8|g^%2Ozr-$S28(EnBk^8&`#rmm=O5$Wob{L?-*a4fnT8w&0zQUTvU6d}L^>4LP zR1BBhe-hsk$wV{|Pqld!bNy?-xUjwHMsGUSnOW=IByX7-RAKhfYlgXDtFNX_R&U)I zLs8!?dr>Hn2DxR9hVAX9%q)CSTy8Y;2xOV4mYAIEytgqlWDN57e%f!PLg_LqE9-tR zj^i)h`UME^4-{1%kW2eb<^8GL9F08%9u6h!c=a{)s}3XM7|)EBrrqMkRIzbBk2@PU zKa3#yCNqzkGSfAJkzQ}TUuO=Z#MJ4|EU9kB#Ni13baC`z?w-er{YWi1!TlY-8LH>S z_vX@LDQAzy*W67YSTPW)ZGMu8aG5H2vNZ;>zkAwGK;n^Ejgx0|o%QEen5Et0e%oJL zcMVTxOZ%z@-8QouhhhUhtCmEird~~RY(9DR!aY8#kh+w?NZYZ^6w$r8Yh6P0Kg-6f zE6%Z;Q2}J-OG!&Zq!GGxSC-;Na^kG0+XBS9SbHo(${JPa_IJtxQ-xb4jNKzvq3DUy zQRg}p+qT4)kt%m6|6+By0O1MYnmiJnXd|DEJL9)WOd@{subr(D45~+JqFN%a3+OTb zo?G@1sh}v4^qkFo^g0ON2m=qco@_`N90k>VFx)sZNed=k!YQ`AnjcOmMsw98y(jz$ z61ksDt3B|{=(%_`0o=j<2IA1;rwJV~blX{@O5L)ge8+*}Yu6GUUnbMtp|RZuF!+o{ z%Mq%;W_$$t7v54ciS@)Pu?&8`V)3m?MJvZ;5QQjfTyfJ#Ur8IyDh?h~^Pe9Q>ID2o zCP!MqUso>+c2+X`@igm8A{~xluh^%UR{X8ob?}%ZA}MhHml3s^W^Z&BHuI!2uC~G; zIMA6O`$&#L@h|j8n+=F2Cn}cN$rXA|@!Qh(=JfS}^PGi|i4@ArT5L*azv54#^i>Uh z>pj&WXJ$fZ&@GKOt=1*TPXDgo-|H_0(?K?m3&%$~^_Me|N zlq)eTAMDDKvgLiP;SV^mp>9dCB-Y!dY42Ys7wM(Xa#om4%b+Fuqr28X$JCcO&$&TJ z3tAZYbWGnc!*QzEprja*(zV_G=*nznm4AujK<(r3pX+5{m)5SVbWuq3KLNWTc>woGY#J_`Wrb@FrTQ7FmpAHU{vMGiAoBfff-qCMKqsHJXNl4-x52PxGq9 z7Dj4%zwIn8GreJv^f2x#(84dp*<=!^@HX$GVhVZJ9G90dc0KacjYQ|UA)8-8%-#nrs%?>O7k=Wnnc@--rB&5S6?u=tP*hYJ9lv8|{mf?Ep zJXnfg@%??DM8u019qXD$4wT@3BM%yp#KwdBQ$haz>bVY!LSj2DV>67btVH)Lqw+01 zj@J6zI`?S_f)q1uqAc>{+0v(8A4iE8l3Ae_bZ@T_>$#8{EQ@#kgOVT{e)?QjVkUS@ zdL}>kBW{nzwf<^LHt1#<7j^nA?5N!oD8IuI8(X8#lVON7eJg&j$_kT%)Zj^Xqo;~~ z&6Qot2ZE30l+^Ux@)g{mraG!oFDKxx32VSw9DRqMf5!%jPzUooAP_48)h{Y5U#F!N zJeufOF#ze0@V#-ez1o*ft1s1p`|P4%%bYN&RVnWKYy%}{X;^UfdQIAGUwXTGiUJ$_ z{CoCPg#fJ|XoGj_n zq~YmbL#~2nq*E}SbH-NdNhy{L+S>k`UoOHn_HILDYFr2x-=!dAWw73Y)V@F2%MJP( z6*`&9nhcH1*TwgUlUk&lgT^euj`KJ3s{;exEs4*4SvVw(t&8_&hx9!&xcT_nC*xW_ zuyig6<~MA$Frk*v1d*w*<&k%;HuA~zy!zS)?mM#;>@k23N?OQG^5w$-65}Z%tS8vC zjcIh|hOirtY=+c|ds@EhGOYo%>eqYtKA;ph!uCEkr zuStyBoX$o2TZhba=$ownp3vx)*-2y+cl^2QaPPrLwv6BJbb$OdAHXi@r$VE-7Kide z!ev(zWO%b`PhFk%TtIX$@l=OD195+IXP47vPw9Kxa!TETE3N9 zye7abWh(dPoR^Cc!rUaq!tW(Z;L`EWM#x#$YxQBM27gjN6g}p&cW$z(yXl-GMW@9~ zPh&$iY+I!o+9z4my>j;m9igQF=x*FQ%E;q?a)jVZY~T2At{HroMa&L}e!1%%<%g;2 z!#AL^dEMKS`QJK&u)My%s~r1_tQrUI(3edOeHRj}PZjite97Z-`nCAP(=5qM&t%WD zvo%nuwXGCO$894^Ec3WyaR87A!KbqWbxCvhcD&X^?BFTvK(Rqz9jsfYsS#Ehi|-h| zK7;jLHSFA+GSkQr;vmGePbm}3TpD%I1i#m9$@~zK&D1*=f-H0lHH;C*?-Jz>%uBrG zQhzguq`%G92wSlftQ*=gS@qQ;IgN;ZD1UotNN>}y%v_?qCvp{Ew_18_>d z`)*YsM@i?#0&!#F?R_K5nTiu5X3C?IJSv?T;(dwT1*Qw>-=ujEaE!<7O+7edaYxjf z>Y&D+{W;nF-*T(tr{@r}q_wPE?=PX**(ca64Z^YB#NG@SjdQasqd?T3B?ax7 zu?9(gh5l0iV!!ySesbN+_5=r>TUc1HDliqPW7Ar9`lTpjuzvv{dS=d;5B#S@b38*) zQ;QRH+*-3;qb>uFu9)W*8%#0uoumGx-f5UJDrk$oGb?EO3wZT;Qw7soc+l;>rHgM-PFs}r z8I942VtEdZvlb0I`)3FDDx!0H16r;NIu#4~dk|;E3|#UGw&I@EiLZaldm#Dr+p~0W z7iVOGM2lpN^&@84fQOL5vTB9yMp)PK7w>uFqI(^b&Dw zsdV1+i(-+|bPwDe9yW4vDiy#iosiiY;t1qZ+3VzHXTL8#{xoZ`b|E>y;B)i^81oi% z@nzr=Yl!FY0Vtg)^^-53JfsT^e=3IVCF%0VmW<1`?p^+<6t*E$sokgC4Zpown9lOH_>Lq}s6j^;(bjFuKj1HW7259D@tsLs?u$K*ZTAp*m) zSP)(MVG+a7VQPk_BX+P<4_gBzjR|X+CdEy#Xw^)CTx`T`EGpM%WOD9)M5YT12xuCa z?~BW<#q7Y&cotxMr#7k*r33QU?VlJouP~$oVF_mNZQD%HWno)#eH1mrGbB3ckkzl+ z96@ccvp$j4ISuRNPPGZ?1ijA*+7BZ&Q?%01sP8lu;~Tm`7%Zp<_^_Qm#+*1#4)>3DtntGn)5jN{Q7$HN%t$RL<<>_ z`CkEU+ z<$z7~zDnY&252aJaePiJ`OSIoDvQbj_1C_vX25FZ=6ROZy(5qiLQ9YFKZ)ve&g>xK zEl`+)FbggC1caprhkwkTTHtY5^X#vf^O0uuz5c~sgK1)lE;7gFcJ|ZP`N*S@^is ztY~s(VyOOm0{U4OzT$oM2}Ac!PNOwY5xbvH)3ADbGE*<6d2+O>i@kv?_Cq?wK*vS& z>XqGsVfVoPj|2wrbQx$Lw&5JDdLb0M`B`s+q6#zVv1A~_~Fci85-L6deX8t zrLV~?x>N7gJb(Y1fzYgrYZvP7XkT1wLAShujmzq?r+Ni?E0rULTWd?5hoiN&;m5+x z%na5%*5*|Mvk^;&Oxyn8izc$A1z_d-B_I(<5!oZ}m^|bBw(!LiKWU-Ch7R026UDOg z=CBB|omt3+zt8wZsD_Kyy#5Iyn<>4tdTvm{sM(B^dwGWWHW)!P{1FqpXR~fX^r2K=-P{uZ`QTWPV ze7o!5Vm})jnO&~1F}igfKd=rY(<4kS zvp~|i+rZdQXiwrV$(F%DhI;J#a|2;9Ih^^_uM$%(lAB+!!WE#J>0vENzVo=zahKLX z3=7tg*G4X5J4{zGI(h4$Gr_nddGQZqIxITM>T4;{VQbQoJZ}>ks`rb}$uLJTy&71% z{3P91z_LPtLoupa!3p0QT47LPXn-yQ^&{2n=N7fxiI9MRdi7tkv!X$!8@oUSqXziFv`1Se!KJSxxlj6D-@WBcoo=-{+tf%_i`YXK|g0NTrwKPet1>e#QXb>8>k zG|jzko6%4dJ9pvzBT)M-5`fz77cn&C<|u#v6t1st^>jhm2iqB4IBCj^Ztbud(1~S< zm`8M%mfqgmZ7*j`&IGDB?u*WzHCr8hhC@;SCXqg)X1ZcBa^1gh(9Hdy5?s0$^_0bX z9wA8ACFY=QxiJn)5!h;fR183MqpKek;SGO&RN`bb6(jDC!nd&jE}E6)@=xsKg77|X zz=LZzKWst`xR1+keTLgZlQ`kryoN%DAZootrWQ0uLPJlD2TYPMbJ3&vHBQ6Yl{f~n zkO7qG9RNcNQ&ejvGeov;8sC2RzD*bPkIrV5RoGdFOISjN--LzB9b{TtTaWQRI7#7A zAEwPU23t%kyv$^#15{hVy+1e&gMgBjVe5qjQR~e+qL7jPNo|=hwZ_F3{@<^1{-}ET z-UcH1u==>9rw5Ss4;UC(ELQjp)f?j;m!k1%pq3idbadmq)+ecdco8QO%1_{d`r!@|U1ZqF2=F~P zP*=EF14Tj2M&|90>ISJx>^>6iLaJMy`y7FtF zuzPrr=0?W`p0sSpIZ*>;in=CYKDBfC%Ov6iA)w3bv! zR_`V$@&N;wL-I;6J}}i{&!XTMtpOu-c)o7&-aAR!ShKkGV1z998^f%4$CRR%?d|Lw z|0G}cEK7hCi?rvv+Z$A@n#AkOx*?V$A9VhkLx)6C2 zEz5gtTESg0a#9CB%b#zmuOG`HYY+h)8A?4Mn%?mQGyNG&kDsci^ugdOb>YU`%p$yU*z{Sz`NnQ!>bYD{y)p@)gcrAx(-k+t$Hs2F%`sQ8Tx+J&{; zW{trqZ8CLdT}G)}dO3BrAK~6o62Qg2P&SSw4Thpg6FYR{EkHF4>+@AtMqI=Mf=9Xs zils^!HG@><_+!hg7H>ApoGGy$2_4PzQJ}~9K?==>D`$t_V#BFniqx}s8pkgM@m>SP z1B|k6k%4BYFIy&b#u*$D5j0H2>kFfG)iZONgioJLF*{wOo|7cJuZ-cSh+VORhG^B6 z>*t@{vfdDa{<7>LFQ#{yXa#78S;ZTH+Q-kb1Dsv}<(H|x_W?>kJ4M6B!be9b`iUfg zM1SFISX(=pA+bG^Pd%KhIIrnVzBiWR8$xv;G^YSlrapr+t#hmoCAk=DcXi3V||+GtfHY@g1tNh%xBukS;cn+s*xX@$J~+x@ZVcf%KzVcrGD(Zwx3Y zII7y%F46}Ee32VKcT32ID7GqOwRP2;Xr<>fG`$al4;iCH&l@PuA!n;i1M17JiD-uq zv7?v}i6Q&$Y<<4Wpy`HVMIDbKy?kg@9lVW=r=Z-FO7X6qBJ=fc=mNHu25 z>T^HBayD#Puq$NZT!0b8M_K$*J#4eCfE`#8lWWt2J7xq`~RfG#7ppAO=wvr_IZvpBhA@a790 z)0%*=(J@}5GN*BfKTuyOQkhg_Y38TvN^fiOUA^*K?f_=Sg<_I&3?1#QZ;fW|n`aHe zt$yXm^qxwO?ttZ8u?&a?~|@Kp!cU5-h&Z)Eq3 zgTwY4@pXdu<$HmT?`*AhlZa@pTO500yNqOrZG{X98U2XV=MDm9A_kcRmz5+l81iRP< zt}A7T=aakwkYGZnEz-262PhU7Om$|MfSe~P9|7GBTq&H_8&)MW5hOrB z{mZwvui<_48Fh!@YJm1^ny;q5&DTgOpuk;MqP+4*8NytLg<>sy_o!j(TUWM{@k87< zZ~h)@oGvnoVd=8*&=_j;-0|wnmQiZrH+4E)KjpKaCeT>hqcD=dtu+&4+rGBDbkVfY z8tz{DLEp`P$9j_zlpzi&n2wNryEu-Klv`YYO&XM$n`GT{)wN?yFP;!XCiFKQ)TufS z<1ni}y~L)u9g`~ljrthG4Y~4zI=|WFR{at~jhJQ+UL&$jTZ z&fQ=#Y*> z^}%sX-I)DxJ%Bl6$HnDo$!3*aX=%Ftbf=}zby9IqCU;6;qHgudJuKzTe3D_(ELb+1 zH~saEd{Gs$yRa zfrNDdO%Cs!+9t~0dRW@Cn)`d(n2l_yfnr;=sB7XD?$cfFjSR{_;*b+}8JDh--Zn(f zX9Nb=F2lVdq;6g1{(4Z*z}pyU^IP6HXF|n;@`mLC*({OI(5C{R4a^` z;IvpS6ZGD9dn1U;VcSUf#K<7m?!r(-0}E`E-E(&6!<A!8&@xYJU`o75G$x1F8#%;FXsXJx%i_`l#KImg5F!^npP=N zk9*B^ViuA!O5f_7gaK4ubh$Z(gexikweuy-P>AJgN55cG*MQltduM#dZPbg6qXGF-~SA0~nbzFMq7cfUetolaB&JqU*-*hZ0ew}mNIVA^^3@dH!g zGkQswz-GmU?Utss1vJ4I`6CJyI~X}WpVP3j4qma(nFG3gU&js@zvuy_^^%pou@K3} z?|onKSjrMwyVf*K-KE!d!!Z%gm=w@`n4!7cDhdb!`Q`QjB`KEvrGWB22~eMW@TbiIGc%i%`kgwBS~9W^_ja;?|f z_{rMl<8ZifSxB)xku{+FjD@GIHgpQMWo(!{2=FYEDmydp=JW$O0H#T%z}%MYA`Xhn zufTZEy(t4>icI>rj{x%I^ zF2VXZOcxJO32zcKDMnaoqN6n@>L4iw%;4x#nvMgiu$}da=+97GZCsUOWl^+L7nXsm zRL19bEQ8=aNUmc`=QRWWU_qx@Y3!&_1eZp7(WBL=*?}sor00AQ#?x`<{MK$*dO>`j zt9W@~)RXm(e~cPAf7nRdS7vju1cSkTK|hrINTi^;Jp{lEJcE{i`fJTPD0fxJj!DcJ zhZk<_Egg2x^zR9-kQIwhP!YMAfZlx&VnxFzw+4CT&8&k-flAUpxe+AC%4M zTaE-zP7{D6-z=APSNhXX4!3Sy1g^?yotAc!T$sxoz&Wf@#^>q(D$8>~7KVpW-Q?vR zVDg9?s37~)pd$Z-xPNTPKRj$)e!6?-+!0m02MW&Zc1P+D!1ruz01tf|5S+$xL=>q* zQP5A$U;V2n-+-hsWc3I1$fqO#WBoL1*`x9R&xF?9l8Mr z-?DsMaD>Kv)&z7o#DDE1*&NtEw8?f4IQ(0^&yfs-_LdW{_aj3A?1+HC4_+A`mjA9i zTRb9Tur#m|P85GV_^+bXiRT=l(mE{#Tg!1ONWt8cTnMTsc`d zf9KyA2zkmt zl<`j^`!8PoUxHWiMW@@;sMAM09@u~nG{Li%uwG#pni0O*V{>{>rDTuHr~~Bp62O&W z@8HgnQ@>F2+~@u8>NLa$Q)-;zWR0z8e6NHJK0b}O@1EgY#QK>X%8785%2+J=b-z~t zPK>kbLPLD>*mLeTe|CUfDjD^#rQzY?e=gJgm}m1A`H9)Ibpe*BHrpobLPoc4fO7AJ zqUhn3FU+g$Xxds-fB*>&5I29u;7gWaA&#uIGJ0_apzcm_jBl58e{{JfQ`r92A)g$TGBj3hLyLzp7_k3 z-$~6|UVf9`0*sHmbQL#onHxFu7@z3*IjG7s*g>2J5+m~6TVdpBse^fDKl-f(QcJaI zUqPAag8MeP!32MyWy_C>^gKGQ9cu(&dgaDLXL$`}v)cB{3rQ%TnS>2;U?%6(Hx7?- z!-vO_iL70D`uRC<`)6fj`bd9Mus*U>e}v06C;sjQ<=6O8QTr4r+oU$#@)|MEG693z z9A5=&nUj*CD9EfILfsdk^B|)Oa&sW+E0maz@{bYm4+E7%tB@`^VWymTCaS?HSmO=u zA(3}jlz2A`lVlC=LORW+-};==IU}``j}p{KZyGE+JtILa+02JU`9*<#B{(@6JmPgp zsJsg|U|QJr3h}swK6q83yOS(NDuZD_c!{t8;nP=fewDI*#-{Zj%C2R=8JBVJai?NW z^K|s5GKp)2N{o6YvjNE((+2U$$STOJB2Q|y805(y8y{%IApygsJgnqioSnid*C1=@ zTxB+pIbMR{W0srJu`Rbe!ZKoRKTroFVUAXZIEKZa~*{fZf!6l0ztb}=NBK$>Ndv*pN*p`~XR~)gP z(`%g?`732!h4~u3+X6RD(~tHzUg-lVgYwqQb@BzPr#y8PXIOgE)7idnOB9}9f?M3f z1v~MG85SFHiYJ;u@sSG>GMt~(f@U1`USFMAx(N0U_ozf&HnWh-6o6IY7SFd7=d^)| zx%tHg`F_9P%u@LXwRuTHli9c@dJC$$dslfxHB_Zsw*>}qED9sFyb?;-^gBJF_M_`+ zCh+{)Hr;Vm-KpaDJy5}bU`U}TkeCWzxPd|e}%&d%(15EikY@q zT(O21ta55C8kjiTHZ#ijaY2>PT?K*0LZHC-XZ|Y_-2Qp+x+>O?xeH9V_${3lhC72b z6+x4Lh9U&iTH^Xe{8>ehfpW-lc&JR$f= zHV*OUgPe^>4>Pv=;~YP$h^ned>A@ci>pEgU?lqyhaW!O~4&?G*fJcd<>P4*{l5>K` zr%q6S+p{ke&hO->sm+@P-cIShXkMMD30JigL_zH75#DDr{EWP4kSovekyQw9o0)D= z34^MsiWAL?Vw_J@R~d#xTX(%#y>XcEXRN8QBHps%qKP;!<-R~U5X_|Dd4Dln!>B(& z*ISuYprS;75tKE~t0o1S5Y*FARjr(v9jUuNatV8>c;jZ=JEQXFrqGPv%; z6J>G3#W7-0Qj>xG=~)4Ure205>pRHEROUvhyu{Z6K8OmFTS?@cAsYNxi$}^Jy|Jf^ zdg}9vZb*R`h+sV8Jh9W4O_#`}5?o5ksk=Wf+5pGR;JTZJMe!BlE1{^t?R&+BGGi)p z=hpcNwqBiI^%lm;P-~-ZSi6F7{mr#hKV=~>u4BuKf1@YNCV+Y#XPv@&Gu4PWs3eHj zJ94KX$o~4k=r|u%zlz~0VVfH4PTc)fJK00LX8Q0Cu73#f!9Nb4j*=dHsdM9>Tm$H; zubet@4vd_9Iy&lMF+Vf;6qI-Uc#ny#TXZeRZLEL~tM+UCS7;5_7pgVa8UwLHmb`(T3ZD5wntChR&E%xm}d{f_ZRHeUI)wrCGyH<{-$Gj5aQ9qJ!S_ zT?q?0W@=}o{d}8DJf_gY$38k?(!oKvJAfU7j;$%xZ_3laS10PCRfxCU5vpSTD7Xfm zQxzgUBx(!Netx`R9vv^{9e_u-EsGp)nv>3w^D5$o4qM|7YLt)vp}6OqUY%}r-Tmnq zb8+=^3#PGFeYuOeeiQHb1s`7HX$<$!Jek30kj$HuVy&tMS5r}nxqLgnT46{)Y(VmM zXSO~5jWleEI&s==>Uz|?=)4=U>^AoR)S>TvvaZ5R=8mWMLL!56&0P1#qBot8IgZ>& z1RJMl1;Xa}WmXOY9=>5!75KtdiKq*3ZzI-tB|dke^#a$hE}ZA}LR$wl@+4@EXHMp9 z#f9}}4@Smdsl-M76jHk^JF?S#<7rW&Ss<`?8DwcR5<6Y%fUmRYEps33ww?fUN4ISYWY!P9eL$XL=KL>p{>lm@P0AAE~4M{6SOg)=6Qc* zm_~|dqID&_!$w!JATdz2SohK0!X1YEc(I>WDG?k``C3)Sz zcb~GecxU<;Z@ZR(AZ~n0CyVntg(KXAbmykTK>f;+75E)cfjuf{Hw+~(hqgHc)}n*{WW;MJun&r&QE0DIRHV zjdyDuFZz}5M-9akz&&_Hr!S23kNI1fr6d^oNW2lRNcXVy&ahs`hGxLwk}t(T11iOC zw}X`Z^)gY`4WOwPpwiGd(Hd^eXd zA3x_{mCU{ZUs6Suj7 zX)6pKm7k!Lk38$%^3E*{v_t3AW`>wKmyc;xQ4)qjci^SEy5_bBXD7`AVfPR_OZsr% z5G-gJ_c;q%oWT#3W6Qe5X;5~1pqvd#;DXiPM!y;m^rIErqyjVNIWi&47ctip^{eCc z3+odNM)qoL`rJvyxJMu-)#6*svN!e`$I8+Wg{}G(y0j3`v)I9l4r2Tq3*&9<*^SG}oix9ew zMo}v)Y4XLO?k_!w=p9W}*Q9*Ysi8SNT%!ywl&~gRC>{Hu3|^KLW1G+T5@%^T)c-DCzcKMick%_+_&|aKzGFc*DjjDzI?`YJ97r^n z+Y`m$!=CS6X*jnsXH1%wD8oiZ`$a8yp((oFDt%XmlYX)1i}n@is>}|L6hw={+icxh z{G`=JFlwetg`g5QzTglFFxoJ=3v91f7@E0d3}s0WbB>!Tl>qTv!|{I?%ojDNs?d!v z6eA(Bgz@uwy0a``z2g4jtepz9os+FKd=ToysIN9st(RUoB+v@3i>^3ZHTc00SDdMj z4%Rqnrb=P!HVB)M1OO+w<01}7lRPX=@_cYo_U~$xaC>N4_qlACDgOcc=`L^wCD>op zv%})+>XV$(pe8DpvF2o?Q^DF6K=_ z{|d15T1*xzP__Rh5q~cg20_|H_Lm|wf}n}3FjP+bdZEhPhAJst#Y6xYLLg91OO5tp zDxb))LvKB|fm2z{IFR8P;EhX%{g*RG+ti0NwFFlm2+b%X#`<$FTq-sh2BQ3*T6Mxg%jwRYsG>q#9(oXQZfQBvHb?u50-*>JKK9{`oa%U2G=WuRZF1m;iTc0~<1s58M|&&sxeqD(i|zU>vC0*#`D+}w zm%8zFb7;*>{rymsUBX%~W3;3|TtH%zWK;=lmC1D$h`58@fHDn$f((0wr>AUGV*=2 z;KSBq&5g*vJUD;!t`F-BZw|+sic?a)lGO;vOyr+30z+l_fUzi!yt>13RH*-b>;F~e zf0g-fP3X{={!c9Py&Vw$bz~m=y;q)l7z_B&DgHAL{?>4pL*@DIQrMq%AY#)p&siym;cs>0s%n!ZE0io;!h9! z_gfcl0)TY?^#|?01*GjmKnjXVWB*$~`mZwotIYo$D*i_&FaB$p|8?_!4@CgF|G$8l zy&SPHRqhyj9yNM;COVluYp#o2wC`o5P@Z`O(M^xKVM$W!wJozEOF|kxsF-5KA&;v^ zDop^F`gs@!CerWRAddrI_#SubZnyYu6Mpyl*>*A58bOMj@%wr6?j!4f7)DE>7VmQ&oACq>r4QltYfL2SZj+lO?!Ct!wS|&zTc; z`o-pt3=jj_8nd4e;E2ZA0eB$>1u4Z0v@v*x#zxDf!Wh1?LmMl64S1216%>wvhDx3@ z?s@xu%M!ENh1SX%49zoXVp7HXo zzL#T0yrPn7DKx$Y&1d@0O~2zPDi@{#XVLK(=!nL5^({PL=>^HW9=yBrNeAv?k!NWS z%d2CeDPCnRcX)iYgfV2;zV|9_YX0Tb0morWZ|WdLbWP0rgcAxRq7XoD_RLzyqx`Kj zfS_=?kEi`PXe)o`P)*NggkKS4;u=*}Wv?L%xpwoJBRU>V_UAVb_|0}kG=!scYog~( zkuDRehHcX&@R2N!&!7h)n=UGxwI@U#vLmbUsyt#sDpw{*sO-iv*ro;zad71t-CB%m z0!l)LJ6tgRt^G-Y{b#;>(N@ORlE6tuH)M=VpopG7+C@jva3bibTT_CIbZH>P#q}5+ zVA;9yquzzt-XmjNiPDEzAbP6f&mlnIT~pd&CqAq*!HGFTSVOt`ozlgw>;;)J--@5>Wn|xRs5v2o!*gq=8eB1 zq`$gz>|?z!qa7QoKzOjpG9{R9pkNflD89^CN6$4{m6TNR$i2x&?`?}lpJd9r8vTWv zq(*zx#Ok}06DBwXe{TH)mMhINMh*ocN5&u@-2kenN8SXeU3yA^p7L@Dpt8pl;0Lx$ z=E`$}bITzkHA_@ctfc1!WuDjBpcA*?vz?gPsc8%Rw?+B~qS^-wmz&?;=2aLOOZqBX ztMR&^KL4y@mv*sDbsJs}dwgT=*K$g6+yVW00#n}hM(x$bx+V5Lx_??u-K^VSTX%XdsI=r()fNpz6BwquLf)d-h02}v6wV7+M1gRB0a}&`a)KTF zgF{|<=U_-`qc*eqAV$tx+%hh1wZbLuk()#3^5~FyhgkTq!-ZAR!Oc#q)aKCe>y8)O z9V*Y&EMrKZ3rc?M8s|#k{W!XS1+KhY0FEt*N>};DyOnbu0<{HcJq`;<} z%*Ob1%H!;8r$V36(wWU~r;Zi87fb&#s=%^BzN^LB%87PkfBsUVvS zA~_$^V{+aL8EHRR$^4(|ocq^BKPNnUf%;r!nQsVOo^1C^d8?Nv>_!r^vQ^F3F5d8l z+H@~AXV%d^aH_R13-?n@#f-!shMO(ff68ps_ z9QEmSP^IU>M(J2!q_B|p*KH#(FCMJgs!3d)@VBTn_)@-{9B6s&27heU)#m-2=bOJv znCpZb`TF5t7t0&rHJ=2^XK#)A|GGDdcCv0SYkrvZl3fUN|0V9%mUjXJ3VOf*vJjVX zj(XS?kdYN(Yj4N+)u`L;X}3iU>t;;q{{@89(V#lMiLeChK1fw8+jKjRdsg2(7}%EYx-gu*O-y6s9_ zt?%-&_UUe$?^AvGQ)&JZv$ahzF29vWre3@l&L`A;WQ8CbpxOS+1edSw@@U5|%wA-}#fGpkHyVh%qogf6jRsTK-6pdSD&U%&i5o+cBS z{>tDb6-2hi_@~HqjxaeFvvJEdUK8^mVfVo+t5@fJvIpE-C(CUV%e`klZBN8;{}WIC z>Co?<172?UK0g1*ign)ts+y-gmTYfYe1D%VvDrD?2ET6AaiZ}RuHOk4m#4S)JI?5R z&zh9^81~Y^SN3_Fs|}>_l->;_#l@cIyvfCjs;&2rckI45;dm%}CQghms?2)EE(ySGr`vZRbOUpFypoEAd zFqKL^XT~SB9g}NILcvlf5!D|(@0dBBhupyt5}mZ5+)g8>Zg|)XPYH=#hC_NbJ3n-+ z%|*XfEaE>OH@Gc*Y}B!~dc$f^gqVr>slRve1!{(3ded|HCRIx~hT)L_&JOOn_vGek zVc-Y1s1lnn7}R1>B02UV)MFyp!?P)dMdKkV-1w`hh@*I7U6s`26JRcYM`yr|$~@sg z@w+LT*N?i!Or?u`vA-XguDU0`Kr!5Qi+@Oln1E(4UpjsfOhu9ZgyUa;4lKaZWjeqy zc3OSvM{YBusBW|vWIc5myySh>443fZp8Herv)$K>hk4s{3Ws+#&&1?I zIqAmw=rlW(3>Z~MURMh!QB41U12vr00@8p1(BZE^tIxWDl9N6oS(BJ@KF z79=N=gIT(3<|h()(|KoJnNia3*r6Z?ynQ_t&B@vzCh+0&mZeR@-KjUWa4FbgVjC4PT*R+$L&@n$EKWzD;*U?K(5K zw}zS~&{#4510(wlq`_OAOH}^~-G{y$9C3r~#=?W|2@yv?I-BBFBlf)i}t-nW-fLOI+7)or&hA*aHChA+$G_AQYneWLeE6r>%N!MZ!ZX z-5-4z+2=StKhrep69V#*6778X&9;~fg-Umd^LK-`Bc8?CaX1*6zDq}wQ*4GM9ejO4 zM}NpzONZaPlhg1mz3|?`Wu3bb)q=o&t}F!I<<{z=m@K7$_iryi;%N07jUq!Bh5fpA zBNwWBygk+Cq$&o*MwW|=?F8z(<$Yjj)Dfk%VJ})w_&CN8hP>6!pdVg{XW@Ct+lY!z zBoo59F_6qa8=4rhXYx22Wh(k-Tji8mF zKOVJ;!ReVta!qN+;L6HW;M=OU3^NP#xCzwCz99)po+35}U)<=asKhxx76o-@vvv`o z3swWc(v^hc3XUw&3uLmvlOdj_v+A>~%78JM#~1vI$?2AhOAv9p~psJ!?B{=4x1MwQSH z+RV_>L@z{+@MoH+yzr$0;WvvVJ&xq;1n=Sp(>D*1rjcNCr12L))h3SUflc_{EyC8I>r2SX*LskWF+_!I!0Hxv_+E|IZipjVtKbb;nxy~zS zf^!InY50)}Vkus@=adrkV?8}HNKtZEA~Zs^y2C{2K7$cg)g>9$dt*Wbc?x{VjX|;B zz8UYUk@FsU$8WUSd3}0+?4?iT-v_$M!emm6{t^5SYOh{PW=oQ@n<5fFas(=H0O0BE z-IHxX^FtA_*-Vg6l7#=+=&PZQ8C@aM68Y_9P^h{HPa>vc5IrKF(Yb8Sk?Lk1uH~?M z0;Hv`HHYMwN>Eh}GZSOa<)^DGHmNF(@|*pdMW3JM;Erh@rX(#QLrNQyWm7{Bwqy~D zLSqR3t1N^qb)FV@BaAT1Oeu%*tzC|}M6$dRk zWYFIG>hPyx&TB{#vUbl}YyEcCYifGU%ZGOYZDlruxuz|-S680Gj}&wMp}u3y>fA+U zIvw9D)h#}_gcywNu+MCBJPdhgIgyl9SciR@mn^R-3-+&L3>KzT_Smy7eVz$9?KM@fZ+6U78`Q6+ z7>xMV#~v`6MqYdwo&NyEV{O6YiVlHfSTFv})C}!c0@?J~9L{3@313!JNMw{rN-`CQ zwb^06BeaUfKWamYAJ@v5#n>tp0mODV!68$Q>OwXz@*K-Z+`322`HC6s5=Rd}P^i_F zz9e;pm4$FCF2`!t_4E9dl$BOT!rRpp@CQqLzHw#jVZI*26D$+CQUbm8JDm`%*bI|~ zO#5tv+9_0WCM?e@9f3K|!?%yqgdWPR-zK?H(UZ+px`RGvliw05g;~CL%I4cI#hVcS z@{MJ3f2>xV@8;4t*fq47u7%z#nmtw_E^#1XVhm2XMW4`iDuv>*(3c(sd0AWF7^xAs z7jH$jms}aa{*D7t9GkBAdIrpVnZJF|OAJ;lk`9*6J>j=f+J}wH#{8dgl0gU%QOoBf zXZ?>39o{Q1>LYRBi=L?w*jOrt)oDL}t~>F@3Ru5^ z@i<#qyUC%HFhG7Lh2-jiv=%+vP!V0QBQee!9dK1$Af;~j{tR>5fzfDfMFypSg*H@f zy$<^l@~&FyIg&<3Jjhg{j+t2Ef~9(>rdX1zfX+plzHhwaDN+^&l89if+%=Kp)^okP z!?=>ggv(yvmH7+e+m07Q{}TkmKR<(}SL_(^t3R5MQ&Jg`?;pK%EA}Sn+r01mhqX{U zz3tXU56Kp+@O6Z3eaXAq#N-;J^i-W|yCB`b=8cVy25@i#Ia-@5sL|NXGPG~7&?9Rb zY3X5Mj`^h)mOcRIzk7JR7M!~Ur34`vZEO#6mUZiqjbQLavh%Fsw=tx3<@@&b<75V* z%_!J+w5XV=0`kQdh3u~#72qB$;(KEG6q!7noWf|2NzhGVC5ZGRZCI0*6@8ic+-UP8 zRBvg@i`2s}?%T8%ge413-&jVRCDTf@!BD6d;srwHD62$+xcc_WU{{F>a?6ey7n#af zI03su_0H(KGJrM&j`SmXXb7pY+DS?hgJBJWsqwcqj5}i z$8M%Uz%OWodUNf|ob5XWQ-)BhkaBWW#<=WYl|i)4mX3zO&K^T2mxR_xlHL6+n!=V; zTnfg(v~g^AoDt`&l=i~!MP8s|y@;SHeKZ`jeGlFq`ay55+z?g+mnAAO4X0R`OH1JY zim9rpNhKD^%Kh`?iV~PCSx$}TCDGW;|Hl0p@}URq|-?^rA!7%*IP8^ z>YP?V%TJi$pOeDrYXsaU&T7#JmMpur3NRvGh0-W}^d z^dmMPENO##`@yFV#Al328j0gcetJP!VEH7?UQpBBYq6qHYo!^ zoM&N$=@qw*&@Jb+;Y~6?!cZ4~{2W^8{=Ef`{Xky4NHTh&hnCX6?OaZxNRq$+@Tzr< ze|~o1G)t!qSoz|n2R5YCTJ3A(3Q1^;RklF4FdN$m%^X7B36Tq%G5J72rG|Iu*oy{i zMOL6AP~8GU5oiG`Q)7ho_Q!Q8(knw7Vbi3_kARay9?VF^x_hzxxhvLR>V%)IyR6g) z-kOzEO|bb^fBa6QjeiL&Ys4NAZD0uJ84Cp!XPDk&UP(YZ>rOOOZrKcI11sLUkd;>V zT<$E-%$Ddyyvw>_&-Xc}Ru)I^!h1 zGK6tn*R9~yb<5Xk@nD4=RsWn0n+wYi1m)GDv%9dp9h*BM@)tqe1$n-`UgY#+oKh6{ zB)DyOes(L=OEV#lS1HQ(~0!iPpq|bErtapS!(PDQA^}euKajm_dwgVUgr7W?t z97k;uv*6>>k=g^gjhDb2TtOG%;^)3M1mboyYo|6=xeT}htlaB1$PI<-Bd{xSyE3JM zP2XRaKH_{_sdEQaIiU<>h57=B)PP%rkmeHTjarAL2HP)onO|0Z7aIb0va5GRoy>?9;0g5FN~=63N0q-Qh<|cR(xb9HFi0vz9teSSl5_!e3#MDN{)98 zBi9#5_7BQ51w+gUv0jD<^fkW%7nA9tl#v??JWH;zEFVTtjSFK9h9a!Ws>;3rs!s^> zA1M0aplv~UT;lx;8wRDBY5TlwAD9pbn*+UNzn$8f$SM7h@={U1Ioi(FxpPZHW8$3Z(}wO83ekazEF!wNDHzRn1!zD6Yy{p0a} z|0)RmsVvA@iD>+>8wF85F<&tyx7(OT4)jKM`7#9i-5=IW40F*OP4RR-jR$ZhBz5+h zFASW&8Zp=ExO%%Pu=}(6-%KW`Nc$@nltkWH$LD?E$Z2jqDc0_&sk8v7x46Nl6f)Ww zE;aQ;N+Kq3S|D#jbj^~mOeDLVhUD<&LE1#Q1JXW7Hzw z!eFm@H}q(Sx7vQ9M@7Li6}0^t&LhcNt8Yp@zADIulf#p!jf?bTVjbcWRE=8MFCo6B zdJZD-ybgr$9j?e%K5&-*!@1?){FwBaL5e9sW)e_>W>Ph-U>P>;!R=oL zg=CI#Uu0@D5#8?icbB_T5Qb(G^7VPmXqHvNsin*f9<3!+lQz8 zY5`c7yJa#<;$WblJ0IFYotcTtG4wX9cIr>0AqO|aTSt=mhl40!@fVhRIqb+RXg`Ym zVrCz~>$w6TG|;=ZB4O;;eiyI1XqKH1>q3N^x!8wwAe8JKX~mSPVGRHlzB7y=IwPU~ zk0z^gELTD>MbjhH0eLVwu{1+qHqMPj1l?*{Hxje2QFtgF4<7em)Q})mQ6)z6HeH(Z zEppFtvCaEij_G8{aeTraacmNvA3CqTs09ViDk<4Wh(^}4hg`&~OKQNkM& z$%Z|}R7W7GBaGf`BhFsxnP3RVW{>43TVub-l)HtOLOr!pnTDL*Vb$A=B? z>&82U-E-GfIb4Fk;<25XwWN>uJZY?3K?2!4O~Ka7t3Ii8UhX9>%?}r@)gJwkG-AVY z&RlD!%pS83h;6^Z`vXZOafET(Sc9x6oD;*!%svs}1y{4jRMLj?9}EB$SKGajz=!14 znE8}l}(WO)oTk? z`St5;&Jp~D;UBh+)GE11lSK;aZgyee&K21;D~l2T1D0iQzI_u}%L(zD5d2TTk>P|! zr5~v{+js6`>_C^+k>KkOfthiGrxKgaI7#+S+?`&`{#fMkA-TGK{I1fPW<8FO15HZ; z>q{6ANJ6hVSgJ$(YrHA~;Gs&r)qJt^OtY;mW(+ah3~hrLtV`op@~PF&QnBQ%Nvw(i z1!!{=@=6+BS0khq#$YMHB44Hsr-kwrQ^$DB?QWh#wtFib%3&%tvj>$1p6ZtBbc~sC zu;#*^b3k3KVn*1le}`5;hS+n~XCT(5Jb zY)qC^)#V8?p~(`Y4yHU*P!*97EGk=A$y#=q+|}hJdFH5R!4g*jtolcSJTI9pDGL3x z*GmTGJ$0VXj)xh~mbdI#zWK@K94xRJ9&EVCjN=K=iuK?b_l&QpYCi+!zu-Vd77;bywrKPpoKFOWYy+BM_ zPJSSvOiXWsFNcS%|C&kJ11~oqY`o2n)gY)sP161~i~&CGnDdpqP+i~F3Ro1WRwP@Y zaH5X0&WsDa*B`gxm%PD!IY|jiI2;a{22aP_wHK_Vx@7oA!QFx8nOY7#URH;|l-sUx zVlWN8ycxhb`62ycvn4Kf@puc8W|&7|?QzNS!cdLH!E1X^rUoSJ#!Dplm}}UzQtYbE z)fl+KXqfPJ3fbqem~Bn!=sn$vIFHgwBSf)TCb%cnkL9c?PM@f}UE@OUor$e_6zV}p z@)iNzj=G9=WbL!>EtO&a;GvP4Js+A0Gxo1I!MAIcBWgCEaIdg`b1Fu83o9FpI#*I! zCL3Yu!2`J|FD08owf(~JIBG{SrzaLTYe~SE`XBpQ|6GNY6KHN@ zJ;~0;N*_7c`_S8iJU*$z>6W-3myM;1p-Me;fU2WI80hwY<4HNv|Rrj|8kHv z`TArCUfKcJ&oNTrDNfe*YxdJbqH?IKo`FiN(@9Re$-|ABopTGhCE&E`%JqeyY7U;o ztr+L@JqJKT?L<{vS``3wHr?~n7!6d|Gp5=4dy?CnG1P8_&=1d)?0s&T8(};8nWU85 zINn#lLVjwKQ;dtQlD*K}{vb(v<*|N*tF$~&p_=B&;p|(tbdu|NNwHy^FaRXeT%UQI zD*v^uHDMXc3f*D)y>iQ(#%hF7n-|Qq<4trV^k{oj9^$I^F0#orHz$@3%$MyWQYjg% zCC@z0n&};4_rO1Eh|@IY#tWQTQ)qbf(~V)SCniKI#I_?6tT2B(I!a>2ZYkr$Dp^QbH$VSIyDW**wzH!tz!!mvVV?+nWv zb940QZ#h9P|HtO#fl+q=C;#BWuY}EDx}m zxdTdT($9ND@Bc`p-=Hhp56X*%`xR}_{7DJ?3z4lPzK=k24GBH-WA>2z*4W|zec=LI zkX5eBm$St8??d1H4^rkMyt4F10oDD)e)K<+`5)de>Z1c%JW8oSuJp6WT~jiH6x?wO z3Haz18bs3ncr1o9cb@cM=AAS5|=jn_*2VnYh!4 zKcfY0lb}BaD#x&n4TDAgm+yM>!dGPF6DIYE(M&6wPlj*X+oJx)5IxeyP!vNOe_UVX z1by=V3X#(de1OR9Ii#Rk6yJVgMsq5f_kOiB8 z$)5ZB3LlRpKboM=44Reb{}sy*22Tq-0F+PqL$dt4CTAQYERb%kz<#^AshXAFs#VCJ zwtU8Vce7@xb(JF?_FqBs$_s@qwX|BenCl;K`|l6$fX~lJN+h}9J~W1D?->z*DrnEY zk@NposM_V8ECzX%YB^v2>pPx9|N3=wJ5Oo)g4j;LY;j0~c+XjFjJ@^xS}D*lhl z|NEldfzUPTF5t*!_`l!W2gp;N>@_LlQvIK!@DT)+CM`gF$OXaw_nZ6wm*^=S{y)1! z>xl*8?9|iJ74|>kC1$PBdoS)2&bx)#ie&7bMKM19Xk2+*tHb%VUq5bp_oAnkTFDM0 zBI>VwqMsxpb^sDRpTOq~++TYb#v^k7;qzRwg0WKZpCXlLGXe4>TK*YXP2W*d)t5vA z^IKyIiunk8V&wStkUOP(U8dy|D=ZvCX1I8yV#iGf_{bWx9DXH@y58q4WJd(>1z7=Q zJ8n`o5dKw`sKj2dcw&)TP>cUnem_=FLi4)f=sQWi_9+HRaWa2dfm-H2qEPtpippii z^+`bXZ_`OMwyjU7_~*bG%Ndw}hTgWP8iE#ay|@*GGwB%U$&1fu7-^H4!7(YK=>jfgEGbl^6%QVlwrw z=&nPxS~)QP_5viyeRnBM!};}NlG5UVLESW*vhFXv=X7?K&VB*agF@14DZ=Kx zN#7-&xiwAxmdidat$D5Z+!psh?765EJ#O?G=|G;I9_LQ%wz4P}K5&crgDX~AMzBtJ zUT?Pi(}K6NLIJ^?QEt(h@eV1J!#K)Ab3A04cX$Xtt59&>5B}s-Nas;0+5ieFS@!6U zsez5Fp2f*t3|pO9N;SVbd%a6|55KpkzSAOKO=1DdF?z6eTM(@rKbb~IWS1eD_>O@f zRDX9M>#nE1vOe3sg~Z=iy06czv@!uj?^8~r10TM7B~an&K)&~MnjO+j-E8jyBDMEUX;q&!%~|!1r|e>thL#Iwj~ThE368UWczShVUD*SPVi9X zT0S3nSb;x+LitFPDo^!IfMF>=&g%#O$U_v@Ht+VoQ8HgTAp=pJ!fRuXZ1*lFix*Qr zXZ`koozDrL0;CR9Mw|6&?aXJt(u`6I&bQoEo1!y2l(De&r4x>jzvoWfm{;O*y`aE> zRjz_sH!fCOJm%6RQ6FV)IH;c&KMt^YtKIxYSb+%Wg z!+=5zwb8dKWXqhx7sG9D6mn>zxv?J7YGzvGWQn0`9)j@hV|FUW1MDat_1UG|*fwzK z&ZD&hafGn>!37cbt_ib?Xl2EV-<&T}(4D{=V={4dAv^(JC9Dy`&0@MF0F(#3Bt1hJ zYb)CrgtqlX84YZ69ea41IYevbrSu!BcfX%Up%i8>Uxlz`m|n)u^?b@dIp` zs4WgyjDYt&&jWts+i`fHOyb)r?;X|o4n?DX*^4|H0=sylRW6n(oa>K<)*Q|?<2-qi z7g0!UdA#yH<^`B^^l(6k7Q_ys6tB{NFEEclK}U1)@~&CJvzLjEWj6X6@aSzzpHnQ5 z_nIcx(g#hdndTn#Bkjn8YHTUaCa0W!nYIL|L68{o0F1e3^@a;Wh?_H>Y?}ClLdY%Qisd4Nk;V#i~P-&fy_|C$f6AzNO z`uMiKh^6MkzzUcvph2SsOCC}bMRd+=XH7e)WN7s#U>6vP@;qP-hVe1RJC1T3+X9d&7I=OO3XH8sJh;Z2#)oC zr?L>T)OmSk2-@iu^>LqL>lGAtxx*nL{S41NrYfLn=2x4I0bL|w_;<_R$KN;#wf9pY zn-~gQ14%i*#XD-+fL-2DBA2EuMGo#r@modoy|(Dnq?Z>PgZ?TU%i)ukaLkSlMk&>$ zp#T%_``RBypN0<1Z?roTd<|3F0REkjQ-mK8PnMJ56RlW@^c9?qlvFYeD2EPDVU7W{ zPgYP!LxpXhuidUGYfbDJlS?~aE}Vouvw4~aY1`YF!CpAwBxi}kr?~pK2tmu*$(X+i zQEQy*SCI1EGajgCX^kQ9 zci2a1p1}KL+O$Po4jeXWrAU*zFX{YrmEk`7_mQqb_5C@868@sFqw%uQTPI*lU+7}_ zEOsdnWq}0vVMeh2$hsrUOqb~jZtOfLQQ0<$vjOozEtGVwp1?)1))`+N%8Qdf;5RAy zokCEXIMem{VYU^U$4a>{7-5;LiUJer6APe=IGPlYbC(|yo)<*4FV*YldNOvaSx;3q znX|mQ)(WjgggueJpdf+^3L?0-bawSjGYa;3To-WB{9l!4H#uXe6kcH>zPw&7<*@aJ zdQ4aAhoxFOR_!xil@3qwHBT)eg(M8!fWv{X6~3{t`cQoS;pMC15AdTBq$l8X^LrC& zS`V&{g8hQubab?X-R`U~<5a=JW^#`m!3V$Tqhd0$&p1Q?HNa)tvL}4H-B@6FVKcz} zf+LPTVf1uyjEql-aQo3NLofJLU=-ef6d`}XV5gj&jSU7T<5bostAQvYad_esvh`ObVeVHtOkZinGt)YHhq$7X(R*pPet zbj(~7nu+~!k~Ya0W}tvH<-@r{$F@gr#gy3d>A?EvNFNvh>%!E`$s!EhqQjkOd*9(BL9!Ff6C?>rumEuc(R1-j&W#p!gN2qK6GfRi{zrI`k^;c)cWY@{NB;E$D(Ce*8=&zR!+g4 zF5=SRQataX>RL9ky>5H|eX2C}qbk}mV}SPUsuN*MnfJEqOPmLg(Za716>$l>h^>gZ zYLTM!r5o`==sEI>MsiL{6^SclN|pO)oNS))tLuE5!?@G}M=F^&k0Ze<^2R^YygGR| zJK1kQQ&n7R&i2SH4OeEFs^!UWxD++3mV|8;lZ9rdfbG`kNG2J-yB6hcp318usoW9nf%{q782KKTM`vQ4q8N9l@a@6rO#5)J5c~<8_~vh< zTbGu7mrscWd;zsC8ctE-#WLkDsm)BA2*gVZfhjzYGihUPabOexwsDT=oHfqGRjrHp zOWXC;Ti)TqEJG_2G;NR~0S}$$c9)+q-a{!uaZjO2)7^0M`!lwRe)bp|rI(i%sXLSV z{7aVk7rEZ6jjGGut)x9)AfpXFr4QbSmtwM6AlDmYmITiy)OzqLQk-Aq`@(Iv0aT6g zowB<4k@u)puSEYG72Mzs;^TYuis{jqJrqi4_Vk5u7IgUIcuWW(iW?1Y)D<>lw$bgn zm54O$xj4eQr*zMKb)UdT@6czwZ;|_LjKJ&|dO5lCSV4N5o50)wl^W50Mg4XT91o#E zTj#_BmsCGBm#>jV#mH*-xUD||R&c6a87}>Eh?ht(Oa}9cbbl~FE)AA`$XD@LXbDqN z$lgFXH`S4@lT3Uub|(QSpFg~$)Zp&6=>@K|NAt!agnPZyA!KlWM(;se3buc;ttK7o zq{K?u{9>*xQSRT%%5ioqB;sK^3_2rfOd`rA{)BIRL9S~&h)=7!S=IQ>@6^h+L-=7+ z8)A}OhX6h7PK$eOLNd#(2wRj+=I`j^?6&1i*Bh%tXb5pcgMGa_T!H)&8hOUd>O z{iV2SN$kND{P%ep)JUFsSL>IE6ve{Kz=T}_yKil#(@72MD)x>{Rhag@3vrL?T~jb^&F$xbpgVSek6dL-^h3)Fao8MH%z=y50-qLffb9WC4r<_S}Y zWKZ5G>YX`;IOP@xGY9!=6he=yjAgEKRU~ov%c}SvVte1jTWj$to2<_A_jf#NHYlse znKU%O@$aK#9lQ=317XdKX1_1Z&joStHTSv#cC~)iI3WDoln2Mj zUThXbIHk_mrOw5Ix>^RQKHoP}<&ctK2ZFCdqe$LBPg!AHGu^+C7pE4ia$KNxhP*e6 zw^+3)cs$lb6_&E77g-N){BoI&_-nD;2YK3bZ1f1vubQf)u;nyrKhoY7o9~DWu#Ec= zwG4Mgov#OKJ}OV2D!f1Bo;(EI?op!<0Q=$~$qhT~UlA+_Z1oW1T7L_9N$1FvrmfwS zN3LJa8la;$5T517%$3Q}Z}74%@iG;tMmu-n&2t3|mR2Y^ZT_koGX4a|7Q#f*yl_Ak!GhvtC z*Bw3P@>sUBAYsH%WqrRVAH`P_?=GQJS>mPU|6?d=jG(t^>k@B3SX{wj3*r%-z*$bM z@b1R7RkpTPo=PiiW`EjV465IHAi7l>={T2a)IzP+X+OLk&Ou@uAtN{Wj$A$E$hc*^ zTG9^~YUsBy%|b$9BFRh<{o@*(0KSCD%N9rrY^2me!2uo8O<0vhTYK4(^H$PX3?+%h z+qMAN-(zVj{ZC%@=t-^c+}b!o?K|6Gamvf`6I3;zorPp7O^!3e^=p5{Q5}hPMctzM zpKcjbK@^O2AzP@sXEwVA58UGhHCr!S9hUnVdYFj|gwmp}HtcQZPA zkEtQ9sy2yQTt1c+7*Lzz;?4*w{TQWbFUJYlN4s(dlDS& zi_=0iF(m2cthSC_Q<;UZB3b03MXqkE2iE;7iNJ>fw%TVxioaU;4=#9zlC~@~@7$*} z#ZAiIIH@9R=n==bmYcbh9x4F*?u)#ysI=i!E^1D8nB!J-(weOgn2NT;dOdAfq$Gi? zmT8RiM@0G%CGX?#p^Sf=yRR*Uk94jle!Mzj4D?pxR&YCXARj&1zDN(S`k9V`Y^MEK z##ZD1jT#-ETlGa=j}`ObJ~h=*^TzJs%m(oEwK}xZ`uYiK64qG8{X%m>()P#}-#@?; zVL^}E!W`4^JQXDN<+U$vu)3Hmq?`RpBJDF@-EGPoX4rCqfxs7Fo~Gs|9b`aTR~y4i z1aE>dWJmF3LPZASq1a#{{ttZ^&>X+VW{y(mwBMVy9Q9wEf$#>(3FZ(&di@?#aFev2 zgOyTEUN#)mUOOvwm14yOR*qI|>cQ*IR_NjT(9w9URl!n&=jF9jZ$j5RQ8BlDDk)D| z6OmqGxXia!Db_w3>gW_s>(BA#g9l*xc2_;lC1auP`6zYwMINL()&aqbG6ia7tv2?Y zmOc>58JtH*=1hXm34NASRfvP`+|#goYkzI^VDNh+J+h_&rOs|P%{8F_;jnY-YcKQ%`8%dBZ!PyKz?gPfn4 z|1=sK@7Lk}q`}Y8s%OnPan(t!3EYpI!wUPA2%Ye(o%BlC5S^*-wfX`K6xOR;nrEoP z{lW(gmT#-3`9_7c!ZVg)kzWOh-1@Y&%ew!jc-D!bb!L54vstW0K6|nR;%(0IC`!3I zV*fA);USJzw8__}$8|=YtY3FuAUUv3T9_gX%CJ@be)lC#axLe+80jjZod8H;G5+p5 zv@ef1!d-*BGTQu9&R%9(&wfd4UBF=pvxxne6}FA_rar2k!dp@q!64Fs!%Lh}Pei`) zrr9k-tM+k#XqxtHDZvEk4D8rz;KF2rGJ`dwEmxpZsCJ}4hi(7Y{95jTTN+_>2lkkl zdzL!y6J_t!L9CrAlI%k7$UE{@u_eC%NYx@dl!^Qb`Pj(TrIc#!T(dORcy=z-*;5_9 z)qPpSwBci{J+HF%Ns46iQ#fs^eLYNiT=f*BCj2`NIPS%w`o6Bi-`>TS3l?eDV*W79& z*)rX{vD-Y9Z!;?{ShgEwkG}GgntfE{8xQh8_BVtix!0A<&S34=`5akf1ge( zQNaI5a`>cnX^a==yV% zQNm!>1j?*T1HU_hL_R@aOR(|lBX}q61?DPiK%S0tnd|d1zDPAn-vc`n9p%x#3+-37 zWoT%;BPof*f*oTKn#SIJ~CQH+Hc&+>0!a#{QK=ahW9yInRkH6&-XV zPX`MT6J7YOVdkReEw#&g$!^ zl5IU=A8&Hz7z-|xp#@@5w0@bhBg{}{;72G2K=F}!+U63^AuM#K*eo{5&6jU#IP++t zM1R9+&!n3Vn!AvjVVmuGSEXw`cX)S7t0BpE3zINmHQr`rSluT<+~ZYmHb55t7n z1N63`1`QMi4QaMB=IW?Q%V#;uH_1G-t-2#UulC$Iy%1WG^4DH%U49A98;74$3-t10 z-HlEk)Ei#COZmDCVhW;6P%=s457}J?eRjSoZT^y`wYlN?`@Xtg(V?3_w~4{jaENXM zEh0;*FqYaPwiM9v7lcj&urI$uONL8`V!RHQR22ev8(sU8-UM!XHAMk}E0&eq0JpOh z&rk!SEEOUkeoIRlxKHUpZoY)(F?Uu+!Jwn%QbXNMMBBkNN%56@k)}Z4;99OuPKq{U zf1^y*YFk>{zVQMr9>&)UH86Kn$LjiF==Euj^{gDhj2n0Arcx8LStbVqW^oQzeD#)u z;l8cnMDI5makQtzCw?Bx_&rHgsdaUd>_C$wyw+rz>d3SKD}beNb!)e?cs7m9Qie!9 zegafiMs#%E7@6#{C_|?hT(8o_RT6m|fiCQEBi$8amunI3b$&F4d5LQi zI0as%*!5}GBYpy#f@WU*mB24zCV^!@#47Fkn|7605mz10iH>#s7*O^J_Z)WVwfYRR zivQuveo!@X60@>vzc5FO!|<3!(`jL)C2yQv=~m_8kjkyon0EU2eS1pM6Bd8c>GDk% zTQ`2;!i9dkQq&QeqFI<%4|n0fAu;<-#H`(}01-3MG7;Rr67JKJgpY|CR6US@`K9>Q zh0SBX)cgA@hl@$;l5G*eTRH~I#Zl*$nc{G*Z0MVBUw(4GpDi{+$N^!Q%Vyh$jt8=u zS!%zNc^WMT$C4JSyy>e%EJeDpdB=mBzmBYO?i?X7Fg`32crMl^*6zsjUXbe;Z^IF7x+7Bsv+4=v?~rdv{Dzjiri2M%)z8BOf@>N zHKynr-qXB}oKkoDG-=GNP?lLwzEh9J+GK|zlMRSX@A+)Jdafa_q~cryY_VJ9-+EM4(VtEBWRLp%#E5#e z^9NOz92sAtIkPDmg^K+xdr%|wx|b5UXyGWM8;vp0gODQVp6&_;V2!7*y| zp@d05b+LxFj7E(X93^Hxf%%z&ZgmZ>RcQ4~wO|3G!0=WPKZBv5Dpt!?l^lWxAP|}O zq1e+h0%-U3bCnXhWAEtCK?X@E;R>A^AcT^Nh~b;j$pGT0|f+_M+cf;&j7zuNh7h6xePJZuEruX2V-;Y#Xk(lc- zn!_-6)qx5Xls-L)j2RT#i6X(Jc*QJ9SNy7V2QG(Uv`;Q{1@*d{y5jQe`%(gx`FJKn z0nWU4xWSYqfZU}|ouqb-#c0IaKh1g+f4=VSRBx~}Xi3T?G+dm1d90R)2RC-=Bt8{3 z^s5W|;;}j*k-LaR6i0eg3jMQo8edxs*palro`A<{z~NVq57Vspy3}ygX9YJ*CWm#t z5O|dDMTeDnHUQkP#~=ZS=(4RYh-i1_{Sm|v8EhvXjPMU!I&wqP$E9Qw70x5TBN>p!*bU&F7Gks{XDw!*hCe# zhE@aeNMD&IJM}~Ume+ROZ>qcP-%fiudc;OEYth(<;v_BFoqBGM9(t4gh1Pbf!R?i{ zrsl{dy>&|tQn2X`7;eb?9W2C%o>KpIUXzfE+mbY(PxX zw_WbjN=0z>VnM`u;nFtY<0YRXKkI`doQ@*sKs&?K8J*I&aoRi!V-yT6GH4!_OVQJldFCQRo$k; zCs0JKogwNkCE?kdNJT#{gShI(iUa771O!0z!l*TTd=cFoCB45Zr?>wnx(R?|>cI-F z$dV?14~&#fz5H{Te>biFj@UidRPV#nJWyuH%g|+<9~{v@SvlummCKJ!`hdNbz0Qzb zp8R;1B&|3Jg9XO{;09rSodn;HIGA*1mrZ*rImEg;KNhp0dCr}jX%Gh_2$|W_^1X3A zU$WJl?Bpf@R_gj2>LRV&+9zOtMK7n#2H7R9N7p=xV}1RR@Lirih^*=DqOg?C!hBf5 z2h7pt?uNxd1O#4*Eb8Ueb)EawhN;Dq6!%!1sAaF}o&o9!Ps+`bh4!Ms>!|i+@v-F& zY|qozzqNTf%BK?9%w%JZNZd(TA?BhqI`+k14Fa*hp21*HtlPBDuota0$9n;M|Vou5lc$9 zfmaH26fH9XhV&+9sz+=mhlcl9k0mmdNr(q-6zD4l-?gMhGM!k#c6$oBakQ!auuQGC zl2s6w8XquZ3g1t1QLNblW3Oc@9jCR$x=i)kuiMLj(4e)S1+HxPKi_W0;HBJ=BP}Q5 z1vnb_eyvDfAMbd*%0?O~?yAJ<_=Da2=GEKm2BsKy4rmW+bk^PIdVUF=%Rz?#;|V>( z`U1Fo@a=0xiul8t)}4QqF$FYK#nz463ah9tP}jO)b*&*|AliDK}-Cm zoIhGKAE~4J{uk8l65C&Q545>{hm@Mru?9i*Bo<{!s1M3Q zo06863vSfTk|}n~P?~Nkjk6u_jTv4ICk&x*6TNuZ0;&R>$!?H?d1ZP6URCd>E5thl z4~kPkpw!5FuU-bQOV)lP&k>}Ei#72wmMnsz}R>{X4 zsM!)aHg=-HU;G{4Uh^>QNU76AjXZURkK+x?Y`VhO>%u8BuW(bwXD3qu)mip>Gc@In z=0ia-r|4Zn-i0bYHkN2y?&LQVv^qV{+v`O-297P_DSjW%05wAdRQvj!B8-SQdRtZE4DcU3m$(9Z z@v-4Or0Cby#?WY`y`C;ZFQNp08*s6EFbdJK=b>x>#*IP6sy_SCe5_>=T3A#>opg2& zzl&p+7`T2ejypS=LYWLI9dAh&zci8g+6A7P9pGI0aD#%(fgQ$cJaaMqh{#gUH{W^M z37G9^D=3tW_X}N(y+1XD63PV*>V&AqN*t{c9Y;m(ud3InY#wQ@^wl0+Q!m9%F>=Xv zQ=~R=NL9LzQ#fcc2>TPuCC)7-q8TqpkEZ{qtY^P+2fULGr8R;`_P~T_-J@uqX-y~C%2*c^L#&?Zr+t>I?WHl zIK<50{N!~phgYudJ<*xEG}PU0NszjmP4&4A9ampqHcpIea+A>@QMuyEitous$5XA^ zBedJr&&!AbAAqi9yELaA9VIkfNo`9*tA-A|*kE|I2)E;wu3%8Q<#rb-QJLrEB~%x& zkFQI~{k${lgR6lcoZix)JWFmXSUdCYbJ00uDeDv6YBSZiU2mlAXOf=eWULQ9*Lhk! zuE$Ny^1K+yxTz<0A~KJDIBiMwK#SeQBMZ$!ZGIP1CX5|n;Z#@CI^I6q`co7$tclTn&5Zn{N0$r46PiD+#b8?pf zP_bFOQQOmlNPKI=pg*kbi@Z(lA{^1rOif%hKkP06hq%rz3Nz1- zo5bK3vjqrHk?+&-H0`YOAp=e$+gB)0wbx=X45Mv4nwfe^RyPjDpJTV_>arD<2a>y1e0ztH zQWt=2s(UC{k2CFezO=LU&@mo6Jh52EY?HjSySi=YL7rnh6#zzX;bPA4Rx%Z8EaFc? zhuk1Zs3nWZnhYjjH_7WCue;uhvU2d3b zbGG(rivH0H(iCRBcjGP=Q|e=T#^F?Ud245O5Yp1q(IsDeQUM)583=VSgeHn(nf4L~ z?JQ2}KwDws&s;erAfSJu*etG|d&I0o?K2TppGafR7(HTQjW+4u?lhkHu@w(8Z~H|8 zvsZF0E~!nuXPf&gvn_CoxCWI5^)@Ylu<$g{C2X&UMo%+FoAuR(y=-j7IxW}F^Vo~# z`7A5~9vVHpQ1XL&H36bKoW}-Qh3lO8xZZ+U?sJ@#VOM&B3f7Quqw=lgKAEz*bR>e0 z(u5{1#eg$9FPj+#chvkyyp%e>^1bD2HbD%g3YtNr+rhgw zhNSLh`X|d=4j~8qa(1u3;ojp8Y|926RPlr`JL@GU^0;VecY z6t>#w0NKU0jbF_ub$R%5of89Rq;E7Hq**Yg=-6#5^Guw#54pHR9X-taF79iDJ${=~ zlBy(dtSOHYW5kceWfjEZ*ehmdcq!!Eovtv_&mmQ{-rEfwsL%qm8O}rJ)S_#f@6$M1 znv-PYnuN<`v)v2nO#pfdHMy3-EBiTkoK8~xrPX5a$1eLXo0m_yY`4#C_DLBkg3eW$MYJ7Cq6>BvryP5vT{ z9<<9~sZOD`e0BwkN6G7gB^TSYIE&f5`rrqfL=Hm!IsNYYR&m-TCrR73nar0U*^k$6 z79FHHAiK_G_BBYn@b4p}VNUr)%#2y?&-Mv@H5N*_I^m4t^4bb*Zmhx(1M|-J<1msQ zmtI>id4}872D})UmWiH1Ehy?-R?_$+Vm4>~FmJU?L7&R4b(HM5ysN*zbbxZS93`q! zlr8ya6%Y(`1S&2UtK>Qpl}?87R0N4LeE-@$P&mJ$)p(HU;Bq`Q=*bQ|Qn5rdG0*_% z#BL3Tjkg$y@y{bMQo4C7JytQbNA_`T)- z!`^#_HMMPRpxZ7WpaP;GASy@^5Fzv;AV}|_LsX=M-g^-d*n$-49qA+?)P!DC1e7Wz z0RjP$CM86K&_cP(v-eic*=OJL>;AaU^ZinINYc{-Jg4NZxPk1hg1@ zvM_YN=vnzwY``VId_ zBk?!4PWA2O?n|}~c2!R=OneRxjk-7SD#^*k{RM-X&iWR97U&>#6mB@4IkM?nle{ z5BU$qFZ@w!{&UyKg9E)YE#_sgYDVbtsu7E39OX`m_FO~l(yAA2$qb&4UU#>Pzt{Lk zmDQu&Chl1S)nd~q*8bMR{y*LZ(7ECaP$=I0e1h74AKK4Sqrgg~0drkHn9X2x3&bR)1Tlc?>5_p!IHc~ zuN(br->++xxI$mML9Q8h23wT>*u_|W*yF5@$W$>cy!>5Tm3MNEF==_7O6AF_28L~# z3M6dYCCZ-t4x50^0$FtM44FyDDY?cRUK|tp06Hoy#}ltdXi6=~mkr2UywS-$KPv0F zMc2O^W)b~8M?sU6vV3&9Ki}n_8?@yju%L!*ugK9V+xyJz>Op2Yyh5$s52IZ?V*(V- z_gb_)wgm4M7aTZ*hu3hW?VJ*OCmBLjjM|C{^Amhr)B>{E2J18%?1M-cFSvDO>w7fw zAZN}fqJNS#_xG{Jn_%rxzChu{EdDO8;7uA)0vEZ$gadqI?*es>xH8}RatctRXt;i; za@V@|ZZFvd>9z6#Y^KZ3Kwa{>qR4wGn?JUs&G9Xz@cPUi1;JQU>(z-%OZrB<)Bzw9 z0>b8Xg3Q$95KK72Q~*czm)PQYsg`{DRp>w4F;^Y1eNK6=xE0J9(?X}TTjLZ=_UF}@ z&@WYSSFfBbjuJbaIG+*(UlMU>^inX%I@BYJww4R#SL>+wb1Qy)5xn#!He+M)!PL^0 zd-TTp_g*kLXVtuz)r0#(`IPrKkmlgEWSq-LGU6hJx2^fLko2E84ZWBaY zgLPW+;iaPD@EQZqvQ`w=>nEo$rKT#!3}@s%r~k8ko3#N`9r^azLS)}*8sCDh4qB%SWae1tNIZ}%Qvx|@ zq6Dk$Z)SbU?q668OEKWysgYsY31AG91d}-rJ(bD9xV%wj33zlGD|DZgxn4PVsFx^veLWQy?i^R}O=sW$vE*TV1v@^2B0wrh)Sl>3GP8UfXf z?*>J!ISP8Uo8LsBK1$Skht9`ll=OFR3>Q?I(|;khOQ|hyy*C{BSZ+mSzBMPZ2(#62 zWSe#S9;Qb|P2U-S4gvCz70v>Ze5%5K^H_iU?n4dWjcO>$kyKAu2mQ{TMvQH~ zRY#hfYlcOgrs2!i7+QdiCGSg^3M)rTY=WN<4S2|%r}P%d1Dgy4%ut(uxos zvwd2!o9cx`y>mixUsn0n4*;+hrhlEw%#qDcT}x`vggqpN;37%MpnxeLo@};(YYA}h zPH*?)DrQ-l>DI$)+7Ak&Mi}(Qm@~e%#NaVV1wC*za?Gw30{yr|8T^@Baq>dBw{;H& zhwSu(=~IJ(>uOI+jcGm#Ng)QXuO$YJ)u~rcS-?q>mPy}YFH$xv@_Q~#DrBvyj|&JV zEV^xe&_t#lpsq7^nx=@Y3e`1IA_GibscFFi2%JkoPDOrLbRkO9Qb*Fv{EQTWS)}(< zuPjPVmH zXt5I*!`jTyK-SnVwVTm<^hE2^C+`Je>eRZn|XDIOH@{`>igzZD_q!>wfn~IkW1Fi0MXedYsj_yk1 z%$X?mTz{}wpJtl$HDKq>QbYZ^wg&U4{G9rsRN$a|HFRGI*lm=Q_LC11EF8<~=JbXG zH|#i4s0R3&AK1N}p&pc%?z}VjxUxk1mAon-1GF6I%C#GJe%9fA&fo$$4(sMCZWSSP zn}Z>s`$lB?UFBXi$;teHcFKmrX$@SJ8#<;q?6dP!VGmj6b<0Ijfr0H?78s@^oe#a{ zpj~8(-PLR6Vu9jsNQjF?B3cjZ?RcX^I_ttw$FNr354Zqfp4?V#Z+;EWW>j(gD-~t` zwH|O5Z{bxOMD9`T##&v#w|dJ)wB6?YW|E$L^PZP?n19*;PM-KeuNH=_&fj?G_A(DL zo?CIDTDZcva$_vzyJ4vaUm8q@jd5s5CkyODLimNniNsDeO0IW)+uAyQ6q3YSN{}4SpON+95uhAGS;c_pd1O%kZc@ z)BvsCH4{3Gzs@q6r%1PJ_od+p10P!+7FdxdwSGKIwGc?q9qAdDs*b7W{)KYF0+W~a+geHZv(PJg-2 z!q4}60#g3uY5)dg~kG5uwI2(2u+>NJX{xLURxlc^(Mi`{%; zJh=6SdT=dA`eZg|0YO|@AaU}cdA9gWifNB-((?yn=%o`ZBxl7&Nw;74|BcF6Npd5N3i=Uo30wJ`O8K8~YBg zHYnbmOu!O!KV<2z+Vv;h4YoV%*aBHk+_o}Mu@AgtqX=D;J-r+~fCP_?dxQNr2qKus z0EG*3{-`G%-6pGtsL9I%CP_#Ly)yOGR1kqWaLT8^deTrI(yXDp%qQ6S&)7T896+cm zlopl?3+l?Ia=En|1Mhdt>8-`{NBO!L@PRK4y0pN{HG^+H4%o3J=GC3ZK-s=aNUzi6 zp_|Z_&a;L=n#Bl4;tGKg0vOkbu7N18N7?%%y))N1reD{zs}H;xKzNSoDzR%c+HIg( z?94W_2xPZc7Jhc=BJfN*(5jVTk}ZV8PN!X>mtN4drU8tiI;*B{xUHZ75~>R8`nYnT z!D1b9_4P=t8pE=%!Ta~VOWG4P_tz*o(-2?8XK`W#2v9LKM%Q;Ig<;2&g*D$S9{J*J7xs6ShM=qgP z%V7!Q@YFzMd&ZL^w25D6SBE>Rd%yRjZ3Ry6x1*pcsO;1VO~&rxQv^KE(zgy2r73w+ zjIVp8LaIvR&Rib<9!t3_Eped1+lI?++F%Dvt(Rew2SS@`V-;|<#N;`i{v;>%$<{li z{a=C~*rnw-9u#IRpTASQ-xCCNj)?OL51$MW@f@4=riC>-);laS9-p`EA-gVZ+M!l? zop=%{pv`P7F-Kcg|NF+j<`3YkvGvCJzCKvo=J&g0o9sw)MH?ucOi+I6$5>vwLVBYc zW?46EY_+p2cO4GSD)x9ZhP$TM&UkvPy?oqiTK1LQ67{`Aan2s3!#2*EZ9}t|aj2oU z^@=xfrHK(fmWR<`4xgkadcn-AgW>yYFm{5e9isa!vXf$Zev+oM=>77WWGkjAn`hWj z0mMqc+d&YfWZ9*cFr|NthTNX49sP}lNhYwwq=-PsfKFwGTGnC;Sr}{?2QA8;g5)YJ zZL^?LIgTZ*4&b*R%euwMU_?1hzsAr9td;p@p9U>7Va9WVtVK%pET0LCbgyxvGibnj zW6dEplkhr(gyB558ap8u8R_d-cZp>&Z8I!FcslVWN2W|cPOuE@3CB{bG{kOTFRN;F z6XHb!HKkWWh6j;AjtKktKE8&_jqN7pWSxOxq?%VTf1A3pe{b`r#q<9Z3*KvC00Nd; zg#=OR?)5m4jnoC{2SX|=3MP85>}xY!+qKaINx2y|YE5%W@r1}8^-%R<7mT^`_`I%? z|4b1`A|XzMgWmuWd>+YKUfTWSGlA>`QCX%p^QXHvekOgs%;Gt!W@&o3VxTg9#IlXB zYccyx6X~-LRpgJZH2`m288ioM0B`ZMUaDTaK4u+rSVT{~`sI z?8ttaW^&Aer?MpK(Yv`W!-%;Ue68rttVN(q@blgNiNYs^B6Jl ziXtYjD`mB(@ulltNvIfhWa2~QW{><7VG}RStgjbMY*xd_X2a@(#|+Q&VY~(z|h)o9hl?D0iZ67dV^O7*+r_@gzOZjq==mo0~3D5!PkA zm4H6c&S% z((**%!GPs3_o&P@(6NOP6S0O?PG?nvfk-r_h-ehOsIQi+=T91wEVte0(U7o^QYNuo zE)`Wm8O&81Q$g7fKH8?1MPC;IPd>3S=J!CWS!z!(EJYwMv90>;3p z_GYt-s(-6d3F8gxCDVF?_vtXt>0ud1qdTh2#m-5QXSny?zD>X4**FWV(W$VS)%+Lv zk}#!rTDv}zw$x-IKS##Cl_^P!dUl1(8Fd^Xs=x3kL3l$%w%y6N=<5dx6JLEV|EWu^ z=bjC1PNT!3tpz@plB9Jayh{gBhc7>UnT@ABN2!Z8Z}b>`Bx}CKPRMBHv0r%Sx+LwG zu*WlOfRM2SnvkVKz-EV~Bbo|;%8(5AgEIx)7d4x!ALRS0 zMVQ)d>3Eq@=*UePcKyUf-6+6?UK;Q1)E^2$yJTh?dzjUdE|)R-i+WPpHJ^hzx_`yL zSdt|g?h6%^I{99AghJOnPw_y@Ux|w0|GmlMkp<`C`oRTQ6}Z8&d|3x;xVY)|9HY|m zLh=olD>8yi5#qOcbTbms>FZz4_kKqOA{`gUH5pbmOFiA+zAL1kKt<(oZW_8*=h&ZC zyV=O^?T}odq4SO?NiXF4d!G8c#qY4!-ToU52O^+r%s;4*mE)sW9-H72g*a1n%+eI% zQF(L8x92^{CYy%s65ia8zg+gD;{Gx!O6%Tr(a2oXy9Vqe!4F+AQ{lC0CN9Jfu<)^d zyAOM#!L_B*c%Q!1QA8$)+J6C3z$l~E&VZ5dDg7e}%AH(QutYLKT;NWvq{f5_^ z$Ug=>XUzZ>)JjC`>}*6F7WaC6O`^d)YrZe&0iu zZ2@NVXA;chX`%AFzqA0`?K15gRu>1;FPZh$$G5BEJmS`EJoY-vHx9@|`>_t9=V#kI z${j|%dgf(>PPK^L;TvhYEAcf_UbxA3KojbM>IiQ;jh+k>h;Kz8}+M|Ssr9p;-(;Msuz$3F%BciQ;Zhd%s(=M$uPr~mcr z&ojWYWn_+hmH8*g^4Hs(Ed%(XRX=yp|Ml!|uE*p}*m8dJVEcEZ`S&GoGX&@a@8){u z|Ml$cIshBQYW>y_``2jxi4?Bq1$g_$$qDNJ_3Z!1xBPu@e=SDH#1F`3?z|fQzn(3_ ze@}UNhVJR=(T0Bi?L+@(mj7p#|6p+cXO{oVH2%+9{{PQg8tPn|-g2fF+HqAxsyC~& zO8{|}Yj#7JS$l@tqS<+|zepq9h?-~boEGy{h#nUdGN|?@jy7Kf&Yf#N4nX(JM5-fE zWE^$K`Yn_VUP_TBHJ`=syb{N+{9UQd8SGiZg%4MlfKX3_3GAZTE6R@S7Tbl{;SHF? z#7zjHcQ>W{pA;LY2b;W#(kfsz%4>MX#sp7$#i!37s@Kmljs#cdVB&TvvH5%Oa9FR< zKst^;f%($!(qRXWcFuXW6QR}Fv9&mBL91<00@|G5%)eqz`Uvck$ACw&_V(A z)a(p0$~O+p8JU>UZKOZ1uSEz~$JU7?-Ti7AA9IK@aL;DTGnU2C@aD&508E%^AV%!X z5RB2&Z_3a_OhP_Ew2)P=#oz|%$~uJPpncP{XlLe$yosr29gtm9US^;>^Y19dmm4@8 zQ+6kqkDQJ+08()1eX&P3sLIb!Y4r?KGJdvqzg6jbD%xUOkKAHbkdmEV6zz2}?Q~hn z7luaPv^;-+@}n8ecqnQ*Ebjij{YjQ20|Gx4kPDKGUG^Bg5$QxM+f9f|juWvdG7D-_ z?Fzfu&bFf{DH>2ls=TE?AM40YfoQ!?xPq9yWgHpi7;8=p}CgQM{x`S$&fa z%(EI)w!>4P@nR?>T21)ig(12Fhv?ZV)YuM0Jm%ce9qt-765XdeU$DDHi)GF?MN~1f zFTCz-EKI6a%-T-?=(@We*+VTg{U}4_Q`^_%amS^6gjs&ASBL`uX|3tvhK>N$4>~{A z&~+XWXHZ6dZ+*3bW9eHAIDIqcf=PfbR?BMsG0ZT@(oq=)d;qfZ2E*g7MQ>es4Viwph18ouj+up?)$zTwIbg!Z!x zZRPX~JYBf-^{Hx!UDB={b~f*l0R9PRtx14zg=M0_EWtlUM?L?<<==jED(80-@p@f6R`~?bnEYh%T-P$m0N-Zm-fX!vHzZ z2|*6UNJn^n_NdYyg&dm;We8g5Ygj(mv>TT)nv1L>BGfLYO&{calsH)bBju$2szep8 zw0(m~#y!p?xg{VlHpD*qKFgtR=%t?2vM@;dl01fU>C+)cw1b{XwgT=Z%XqUvb@;h~ zi9p!aH|w!c_f9W+%!&=@Nl>YZEV#vsj&wy-PkPz!smr|USqmW=ZI*NU@Dhu4%_aQi zb52tQ(~mPPsJ^WaTxXL#rp+>grdl++Cn04?rd~#!I5%^_q%y2_ZEcXYxg=WOrx0lE z((IzS)_PbVAWJq|URikgM>P1Y$ouQ67s2xoP!*tPBeO!sUb3=81bPaMCTz;*X|7J? zrG^m~gMlo=)<7$`V3eA&WzI=@f^@;t#VItx-=aQhp#}qlZ#k_#hUKl5%FDE7!?GFZ zq0bit;2L1!)D^=U1?WxBg$0w!03 zj5^E!@7lK8nC#%UBwU1beuymU^?Hw6}sv@GiWd*~KnLZ_~H+?ZKPg5}X`5 zok14mV>89jw?#(cgv@0hmuX!}C!C@V9YF9>LtDG1WE$BG z;`58VWOL_?`Z8rwDLkBT#%@E%k>TQJoJDQF31@#Xi6@1hXBx=2`?!~O@a?Lw+B}}t zg?p*pqGsM_L&KJ)LmCrHw-v@w4!if8tAs=C>vygzyG_VBnu{pTSU`|?iYw6(ipP?c z7h8hzK@FA_W+w4hi%0p`c>HGdkuOPm_eW(@_=(*wowSsf_uJmRI&xCb-vQjjagm3@ zj6WU4XC}rE$hb}2c+JCI^raX!#7AZasEu_^c3b2G1(X@CmLoGr-Us<6m|y;4rHn`v zV;QZxKa=AFwl6j3EBqX8P7i8qO@|PRh?)%WAn?24`NbbKQZq!SHQT$#y=zes!xb`f#6_FKwf)qg2Fj>-_Os`>=h8 zz+mdDA=G5lbj?YFk>0EbJKUQ~JT{PzU+>Ba<$f!FUD3E}J2=V@V~5g&qtHte`TQ)0 zpG>{jOB%68T_Xn7w>s_mS{2Ms)LeCSr5h9pxPL)Qg(xGf!Axk`(-x#vz$I2cK-pu? zQL~`+Tc2!%o%6r%E$5FTnk(RXa^%2I8HK(5 z!y$|=rbyz%!AqMe#Sjn^+Ywd12Lj->Tsl+C`pB26}oB`x*hp!Fj9Bke z)3weCW&J`sTz8JwUmPsrn*K!7-XwBgN3iC7U*6Ly(D0Xmv(lt{bl}F8xV{|e+~y3! zug%_!c2<6vtQ;O}i{6EqPK0SzH^>V3xB-=Jl%$F6_&C)@)c#XH=0P6CwMtXeY*GtT zH797eGAwsLy^f!_TsK^q1IIcRh9u-CwZAmrcCFmq4YeitSeXL}r?9WdlQ+ zv>gEwjquj-StE|+1_7jAVVN;!y=SmS)`TX;K`G^;r_Tb92J;>HC}f+tG6#Hks7t?Bc+GWVnXVm_I& zIH@<|We;-Y75C^LmhmlI8-^(EtHC^AGpbzrT3cIz23nJ@`DLvDeJ*nG;Cls zWym0=9?%qE;P|3sZ-` zHjy6g=zIG&xHT)sQ5Uvn>_}n!Bq>n0!~+Zp@Oi2v8|@R z!+4;n|2RI;V~G)IDs1p-J-CV$a-B<^<+SFfd*hL(lI3}34b_ij^Sq_%VRI6u|LHY= z$UGCkacOi%EPM7=NT~sj^`KX++Elh=5gtG~uNNF16}R$Woshq;3BXKQiYvYkDzWfg+$-r~&>XG|ZG|pekVQjT zGv8*TpxQREww;kzmLwm;Vlvo#Ct5L3*vuC>%3zlYYbCTneQ93`Rj}PuO4P=n-Vkaa zbD2|F+CDir>xaN8C$6okLv#JDt~fx~YJ6&nc?(0j95j2T%~GUq+2V*C94urV`vXb! z6Qv=!5s~-Ykx^@r_y+ZX6Sr*VRA|Wy*|LSB(o>7o&0x%Qu6F0X^^lp_ygZ=KSh;KF zOl=3h=P$Vc$DK>@^rVqT#=(uqG>R{o5l)_jdB;IO-zW*_8y9RJ;PxlN*2EXSOo+(t z>?CP_eB;ien;U)L{Qfu3bG(S)Ov$1fDzzGKZbvs zv@AsJ%uW3n*kvRbu-NIOeePJgKnh=J?fE=Wrk>NEQ9iN?au@zOHoO(HAX30}u;plS z7h2I#D)T6-8p!(Vy?;Np*nK~PqovhEOjAo^Jh5iBrnPINK`*eQsU({^b2AIn{{|+z zF-|L)s9la^Dkk`6xon6McI~qILI)4 z_w_S&E`7rN<>OK?$_k9op>390pa`>J*Y*suXd2^{98zgJcEp0NXSs*a(QZQU;hO-}KsRhG6cX zeK}3^kTcUBWkUc61vl^~)%01WsEn={Nv~X0_1&SDh!}*wt}q1-9ZB=q3I=--1rxRU z^PpvEUH28|4FmWB3Q?tmRZPUW0We-9ie!b%z zlh5!7R3Cd`MB&4%xT|fFdMn0%1k|WP7k7>VPh+QH&znND&@5gxjuDRM9GwT&Ro+NO zx-Rh**OC>F%kCp^xlVUAp6#Ls^rZP~Alk%>G>+gN`(}CuOP-tfmsVdc{GnMXHlUG= z%}^Vfp|x8dYVn@ zvzYw~rRvkN<@K%gY-%YLccTbi#uj4-0oAPzgIBU7{Pf9Nhhg@&R@pjfp-wxSZIDRw0x6WaLC>wI!+{E;W_{!xG#63sQS)`)rm!* zCc(x2{#py-gkJZD!H&diiUn+HpaWsPusf)n-j5 z_e&Gs%K>9OU|}}-m6Q1#b$ka@pdpc)gY6q~2aciID~!d`JnlCNkVcJ_*E{<4Y9+F7 zh1Z7YcR?y~sGBBQ>US7iVv=HM)L0fqb>W(CE0A|xmDn)bo_~q}wYo1zfuw z+l|5(ctdB2*r>UN$2>YR%1LT|J1$8yy3I6)KtI@L$XhqF{!*T<9_J1|HKDDDex}M* zQI|tgHeLWJwV6AN6Y=LS>z0g|9DG2x;H_hHnjz65=BXNoqk)2ya}LGA=KI5g=wx+2 zGs{w5NaLyk!3_^M%Z06UAo4%%tc_L;vACP4gRY1e4)!peQwGGLFKL_(l@oG;jRh@jv?_)*VYh$`l4 z5XW@<$by;b@H7D-jGQ{lCj)KOvayQbc)kyR4(lBP*isp;@#;SDmzAq(lCvCmKQ{|p zc4e7dDxoOGf3^tt+z(E?cJD-y6U3P|CY}v{L%UFbOWjkl zfB#xUW-@{qb`2B!u;O1DNy0nw?Wq~cg$u<;8P)&JDtxw!KuP3>nx@#h^$SL- z-2DW|Eh?h&thWr;m!;bz!=GD&CtU!kb9lIj7VpQNo9{iF-12CMMupHr6>4QX!5bQs zUU;61aN1aW;U_lmldsa(Hd>cS-!M_*2$XnmBHQ%!37#@LY8-TQ8Q^YquBIkxswrhy zMLDky>*2pF*u4o3ZkPxk18xnNg{1l1mo(^8rgHCX$s=LbrtntAckh=wdm|k*ogMe& z95u^p(6sq_yq4A9#s5Wz*M_}o2P1ybV=#&U(l z(udAANWd?V&NQ+xZ^0q`&&E zTPR|q_pk^?{=iUWfvLGk{ECIINL3xd;HJR~LA3p)C(CL~pDbp!#zME!0mCeXog?XC zDh!q+QN?AZX&#(9qhxGK4L!ONZOVVYc7qjm%IV#8 zbBX*>X90nz6~n?vJ5gvJk6Ma}fZ7cdg6hcXB8PRd&`S&t&x3bcn*YTh= z+Q3%7FvZ6m*IIuGW#YT11WALg_M-ILzxbVB;A8&ex! zUS11WxK?+cwCnd|RG8Y?Sj3+HYV^^iI;9Da=5MI4P#+=9i%ymKDf52hxJfc>#~~R6 z4>&v#Ggng!xTd#QBGaVq>+r@FofZKS69qtGVz*T(g?Gg48J#S+G_d%3N33D3gxA}T zg*RCacZ7OhFcle(JNnDb>-;zo>xsO*Y*%teYL$b)p`Jt1TO|kc&~&sKk9l=&LriL6 zNN?5U>sEK)Sybg;Dv}VV#gjJ_n>bZfYKkhWW-o5%N9`Py7U+M4@)bbz|LB2Z5iGTMkXgyq-EsUH}e7Mo>D`&MaFgXXsSqV6F*Q ztD4LuMpb@XU`Gx~)ylM8=?y8M!>#WCnX9yX7A&Q9Fc|4yds;KdcoPw1!&i`Wbt^<9 znhW4*SO>nT06dLe;qH!D`|3DSz_J@LE?u+aJW{C#5NrblQQ@&f;--m8@xdo&*%fX1 z<{CS*+1DbS>VOgnnL+5%vvO4hF6RBI4|Bntn7cffJ@C=8723aLHC*7yk-}rWxF5ugQJPu=RsWc@|V&)S4coP}!KBawkC2Es;`1{wS6y~S~= z`lW@9Y_ZxS2BI(=Nzr3^0!oEIa_1W%(&%Fze@iM) za%=I1OM>cmNpFD7Xf8Jvn!@ZFnclOf=>hT@ZY7sDwhRY!3-x!u>aZAG37ePz=T9vm zIxLX6OZWoS7g3lIw)==q-sMb9u3V;R7U6(h?OP+=5#ojug@>Hgg_c=c@n{;2D;V2J zokQQf3wWL4%;P5_x#r~KzX12uuxQ?m%?P%o+U0kEo;1^e-Ogd;28Hu z)$N%Ffi+Lc=K04GYwnlpqaK&wHnU!@#h#Wt`O26Y>bYpP6x6Q(qzwZXqqWo0doeI? zT2H8sDT6A5-YYf6Bzo`r{x!kyRBy|Tx8;iZ<-onGtrGl2e2qYu6hIOp<=m`^6|oz7 z(`4a*`D^IgLGu3CUcK4hGQwKBuyq=TtRl+h8E3dZ#TPtplO%nVbQdNOs27hR>qFg@ znH#O@IUn>4mV0{*9ZK)KHo+T-ctYmYxK$&gFdc`z!`mvn8&T+J)?_Vjixy)j;mX~6 z=I_+LmJfBJhy^(~;qKjwbCbbSu z<()P)Zw^qq|GLIELstKkzERP+|GiB7?jv)an4z*ILq(Fw*2wTjf`0E%bmk^XL-uyQ zRs0Z*szklk@_g)|yHG6;pHn|d5+D@3&O(!bgVeB3yLDPk=rSbgxcy0lF~Za;P5PGS zp^jEJ3oo}P4b2rdaa6T4_~Vk@D70jfY4FR^a};M|4@FAp=?`gLlB{urxtJmTl&g#g z4YvFC+q}zn17rw9ixLkFP@qE{C&_+E*E4G_4r?a1n7CO60c5c@OXDX6*m=U?FWi-R zxq*Tj1QU>g!UH}HDmkHs?0v}&{lZ{mSU%bQJ11FyPArQEkpsOWYA>hD+8HcGbvY_C z;{(-kQvG$Zio6kU$5slasR6;2%?%pW*7S%2e^}?Ee~Ut50s3ow?eiz$Uk-qc9$?b3 zpDa`j_HrFfL;~|HjCb|Ir?U!;j4^f?g;)L3x%1h{oTTd;Jo*g{=`te9ZL6vSk&I`I zQW*M%;((~D7=Q6SmfPmf8yjAJ4A8#b`wLc~dgTtV%kcTYTejJO=-1sES-={Q13S8J zLRysF_AWS@%P7on3Sd^%k5|dJcf%~kE&L9~R_)AiUeWYflA8%K+0rI$^F&p=|LC-( z&b>LmhVm(GQrY+XqM``H?5%PQargU@GU>TCo%|Z*6Y8x`_@ATZEylb*61!O-tObeh z>2~L$PNjcak}9_ITBy8Ta1q>wdGs(byIIuem{W3lOJ1A^gINS{(E&MA;*5~#r!nYP;xLchB`0nMld?P1Q?p!yZv$|zAS$nD({TOXP&klNK;55#1c2>z z4PCwW==lpj7n#$G&pL4g3d>)puBIDg>JDELvrP=gGtPP$&(7+RH`<@+_*pk(2Grv6cw(WgzIP^W%d#O_asDcpxLre+C z+C9bzv`drzhlTSP{PUYm;mhyp#aOnTqLZ7}L$E8Oh!e$n`lu%yVYLkpvLrlpm%mj> zkh_6IX|}AqNs6?e2G|~P@Gs^0dWDU>mo;o%CTZRTxbdNzBX|hzKV8PqwYe4fSDK^1 zsd!QF^X6!a+DBEf7DLE^^NVC8zErxkW2u6|fr`xgIXoTCd=Xyc2$*Ov2yDc$<-ca3 zEL8}pE&a5&WnkOpExY(_>^dbEM4@*z$Vj@uOMCq_eVWxn0mI9FG*Bc#imlvIwsb^t zJ=tz9nMJ~7H!qT&w=h`53FejM&z*;+sHwXA+^>3~Qd+mhtZKC8wq|xFyg;KBX&fnf zK)YYDcB8%22vP1$90|#P5&u_awH85Y-a>dLXoLG6!ic;y&>^PyOc#0o7L%g(O-F4Y z;mB3^xd9C>9+0;4w4no0A!bEx*4TLX^9dF6Vhm=iYY{Wjj+iExao6bT?RAbM*`UFO zttsr6qzn|_ra<8~P$=Ova^vBG(~_@q$#G2r#>Uy7652bVG5iry3!Ssc`HB#zk&w~) zk-m1fEWfRRFv~`qwA2AE|Kan`_>pvLPfs=nSBo`^9ZAn0JNf-b1p?Z&de9Nqd3N?h z2#^7?YzH(DmHM3=r%qz@8rc&-Wg3M6pTyFC>MMTc^#4}I;$L~vCVFL^fR#&pzJ=u- zrGix3mkiOT3BoHRMhs`DRaSG8Si}+A{Oe1dez514k9w5PjmP`C)l$k}O6C#vPKQNZ z4+{;aNO=oK|K?wxj=KTGq2lj8DE`XQp1=3{4TYI1aGg$eD6`~IIvTG(unSZikOU+| zO$}jBnnWE!mU)i=%0HukkN^%q>{1>c+VOLaz~kP4>BQC}HiKJr5Oi%M7h86giJ#a6 zH94ruX{6B*{i*cO{yqZ%%zTpn7aR81?3A9yCHwyM!@nlb!XEciP-0GA2JUKllLr2{ zuFZUPTN=Mq6a8tFQIh9nw5_}Q{W`{@fAnJ} zGJwK$xmrQ1^N0ZCn_!4guO|7-oPp#LaVKe9O6K#dcmK#WA-FW7!0*81z~fXRhO{YbM5`8oaly&d_wAJb?7 z3X?2HVFD?MHxAdX8!lTiUqtw?#Z^puh|GzgPL+7v<;j{Qvz`UISlSb6%{yp}Uu6uT^mW zDZRluZkbWKEB;Np+8~>afZf8{?CmVW^ECVfXPqI{5r*eQmoh~xRA2SwB=)Uxi#cxA z6o#p(axnS$3;%hq)&&DN%5n)o(ZAV!NC59cd0cd30WEfJoYO+5tt&Bc)t(=8E3WQ( ztNquTbc0UfZWjGPtijYIRi4EyS~Tt2h#vLvGFZ@@uZ_BLMui$qRba@TSJS68YMJa;phP6}p&GmET!;Z@e92}6H0XU)> z5)wjr_5=P-zfmxm0L1$%skmC_^0o+C`++>g-SvK1Oo`47>5Wec4XX{qg?<8Nb+4uU zH*Kfig{dklR~(e8r`>JXn)JsMsL(C99mIaeqB=kaTJ?`;?ScK^I4)WJp1aw;M9N!nO1gBTSY~M zpZKm+hOvHs#R?sG6}Sn}!Uwp}@foeZ6+Zgrcx)j~wb}z?7sf=^fdO(+kk_$*x(ZFTzTvv-v>6j76%+kr6@L5dNVbW zQ6SqMFDTbH+3Zik7(y0X$g2sht*teV<3(^V0IR<7W&5LaV69n2+GQ2|fnO0;Jc_skz!&_&IC z^?q!y(RU?mLECScl#;k~ zzNqpi6uOsrv;c{!OR_NAI1lqs0pp8 z`-djx;GH?fWg%#`23^ItJRTCf4+fS>jrLNxhtpMQKYeQ%gHj`%t*PMF?#mhHy?4IP zVYfy?X=PF;Pp>-(9xL9FkA^}l0vsN}DXM#$L;_t7eA3A^?v{@qmqN}hO*S{8V{5!~ zcH-Mx4@d$a+fQ$HSA~hv<77cZV6)F!-X?LXT%cuJ-h0CJLAI|I8vn1=1d5L>Gta0C z{Ov$|ll9bH*|e!-_}YEA4(y?CR_ir_?Cn6ZrCnpQ(dy`P^t?cs?7_CB{rS;Sr@6=I2+qxNaqTn!a)2TW4#rTbJ z2qWoj|3az8CT9UCB$gu9fuVc8X?xqpe(s5bL#e05tWp@7;)}Yi!#gfIsW~j;wX!EI zKo;~scMYfeQR$Qwya2r(zp=%>`2H5`aFx9P9ZZ}4c{0HD-Cj=*t)86YGX*_r=lNGK zdQg82g@?x3RjJytlU(_6*dEAw`#HKx84Jx`1RT~hRe+(rF;HDr(GZpe( ziO!5TEPkRkP_Vs;tZvmv;q6GYow0`}YMdgp(aJjPKkI%$cdK-M-m>+$oWZW;fz%zM zuKPZ3vy#DTXC;6Hp4I}MYf{zq>fgMing8)s9w_rkwYOj@14#cZwbprcW&7ildYB#H z8e8|?sYVJW1qB5prX(mR2y5lr`#p26D`^NYCud~9-D%4V5y#SQ3#YNF_Fcwh&TYb{ z+)(uQp64tPG%QuD_U~xPQyIVU<@=|f@6}HT{QmLQT?U<^XT5tpd#75U8OSW_Hx7=V zkYZSiN#)}((5E{LrSmrP0!xIHc@(5+SIvT;! zd=!p|lR~+fuwmi12xPqd+L!josHp1jYECXO|IJdhYma2tUPg(J=r5*`aqt@&AMD{v zO~&y!b7g=`kv(hO*`SAh2(&sKX-}c<1j-5f)yht#jVKyFT&~ zaYakd6S^1r>=}Tg;hw!>9!tX?9mBHIEUkgk{tXxj8(uK{Nmf7SL!l87!kvEO#lb>M zm6h7^Rf`%2<6U>F`84CQ@gCD^Gqe#^sHLWP6)L*9QaE-ZY8g!GjGMWWc8$?p2ebxUI|5 zW$hgxsdv^#E}3N5bm@y^^w+yDln>#qTE3)P4Jy!-G2WWt^ntK!m=)}f)&!n_fH(Ep9?!SM-wtccUZsL3ficxn$M zG2>d-Uf8ZbvAH<-U_EDPqP`lmZPwrc0|hjZR~wPjVLNI*bY8gRWZ`b#^g@eXNY|9- zh&k3i)jzfC&N{K?^9WvAL)%*ZH#(Q}JMU0$0jr}hP&ay#rfWh z?mbKRO^vhjP*%KKHy`%5{!DxM8`bYi(`ZS{Bei`OgbsVxAMxb$O1YQypv%t*%O$5p zSWol{J?R6<@lOn zXlR3c>kU>RxguzWZ)}ElX?+UtkA13iW^|~pR)$S`Q!%rMgYABETIl?kp!<|>y`{JN zR8z5o+G>WZ-io2*9Y|_L*ys7E+w&|=GMhxG&`2}{FsG`po|+{~q2$T3``Q%;Y{yIh zV>+b+BwVh=n1tB6NA_Kvgr!oP*m(Es1bp-BI+N^Od5!K%zjqA%sYtrZuuUE=H<1<9 zeWfQel%}KweY|lNP0Mej)?tPFcxXdZ|7@bE1@_;6SLRGOT$qp)trtq`iC1^C zxw{Y~!+m#aa=|xfL8?DXX3D>Bny$z28tH-)t9cX!-TY@4w-e_m(j&MJVbtBeN*D8D z!>?ELx;%e#!s2kV^BK!ATbo-`mGOD8*FEf*&q4kl#@;e2&TZKm#@*c=LL&i!CAho0 z1PPkPNg%jua0nLM8gJZ#LxA8kZb1S;5+u0uKJ0zZz2}~N$N0WqJz(_cetK2ateUfG zt%dFB$sh9AYl8Onms4l<6^33Qu{rV#4%g?YEJ`w zF0o1nRU3g|fQ5BWrY3AaA#Z5mO?5&lUqPwUH$kRs)|+^9${-emtbx18@o8k&ts|uK zJ!Zrc>l08^YKkdc!mU42qu1BoQ!vEhG_&kC<4Ek{i+fUvrm5FZ zBWvLYSmToTiIQPfc@<2|Xdqplqa7@+uhwj%d3Yy6=B5t%y-XfgHmbu~ODo9gzGnuEm+|_u~(z-!^hZ zo{Qin2=HRZADMJ_)@(1dU*q1nvS7HnNbS9=?kzE)yervZjk#K&{5c+s(4bP)JWg4p z%LuyRlPd8Kn!>khxVM9sVrdAmlC9+-PAX8RbKBRz65mYz<*VjH5K_M!!sF9pLnTa$ zt1CL1iYsXbYv4%ZuUud!SgkHoApOGbCMLyiVptM2IxBty!xwx71~R$zSO+pd*i{k*u@QB-@JL#tBk5;;$Rp36Gw6xD073fkbf1^r7Pp)z0Z+^`MEI`D-wzsJcW;j5qx-ql5w}(k|1zrW4A#ynFB7x zM@9RWNpo_eqpKVWKy(?YnKWX6a0^`zcb$HVc~MSeVD)aArlMM={;KgT+4{1BCsxRX zQmrD@fjeNS+ams5sWW(0SuXDuH{y(MCn^K`hK`Pp%-@}}mA$&R&_1H}orAN=E5lc$ z25h4GYYLPrLw;kTQK8ADf@>C(QyqO!M!VME zlYs8|xE#C5W%@@l+BwzosI-`2(icAh(|D(_%M5Qktr~F+{e z4x#Gd(l&-h02#m5+pTgp%%+dTeE#yl{5uvaT_#zpqbVJ9f6AT8RDh)88I82;nq+#j zHH*+U-gKKHy2DMU(cCNk;ERE6V9r}$m%39(sU)qc)U=v(pgITh@g{X;S5a=X)n)X` zf!klTEcg6fJaaDEutB1+HFBi}d|c6Na6?0x8i*H^!qUTu@Cil_uY`d3(;;C81KB}geC0~6-JB7Qzg(j!ftx<`xB7}oHL z(u7GX8FO4Zyr+ZmtSea-?Ft~sCx1x8d4H(Bv&>tRQlJ8|h=bv4C%=R^Ls-F4Hbs5u zw0j{9t+JMx80BsoDP;+I->X`IU4vmgDKE9LnM~lE#)#D4yP>@Pjprtb+Uh*L}NX4&-!BfeeLH3)L6{l<% ztSxJ~W=QMa^f;k2b)>Q=}B<#T_+H7d1akL&Sf87 zb}UGjwS(&BvuqQnfOD_exr-WmkE~Xh^}2D0%@yn;J+gc;VQ)EjgvL=ZlTq?AD2k%mk9(JSltNnwZ#XIRoP~a$O9)K{>M#9 zQiTIQG6!pHv^-+sSmVR}r|~-%md<8u2@fLQt|}Pv)YV~zSE~_meJKBUlZ}Yi2Ar%W zaqPTSSG)VdRrs|Xzf3jxhQS|KNuR`5i499X-j}~dJ-V6b+pHGOZ>pduQ*>?d{7F>x z)jLmnO;45(R{jak?*&oNeYj;vxtO;a_E%Wv_l&b?wjvhO!9O)&Xz3k9i9ieX)In3c zHP*7CB=2^Yn@RsdY8f9B@1#+Xz+)^T;D}B}$g9A#hVbcM#IMJ@DZt4nxw1p5`BSBIngg)FUo#qz znu^-8kb=?Le7wCen)tWmn{dEm=cGQdMG!Qt@;&9USWw4JMRg}zx33VI2CPj2ya+N8 z7}G^)`YB=Ly(e3Kq&h!MAxn-?ic-;FvnK~rN^EQRu;0nV5Rbu}uHvua_bd|BB?#SV zsM26^a{85?ycoD2s;yJiX*7Rh%9>c68xEr$>8bMdgQ0@Y8yRPtRF#zpO=$|;roDn1 zeiju7HjSU|RKl@$V;Cp_=$xtr8$awzm>b6$?`v#FzyhCEmH|fuZ>961J=Wr)a4F9! zm1Lx*2l@n<^_<>7*G-fdKi=>-(Yy{pKZ+laQ@xpC{=$-rb<{s;eyn$#QlZhGH>Noq|-y5My?k;A^q-4FHvU6A5gYu`LB@uMy zoI_PQ!9x02oc|D^Y3v|g?EM7d?63UUP~Dfu)`&0Z$$4yhc?vJhIXdXE>!|jxE(Y5< zPeT<(w}hYJ(JUZ`=(7~sgp8x1ts-=_k<@hb7^lO78yUhx*Jo#FF`JML^xGVGw_jWe zm+o)q{x%k(Fe%QOtjnHs(Bg{=M=ltv!F%%~l@7@Ajo$1idrI@?Q z$jFfBd>LI;dZgQ;9WuNKmliux%qZSUW)!es1U;;Q9UJmjN9cK`BR6*fQ zKGGQ)o`w#&EL78q8X}&;@S2(HlQ}Ltep^ZHTTX-sqI|jagz*wq0Sa1(0i;t)R54g^ zrV7a&tzBcuRC|BnMG-MQC$*J2f(Q|(+C@>Re1e)qOs_% z1@@wpxn%cWbLfc;NV4etFiC-;h8@10Uvp6QnL>znFW|u-wzNY@dzoA@ztF~H-}wC% zSOx?W3^`Aqqjh$6&VS&zuCvlF`_5s_n5Q$iHJ_Ye&?e}o#+7rnKdTHk7Cy&g6papp zrSIMV!HKE)vq50W0DREpf8Uk|4>53>%nPcKOEgWUF`_M+-MKv}sTEUTk2SR00Vpqt z>26|yFS^99;&XwEf&?N(`wL9WyX}tv?=lFI(g>t?q>p?}l*!#GSxnukSubgi6iO3h z#_44;o>98yi)Axj9atzS{$@4*RDsnLmpa@x1k5Ph_v7$QWd?9W;)h)M;1JU9zl4zp z2X6|??jX9l7z9-`gEzTp7UwyZF9Xbwm1JM)o&PCw$ z3i7 zg)=?!j|wUr%nLA{_}vz!v%~#U-sadk7ge=+12w5 z=8+fpJJDg)R0B8I%XqHq9M7{q_FC%WdNw~0b=+e2COCa};YogBq%{AkT;RE#z=~r0 zZ=xKQDn-t&zTe2iE^a4+3m(-hoyG1I&l4_~NOmqc`qbH*H=7IR|1`XIZuURAbrJ~K}_{^82P zoU6fGb!C0(k;84OT-UfBxPD&P9-i%yhp>L$Y62ozIB2e6tRB+&>0YXrnYzWwp_4?u zru?YWsq&GhR~-}FRx2LI&Md_$b2QSHXSe=1LMv;L>)XcouD8tP zf{#RNv6LbH*wn7z5nq+eW*YqF+(NrgRbhBeyUA z`o?zjgLZ&aNyHm8BN-!c`B^#IH~o{YWK+s|lzJ(_SFC%tlc4^J@&Zj#akmT3=n*qj zNiw%PBaah+-#pXtuIH3PiZIvGQ#Coj#JWX1ujLKDjt>f$KygV+apB$bf`Et5&UM0) zQ8f)8eD*t)CWorEwUawuP-)L4#f`0ZxsW0({k$NFcBpziSyY(AIHDqPo^x5%+rRdj zdtF>L=m+6cgdO@XIhb9CNMZK9)Wc?i_E`8X6^js$Lz@$nOhhv_h1EvDx^Cc)0hQRxE5pn_B}#z~3! zu!soE11)1DA=Yh96KT}g=yjxQ`5)6jGJcQt9dC$H6wQ26lAmU|*%^1~ZXW8W1h)+c zeNy*w!Q>~q27YSleua^I!5m03rJ`ln<%o(xir^9mnw3x*!%tRdeQgM^8LWu76Y&`{ zdQ*O>be;N0Dkt`hW{Fz11Q%<92`fUX5oZ7 zo^7JT>qTv);Izf%IRYKY(1%2IEg7-<98sRa+T}7TP(}8=d)Pq) zi2>jGU1vXDywI^6D_-(b7oB#+G(m!VVJ$x%zT z`BQ<6_IVOV7nn2rMm~PHttrNdE3-j89Ryn>Ri%6 z8tnGTlu52|p&x&eM0keuqZen)Nljo1U!s zMC4seT{t>Ff;HSOc-4li)-$bVsbsN?Q;*lJNyl+W2b_bL%PVrL)M`TaIp@O} zNTKxuztIo>&PRR3+sS(NIAz(m+_3Vzy{_Av)2FOx#+dW?psqufPqqUx=iiCTo`8z{ zn+%p@)UcsSxd)8Gp<`*-DI!F=O@@n#((bC?#0a#bQ^C6SsBWlNqy6QNrTo_b(G`R8 z#|(}nn_cuceI#AAmwl;f8*QWFyyCpV0nBgjNGsOh8|JRaO$Q&&jbNkdfx^7TdI1HB`(pFykBa8eeCKo4L#?c zqCo0xbkQd(%R1i0c>gW2{9p2Cty?~@R=3Wo$B}>%d&1y=WUa-K5zNlc&S2WToBB>K z=2-gX5AK7dKJo2W(W25uejgGYK-XwvqSq8wqjGN9Rb7+(N%vsvq&b6YZ`MnCuqfnK zA;MQRRjY7%gz~Ho-5NVj+Q<^(y*V()1OBeS6-8!T0%?_+S3K=WKN=CAzx1L#4PE~qQEnse7Gs|j^`oN1{CJo9bqQyGrIDGK=gFEZ z8P8h^9A=?>o4#?hD|gJh{UV0LO@UF`6;#QR*P8XFTu7BU(PGYGgOJr|?w=#zNVl>G zwNH9)`skDlhfvwgtue@g8w}5-LR^L$S@!)10(B+*Gz8BHE|B7T*2xoD+2M1HTn)=8 zkhzVzND=%$N7E1&);e~I-;9#D7Td?(?DF#y)j#|Qj;*Jh18l*I(9N6)Jh$>A^vk5O$gT#|=mDGoK#7F1N`+AFwRYostSY?e zn7UsQlS;UV2&*_=0vTfWZUFSv(f;LNPIm@an#bE6ASpP#?VP+}GbJ~14WaA{9aczf zk9Z*CzO&p4wYZ*ZC@;6ej8>MCTafL2PWs)57S@?7EVw*zXyOLcm>siAxPkWj1sOea z`_%6W<^@R5b3Fm$lPT&~MYHcSwP;FbZRm>CDWh}F`4c_42whI^@EyeVV$?c-D@WL# zyZAC>BG$RJlo=%^YRTk&VB%z(ll#$AU%U5Z+$B~#jz1`b$NRuNyP@qS{Oyofo4XwU zIZqcjaz=d4d^m3kt?;ZJhN;Zn6*N&OYQPu%Q=6f#;9d+0C04|o2P$TExcv9t-S-!O z$rn*2<->?&>YGM;<*P{Xh1^-gtK$&ZcFri@--*(OHy%S?&~+jnSFTZf3V0P*#mt{@ zha|f_F)(~MQ4?2SqYloy<~rIeW3m1aEJEFgof$$C$=~u`%yJ^y{Jihv`^|Tw6q9hDo8#YX&s6gq>IWYU&_N|MUC+D3EzfE|kqI3{ zJ33Wt`;TjAF_ioWCVnyo?2rEP585TM;y*d>QK&1d0=ft~;}y%Y?Ul}Fd63QGF+;e$EfX6i3S2Er=-PbAgE!?&lfEt2 zGuz5x!VkxvO1_>`mL)N$o+fayzMLSN^21<=?Y6;G$LXYIHy6j)4QX&UMI26U62;CD zL3|EAIn#GR6thF;t1h{EIa)SV?rF<810T#y)F=yfLRZn=pS+_%QUlr@DCL^U>uGj2 z8Sj9PaBd-$$JRHr!_s!LLf&C&*Z3jhkTFTvoP@J`5zgD`TM|QjHtIsk+QA8NV7@*7 zy{H|j#Ieg*{ZK#(OD%_g8C@3OxUUd^#gt9@<#juUMn3hi5?3ZgFep2P4l2^Socs&p z2Nkm~aJec{3FxbsEQNNIr?+7+E+Dj+BUj1-<=UJDI_0kjYdYw&{pOsQNk+sCXi5@H zHq~4E%bY$x$b0=@aIq1oaewfepwaeaGfzMiKidE_=@l4#EWiyOAKJ+fI4k=(jj>ksGBC08EGi_& ztK}tDcG8@sLz?SC4l;2+QPSdlK$h-f&9{-?e7PsFk7_v(kOx^_87>o)1i#pvDXRBv2NNhYDUUXEQjECab=N@x7>4aN5QVb4Zk#`NT_eGRL!nX zouwt7?@4R_D6HXJp!KtPJ*C!MvAu0qv=ZNYc>Uw}+#xDw?o+DHNb$9Sc&1|F`xmOu zM|?{Z#>Au(=7?w8eb$#D)7*8C^c%q)N$2L0&2N2VufKN?NrnXD(`vM5PZBjG@6Sl z*%4ye{SuP>Vg*Uz7rmLF72IKh4()X}s>@Qd)@w_8We5kyx0AM676~JmDJ!lk5pcIa z|J`h29Tv8lOTfJeR#qd~blYtB-Pe$Jjg*A}lPsgR@g?S>UI(V%ntwjtmdO!XPE^b; ztT4#MU`y5)lFv+4o>eiT}y1XjRqym5&UX& z;QW;Hh}aJG)pNZxfTz@!AcYB`y(uJO16v~E_r?ce@xTbNz{Jh8vUu8CBoK|_-KLd- zEtLb-*$5H0-2@Hg6p0X`Alu*GCJO8=Er|CEIq{#OEBK~Xn~=bu7YPLw@zlaBGpxnl zL&$zxvu5ukjP^?rWqqRXbDP|)5I$$@YKJ#OrK_Q@%~P|=CTpu28}XJkRh8M7Fa*06 zJ_$S?7=R2c{K?p+J2j}`B*V0I9(!hfuBiD3e zHA(j#j?eLnwSC%hMsk$=Jg((-OD$P5KZeUY`LWb{eC|ioD{#SbsPIoa?bEr5-%GLY zR2%F$GImDie4A(-1>&Wk753cLS8wTOUB{C<*qFYWO7%0;(wvqpw+&3pmA9cM2vo2L z2hq1;$4VMqx608$+hbqnP80`98|qk8osJraIvNVg!DsNd#!-n8Cew(Ze_}tBKYEkz z@~O^KCwAatjf5LH34+oqVXHe2mq%w(EVGJJt@O`E_Va3USM%ekp5-6m#?a5OXN&}j z%Y?8MJ-Ey-qh6)gTQT;loF5vJ!yA>>&D)s_kful8#`g!}$ zW3f=`0pCDzTY%i$W9&*T6%>3T2Ks?vEQ;(9>E~=OC@CV6_4JjH*&tM7zZTvrt2+Mn zZ%de4xNbUW<&-pn&1hi!44xGE3sp&EP%&?FWXWJkdqE&?BPC_Cg%b*6%=gOTreyaV zzgzXmEH?!J5|y{h+MUp}yHKYgZ{ZsNEG6D={|TSwlZdt)V8RZu?vXSy(Eu~)R`I<9D46gKhnzYSltOW;1YhVJ zlgF>J;@Q663-XF!l!BnlxCUf&FqZ;I@9W#$g7>=-hDXF*A1&z#C-0YI72L|>ylG_aFQ!$bJbTFB8^JqXe7^ zLF%1CHY&Ec{zQ@j9j0HD-^ac829HneC`dXeBfdI@_pNJ7AD@3UI9+;$gt7Az7dFf| zbczh#o*GwM;xBkF^JZFE;eZ-nS0h1>Jw#>75bDKL8Mq0=zU~UrN>H#apd|L}8*d%v zl%XU&hikSWf#wsxQ7~@6`dawrFP_}_#FNb~nik%s0QYIB=2*{?DQ}IjMK7i}>qKIZ zDS7zrAoU`CF+U!bIdB`iX-hN4)+3~MxhQVDh$ddb*Eyk>%vhSN2$1XhW#QK@EwmSR z?!hZ8q)ZC4DM5^zQL^WF^m||gYyTx0X^MVRAondL&K;3!3uLm=90T4y=92Oo`%e3n z9gIL?C^$?9x4{EWYUj4+OL7hh2M+iE$^xajczgTB9uR2=$>P@4*%>e1vKBXx$JLxP zPPIHbIAj1jwZB@GMPOpWhDYGGO7Am9qBY#l+cj!kNJHO>@bh4>{G?iy`m2G}r{@LhPY!SeT7CO-$I!fqaWi0z1z=Q;e zI2yWB<6LliXF_oYiymyo{=VEsplDXdX4&a^Ml7c_fN_yC1{B0 z6nq#_Jg=DI1#4g<4rn6*WY33Y51Th$Wl-Mpd%gc~)a7BSd<}Sm1x1 z3m`qB@3;Yxpw!ByI~eg?Uqq(dZvdIN!)1xUHHQ~xjqcPS{MARPK?o~=lU|ZaY~AHA zcv-hW0hA6_BGR4SO?+Ko973KBRRF#@YB#f7*+08# zbekam$R5N9rD&Sp&>SRvIBllSgAzK?8h->a4$}Xw{>{o2tXeKVU+cVR;P$zN+NC;n z0MXWR8Vdoe!^cCTNw5%z3NV_Uc24cdd=)CSN}T@5Df-A@pm!_$ZnW$jb^9-I)ab6m zz$K@z`AQ!L&+BbnFPhke&K;5Ommikg6+p84%_A2UMH-}fI9=Q4LGS-KD@z+K7C(Xv z4`2-3U#z6L@m$lXLf-$f%{$72L?*#HoUTY3xxo8@ZJq_D@jx%IhW5Mf2O8m@af8RL z5eWuw6ZB9T)n=snOo5hW!81F|!g^DM%&hYyMbN)AW$iMox)kBGxut?V`?xfvO@L6W zJnZsbw*SNu<#I7VfYI!QzuOU@->sj(zaw3LsJ_`1=Ohw8D-GKTIOr*;4dHPV-^La| z0e`~xImcp{8_d@`ntQ8N$o5*PH1T8|n9|7&Rn%^>y?spmoKPZMe6wNtUvoAe;!>gc zy8n_pIjK|vOufV+hlhhL97NrLGh$WiZ#GZEGy{D&XO0A^^VcpVpgN1Ek#g0TL+*Z~ zG4A8sMaWu5X1z_u*JJYCh#Hb4B`A#IxvIwC!-anyU3-FECXLG>x+ z&_Hj(==PPx_NS;XgBS}*2wK$os@clM`)yO51f`s6X35tz9>_B~BPkEs{W$Ob5a^hv z;bOAqjaO~kZ3wgb2%~oAx73-e&;2$2^rQ%U26}>v)F(xOn+Z)&VKl339L#>wKAGJD zA2Mb8w347x*~&l&5x2p-<}+j`wIjLvIe0YDP1GacpkMF7z5kid$VQ^`X12hW!^&VO z0?mnTW$vKNV{sa=tbRqWs?ycCpG}IqQ5Ih1fzfW<^rQfQuBI>zqB7i*FsA=8?0kyeBmVRy&+eX0^F+9UR?ZD4}0^`D>XHjcdkLo77PTjQbv~G zn&#E3g?|x>_)@&oIqlW_ zbyLtmC-WNyBSo7jM}qau?X8#!EV4D)USrSLuhBeSFW~wK3(D&Hfu$F7Dg$8{WT6cf zJFuMo&AS}yEAY17-3LAlR~_1V8&S92V_M%6u$kKh6r%(oxFN^=*N@X`IY#iHO68gl z;Y0zG`Us3Fv^8`Cy)D1P4&#ve03PL#<0j7-%k>Ho2xsGBb4N6w%o!>Ea) z%&UbLu+6Q9tlC$%x|67}f(k{&l6uq|Z{fauuOe)RQv|^&PdGVdi>o#Zhg5vnT)2MA zl=@D#wGDdwX7KRpuAb(t{-8!_9*62~ab4*=_=TP$StQEmce@#x(j-Jhx<97QLkwOW z`o%0)Q$otlwrZ?yLg`kU(zke|xaE{1ZAyx~m^Od54z^NQ1P+dzPu)JRALQ1b)2%vUa*f;5#c zHSLDeM63xfklQ4N?cYjO#bF`rG zIZZiR?4(yIt=NTH&*5R=`JBUSjwINV$_M^dFVy^3(Dc>m(P^X_Qr2*?bgYL^o?l7) z#(Xtnh92QT(fNH<6K>mWeBjQbRDa`4K2C-o47ab7D!58)=>z|s7juL8fOol)r0)#S z4VAaQ{;SzE716goKaB|z{$hD%M+kJ}Y$f%Oe!I{7p$_#jwy`t)FsZ3TvKPH#7i(L* z;X3N|`?V0RvLID|*@8|>*Ay1*Eq33!q{)Lz{rcE;Pvw{f%B|%cvq&aI+`?ka zV2hU}RY~(xasb7OGmAlL=IL%?w_geyS(464I!sb4xq&iaQbK-i#<2OwRc8wH3 zXQ~Hi8@WC{__egO*wD}AOBc|KBqx* zmSwot^>jPn*3(j28;V-wC*tH$>5SMW_WT^ke(OIF39s#vpTu<+0;GCG*=eK2#FQox zBt@b`syg_GSTZKV&nYn~Jm*cwm_2fNco= zNhOVtszDgGnE>1b$0@dapn#AN1wKB0sUDPKsR104o=!$3?oSmtz*RKbXt6=0M`#5?}PsR*Ax zf7U3|>BW`(D)jQ@`eME9OV>>#r?t-539(z1zy_a--}ta6Uo(6e@wXE9k1x!l1E$lA z6ZTI!{z~69x#0~yGLQ}6h0YNA80`U5U zI%~|swJt7+1u?&yJcq@)mUr72z2moejaBcSA6g@uWjg3qp0_pxyDG<*MEK& z;0dlzW1_FMI_durD8RD>^0P^3HgK7?tE6swQob>Bg*{iAvphuzlB>1q{yO{lBp`Q>5 z<25{bFYxQk6uef76hBcp4h#%fTpq3h0g<6mq9?@4Ajru%_Lf##ODpv3n{K&|rWJ4G zjRN-)FwP%15$4CbDi*81C+2cHd_#8|c=A5bv0K2L7B9E+PGo&2sN*)UaTM{!|8Qd? zf5_uU@5A%)gT*+&fR2NDE82g#)_*<~FLBTfG^F&o8Vc^3La=#tY5Pxp*LD z=UKCMPtCwuosd+q$DQ1O8jmB>_S13Ux8K`a^(p|*lk-W;%EChEsP4F+P)cF5KJ!)1 zl}PLXHhZ$_S5YY?v%c9|rtHXt9cZJb93nPXSK`*;vWlZFpg162!2famHi76*v+xDi zU|NI~*y_Tt78~pD^^@?o9^m~S?7eAT{vW0T1Ysq0-|G`=dUqb#F<|2 z=XgW?sfl;;wlbC-uEp5ERsige)!jHhk#I)dLp1dA3? zlToD|5S!p{;iQf1kKyfiLtqm!kY!uS^xFUe-%e3bcfwpw<(Q@QKQf74_c&2r={x|| z^jaV0t4#9R8sg&Oq(beRomNAWZO^{g&sU-6YIhi}PVBAyq`?BevXk4x*7R}C6$~ZE ztHb4{Ye1o`2^Tv)mAF1n0F20e`N(|bd#eec+5JL>{O~`0I?#koA}>{f10t5HMXZgn z4udFTN~Gf4WbNx{b{Gk{i3{q#3~#^!ANWb@?fu~;)AX0l`pY}aHJq@;%(4A6Za$Z~ z-8vw?e^d{iXnyt-=ARn9D*umE@;5m(0>-eNBbR(`+v!IG6Z`_<^ZBm=`OkuKQHQG| zfMt`+zr#fnwD|Po@QU@WCI4Oh|GT4A8Un`r|M5`v4_zdOnXo6tWC>wK?EkPl03g~x zhLbje2+ACE_hb5Q1hG$DzgS~)CmTVk?YamUV?9alsDz+T>i2IQkxQs5m;WzdF zxlEOTVE}lJBSL(~~dY!?lNR>6QZ> z%>jGd86)PtseXD){So_t?3)+ZuDCRdtr#M{|9Iq@2840uY>h@OWaYIvo5R6`RC*}P zy!-pIyb_zsEzJwF_Rv0i-9V*nOuzdYA4&-?ZU7W0Sq~8B;3AUeB=#;AQHHA#9YUlY zF?z9=o&eo($N+gt*Sms`nHfUoGkBhsO3k^cso_OM zOf9Xg`7$2~!oHC7iy{folF)I!;Dz@PT<-{%IQ0%&!u`?|BnO7@*IZtZ$8cv^(BhFY z`j}xR(}*wUX>|F!SPB#a0Y}N34*4>YFb9h|x&I%_{Httx8qJOQ;&IeFJxvG!u*I!J z!<$!a@4|~$V*`6{RK?1sH2(t}6*bj*f?~9k7!14OMW8JxPziF)i|Cn^e1G|DqQ47h zlkIoFXI*2yd`FV^YZsUvkrC`5<)7|$Z1^>Ir zFckjscu-W`>(+N+w6fnQ>xM%KGUJwi#FkP&OrD_xNFUEfT34Oqh zj>AvxIHlmt?B~r~n0mO-Ex;4j%mRpa=TH_rH5`onJ(CfIu3(f*-EoDRx#MaQ*L4zJ z`uIzF)misPb=MO}dAs4=8wDJP8Hb( z@gtrs^6LT}ix4k(%iN7h5?U*3b|N_{6Ol6dD+|FpS;OrlSs*#-;^uks)E7GIvZcVG zux5NuEbzkIPmn%paLe;_U0=`b{-!L^7S;PXDC$t+c0fX!i|!$j%tXay34wcQvPK~U zz+_28@8?7p`9mTJ*jjsl53=I!{GD@LHFdm2b=vNG{U2O?nhF6gT&~p(I!mT^3>q31 z{7;zwZTgob$zeJTLKU!DlGjYuEl5cD5F>HJAB(nm9Ux(%M1 zKN=q>k<9$;;IlK}Zy(^s?;KnF(7zLy7kjrc^SNk7wKIDvJ5F_(L9y`QSQ6N&kur73 zhkXAKe2&lQt<8!?lTm%O)tyohH4Q4iB2OTGQ~B|E@yvu)hAq02b{9n_dix$a#}ZOe z(Xhihn&&K@w%E}t_?0-~payMp{27AK4ez4B|1);hR*tNUe@(#$G?f!xojI1x&R zE-q}(dpD#+lD{YGxA`R*?TIb;0NG&M?ft~%6dj!Ho@WnxZ%ARQ>TL@u zFo+UKEr^38PiU0qV@EJsX_MqMUm2z{(&=Mv?Jk5nx1Uo|Cgsr(h zayG}NQuCD+vbRQ0eL>o)mPOpcK&k_+^7WiZAvI#5r9|)o=`IKcB+)=MFm|$2uA}*I z8kX3gDFFWV)v5C_ne@lfIbH&hCK=qsJ5{h~x0;9kN%N5wQVW*&lhs?t21CtP2G zlG8S4kvJ+mBNLJs^aEC(J(xxYrp(Sk{520&+i8dvm-~&8U?WZN@i|s&AG`O38-s8& z;O#FFrd+)oWtRmAhKL61<+z?;B(`yI;&J+5rz68%@8YRAkh~$OIyl+U`!Cg6Loz8 z8CfbA!A#NHQN)tKE17j`Aq{8&8K;jp{=&U*0$>YoUAD-;ro%27G9?!+n*7hm#vnFb z!d7rlBS=(~dg9Zkjm^#A&EzJ7HF^jJ%gchfgj~g1#R0#B z-)136?q#hGHcsT}^s9CR4Y&s(Q_8-~%9Uo%&_!$lL3w34d}fiJuOeMgkq%1YcU9{V zI7&BuP=8IJ&1?(N8y`~3&dL>=Y9wmBb2Y}7Av{Z^O<9%oLz~oE0(;$?frQ#DUKwJW zkFA|fJ?lZu5tj#!0ywB+d9G-Cl%TWs=iirzHvUCtL*&yEMN%#-9FqYQEAp@Y;=d;q zgP?Yx2bc=1(h>s(82$HZ+cPPFV3!H)xrq^`+>93q1!lh2=kM1x~_oA9KGk7Naj|h4P&z z-pMF2a>^Lk^U*DsbkyytYt1x@1r!8YMHPI2dogSG5*7`Iv{@D_C33PILb6{1^8<>B zZ!s5DK|ms-WIYOTK*Z$S_041`1E?_rSZ^BjYr>ox^h)J_E!tCF=6)*Qu)yRn5*`Ki zp2hoTUv*lMj?jK8q6YDodo7iP;i;B=7?Qa;C1usDW1<3m3AAxWbe?^2FKH9R zORfgOjQ~U=J+JL4Om_yCj(qdAy;vOOpL`zr_9<6}@lK7lU*zbU@9 zm^RaMSyIwo&0VolTNS0tp6|=HFCijKHb6mL*@KF)k=UoYQ2JES&bXxRKVAC)`gZx3 zO!BWn@-Ikk1>QjpAaSFsg7PuPA-#)`QcRTZgH)w3J2epxTaRIIJVY4*l2tFJM={FU zM$bOe3`y?EK+^^}I)By*yUEj-LD>@L^N)JLl3-lNq%mNKG)qFVc9PUlwGn6>|ZhXdzw=v}2j+;y0g``e-AtsjYMy)X_YVpy%~+5a1&Q zA-F`FKXNncc%GPNdJo5{39yq)FZpQjA6&Nx_|;EA>xc)_>fhWDKkqZlSlAv$aHNDs zS?7>m`fUpbFO-3re9|g|uBy5q)tjji7qs}^=PtJ0>3X{HKz>rh4w7`h8Pqp9&Jab6v&M6U8w%gyhM z&mUEEQD)+BT-;m&LlQ8SYVkxR9F)M~01N?a>R&8QV>en{@Gb9C%|xzEtRfGfOiY!p z{(pc__xHa@BEZ_PC5?jX<;US{t0KYH+lloJ>G)X??}FHNI3;ppAz`SilYKVKe1Jm0 zD&>i{VUD2~YPKXxy^==CkIz8>3d)BTBn_SCvr0~e>Xq2O7i`CavUG=ud+~N<51g`V zLa)FKF7#5%Csmudx}yE!Wfz>XXXUfqe=xhnT?3Ut>)C?+xl&@u7l=O2U6Vh9;JYj+ zS#d#&0DwrD-n71=1oAKxo4kUqZ5TLqLucEk?jJ()e;Ec2MvxUNg8RCYc`kQ0tR5+q zVjkJoFHoN?9my6ltGrNHl!tA)KnS}ZyQ(tQD`OVxU&?dG_e(H+4Vh*%O-AMmj(gE|^shbxW2 zi_+)gJP|Da>~+KC1#vbi1+66|YZpx&_5up9KjJ;Fz*EFf@?|i88BLf=vODSc-{cJV zOX6R}h8`9eUCpEuB*hfPqM}Mz_)rv50Keu<{dS(L^fe8u_OL@~(OEcO2>!NUKXJ39 z4a*B1wxSLNV2kj$%Z%zP&LWL*IGqf%l{2?LM_kkW4d3|GA6msyt_PCxkF>(Vs?Bdgw?Tk8ppI_xEqgMa?=fN;kVW zj8KZtb=1fk5m{Rqcq%l1po}_SlEZ%LOLpe`N1*cs6j6H?_1WP$ z*YFwP(D_nWbE?CF09_4(s8!XA{zMNE;EwoPT5Og|P!5Qi{{uqa%rIX7Ym&g8*M-PC zHh8{L#0E#K$|dGvvJ$s%e2+@0aJ#2k8B0x4Cd*1BK}|{%vOs(cjfIGakOQhsQ_#r- zW0NEe3yztE;8UnmYX71w1@@h%_|odfRemkV75w3{#VPW>B1|sZ$GkhuEYG;(L@2g2 z!R?6aw;2zvvH)$**Z;@ZR|dt=bz9?3aM$1jhhPa7BoHh(!9BRU&tSoVySux)1cJK^ z?iSo7=+}9k``%aXt*>rX|Cp(%n(FSe&)I9OZ2_A_4=1K~4%;GEW@=>eQwv1JQf=M{ z@7374OVT^HMB7mCycToD>0!@y3W1)5;n38y{hN;o&4lcGpH^9FR?)--&+itUi8s^ZNgVC(DaJibd_QB>s#BboE5>YefTiX*TLR zp}$t6c$Vr-HP`J4u>^;N`Fv>C8fGt9v)cBdqfBe1f@xpPTOzU*E}guhS#GVPVDd}U z-^tz$_h<*g#ovmdq>Wtjgwj6725Hgj!a*g$-9IkLMn33{yKqR;gGWawv zFaGiQdw>3LuFG`AFK&IPd!H{DJ7GjvoPx;Jd#(l_)}5?`6N6IHzZuTY8~jp|=|4$+ zLqosZ8?tg(a;!br|45Dk8g135?EitW4TgY@mcFHov`Cs_9&& zcLfx1DxaU-b6Blap`Mq+u%GJ~t)ayQ)eQyOP_r7&bKEMq_AzV%)@V|Y(A7`k`mk}Bku z+!=lKFwTDhWIcMErB;MLn?I`!qXwP%>}RO0qA_p+Xc@~{E_RLh)eUm+)$h}L@pGY! z-v8d{!B^clTYnP~RN1rpUX|T=%rM-$v8G@{g+_ZN(j>N1@@^WRkh2c8jr3$=dF*=L zsT*Ffc1*6Pr}P2yoilDj{;fDgXG4+lE`QGWara`qFJ=3&ICJJKs_xi*U+%&@>DIRe z*MsapjVQJ6dGAfD4R+l|o^y#GKl=LN<0;!+pLtlVkYHpY4|9|@5~O8`4#m1Hx4FTF zwCD^-i5@k-7#>!tuM2vU6}ZIp*+_X#J1KU`_Vpx{HaW2I_m3)3toELh9oqAi(E$tL(C%vRb$EeKw z*}=VJ|B~)H+2p{ONBeW#7wfR<>x+?_FF(d`hq=vqzMsl+$6%5; zqiGT7h$KgJ6sfL4Ga~ca8Hy1$yc`F+0F^L6qRs+a;{GvLJ1Ne0E-id2{Tpd*=j)#Y zjy#%zd8)!8eW#rjy^-$)*xhS|SDQ>(6x-D{2$zvj|BF3p1_A}(3+er!A}zx@W{E2- zQj2NKyZ6L=cGBU?vFlbww$-~3g#v-ktb0T!3wv!NODxGK$t&?WRB2F(?xk zsmi5UhJ5P!PPm@Qciyj%u7$iPJ=x$SC~+_~jEie6vmdKBXZ5_zsWm-49UT(`LqI?< zQQKUFk^iIss06nEq7r;CsBBx#VEH3LCX}f{d2^#q34QMEY2~%A*EV`P?&tW1W|c2U z55~6(5}y5q9D*8Pq!PkwZ{>^$r;iYZn2QRymkp8W~2tZfDBk|$E!aqg|a zr||yKLvy$3Mm3i_X$NLjtK_irFxG5$*3>jnl2m_ohaLVn4@GQpp#FU08TITbX35R> zne&bphgwI8Lc9AUKNidF4$rI80$i|mANV<<9W*-ZD?ZR;^F^qWpiS0oVcto{;o)m~ zaH^#5hqE*!m5eOY%Ucte3UOw!vo;*Fa{3=rS2x@)>13c|la3!H{3{A!9sQ;>ukWuA z9`Aaj#a+|BmFK1$hOlz(X*!OvfRGh_HIB4)nmTi@1Y-~qDjz&C9O?2AaXq`?O!pLQ zJ*hif)_!a15QZ^8&CI=Y@qO!puNOSucw-s|jD;FVSijG+YcsngE08}3>+6H*L(#Fd ziNcfmcoaDLh24bF#x?1iNzYq0`aHVzp$wBGQah+hS&cyW75>FkZwYm1?u_MUG6U$f z*8()L3?YZ09Vn83&Fw9lm+>R+l6X7<;?`5hA zG6^y?Q`Wr;q?jZ`XCnvy5;qdVccrVOKAPue19tAV)@QNsmc{H zA~loQiASAkvc!1(ObZwby5o3VpI`a2S(&9MIs?!C;-;am+`Bo2MN65_;i8?HSiXtZ z{Y4mr2M@J`;xXte5hU=-|K;*5#~y6oIhrV)U>xonNS4 z`PZB1&`s1xsl3FgXYDtRU01D_$r9S&v^Co+3_g~Pck-v&A#&rI`XZGDcK1d^K55S+ zZDnLr9Ziu%I-UB@n_rx;cfU;)Cx$hNE$jml*I$|_w3H0{%_q*YvuZ-?#1w=_M~bEw z1!WRtWt`Zt(shKkIV34Jn4{1cU3Z3*1PgQD>>cdArm7f2f1 zXl;0s0~9j|*oAqMO4Z9$mOI->!c0f{Gp!T#_dp&sxIroCLqy=a0Cfp3;mZ;=dGq~F8V8C-F!uoLpfiJEQP!jSqs@aqKJ@2 z34@)XPjfkqpI4a)J7;`B6M?l@HK&{zeC_`7{++$QULVDxwB*V0jQ$B|>WFD_OH7!E z#Ancfh$La?gCdv-AK-!$^{vvP-rx}t8P1SBDYVP@@m;yD_)}Vcqk{rxO|&m&DuvD@ zoI-tKFc4I01A0Zf;o`BPn>ZX%ZXL)j4z$D8hOf#d+$jfYnGj zYXJg`cc%b?U_#jkJ&lMD23wq7SZb?Q5gN7cx_8FWlT7gQ@WAuq)N|Bah~fw_C*p=Z zZP`ekd|0JFJWM1Pq&HC%>s}+h;tOAVr&xe+JzmI4XN^zdSNFA!0y0ikm@xXYY)j6u zz-?yPv@d+^46^+FuE3`TKkvHIo8m#X?dFhIPT19Im?}+X4%E3fufR({IDtO%CXYtD zzj~CZ+QpRAi+;3!AfaGJ0dhJS)Row5iJ3W$f}02P!=vNKvdlFp!g(4=bnw+iV5~b~ z3lB7o*pG?QhK>xg3=KzmLw`qJuL}7OzsJZF`S&?rmFxJ!h6w$7ka(X*CIr)8k(u*p zAF-*)mR3#TYgP|NDZ6^?_YVPeACj7~-?m(jiibXY`}KtzIq|l#J4NjC#uhK;@l@ox zRLINvbYK42`VZe~P8w_?vW~e-?rchlEl*g0sI_>$!pb(7_gKVR`HGk|mrBVf@zI=l9~CzSAQ(pyw$!S;0;=oznj!vy!)&zMi1glf-CsN~9d;Y6IiuJ=gZx&oph z7#>;KTG%$^YvDVc+7b&sDW@Js^ktwB;D`ajM2S&qQbsAS3)tJ8l%=>1&MMV=7o*_} ziz{d(1{6a#3&(qlAaF3O7(d5r^~*G615*kR`*wK{8L!Q$*|MyS^bZx+FXYZ;Lz8k- z;@g+Pu$%&&*nvb4uGU28S}AIth(>8CyIIHXp2h3#+4}|bFN^$+mOA1 zNDFe2Imo7m;~}|1ZfFu!vveSg7C?c;@|Wlh;!pemHIGMO6>$LpzM=Qxdl(2%Rl`77 zms|mlqM962)KHGkTF7GRBiOtg=mjd=ua&r|kvV*Ay4uW#v8LZ4g>{;z*H>5kg@Y3) zeN@XnTqgx^7Gyz7B|~oMg0QF%I{=k6kW@%wR#Ve5)5OVyktwG zNA^_C^!SqScVt0SX7}uM1!nVJqzK*WLMOwCH82UPT?3bWc~@&w0>ofzHlhBjs$xSH z)B3x#6mDaIn*_7(uO0D?j#}$Birwwa7hQwxhUIgaMHdwbtGUTCKkI!f77ap{QwvJg zGkkpBGP^|*!g6avc*qm{94ipMl0sRoS>D&~d5ejK1qS-`XF2UpnavboY1UiBbJqj} zz#T0$VoXj>if$VLqXN!0zEJ>GOgmEYU!^Qvqtv9eq@i36u_$?`5$0o$8nlIw~ zCYr!?Y?@nI4Emt%FI5{bm2Lm~tYd%ru3Y-A^asOtm%FyGOs-J3$HLk5;oI%8Hw{-`ZSbUI`5x+X^)W5k>4K5bOs)h0BmKo}bNdc82 zsu|qm2rHWU)xEZ{xHn#Cx`ZX-j;5D^Y3O!8dM9gb+ov_~dxDl*2&GjW&fr<^bdX2+ znvV@g6G)j1dekwcp?eU4I9ue=3X31DsoT->qyOP&oQ7;v&nmg2O%&(tdV<^aBb89* z>Jfc?O3nFjjVxStwqYeO_yKj(u=d;EDa%r6+TZ3Co0G7UZrB^ualXnEY65yw`m^7P zZoy68ZU2P0s5--Q-xjr|rxC zZ?avYBGBwf^x%5hlbnh-Vfhs^sJ@bw>AQZG?{83DKM6cl(empNG$9m>mz|{5_wP+y z0DN1>7AjcSvekM%yc`((WQT|ElqfB2wksRK1J%|PDbtE?1o=_>tBndqq7@E|{jBb^ zREIAm1LEP~!AE>W3JMEDO?hkX_i%f7<+bgB@Q%*SI7zYtsnNf9R8qs*UE||8g7Qd8-i9{mH>%j*{TXcNlJ2vCS)cT!>vfBOnygq_=&ZS9UCYU{LF2{JxTp(8Qi>`tn&SsxJQZn02{}0J$QT^E{j;)|s4ad64 zcuX_TB~dbA8^)YFH81ym^yAITvzkacogSsx3cH&wN>9#dL$~+MJ6W&KBy}iI7L#@X z?E?{hF(0#}+d}+H{W;uiP2kEigCXRLi=m256o#@%N4FW*6NWz=#GP2!tn5-sQKQ1= zFH@`6zhU;?Xhu}6wp6#*G@yOZsp7`bIT4ga-&rvZ&|pwxo??AX}P($2*f4C#b1@$fnHuR_+b$Pdid?uiIPsW z2@(gAllR<(ZUx6jnmZlW#;+Qy+d^x*4nW!Md|c>kLA0#{Xd}rxO+)6-qm>7ux|SaL!D`Bj?-4)dPysE;zZyDL0!GZ+)Ul_vMJdcS4jr_Lc<0l%33T{OR+ z-f%lho`2Z!eI>z?GY`sP81dWk-e-YuUH$&)k1kC&;9R!Yek0Glg)g&f`|dqk_IR!C z^CFC|_3@+C{Ca@x)0H9UX$Lfy%#lxj*W`9i1*Eb@Y;PN1ove`bM^g0PUms3Z8%fsL ztPmF$7cV{o13-Rw->!UPs%)DwI>0p_uHrK;qhQjoRFZ!CSk~ckgvSkD%9}a+xIPh* zCPb}ap%nC`HxgcW_ffWYp7^!MlV%G8iPEQ+&fw~uA?W8FCuklv4oIMBC z{*0+N41xT;cLl5pD%TX*tap{iLmilkVkC}Acwa;u_iT%&{i->*imJ}VwzPA*+KmO% zo8x6zJ3uShb9*NWWe3`QvIo=Jq#}mDq`{Lm#+{7e0(Q?X+b~b1R>D0gOgJNch zo0kTiNOS|U*4+1Mcjl=A@vVXJTK4;`Q^n`(b2nEJ-nZv=`emFc4Pf)kkEE{3&ZhHh)`9Q$^sB zw&7V1#g56l=k{&neFuX{16#%&JnEiT0EI;sW%UFZE#)8 zC#K|TMn=Xz zSx#%)j^AG+;#n9OwtkxOiT0mAQ9Hu7;a}g`qL*zXxu%H7HaSw zD>N3>7Wj2mwTKjcphM#BHAkAg5y24sT_L(c9){F!*%XAr13jMYuw^M&pv`((E zkosB)We5?$;&we|m5-n}6V(iMvFqZ}{?lhKt4bBDEGey$k)5Y851J_pOGDNld5VV$ z&S!9KYkLP?(l7bzN103<-d8k_t40WFXlC*4nF*u(h`EKNqLoCMTfXHmS>@;N_QXa) zJGdgV@`QH7WsvzO>w`pQ7SJ?x$h)rrg5h^bC6rgcLgu zwuCYAklzIN1Z@ZvOwnpXBrTSSmaJwPofLASvo z-tp+LW&VP6NN9bWeIWS!di+;J=bli#q|kbe-m7SrWjHJA)CXEP41{fl2f>qi_+Ssd zy_QMxw7}LFk!qZYVdT$!Q9F1X78?xSf*Ma1eqsH*hS|%Aev%udSn{`E()No8_CDD~ zLtbYN?yRu7SUt_)D}%l;6Zp3~)k*u?M(K3=YO&sg53BU^bDM%A0Zk^RU5aW^YZv5SzbKu7RJQZuP9677i;rb#e4vkLJPDk`Y05}mwYLP%9;`1Tp~`8q7ap!rr>Y`r|T!22wY^G%tDTp zO=VQQ-swRRYK2}UEOzX*APwqGpCw4rX0CQYe1=f~1hg zqPlzGV=9Pcjw65kbE=ub;KL%$9o3cYTf0dz>!*=@3d5@ge8PBDX*Sq~v$g8G*y=Ay z2biSw`WxD^=qtgy%If<1TA$;aM9V%gZTt?~xZ4@FcRL*Zf|m5mpJ86!SXxQThri`( z{yjtnF*lYxbCO4JUKrihSC3^}ssH3lzcs4{{dC|g|5m~JnGSs1JIIO4Bww8ceu3=pS0d=C>bkht>qI zpb3z|9r~&FNIyi1wwpzHI}D00v+v2ZHB+MKAb##ee3?V8|9-Je#|ztP`WmJW72cLj z^k|yvtoeK@%4l@1daEI)e%P}6{SQKk#i@PAkIh>lhZegU{8ZzLcoKQ>oP96FA=JX- zKi~J@Q~cF#suUAZz3Et5H!w2l zEp&s&^?}>n#y7=mQFxZpoB3)Zx5xATdS^?MSZ}oo?T{AdLkrqy!4-z75(4x5<;u~o zVp3AUht7e3S$RV9xkwWj-9F`_*3>i@S!lZ8Yx>CR$1&M_Auxkrn%UR0Ivoj?g|(A81OVkjCJSV@Z%l;!5prfO@u*3AIQZq?mrQ-%~VUt!!H8PV&;naUIHt)Tofo{%m za~LSjIWgwsLOIIJQUw|b8NsIG)vpH)i=Q|Q-m8^|Rs1f0@zCIc53aLWk`UhyKswUp#IKB84j=MH z+(=#`p}w4v_v$nzi{SBo&16@0%1cBo{9QEilQKt>k!oXP{B!G4#BH1IMl#CQDSR1p z+UUd}0!yr&-7xQ+u`B;oQ!}20dL1?G4WEm5Bd(rpn8Yvvo#9kz^W6KZI2nYPoL2^; zR~YAzaO(jx2)_4;FVwLXkEqmFv>zCx-5Y!)cGIy*XIWv+ae~$f53!(ca90ES{o+zV`>x&wRI;NK zZFgg9rEx&B9aQ8|DLZbY53I`LpJR#VY)-P+^M_9x_}omE%CRx z(I2U&%pa{V#EPzi*bWX;$4ST#9%`FQ0?kGM?oxHAk;7jbQm6Fei(dc%tG0-?cADDe z7q~W{+m}UWE7R2CvCA>vZ`K`)*aqWcEyn7jN_{~EBVz#rm2rP;DFwf0wImN9pG^)V-FGZBm;5a8H@vCd`^&aBw)3Fi|js z(08WNSh=#o>_Ikxut1PJ>zy?*2M%uFq_Dt)Q`(44LR$+%K5LE(0tK7J340*;aM-(# zf8{QLa;=*SoHro>(RiQC?g}%0_xemff2blkRV|RtCOEHDTQy0;25S7IQ%`{kpf%e8==Se;T=`yN8)yBZT|?27YsHGFVdBYnZsMWHi(t;Tg%(U- zy)64cFtoOE1|GJubL3CsuOh!J80!l?UOIO*hVm=nmS`1vV$XWXZECkZ9-dQXWiFZt z<9pci@Zz^6>R5V2y$S4xDFR8WR`iX!-u9+Pwg-cC96HVv<_p|Nk#Q41D=x&o6=^{e zgEG}O;@B3A`++Z>yCwpcnQBD`oUqFzKa%V#Q~l1DS`BVWB%`huMZMq}Sjoc(@JV|- z$7V4E#`>6 z-9g#$n7^bnQw8fc8iltW?CD+!evT)Mgr+XmD!o2WG{ijsJMTA8G+b@J_3;l?iZN-m zT@zxdZ2*P=E>^^RdYJw!ym3%k`4O1PS@SBnmWq@MMj%jE8c1 zeNKrtmibex@&qyJg7RaKqS9i5)vY5v>0V5AL; zSjU-?&=Jc@@sB-=17$ks$0#0;=52d#mSO7^e)Ih2tNs{%eVM) z#EcvT^^Z#gANu{+OD(wp*T>CU2-n$fobvU37@UAlFoAy)SPnq+>EE9&w4c*)ea*li zg=0eNs0PVz-v}a6C|05c=5He3uDE8>4GrDW3|8oL`Uu)|KDoTL&8X#+`T$dY7UR%A z^%WTESnmu4ynixG)v1nPB!aDtT5F0b6Sk2OOeqrv(NkbN?qCE$N?1??@$(9ld-Dqe%sP%PpV z(~(eK*00m~?yMhceNTtKaCit0thEG%eh4+4_{*_wq%}fmFj*;D1akDMBrBwT(dXI{ zM%51-C4K*Rw4r9Tb(=*|@}Pfx6L$U1ZW_bP-!LsqpzgzLi7Mk%%V2nGJQ{Rp9c|A- zUAaOYce(jI2R0@2e_dy_M7i&$4S z4^%x{?tIT*t`4rD$^m8``lpyNWy)x5zC7*;Yu@A{HC=dr5+cBwoBnP&mC%(^rxdCT ziHeU&H64S-8-jJVgmUZ{Z+6LvTaJtAy>*(JlU#nWZQz$6j9T}t$IMbBTOVo>X-^U1 z*V8FNXFhFUNL`XFBac!Q^g-B}MeH?)4O{5Kw9fZx8_9mjfWa@D*)unaWnL0$grTPb z$1h!U)`z+=8J3T9Q!Ni^v#*`(r}+IezC7o->Cj^PH!CDJ8N;x+sETfY5rk6 ze_IjM2-Q?5i+G%zy!=Ner#iZU`@1_c+F%p8H)5dp@Fk#u0-&&N|86ei$(Pa+k5+@z zKwg%C(&IGwoB==92UTqDu`VpA!)D5CNi#&ZpvcPue{uph@&X;qmuStYN0FsLz5en{ zZ2=z@Q($WRDQh(hU`rI$9_&ijcSLdOG-Eq0m?{t8*(G%kvS29>M)cr%bISz_wypp; zSfP&lVQ$V$J!$wDR%ik%5$O`4InOuCq3dthl!-JNp?y4x@82)Ne)|lS`U0iIy6^Zr zs}AM5l9SlY){FWjLkN}dL2Cs=HBxWidEE}?Zx4>^a-u-Uf9nXrh9xnvEgKs{4PH>mmFS{>(Cv**bdr~ZC18aq9EWXyqkO$^ z&CF_O{eUm>?GWrP47F!ids|5g=VT4*WCQxWq5Zht1KDVBJ|?RJsl%t^UbEJ@GKgY7VHf3y6tcmC>PFvdGo9a3J#wfaQ&hSp4LB~S0j4K z1V(IumEnad9NWL8AH3j(bjN#!AvLPLIXGNXD~nPdh`$^blssXCx1MtONXO|7r9sk| z*4bHrnz-FwB*nvE=4InkaqlCJkQO$w4r`;!x;*L!>=Vt2Ut?kgQkM3J>t~<-#U!M% zk^m}QUnIq3SPIw9dptReqh5}->_uj0O}##WydLR$mDQqHG0)(v5k>J1wFX;&H((CR zm$Jx@b$-ahzvh#GuJ~r2abEt?28A|ON6e^}A51xsAGpMSvjk8A2;&Mdektc1SWcE6 zTON)Sn0C%n=ak2Fbz)YcHes1wTWK}#!Kp!gWf^yO#rn|jQ&l8W3q0-^-{-ojjAJzn z9rN2VPI*jb0NrKTS9}D$7)iwismVbY<<->q-LTO5DbBs16x^nk=D}?#Hgls@<5K+& z>2`iKOsN*GlQ3)Vp6)eRv`%lg!e5j<3w>rhFp!-DqZ$eDI`|w;K0SH=pZDRpD^TS| zc6Q3xu2Nlw&R`Pkxm<=gOHjecCj(*NXVg$Yw><2Zp(}$Mkcb-9^qg4Bza4tlbAEoV zIcVbRJNJO!Z<6(n(&GAtD2`VW=z8x{w_F{1lJT)skg=8QT|jRI-O+dp5B`W(8fk2t zd!WsK+(`=k5aG-8t9|krKk3QV;DMn(e<9kPgFLxG{BEWQhGGzgb>sUS`2KeikAkf~ zcE{1YHX{|_PH>4z`C6o-8~BPY(*9$6;F_~g0(~_NHP{pa7Gx4ZZ{k6}!n)Lj_dhro zm11U9A}(dqvO5xCW+pvp`1q9>vxii@u|yq;M5-gVDS?f#dcn5hApypN=ZMn~xMri9 z!InON@+)DRG022rt)5`{yk8aJ!Y#X@+bKJGqc0mNSqSS8IOfB38gCAz>@Kch*S?%= zv`Y@RwO4T1*%GV|b9?N28{uT%47J>wO3K5$e|4}~u6X=GTyMeQWfaqTr?w4F``9+3 zOc%>bf<57SKEJJ2rD6W1Qiv6+m^M}&a>&vxckOJpf7oSUx+wAlU}{|ltCF}s3g!^n z?(vCI-ZhV6M&v(_$v;P?$RB~ppQ;?rZT#l}*xFid!HyE5Xjr2pku{Be?@=S;Gv5_UK@#bv|&K@IYJsU0K+q9vCdP|&Ko=&5^Hn#7}~Nk!;F?c zY@{2i4!v+%xih37Y7)o_wP<_oq+NiXi2K8&f%vo5I0wR&+pf6D~ATpo+e+Zs9DHd zjJrCu`R}A&WU6LrCpl#F5b4~^LvHM9)!g!7xE;!q0R`tNUEDpCcY%FtZ9h{f@DyV_7N+VVxX-PT3+pvIi}){g zJ?Vhkzk&5`_5{RF=2mQBDvIE}s-<6KPlo$aTB&A;Y13$H=lC7fBe*$TOrBQCVn*aG zFNgNVQdtyF`xj8}TiR>rs;(*ncxQe7f@twoJ+;kB62Mazb0*%t2S%el$O3a}{~N&m z_2KIj9Zj5QGz8NGgA7srBeWvNLQWZ6KJ7%x8l8sVDDnP>4Z&|<>xZkXdgK08FS3c& zTHUXTFrBn@8iK&tasChY0V{JSqN~wN528m z#|(`TwFgycbyE~+E3zFj=jYRExs9*g4{JGut4uW2`m)a}J?xlQ?piYy}XYKy(7`+1xCX0*NQLjQEoD0lEbG(AkcuAb4ub&ooI)op;X6|S>U43$gqqL zRpy4Nhdk=Aoyswz@Kod*3%CBP7##eMxwZF}BOV?mf7?`8=a+Qw!TB`8fp-)SI~bjl zD>@@3XhtScp~DciV8m8fNA+Lh zRAUP*V?-?%o@&2M3OPq&%2R1q5q7cN$$nG_WX=?4tHWtD!t(iiTsu9u7b#S`mocGb zm?_DKRBaq@9!N+1_V6VhNqVN~7PklFtjy%TIb5!Hx?%LX{=k$O-f&CM7kgC4PvhA( zPM0S@$Ni+a73b{GM}LXpe%P!=FP}1N#TjsSR8Xygh3l5ammalfjzAgR)RB~&jF^ZB zlvjQvZQFT|Hg$Z{~X?;ROQjHQyq}cuAyJ0 zPyGBcm=rBn^D*V^1ed09`9h}a&T-Pm{Y|FB{q7-4;)5L&+AOASapWfARO~(@G#{f;=Pi(&Dpf&CS*Z3pCbQpe(PFCp`$-vGRD@5_#sf zbotuM>X|Kh-(6Vg@atx{qh&)hnr3|xtyZ#zhu`keABARluQPDQ#%wqORlvXFJ$z9t z5qUFu98Pl<5l8LFlE5Ec%l3;gi-4%g;lqzCf&oZ#0!1qH50U0CkA;f^yfR%}^Y6}k zG_^Y;?(IieELcsLg_YDyU?q*c3K)9Mr@I1F>X(r{Ggbhoudl-fVUUYwemib_ff{zK0`t>Ia<(Z2zW(aFI7v7R5Y zKj#MHWQv0Y2$a3h&qn?O7ADXrWP3p!KuT-|tB13IE^C-LIQ|E-rMaT;k{aE9W`r8m z)%G5cZ^1Q68DC)1E|QIl^YUQK%|$d@I>u6}BaY&o0cr!S^$g`gHnb39+#4#zl>hR~ zm-C|4s@cH61eQc5_OMqb3y#e$I)Pm(l(KZDSa&Y+Ac9HQm|XV^~+vh?hx=SK&p6&!oKd@Ub~{ zJg&JfE;$K$;kS5GN(SVec zpE1jwIx0AUej|+~x{%P5^*s{=Q%@o;UL^N*ZwqmJaK)_?j4?|St?-`qOSu8r`k*I> zSk)OUb?P~D6Q4Gm2eFtqLL^5)$& zKV;0gteRVwmFEiuC2PytrM4S#!?;P zyd&Sya*3Benet-m2hd^Azf(ksTgJti%Qk%b;ftuas6Gqj*%9M(D0lsY&s<4 z&Z~o3XTG~19NN|yw~~-Zn19ruvdp+Icde~5wPoU&{|(^YQ$|cTasQ5|0Z83-1ZTJj za()lSF};!vF0FvFF^A48gnf91H?-#e`2|Z(5XDnvevJuNbAKLcZ>T_OBTD9aS2v|+Kz z^f~lZSmZT?7)FoyM@v;7vj2|NQ(B9VOdw{d5>yu!5(tG&4?yse#t!%1y<}+3$D6Wh z*lf=511ziyKJ~fIBu=ZNmAdMs=-DtmxFc{7;(Yx`XINJ@2#B0@nHJ-#S{cYo^-wL# zNX**6ROzXo8VhyT&gnj`_>knBJ)6nH zIeCy>xGPYXm*D5^G4GDY+lu+afMjDsD}T-V#cJ#cRHO-i9qf@eMcUN~P@5`B@-^_% z3R&^cCHRFS6Ns~DWvfEopt;xHBAqK=yjc|leg1?QLeZ6!l?`eaFtM>=d~Fl8#|{VO z;j|?Y7@vipkDj#%#C9ZFQ!A(S+QP!-elFC#6=YKPsj0EYxn%7*O6xw9o{y(xwXv=2 zthyb&PZPxDxDKMb=On64*zvM)zP7S8J{}U{=X6Vl*JYeOD)jYn_Fj*;>5A-xYQ-=? z{dwV#9o&1duq!BHEZZ<)S$E3(JhYYuZ@4E!ywKrJM&B<5ai9auE`fbN?+a|(HrCDf zHbsMw0s6`f#+rx!4?==X3FZ_LsWC3}hV7-_Aq@{MrWDqEP$f2Vo;Z8}$oxcQgWaoQ0fVg+$( zuU<{bus&>`+nE|4NvqjJaE`pf;_c)dp*k7DCRpqQz7r9NOe1*I$1kiw4<^=-puK`= zSw+%bLP~0&F-@?3oxy)8Af90=5uRYBV@`crD`!Q={Eu7!`z>GymJawB5w!L)G`7tx zzneD6`T?#TnRG9jOx5AHbHh$Y@29tCDJd)67Gvv&&PARef{q|m>8tvgffoW=|u z7;@M7$V8Mo6|wTlY7y3I1(k;8a6Hqx;*Yd!oM$Rr`wq1&XoBfwC}E518=`&SL0 z+!bd44tLRqIiJtFTdGLv)!sJxcSU%WjNo23-<8~V`LBR8U7#K!w*^w$*cp?1(`}iX zV}>QjFe2G%|48H-(+>Lo;mm=rw9+D+v=QP^rKGg8c_WJePG4GrmaCW;E{~sB)GC3^ zDOutb)7RyOEp7Zvp};mWflvqSE#iw(eeYEUNLdYFq%wQtt_4D4U0G0M8HH9QokDFW zYX`CAtOZP^pw=($8W;GC+B>EP!c3yg@}n*0?NHF+VXkQnPZ|1S75d#)=8>d>wcPR{ z=)@YF=>z*?{2;lj?`xbl>w#FC@uAQJ*?bl1yeHq@Lf-Zt*z<~oZG4l(qE#RRPJjkb zxyAIC)BlH$0l{6++A+$Z2E69bATTLag)#oFfn_RFm6mbh$ zX8+AA=zEX_MO7QSA&h+lkAg4;up(e0FOdwHt*tFA;A|2$8inKtn0Yvqsig4xVqu=E zz)ePlihO^Q5t2KW-2QRt<4vWbUU-?_@6<{*%ykSJ8fed#$y#@l1uVvTFBzFEd+)CC zx!7nsJ!}SiASWgap6RpnzeJk;jyma^z|@?~18s!ufDAH9cJ``X#UgyuKO#J+$O1vl zHd9E%AV4T<&7(|+pom=9I%^ft92RFDc&wW%Cx9wYGq7XsNGman4M4@PLGNur{T3{O zQJ@wluuqoI+FVndU*7?Yc8cj=0~i1Gxoa2>8ynm1V21In#Y`|&dE?N5yBYN?*uB9Q znI{z;==lp4_7*{gofVQY=!N@%B%!%O#a#)ji+Bb71TA06X;f>z(Dvr<7)2ZqqX_M0 z*gM_ZP^NXI2XFrIFL(17{|S46oq`Xz=>(W`3-Aaa=rhRw^>m=}e|fsaE;J$i$x3n3 z1`^=b{}*-aFGxra{HBzr%7O+&uesoi&0(*9Kmo3|=mvUB;%`a?2=*CXk?S20K%s?b z-t3zFn^OOmYA+1}SZ-)tNg#CTpEu5I4VZBjV8*jTUCmPM7*l_lL>63!PgRJLG$2kf za+9{o{m(Vj1(ug_sstaQY_)?3rlt<;VE_U+oyr5$9@Vvw6rienJ%hgVu{0Q00jOi? zB8=6)N0R<5NY)4-p~^(7)w2T;-cih`eDoPq*g9zItVKj1U-b6FB8Z3GA0w`r?LBGK z9N>?xiKR1w{}+>Y`oG+Zk0cfN5%`mQ+y8lP$C<+biQaq;+em+UUAL}8fIv{%j-%Ya z=Bue6pPr&09Kjn~TmJ8y53+!6#zmU-CH-FihovC*O;EzK6+m@mOV_vr55a;v2_AyGyM^Em!QI{6g9LXC?(Pmj zg1fuB>wn0+dGqq-{q;@Vs?<%@t;4qN)4h82+UJ@a*JnHzChF9R*!DA0_-zG7x^zyb z&Ig>^0kMl|Jp=ryoy6*I3EO7aIU(tVJvzsf<>*Xq(GNIHgu@gZR)Ts{JH@511hTX+ z)TIO4N=k*-MIs>K2g-Tu|mq}({>iD$H}xVb~;{e@;V-Qp^qe06S~S_ z3fX(0*qrYR4Q=hP?4UlJXiIO9eZ3}xv=QZWK&H$??DEM_J;!xjXIi9Nt1KP8TQ*17TPm+9xyX=nZk5&z}s_Nj~XT+5Jq>GjtkrrC&z7%5E z8oR@^qSwTDf?{hHujkhMPWtLHn4FR$DCy~_2IdSkb&YPF%@u zU;sY8FYnJw-jJ_gnAx+)D&=Zb>#i3InInrUkP*kDzvxuc+&GzkcRZrxj| z=JA{&Sy??7-0L2nx$m@Z{iG?DS}!UOP}VSsyV zXX>no0qpAZq!S54EM|xkEV$~8kvtr@f`w*@Xd%PD!dJj2yu7&i+CldQZAM*+)27PNgMpS2@9L0*A8>ldFJzCK1BQnn;&qxlBvL$&XD>_L!!%&4G$Xt$17p z?!69htsO_{y(j$(fTCNkB^uHdHLC?}ZtTLfL#>eD%C=_7k}A3s4UEmo@H>i zF2)dN_T-&^6YDE%nks?XfFs^g?4%6yFnEDSr#HQ*awyAZC=wn5diqNA2~l~}j1V78 zS7+)iNi?wQArVqtp(7Tz>d;#>y!sSMj_7mr0}sAW!#ZBMMp_>syC>hV`MbKKsHful zx|>n1RIRi2ESW%{OYTPG)-PG~A62MCGOe#!nI>?f;=8J%W^f}4Rm$o2?_D;?I`M^| zex;f{-~LHVObmXxH#rV58x!;9V5wR4o?c*XvQW_k>Np{!Dvqhdhu6-+sTpr#+F$8t%T0@L_cVk1FwwP(RfJQ=8#FORxoW=3sqsJ1XLI zOvm!eqXFjg=&K2=ROmQyS(ZATw>@FA{`2R3Wf$KcHz;uKjF>c>&7kb_CIuQ*ON7pj zS1A+;3<9Km5xb*Sn9B@}xj#}v6D<0#&v%}*H!@gdUc(o;7gBm7JX@J)TCi6IpQ9}; zS30YHMd}L=cjF775gO52_X98Ir3yE{!^!gZ1@-BqlXF2KjG(4|8=zR+_5cgJb3U$R z3o{|;i@z-;*v1eZYRVtz!2mDXywn>XDV^oxlE3l3tx|H}wFpmFs$l%d)Ek^;7bx_m zIr&n@udn@lmL)sCUMplR35U>aqv*S+P6?i2)*1Z7VDhy<>YTyYA~?HsQhIR3cGIx? zvev?3h3~v|j+4b){3*Md`0ki7p4o}Qz0n8{o!f;|M^er?0Z$aHTbifBgw*D0FoD7G zVpN#$`FShJ;wun~0aurp5EaJ=#*X#+DMu(Iz4{~0EAFz^N*}1Y)4`$xuh;{RQm6$= z7XyAd4M;$s`9c8);td}B5&X&`F8o3u*p#7)xaTm!dLc}OVt(4ByQnC_*V_3>ebRqT zJW`oUyn=ZL%Cu-0Xcdk}CakkuA&SYirFfBC{nm$lOL1UER{tiyo+UAk;(L&crtY0D z!gp5>_T+>*mgC1WP+hp?@G{s^E%!5QrH^^|6&>eT@jzdBiUkHBLw}wG+eTZh3Nh)X|U=!6}=OR2cz8Mg|yV=jIP`z(>?^1jQ zb|N+pdDAF|4SDCeP8!5m*`wQsWOvekhBB)>kO@$xa>LthI-mQU^ViM@-^7USpX4|! zw?)_`1nr<@y&tDSz%=Q9hKq>r!9$Inp2&#l1&K-3IrR0tfI z_=FGm0v>#|6^YCu=YB4mW1X(f+)g^er@RefHyCc;pYGLpTsU=fGD0SEXGd|EcJS7Q z>&^8erq?=>H49r1-p8|Z(RAZntZ1k|bI7A_TnAt4o?~Q1%$PS9o)O|~9?2RADc1TCr zLB9bW`q+%I1<0{5NtHO?!U;Jcbcc)=1G)ZFDj9#RF42fl7I|UC_t^kc}Njbe?KVC0>-VY2mxYG8! zy1rydoqFZKaSg?%d8~MHH=0|+W3;cPol1KlF(>M?O?+yXS7dsqS0YV+m%?bM6eyvR z<$E?Ca&Yr=XBWopyR3bz35x6JEYX}ecN$`^+C2{yz6S5eYbk0!W?D7C?AkPas*^G0JOfoTDI0EmxQh8>LklB|n*$PKW9}LIG z#!jX+J+vS1E`h6{IN2PIlI=bKi9lDEKz3eUqW~43g{di(@x*sf50B^9%mFb@v5fZo ze0(e0+XnSl)fNuu23nV=2a}OrCLHJP4Q;|8WlRbANTQS*Pox1HA@8Mh^miU zMA++;Nfe}T{ZLfdG|7V7Mgz1vnbIdO@aZ<#uCH{gHCASd9?yr?3tz~R-G z*FF#`{BSHuV1%IcaFIp*0Y~iK__}3~O|D#XiX?q#TP{r)6SyO@mxzzmY)+h5mtITb zjgadt^&Rs-NaT7d;~j!4)(p~5eUc27w59JR^8t)$L+y$23XaZNwAm%9NXr4KZPdK7 zGmX|{T#JUii&+@j4Owq}XkY@?!u-%ikFf~y@7#9OX%X)ghT4`CU;O#%+ zwV~F27MMu=7Js`-Hgk;k&0!M4B(ZWvSbb(2PF)5!IHIN0pVy{mZI=l&aN&`fOfo(g zfl=esQBuX_z{)fYJJ`X%H|wzP9p-g>Ozw3!tv>HyVD~9?n(h|#fXq2@)}Egn_9lKC zs_6Er$1<^@A}OLUlUvws8ZO@nL%2b+PAwERf!7-03e|{)-K4zAyLIEqGxwetc$IhZ zP1c)Y9}P!90O^R~y_mpCqP8DgB}_)Nz&%~n#*=)0uh4=GWN3!pgUX_$31-WazAiLf zhJh+L@R>AAcYe44<)kP*d;5~R-+8)cDY#L;1m^(SoY)O@=1TK(>wRjN_`?9mUx%$S zOGwN5qCmxw)b!PzCI-QKgK*RSWTLOw2?e`MzR&3X<;T*!L8)n4M~$47VEb5~yd75G zxPD~DLNYnbG4w7})pJDfy^STCa2WBv>x9-iIz@>yAp9}+X-=i8lYYNLH}zW|)hmqN zw^`9brGTP>mN6dJs#rF)*u5n)cms%g{Y>lV7mueRxUy*0(m=k8AAYUdEJ=-A1kgsL zROG8+8T(d~mU)au4AGW%5u}*hC!$3n`wE7UQ#mK{Fc2KR5WxXFpx4-OHkqTuy{sCp z=;Bdn-CY*FJCmRvF77A#$Td2Vo;Xj&Ch9Tg_(`;SL&Wi$ypQ=S1}OH44tY54CEur} zl;P-By+REyfbUG}GAVo*S>HUkPkDUME=srs)linLZ@U}~2}rpdR;k(!fhS2>3L(`6 z@~wP!TSs1mk+UZUI+raTTNtZu27{p0w0j8M?T$!Cvj@B?>(o|+$eO?w!wZ4)@_ISC zi`pbQi_`INDx1#bw2rtMVfqfol5sKMq@2N)u09Saj*%BTIK?EOV1pfoF77J?g_iB+U& zqEt*W>Qmu|l^fNQK;NlY8Y5mYw?3QtNoNCP9^u-P(-^k;$-SEb0coVw9m>R zDC^T%Ju7q)H=6eS2SuBh!8;+&v|koaH{%)f!HAA*-jABXw8vFvv_4c?%#wu0->^T) z^}UCWy`o3dUgD1e67kad46+Y2Ue!rIo5TD%=+VtYVd|gct!X z_Xn1{i(Ma}Z_geeQ0A1Bz%bS@#yMRd@KOwFMNOvWkA!)C5#aTM69}onf^kFltI$UU!p-9)-n$Mzy z;xNJ|%?Y`SXDz zys|QMnkzRLr^!}!fx)VMZ^(Jdle?aYEjFHi7?S)rSaPa0=xYF1K_P2mKt+iNSe<{~ zRMP%v0Ie2O6%JCkeJGB46te34Zb2KfwUN1li7Um1^Rw_XpYTpcr%hNyL-X-UxD?kG zqk)10QQVWeaxKS+SCQ@?sFN!_EWWgAXz{k^RxOvmLE3IeZluY{TpaJ++cCfIL@Acm z?C4>xC=AcIw)J6?gn9!cUqd|kMN%GKp(|RUE8#X8(GE*=Fr1^RHb&8E!R6h@!G)%AQ-b`Us;~A1(8ED@a*u#IU=&VM< zal^t7HdF5`v+^82hjJT(U;4rI#;fi2eEYN$iCgRW>G7p2*Xr^*;~*njs0eI z03M0@{3TRzLUnQSd?(BDF#Zu9`;z)S#~G|Y=Q3(osDxrx{)8cp%I!O$rfcFvjTgZP z*LxxfXFc@S%WA%?zXT(sj@s7BJL&cfq`P2}$rP;~(g^3rTx36a}*(cUNyegNO@fzBSQTkxRS_J7g4GE^9K)F42oBR_zHa{AC#<5ABK#Zk}6kI!H|mc^dQP!z00gJNX6fF84^ zMe;>2;w!LtcD<($w;i`b=+m@dI|*aaCqHT@Xb2o2`VqpiB#|ZSiJn zmre!qtB_qx;keRHL1QQ3hc2n2J+ONc&+uLAK&h*?i};#W<)%`C))^QOMCI$ ztm1mSf;CTf=Ei4-^Cc|BO)ouVdo+{abdYWVY=MRpfMW=8IKHu$MfrZ`p3+^tk!Rst z!F3&LB;C_+15cb9Y&39oz~!BUrPZ|>5ukd$IXW=?7OI4!{>)0&)P(tseDl45X+(P@ zW19BZJmsk4mT}W;_xPaH&pJ#)pl!b+Gyhn3$}jH~`Xt~WJ}r%aH*S0^z6XeEqL1x$ zxI3F_Epn>k=J>JFxc=n<&ii^v{nNTrqy98ZY$^g+u#v9WMY$XlO>2qHWGs7q5SF}`DcC@NM=ZmZR z5MHROF4)xq9hf%iU6$ZfmVcbUT$Le?1|yOj*8>7GYief&;iqis3jR|Fzz_XVwDB1O zPzz9PsLfsQyRiN}n}5?V(-DBu&qIX(*zHS6W!W-`hp&r{2 z-$2S4yOX)LtE=dfGgcYyGlDjLMAyUTfR*o%aNOO#*V9?u$#$3vOLC;c;HM+`tyn5f z9WqU4w~!pn4)jnplk=0)uW`I0YO16-51o}+yt5-I|ec6{EED|gepp~6aSw7JoE@Dy@$kW4)u(U(0 zA@fVgULzQdnI*ER3**sN97f`yk3&-U z2Jt5sz$@gu>1gr#;(ia?(c)1a6NL%#v6LZI_Y<<6C2MZ;6{0(g^K!TIS-oqKCN<8} zu3XdAu&aPQu2-4p<0xOD(i*Pj#2vcnFFEiNfb_fx^{dMwgpFi@-$M0KM5pz)i+3d;APBQVtS<>PE}mlzR>BX?)#Fb?T45%u9X4zAh_0( zg1F@kcaPw`NCy0gPC*(}ZEZ6gS<{FAtoAqY+OI$-7;7+#8@Nm3-VVL7Ja{nX@Rthf zN@3Vu8KRj?e>Nl0aPC0TZvEK&rfri6 zM(AR+S?PK+BG6(KMUv8hU~9%g>F$#GW^sx$?yHPa0hS1x3o<2nbC@ET1)uXdA|QE# z&sJj`T9B}9<+{9lLpcRi<$^wrZ&e;{t(~-OMY2K$`sn99P474bY5VpB=Wa;_*Xn*s zt36W^#<472!txkK7g*$vvHA7``z>)^zR~REJL?(oubs&C2OUw>3&~e5mMrL>HXTm& zx)>dI{0uCG_r(I)>p+*O9`NoDI8V2d%P|+YTF=^?Zj{8{AQmV3$7wvj#yI-ut737J z+0t@bq-~>(A5*9j*po_BoUisZ2K4$#bp>)zGI# zT_i$TJg*%x6M%-w-4;(;X!)^)W^RcAhPIg%`B7yXF_%qXZ)9|4g6mqP8gFhMfkxS2 zLZI2oaSN`|#l!=hWb8)}rxAA{acWSNwUW@MH;5L=0kT>8+LI-Q=}w9qSA+YGkNv5J zF@>M1$nTv+=07+7t3_UL?nhb5T)?+9-?jA|)v{~bR|V?hC`gz1zRxZ-NOO)h@7gDn z1dddFZYx{b#}I&D+(3e$$WC*H4yRAphJ#t8zoiO})2xdiW3 z8@}Y0Z^%m`GLr;J$PWyg3Heq@t~-1-G;?QxQ}EF!zy;qG>?g-0hC1#~4yOn*3;cmH zKiz9);?uDm1eg{Bh}_V_fVaI0Iw~k)7Ry_-@&fv6J{BfK9~G;Sn=OFam^02iP0~Nw z-g9gu;Y|dI7=K;%JH9;+l}baWJ(p3gOQNOoPpa9d9%kCpZ(b_vGa#m^ zztzNpzwua;AW|jy&_@$nK4-G-OlK>puJ;4wXPkdB?uV#9Un0Mc`41i#E$}D*&x*a{ zZ6TDjqCb#>Q1ka}$o!p$F~|$BR|HiiI{?}lGe1u(lMF5V3m3&0e?=|(h3)Z+4-sxb zao~pq3-Hjgx1ssDYiDOCT-Q}p(e5QWzzUrxDb^fuAoSf~V`Apd}q z;LiL1=VpBMj0289j!2;jCZLL^57RdWwdV&4P(x%6!IMKK?q8CY_;%=~2YH`7N`7F> zv4pzT6n|%{Z2^tV|L1F&u9x}ERYxfBl*G~Z2dIBzit^+G0($@FQz#}iO=oU(UbwkR zr)L{~AB)023K7<>3BzYOUqXcSuIB$bwJ-l|Gy5l=qPA7QQg{G}3Qbs}ZQA}mmhOLK zMGMQEj!$FafEDdlrzkq7TE9b!+}3Hbrb+ev@AC%_hV}zG-Mn}&7LxD(UaPW$I3mO* z9$+SL0-tLfM5LvKKYjW%i$@|X{5$DLW)0B1r3^?c9A4FhFY=sky@>uhAqBxMAicdI9uiBsvOd0L|xA zNQ3+Q2bvGy`#=CkaY_qrS~l^*1vQqC=fDLN065f~6n^tkWiMr?H%4Z^npwd-JUmF_ zeD>Nn<_(wtsICp3*9t&uS@;2}6u|tniFC%#Mu_2fRXO?z$iU3r(SNqG1N1_yA~&6W za};fJzw8n)2!-s=xNj5}xxhQ%e~d$4Y$H!jXZ}UV25h3}ap-H71Hcq4?tTP1QM++H zJIVjkLcMeVnpo_MCl0Q<05!Sy#PVKy12Y-I@Shy4^!OIb(<(i0z})PbOPFI4vyt-)Setq#{tnB(*~WtZx8Zy)rS##|L!N zK3Q~RA^<}hy*V}fuO(`NjTe29OyGBPWVt$+1#etL1das2LxeG#tMW=qOJnk^t7Cb1 zx<6)dIKlxWAZ1H6IIAp{@iqtIXk&s+7u@@1mB(#aPjGO^nxEbjk5k`G^M%@>2m^Q5yZmRk}8GG9WGU!W)hfrQuBziPkk z>F!+FKwTuFRpJC>;DzgkCAZBf^S_(^Je37hP}HPT*!)66;XfLU2~g@$dCWJv)Ls!2 znSTEK=0zM98qW~~0h?*!iqmQhVyaj*Pj9Tod~r@!>@OVcjnKr4oXblII%DBi3Ho~r zd4YKv)5%RC1X39?;0n+`*lY0T{BOyCc){!;6UQjlM!f;_7x)I%==pXVABW8rCW7mZ zqClaz0GCL)rcj}HY^vmNwlc3b=05?Qzn$!t5Ne$km80#$%Sq^&a6*dt|E#|PASm~x z;_3ikK3aAnFt7ArTTD!4eH-hE;C^E9_VK9{nEOVlXq*!cFdq-;NnadV@h|g^>aA%Spr zcaJsEgfg{*Qosi|yN`@O4+`KX99^y*RWSr3%$cp~B=Is1g9u#IK`BT>!R3k!CAi3Y*>74Roy%qm z{_RIY&$hNUZ~N=J?Sg^1d~;3D0-#OKpx>nM9;B52@*MdOew8rQFZkC29b4pEg7IX5 zZ1&|HGg4|91#ptk{WP#xVu3z=I--DoO9;t`!DbV^&~;w)#2iw>D{L@&ewmgPv+fc%K507SUXi% z7`5tiZWv2*L=exnwi~3mhodD)6IF|{bDS(2oO(zvhHQOP@1*!quG2d1;?YJJ&6E*_tiJe)qM*^-TkRn6w<{48CdzbE1_pEe!9J-Lh;7Q zndeVZ1jM@>;m=nH`V!ALlv61@#*0jjD}KD@>cTm$I|nTR5Y~f9`%gk@IeT>()6tGw zo6IL7l!{0sQV32LrkN_3l5M-q;`A1_mWZGD&NgstS#LN#;dgfYGWAR6SI3i(~khTF6Dw4=<-Rku)_mBUt5LqC+-JKxY99 zIrpXQ(L(*d1Gtl$0l+Q4=!eD9+bw}#ieyU$wuO^MpFYI&^S=w^YC^AEdPWXeV_UDsI1;o;W0;CpO3@=TDwz*ip+0 z3aTTXwTMU0W9DSR#-Jlh(}DwY%}N?Pi&;=f6IDenndCZv0?l_(!XuG{7Cv7J-`iKK zlJ%)W^r6h1SZZ4+O3o#Zw zv^TwtKl9bHsZZSUzTfmbx1SI~h1Fqed7$`D0hM{AmB*I8NbOB7qZv<~*L2Bna-1IR zy5Qt1Sw{#l=M*1a1szf?>IN&*InX*le2Ds~>o8)LVY2&)qF~0tVz|Qu>dqCeje(mD?o}aFg(0x zD2W+vvI+>hUg9mFKN@=dkmMa@{~Qo^aG&fji>ZjIjOy_0Zx&|o$I>IyLScgU@Yo`r zsE}|$V*y_gSli-+UegJCMk%bFAlein(it{b+r?1X z5iSK2X$&1tYNEI6$Ffx|10C0Vw?O|s4rSM`oKmV|)tvETmEhQqUQORw(DI#4Y#4I4 zUXz|`o0%3{GPP@t;90_ui%X^y5~Db2V(VKq2=ePr>t#?wbuG_~{N|!<9Wwe#a{~Qk z;~VNgzAPiMx&`r$`tLk9w>bW~M}4zRy2_eQKD~l(^C`ExTrpe~ZQ%LPFZe^=kM%8l z?!paeTVSO`o}PzJ>UH3kOsXk{Aups>yTrXVAD+4QI8xdkgF7>d`xbi6?nCeL!~Sz> z4URThUJuo9i~omAr6^KBmAMtkt^tb5)j~n4#N6rx<92 z01uXx=&S!g9&x$h)TgeNRi8H5#TYE44^fs!0X&1Yvwp$`ep;jVIEU)t-YRVJ-_qb> zwe5L`oNpUC@(UU9HPA|e4}X#okrpHNKhKAafGFY|V|vP`RrgR&N;IpnX>Z96q9C5xi-ubEr-xUJd<4KR40^Wok^ph9(D#MQ$=uEC%zemm^TKI(d z%^1Nfs!HEDQ(}l6qvT$t)8x^Xg=xZpWjHOw=Mdq8RO|U-Axq^DzByO#%1$ko6m5JG zn+*5RNgrdKmRQS=3Tsqv^uu0$w^YH7sG;0i2D$Bt5Mh+^4OQPoT%WJqk6-6G)1tj+ znzfbaw22D_VcRoX^x2N|WYL4WON2+~XlMA?Ln&okX^i5e2tSOVQ69td1xCm=BXldp zRCUvGJKP!ASVbN?22)%mJ0Rn_G3%O6H(?s6arzvFEUr8z5u=;gci7l7nVM`;Mdvto z#LTrzZZ_82@Zbw0DIR#tEqt8so>gR05)93roYo$;eV7O&MiHl`c3fFQt;3DTLJ>bP z+ffhgzh0F@{G@YDG`Njz+I8>%@KNJ_5XZ2CIV^t}y=SZ2PJ*g~xlNpx&|^=N)fP!a@h*GnsrZ~w!93^zsgs)Kbvh)~ zIUV(p%9jRQ@p%E!14$F-7{#;rmQA-9MQiMHe=o}FaZni*L&e1Bx(l!yull|-1_+JR zypv>BdQ;Ic^jgW;&Wg_Prnx1L1Pi4%ugk%=^u-9}B7tRwfJ%^4s zp(kB^lNcL}*7wZe)y}GVoQuJC4Bw8ovKuPgS29`K>p0Q_Bdh$lV#@S2IoDlH#`Z?m zQs^<+55+H{rch(2Rn>eGyiRxaTVHjusnCZuW%`F7eqsdO?EG4P!a0fxsv3~tBU^y} z)YkV|4%oerB^YBHP;m}dWG6Zl`$Z_Nj%*9M16F7?F5H|4w`akPDi;L)*3_W#W9%s= z=$ML!6}uZ!M_P*jxF_?ISyzxC`39{vUyIYBZQ3@%RcV2KkL7@n275=dKFq;~2F*wl z=|VP;%^d5y`@*!JSS(O}yVDl6)n`a|raCI2`Xqw71}h&2!v}@ZSeN2wYmJsDrgb(l ztqM1gTD>`u6FEO~tNO^QH{5C4^_sw_bKtkLKM4dsww`V&5}yoNZeB6b7wLbVu_mhQv!?q?S@rNVC2PZDf{(JcnMB^;e1Z1`@SPEBKF_F{ zWQc;Q0%cdx!cZ>QRBl{${7LEl0t~+;jewDE4--(YtYeUi@=NmT7nYHj?OJXD!s%jM$y^wzB3i&`&O-A1)x6B;tBZv6!9gM z78aTDY?7_sjRtc4(2Ly5Q2h_^XrU=fnTBtvH)&A2p{`FGEU(Lf}j z648!}6*_oBBi=D*X<>m&_Ztp!+{?QQp{xn+)AL068M`b_D5U+MK~5Lh`ePmr&GolW zGv#1}(3Ph>$;giT2D&mN#TdE56FjZ$*O3~})EDMa!Q2id9R+C?8IS21I|2 zUO!n^=62J{h;9ffmgCKwr+h1Xzk5|!f67MkkJas&5?*OqVO3MBL>{O;?&3BIJ2_s` z)b5Jc-kEMcoSPVEWnL<-P?9mj*-V<}Gm969n z(|zbe1y8Mkeia%!$PG3Y99b}%AIOadieI}K=y2ivEFi2$EoCIHs;mOpW?~0**T1RP z*D*;ZS{V1uX7M_!I_T1TQ|i%)xO^*ZR|zktsNCd1ZYuM#?FaUwSrSnti`s?B=$*?k zPvye!XH?!A5~C2gmd`PMb(qs#M6F;4t>#a8!0nh_{XgC)KI;owPA-OauTBnICRSse zTAS=;bXTTz>V+{ZnH$$Tb+a8>D+*MNVp3&$nA2gS>L0}+MVUfDv%sHx;C@Ir8SoNRC09sx-0lQ z5!2b_;o=ByEFRlV1M%01n(ICPAQId4`xP2mQN`sHIQa?~kT%y(4h23Gc^_ zZ{E40xl0&_tS))cU6&i=<~9Av1&}#Sl{^!lJ9IN%1wzc+yA+{&qk+}iauUNF&Hjx{ z(5z%#lh}^Sn^u%E<1+V{`V4q-f$XbZ+fJL5kFZaZl`}1l@70hv+morf)rtZGa^p1ImsAh zm8hvtYOg-~L`?;&^<8qKpQ-P?k>-k6;@O6OIM#tGL$a>bRsWT$Pf&1yp}W7CvmK-SY#M(B!d&(29`Fuopec5hPl!Zu}n&Lae-rhg8|p&)5~Y}C4}k)p-iRDxu&px$bnXlYcmvR6gs zX!@C+WI>SJ@HTfYMrb*O$2WppLEWXd>LbN)i$a-X2zPMbEh;k3x%?`oYB@JEp;rZA zI!6AJTv<*@xz=PHjR#95L>B+C3MQ7JbF<7Y%odjjef5;tQesv3t$`uk^=Y_*{%eXP z0g8&4s)0P@T?VYDR`#vvow4v>5lv4EqQW=BsH$m_5>s6#^zDvCO_S(9H6^?F)9%{r zKG!ZN3&bpnkzs7|_sbmwwCPqO@*`w*h7Bm~_;u1!3r`Sa)eFQ&3vQt>(@A;)vGuPH zYx*J1*CWJC_U>v8E?t6OnUp7MdK2Y|^I$EIO##1DSWnQd%pMZyxJ?6JEnji@d_Mv= z?$45$ubo}!rKkTP(*Z&^bwG+kS;RY+@X3%QRzf+bQJ23=M59zXVB%)EOfLi4`*|9X zcw4g5v*y+>S-YT*_xwDjFn@&6@Dj|wUk-EHODfKb-J#;lOks8yang86cx_a~Q3}4t zZxxb_FfwRk2Nyrs6EBMEh=>94AoZz^CO;lVW|K+Aw#C#12PONTHI|PS9o5x;~JN!D{HU%=BRsq`fbdQ-dCwN_9k{xE=CA+=ER|% zIY_T!Ouiv;Ts^WobeXIM$A)5NWuwJ{DWE00EZ^Psci?L&$3u2r8KBDT&%K@UN(l-> zY#v=71AUnLLWe$N-C=XvLP(jQ7Lz+Gb-Rt>3pvzXmxHWc`*u47GC+lb+IU)vAppS^TVM-$Fijf$$i_Yawizj?mkTf{q|5 z4O+H8yl1AQ zCj6i(EF>f23?^-}M9E24X4GUwC8}!d!k-ieBYN9UgJ4+Q5r;D@@AzY2FAvg<(6xe) zr#|I4xk`0$&ezy1)QLo3bFxAY5`)q!-OeR*-ZRVpoEh52#F3QnQ%QC!=F3mJa(QAd zjJ%P3vdb!-OT&)j!9tM{;-%@@pk`df+bSs{FIC?D?L;rd!?PD0vb{cE%}n3rf#z@b`G@?} z>kHp$THHUNjcvvcwOLp9cVu~NHDuq4wxV3<1dE`CuK6!KVu=rQv+|)O(F|qBz!c&% zi|Qy$7H@x^wXN0&oe{I6S@jZ?S-N9ZKx0j{RqCmlz!bV-W7oa4wtXlNxX{#6@==Zy zKXcmPLKqls{bK8mwOtUkj8sut4UrRR;NnfDJ+>!ci@)!qtZBzj+spj>o^ykcS}BY| zl0+9;=>Ss^Q+dT^2FEs^nrJ0@c`M&fd7sBRK* zIpx*6Q24Vh&%8sg2^Ji9O>dNT2Rhd&;T^q_$R{ zA|f#}>dKMQ=a4d0gPGO~+F5PH)NP#NmrA@~mX@$wjF`g@?I@d0T7SyXy>VZs>8ipp zn%Jev3BH_AF=>p{%F}oV(k`^n3I zJK*|W&{a+52z&tQdxGZ~Z~I5r#xpXF8(Ww=`@(<;ZjYXZFlg;(b6Mhc@s~X>VC9c# z*jxzj4T1rN&b&~ok}kFe1hdv~;d7UManD~^n11l8JirRj*msZl;+>r0hL}T6n zLe<=4L@B?O@bBetqih~Sr46y4N~;h*G+rxW((7a1*-_M)Cu@BAdEL`K3^`p;O<$#8 z+0U6tb&0NX(O|ki^+Y8$CI(%T>8iRm*6ge;O6lO3N51;dE<>e+9Ga3>0$$vZ`D~y| zr=Lzt5@GQGSSq$rp|Oo>9orAwXSQrj?g-*YLM4>9ewt4r-X+>5w#UoB&5azG7W?O) zQ5J6n>#Oh4v1RmMl|0pBoA5KOH$Jwm*e*zdOrFXtqB|Z9rS33VeoWRFt}W9k57__} zX;T1em>9URxqn?p9ojYQF*f>L&cc<^6yCpi8uXGX9E28@UcYYowtc^hI93>e=g0tV zYl?kRbD;hyuQ-xs>56r?KajHm6!fXE% z`nm39E2nK88!q@eJ?sfae!>MbZez6OV;~XfEQu7|8aTH+d^%zU;_TAu2b{@8sYE?( z$SwC}WCplF^vthW+0+_PRu*!As|7%eohs^`nRm1;a>+n`l6_yf!vO@oe`TT|%b22V zIDn@J+xEW%BBAsd*T2{e6txhxB2UZazEE{*j=dm7cSYcMu4I1Ja9(H_JikR)GW>Zg zkQt7woq&VMwDFuKI%Vy{gmJ{ujokDHAvLRqmEZjw6IEkdclP}+UP$^|u>Zj3_|Y>o z;U*_S(ehXR$H*y!y0$@d+c4>%W8&~euSrHX6;BkonMyH%--dve5*>(%s-k4}G5sb1 zJxHm2&WGzio0azyh5(EGiUm?k4cRfsgC4l zFnqSft=-5i{Ee@1A1LF5*ERU*H2*05$V?$Yk_kAlx!79rU6SvND0M#1lKr*4 z05uR<`nPRN$3*!vA(Acml@L)Fb+_VIK;^=|Bt#4^FK-aj-^FrcUjOx;VYKxRF7W}- z(>xAHLK{zSnO_0ii95lQGX)z|&c%=JP6ZHP1<(iryN$p|&8&8;G=Ccp0jSL%n-3h_ z1n{|G&|s9)Pu{;W>o=Q!OfD++xY(E!cwbHR#mF`T0S(N@5W@c?KY@k;t_w)g)5mMl z<@gQ0@30v*yW0PdL;e6w0Wq)%fCUEeDt z|2m*RA)Fxf*Y>|00UMrqRvvmH4Kcc3(P^gIugS@b1$%IRL6AUA&z^MDe_18a|1=?B zjVVZf?fDzqIdog&9e6Z#=;FAaQckbLdUyDHKP(%W?+d3KTnUni#=)-+-t>o0f9+#&;0(72hwb0GJgw0IGr+Ge(JlqzVccfPyChdLCe~-5I@Z zzcIu-Apq^M|HNnj&mj&AR8zDNWnv0{O-@XurMBQ32x+kjv7FH5kGi-ZUz6#9?;rnb zl}OUjz$Oc4v-*hT-h4kg61{?VbDjU!@e5&`yHkZ29+w~78DR-pNLl1S64)p-J! zQLh8Ht;QwgjPF`*{y<9xZciICy1QEt5s(H+=`QK+ z2I=nZ?gjzr?(XjQ#=ZAB$Gy+*J(vG*sn^4E-)q*a@63E=7BILsPpy`2uGTyZAY^72 zTqIS?JtOfd4&d|={6}AkM8LC*|FKYGp7J(;J0C7ZSr7miStFJ=rmQi42REyv`B8Gk zLUG#(+#ftJG+h*)QZJ&)PF4hf=48mLtE-Bv7~!wLW%4IKgb-(gLtaW#Hhy`) zR`z4~`&RA)92RSA48&9c z*C5Zdy7QH2wuS;#e@p}fglq)8zAgOu}kiwCN#X*2W~-26U(gHh8K8ub0=uM!8(+6~s#)!n2D&dv`eBf3AR z939BGdV0L~4-4zfkx9~1k>h)`IdZBxoU3+DyEM#Re>sGVn}w8Z?x{q({)%q@^dEml zw<}y&zf}0(!9RiRAK)NHbL+4ebQ@7sv$L}|%g;}K0JE0%Qb-=lfT*ab&?~>cSr5yU zilaj$HGZjFh}ioZ15OY6A5JeAL^mxUj+XVz1K32oNUTS~zj=libCq9$jt4^3<*eP% z(G;GbUVLY1e2Jup2#;m=XS~*jGguAhLl&EZnX#>$7eDkr9<1#4gD01vKd{?;J%@85 z{}aFje*P8<1N^QW2XRG0%_awAfKKd0mE-o{b-mm8N*>Y_Lt0W5lD)jxXdeL#0ul|u z2Ch9f)(_?%WUP`TYt!e{7O`dB#6?Xg86T!r)-A>MG z1qB7e*$OhJi=7CyqN>MaE_*_}!Ew1g@CM6u-vwmSVlTBRzI>sJtHb$HfB~z}hAaQIHDgo+_)ARxQ2~}Ne&C(g6T0$Kt%3Et zbI1JR@uzY^qxt8cO?h0<9Ma;S+9WczO~CMzrn3Q>v!6ZVPF1asS2!czIlMHQomTrP zQio`jQR+lsRE>0v8rFg9ywZ#&ax5$?C}pb&3^m6l<^t$6J;@so-li&QnD9V3;0LxM zFuoja{Eorncb6(Q_me1KyPes9r&1i}{V@+=PfZK>wQP~t-rp|~c-jB*XdsG_%8@10 zrJB9Kki*StBeHyBOo(}4{z2182P`7o2SWEr6-bASF@3IOXNpLop9ZFl?PVp`UF z=Y9kAei?0E_=^%Kp5oFIsZG@pcJX8X&r{cH$2nu?3=0gcrKn7@0H_WZCd!u)|I@b6 ze13h(4uS%(@Ce#}7XdFt1nL1Ugn5NCz?n;>P=$&A=CJM^Ofx9$#iW$wv*Ym)tkHX6hq}f!KCrE z(|IREmv`6D_|`Sm)=W^l0AW=%h3GcOMnZjskMI0M5=_AKy7Ru;=e;TQ+Lceo<>VMN z>&Fm3waooIkr~!Tiq|L%%~E6P?@E)quexO&mJicrd)SUQpySZ?$4-yQEcT8e&(%QB zYSNt<^FnOuG6tcn!X23qa%+maI%1N_-IqV9mwqBBZgBIL^Kw*J;^@>9WuKYVkP+$90pi##F6=O5;wfmT}qE9>vn`82iSdw5O!A zyzW}*qszrEWia*ChYc;h9>y&lKPBsPzB93N4#GC6;WE^gni1u-(M zOq6D$p>2|r$~%EujYlC_8{$2nLu#LgG1gu0oZlE8IP8yRju&Ew6@h~0Tizq>Jy465 zGJj0)HGIrKMRz^+OhHUqB4^rsCu?@@H(Fsklr@`qk!X1^R=~C<1eNAY7sA?ZcDEA=e!eH9=j24Hbc7uh# z2dR3(C<;d0%^3ze*Wyus<_JCRm|7JM@lbig4aS4BpJXstlN~;#?<_ul#zR7d%>|mH zrK$zWiHH@7sNsld|I~=1ogU$D&ImIY7bb!Mo54!KfGzH9ksRfT*XP{l>jj5+vkmAxTTxf4nM+ysxlDY+#20lg zKLT{Qwv7)|4vt-v7su*&ahIcv4NG*;*Ers>5H05YCIKoENl_?4U^H<$Q#pRCSDh+V z4Oy`Y&Dp3X_%YxEiT`mx;dT5K76R8S{%M%O z>GtvXTI7>XQk&AKfTZctHJ1yXs@=Kwd`@Wms@$?A*KKUPxnr)UtaTTZ+@c@oNEYBb z<5KvCZJfDHgR)}6jzg$mbx)?oCo%6UtR8~9DreT%u$b(5USFROx;D#r$u-)btOkA2 zH98Z6{>%w&Hf-0nb!g6m!PGv|5PIJDvCZU2nc0rDeN%&YrSuE*j(#Us+HZ$fyOn z-+{06nm1;~61f-6DPO?IqioKHAK$4o4*T3H3l7_M&SDK?OQ22rB3Y9B8#kY0I zwYF{-h2-%O;eG{EOL=cHFBg(3Ha`b|+XPen6(J@p( zD=@l>lk~9~j0pD2N?#?B|4jwn*8+n*eY0$AH8o4XNxjH-MRl9|S)w6X$E|NxVQ8*& zfJFKa+-%(6*ir5q7(g^uiw8N&Bp(N2RKp%zUH#g3+VPvK+Q4V|nnAA%hT< z<6|rbiORN~-9?)sSkPFO)7L5~#75g%Qz;10Gpt~X`_vf|`}@#8PnJMaT_#?s%^T&L zZgc37p?vNvH%dFDq|hH&`p_bE+Dcavf96iHY9zarxRLDPJ)yR;e-Myq?yVK4{WGYk zxW#MS5%Q{vrFNu<`NJ8q_g#aIek|4};{x^OS8iH#R$?bsb@dOvbX#3zWD;r%XW7W( z{bMubKXE4PYCe#f&=PLj;f5BUcLaCC>{K&Dqs}dM9cj@A2NWqdRGESF-%CVc7S?{4 znkdd|?YJ%Z{_%X(ZpYU9=!0n9_S4sHo#n)C%=!{#B9B5-pe(A&>4Ai`pvlQRNjz9n@)|Ow1*4bA~6*V8u4}&Vt3zq;fy55XjF$j|! z{J#1GN;Ky+8vtV5>dG`?-f)g~-nqh*Io~QuC!f-OZ}=(v&|f^T>>es|#bn-Q~s)5%|Vgr)ASfr_IzA%{i z(-tc-A9s#ssSN$=#YKdb?3K?D;Gr#GKWx#jxKY2EZB4OEN~KXrt(}|>K*JrzPgl~} ztCw5>C&0&*?Rx}cJb0f%nMh@1oghCy;@lTZas7(ur!KTIc|D=aL>ho8LfYK{eO0?$ zV+C#E3PBD*{US%wmq`I_YMSu`m-+zBn)`qY08%2layRe6&0B&?N7cbr2Bl~8yOwc1uV`?bldDjwV8ED^``phoudg2c*L`dnDLtl9DS zV{gM$5IyHRR4%UYyqui3w4VwV*=^ws9|!p19t}WScE*M-@)&4JkYl^z&>F3QCQK&K zvrCs#XzvavHS{+sa!OBzU8q8WD618AsF2kagho8%I>kcnE(uYgcdqwo5_?7mD#+e= z(_C6W5lHW7E@Xhf%@@OjbnWL=wo1)MKQ^9@)zZ`u0glu~2F4=tJ4CQ?oF*^cu%(XO zJVNltXio&8??1Rq*zD#nJHOCR39t1Zsx+7q*qApYrLd$AK^s>SK2{DtP|eI1v;`BA zhf@mLLTgD6*!WrPn$KM(iV7zz$&3wPc@xp8#F^F*}KP4kbA;x1X9C zm=IJyIa(hu16EjOGiAWdJEYaJ)GTwis^HbjbO6R*+6aUKAC*X7wYwg5e_&b5G3qD3)&b^fl zFzFVbJOH457@uuv_lF5`!2EKj_ZMRP6i(SWK@ZH8P{qBq#)wt{K5MY?&W-!{sU) zJor4>W6=g~=(lKEe5d_ttObFl{HO!&#^`v>r9b8Q3A47^E@D5^gu5?$ z!sSu5YQ%$$vCRK+_fn2Ryw&A34i6Bgbc@CCO&SJX9m{r~Wy|io?|sj5F30#_y{yWP zz7=TRB%9%NTHWexH71YB(d+rhu-;b*9e`Otp#Qb**xjQ#Kees`AjI7z9Yp;p#2P z3O=}x64TKt;!8Li?z5UcvOw{Cq5XCrE(^@-em|}n0qZOCcC+!VMJUlvM^f@ zXUObT9jr;#t-netw#aps{V0q#eqkPoN8D<`zgl0X2X$Z0OF?|^K}_^Y!a&fP>@f1T zh}Z5;Tmpgt2TP&>0j8c*|A$2BV|opR+aM=CZ(rU)h}Sv)5lE^iAO zQRy@q$1F@Ko1nI35|SHng&3_B@_nj~ZqUJp&qW`&L=~BFge}tFz3O9PzUk=RW?zC` z3<_)p_vn!WVQm%uQ}n$gqyN3N`5mi}TzUS5C`(?jctI6v0TC~a3jbghM+37u? zch|DaIlq(BTWoXI(wL7`EhOfl*OnKbnlXgtai%4gv37Z(?m6ju!`2%&0$YMNFb`l; zz)Jlcs_*0RuUM1uin>Q3m7=;LHP{| z!`6JOg5u$Iw;R}sdj+COe$d8dVnVskj}Z?u$AEXX)AwfRtpmc|xz>vuJ_p&9o9pg` zw#N&}b`PV*T_5l6$&C624}L*xyUH&7lLfu#PN@PXAVCaYgyoo-f^Ar;c$r|fYv{cOF9?2AgoDcnEv#DHgu-?u zORPdiPVY|;U9KqzJB$cu*+2!KCwmDTp2Ko<_O)Fvo<$c@&A_YK`$R3|t733|h8!P% zcm4-MX#xV{*SX5+M5QB&vEwaF9ywyxTXAb$cAoHn!eNgsC1vtce?Lu1PDr&zp*-e5 z>x(9Ab-~Plh&x<8lP#kG@Gy}UIY+5iT-+%I^xA(fvMwF4Or?s~0 zj^AX&{Akgo2xC)4gE9lLUZb>K6(<4_^h_812T(c5Jv6&W^#W85`~g%ZLb9TjNV6RJ zQ1Mj@wjoCSSX@);j^zWF7nQu%S;)EbIrgisepdv>g|*6Zw-R#0!+xVU`4#HXnShLerl0)EH#UxiO7T>yz%U(KVe152C+uT#tv_oZ^mXG<<&L$cf^<9Kuja zsgC~+E$FUFEDC)zZL@Q0S~`Y{QrAv5<{DG@=Sh1kg!xv8a({gQfKsmTkb_pc!UAL^ z!RK`@eXd0MN8~7t8e6?wGj%w4nZ}DhBEb;)Kn<|z$gG$gwkm*pwN|4yTI4P}_VGkf zYxQ%>+A6vg8=H5ylXaA7oS3O_K;Ry|RLC(KQO=R8GFFo!q7|daV7dKT&v9o&&C`s$ zJbjWbb7`Nyw%%^%_5iAVtW5CA0T+o{M9(mt_y(k?h5(jzQ+hu4LbwUMQD}cr`pOK|2!8-avP^4^c<7TAIark+vR8vy#PDS~F`b>l z?x0@InYm5zx}eD|A2a7|8ntad`%%85V-+3emi5y!0D2h9PhPWgZsgAThby{gBwtNa zizPB;wt_zwSWC~ez{k_MtXFj*N1^1tyZs;VA(iEXz~Knq1gnMM067xv8$>ZcMF)y&NNov?RYrSltoXnW$Er3 zY$jTDbJz`)XECJ5iFYncwqz&`jhLTXft|Q{2RZC@-EA-9aw8(4Ci^aC@~zmP8DmM4 zmr5+a4E;_Fy_8t2F0eZbVi|!F%R5L7x1fozG@IlQGuqsaTt65Q6HQp#q#A)-_eoHz zaU^@`#P<%^S3mEe*TtFw(684m9Xg#3{2j5^;qVe_b;`{{=y^3`eaEb!(iMqT_584_ zlUDMtXcd;TT3s0=Xo?SGZN5^(%HRiOPdBWduM)JCuhM=GRSl_zIyh}#(;C`QuqdAE zgucZ0i?OFb=gF8$OWw(Wxzg!;n-xbmV|UGtgkV{l46lr3bi--NsBira&> zaLK&Kxg3s^Q0LQ>nVQ=uf$Ol@z_m1K_xFyHYQ7b_`4YoVTu{^WxB?q@@a!pf#=KZs z)R2ARUG;fn@eEX$Yz=OqtB-i67Ea6v-ex^1G@{!pU_!$JcR;(&5f{Wd`jL>`J{>S+ z=4odxonvoNPV`{6^<+6IzwKPJ!~L6&Z8Slh%aJ(f6tX-oW&F2t54Im>eHJb!l3)v* z&0vL{*X>V_8KRzXFTi^>opML5*gM;tXP3c#JvY;8>`LuYfs z5;l|A$f)RXUHPuHBZ?MJD_nv|R(yi12SNS9}K5J=JsY2t-wS;M<#kl-c@mD`tT^y%f2oG##dJJb_d+*6T$Fb+8a z1Ew6;(f_Edf9I|_W-`nwypNImZ&cIx!N~M7!N(CN6Un*}hO?FBwWgev;BzPhmtt}J z*7O{BnWxlIx?VmTLFd#?k=lJFr34M$OyXJPdmygDgTDCWIShrkcA)S4)9}aZ&wQBv ztD114#~6tlCE8!!BT1gI@*s~n3#}aC`{yl3ew$ikw3q>xzGX^UE19)21HJ@7N^%Mp;8i?W5Nx$ zns97CSM3r^6kITj^;twotwTc`WXtn~S>}Zm%d(&Z+dvudIX{qv(XQbe#hDftBF~zG z-u71W^rNWJ^}}nv&NAZC+8k@?#QL=^$d4|EsZogiuk^oxRr6;_)f8w_`SJg#P5pP~Lw@`in_Hv% zrEA$zr$6?0pb!T1Z%JZQ)6ZI-Dgahx`U~v;A8=0Fl|9T+Iv!wza{(-B{|PIkiGbRp zS{PU(ZP5nzHj?LBO%cDTNdT8j{hu{($>&2avgnV%XKu1s6|wyeQNC~^#{Ut={GU*b z{2>i2O%5pVDb&!Qh5s6B^RFM|%Yjh#f8anm&AVkRWI&G!&?8oGjY9Fs6 zV_uGtxJBrNvyBJ)lU5YC;86hhED+5w@wOLG&H(BkkMas8`VUfn3@-!V-tap9&b<)< zCC2EJLP*4qFU*c|npOqXKflHv;Y&ULf2I3Yh4M(EjmN_&NSJ6=3zC z+F20y4mh&jLk@NR6O%9u`;RKr|A|Q)Hp7;8PXQ98It8tk^f!9*kMe%u|6G~20u1P{ zSrWkFCc<&y{Np0iInwZyl+YLE#qMyJ5-b(*xu^Pt9K(xt% z4+PL}{x{j-1?7~yB8&Y(c0}-3Cj5N`(riH^{dsKn-pHnK2LR(f*1It@qa(!eK7JWZ z>2CLe0;Fywozne1_tC$ z59e~Y>=v(%Tkh!+*~~)^4othcy0icqZ)d5Q3!oa!nOJ{~I{E+D`^>|;c06Vw0AgiI zHxT+8;3>|Z1Wu}b2cU)h6X;SVV@EUPV57YEMQ@GBJe(hHEFS=>@&@4H#>%vXu-*#_ zdNw7Knq?b>nLWP1fB%bDyOi;qHv#G{#jzQ~HUHq%d||{DaWv~Jh*GnfUGG^D2zcK< zKTgQ;i4?0=Tag_C=+{`51nR}^M6ZGIOQ%H!moU(G$mRVHJR3O9%Wm}nG!Ee7iwy*a zegE;RYG9(hvtmMtWFlOipIn0&vXL7C0s<;FiUGJQ!7FZ$Qf6Nrm|><=top%vQwknH z5{he6IS8L{f8n>^tnMfO6%yq6V(RJZ_cQGPmlE;!Raz$S1y{CN0k5}a!MnhQI?<9I z6=u35Zlv8&>2FpxjFP7@j4y+4lvZ$+6j=pemL65g#msnT6sazrz$CSP+t?hg(7?cs z)~8GQrl-68`okZ)HsPYnlD!odgMEGcz-+&=P{Mp6rGi{iqr-!P0d9nhK{gvm;{=Z# zOnx!7(WD;0{IN9P|C2fP=@1M?15sfrm+M^>_vY#SacdZWW)6U|($OIRce4lr zQ{P_Du!V|jO1|+^*duZl6#9~xWUX0C2l1){*KUGYl*X0is|FVVR z8Ihc6k&^u~2DcpvHQ@f>^mrnbH+W{Z;$V)_uwFbNO!clWVB-IcLEjV^mmH4sF3=uW z|B~V;8e8T5{Kz&}W#k1+T;%y-(+-R+=!WAG?zRt9lx2kEM(qBx-{MbZ-U~ZLN^-Y4 z$d7g#P#c4euY%NE0X`jN#{h| zszUK9N$xi+E?byCB(f$t(fF+FWz+qiXk3>A%wuPBmAdU{v2(XC){sR|A0FGqVS9z z=%~&yK+#p`00$Zy#1NxFMr9-wMjIym+ZR{;b>Jo?CI&Xx?q>iq`2=Ml#*!`Hre@|> zrvUvb|BcD->tukX#dui+k$B0{NPx%ejTIyR?F^*_PS%$(1!y!>BKD#{_iXanzwo?2 z0n0z}Jj2`Ka5MTqphri+oBF0zaa{T2Ri)!^OG*g9yFmNH%b%APh&EYA0QCo))-Spr ziB{r;@`H9F(kb}Jr)G`ukR&O0ifA^#w+`k@wE~e_*4egKxVHQFLO{}ZMJbEF)5UZh%zJPu(j^;#sEqJQ)(zrwE_gCWy_4j?1B9y)^f2-F=V7X!1}v z1?`Z9NGP#3n11_QTmdHkteLG1)9KYFT__q(hKT{cXi_hJEJ3XyRic6zO9g~ zv4*fF_?@p{F#E9LbH@CObo`wu{6&cJ{Rnwa^l47IX~shO;3bPf-#&j%Gsa5_Vyy-P z+VL1)TFat^)&RcxB_;u~1ZP^^UP>y!0-&*0O|b+=PI1aE1pc-k#M@YZ8LA*@F>?d+ zCS`aXL|t57pSYg^e`c)*Hf^**)~DKF(V`^2#b(eiyX&8~xj0(Ct=%tY-T-JKbG3_t( zg#psI&qIg%!E*YwEU*DRq3ZIs6voj-{GVli^R%QVguj+%P*GRQ* z>h9&-V5nqR7H(V#i3G8RRk2&KLOMUcm zC^jI~fq&M3$y53eF=EFOqbp@qEh)2UKJK2q{=xk93?H2OGnP0nq+2FA+O zG5d;~USvDDj5ZD6{qe071q*ErD=83M%@ z*rzaEQT-3-Ct4AJe(v7>F-S;YmdCj)>kOC#So6?bBy1urp_ak!$nY||5OmYP}hLv3^L9Sp~weDyx!KZvgqF%j3jcR)Uw_iC9J?#uLaM3ev z(=(a$it%Wms;7s~Z;LB1%8ikVeX;vJt7Mn3%eQK13LsG8xZKy>wpf%Z%+vgpC3KcU zAjaum+3S4!4kt2Yut?d|Qf%o;+E4RXIyEtnx3L!n7Ly%OGk(!G-cXa1T}&zt2qaqA z_gq|!8OG`z&u#>D?gR}7xO#eeZSCy>E#xtmVL;0mNrpB5fa7mc4Vbp{iO;L7>Fh=B zJ^%}8Y+RT%nfx!p z6SqV)sRm-rq&B4~3%#}onKp@^ZW!S}wACz6Ry6BAW#X&a?FNAe`D&f0;mMb3wYGaz z)W>;SE96*{xbwyvIV)2G$xdI9lB1g=J@UkBtN?{5vDHI#2pxM(zp5-u+@%(TeYQu+ zS}Fxjy-Pp&T5AG0t33mlHungA=R zI!(@uA`h*Xqux%y2dOR52YJAg40`W=-4))hsr>_L@kdnynWQIK@x$9Upkb4oaPUdr zSQ&w4TBA$gl+VthMU$Wjnr-CYVj*NwxHaE9Zc9GrPaYYFZm|RjtYdi~J^fS&|6@aF zrH6h%d`?nS5ke|c*jlU#`-!gqBP#JEL*%4N$=1^_ez@q+8n1;bqQ!mDJN=4_+BS?UaA|>#JJOwfKB2RWLj;$i>=~F;5Vok7d4_bF`_o4LWn7(dfy!E z7Ol9}{nG2~KLWCAMe?f~@+BY&7Qo_hD2xBM&M=G0l6jf!0?Vkg^vUMY6luvRABOsK zP*2N=t$))DW+%pt?io$UMa&@o`wLm{k?$cVYV_JSeYIl^<7nR(8t`%CrUjoD%$Oo@ zo59jY*2~EX`FOE@f)yJt2`uyzlofG-f{S{VizfwGY`7Nb8>13qhV^D_?%g}q{Lfct(KXDR|iV!ytk;V zr96H$NBb)a^FQpQPRm23Mw*#Pd&SllVyXn82E{|$(~qZhOg4B$hHwh$*_me znJcnbaMNcOZJET5L6KeayTq|95OsIBmGjm8S};>))}P&yMxsxA`v7yGa*0>+bdSb8 z-3OA8e|p1XjHi6q6i`Frg2Y~~mU2+*quY+&pL`X>(0Tk;Bas{CGr{mYAw9v6c3<0M zC0BVnJ$U}HgN`8--iYbqw-c}s#&>-%qgYwWqVIGNz;(Ca%nw>;A?aJEVM}Y>Ux#4p zt}V zv4K2Tii+^qSYJPUC-F8z9lHT3fr>lsGU|*PbJ7NvcSwK6V)7-)89`xt&()q~sIoa*1lBKMU1wz=;WoiX zqHqXB7oLMtiI}KsA#P{<4Y*l7cw*l7xJCYl@Tq;}JIY+BRBR~7*1V{4tv>``nD;sT z?@JpY`BEckNeR1m8}FV{n`u0P3e=Yo@2LsbQa-seF)O3e8$hhIUvjF(GE!#K7O*KaX&qVd(6+d7BH$z!xjt!vk!{*^SS= z&tl}Z<=AogJeg_PI%RtiGhmg*%|kOCu>+ULDEoZ0H%p}7f!u(~*9Hw+Wf%ZbTO2@h z4$VCzXtoC*YY;Rv<|ItjS@A4C-s^lCdR0}6gsI9k;HGX0UUb7bf~W4~Xl<9VyRB>r zr+>N8v_rC^k@20D=VSIfMNLQJZNg5zS^7LTMUKv$oVucKo;0wIMovnS+C`ug6Epu%LA9@(Yi!c8QnGyj#Nv#u=6etuxbJ7oK zF8meK??@YAg(5%4UT4wM&tCmR}%er zJJ81i&`M|?+*!#B{zW~{n(rl9XmEiyDjvb85Tzoru{@B zWjFf##+zf7c4FBmv*s;~)-F>JrkWc$@?h-!jt_)&rlV)E?W#+$Lz-gQo9f*OdFpcM(3-WsL*WLu@>-KT4pNY%8iJ^ z(c9bGL<|f_DJdl% zI&K6wu-9i9JDx^->5olyRz2Et9tG=>_NU;ibjiLSZo$gm&1Ef1GHpgy#h7V^;}(*v zhtFQZdp}meEiWn{NYGpp=}ZwV;8bFDHpcd-Sl`;4Y9fW^r8eq5Z4o)NDXN^!Rhv83 zOpmlM7~i>|q+@#^PCa}!mO6wEohs{>XixVhyV)q@@0Czh%F2qdHacT>nTU?@XGx}8 zNCAW1$XUzn^1(#a^w&0^U&0Jec6qg*!PovVUeArdV&$UAghzls#XNWP2H|kHZ{~H1 zh@@{RzC>X^yU(GCP8nf!-1lDfsG1Z#{bnr4s4D4k<-jc3a;6dRK)L|zf-GNBozfxl zs7l^p@8ohNrb~mi#`3IaW=xQ~5vlr}BMocxS~AViz(9E_xbMuc>>-#D;`1iovMPA! zp{?KN?ui?j2+pAdV7UdS*X+G@I#B)W%Xi9J`0!7^E9;GnoZ? z>kc|+LQFv=7La8})Tlp+(Je8i@g3fa72{}0z~USsW?jR&z%KW*--kNxpGRJWwWW8q zZNkkqmvv6~1w3w{0%+uxyj4pifMGQwTHb=$;7f3!PP8_{j%kMWkhFX5e7`qB0W~P< zg=50ea>n59b{i9#CbE8zEZR4hjD0=0WLr*Sanyc_Id(^?V;WJf>{r^p$yY;SX8;$< zQxC0%)*W0`+Vq3dT9rdM%k&Wk$HTUpweP*j;Q+Wrwq*o*#7E+HYvA~0B5-kHENgpwdd|?+DTL^qvj+ z?T%^ocBe*V><`~wbhn_Jt6`mU>_XT|w2Jc8>d`|%JoI~2&NPM=K|?y-l68dPSKL_w@;d!K3& z`Nn*wf{NSrvI;vBHV&eG+j#^C=It&8=EFCFaoM9csqXe5zKtnuX<_7AH&T*j)@c_` z4^SDgi$1Nooyg6%&Uy|u?cXAFPx{pm+vy(>52AVb{9zj!PrA4|8CEk})S0F^^5xq< zc}Lo<#@kXp^a+2Woz@9UY(gxiPS5)AHk!ihXXf<=rS#4OCRPPn`Swqro#PfT>#eTU zm1FEGCnqFPY0S`VRrHmEbcfw@9*XmoXAAe>8$HY=r=l47>qIk0ajtS?nlC*<*GEp$ zj)A7K(&BSigD1*Ah~9p0mLHHYYb@D$o??J=Zgz%Xu`>a;`PwCdq!k$}q1p%|$;7q3 zUy*zYBQO#>tEV%?1xIKV>tCDZ{0-7RW>&F0kqja^E^eP{r@%~LD!OX;8He%)mEjGn zt*ONqkore*0J^Pa$O+qK{+B_WpP-|A%ebwra7m zlL8?-yGo47w+2-+M-^m*=rBEV*{PlGPdY7WanRzH^vHWGmHDi0QLFijP#?`TC-?bB zz(PF&t&w}v^jO!pixTb;YTsW2Pg`@;J(SN=!YNVMImvfT^!1AUz=#oSKbO}l=bZv3 znj_|Comy2S_A^iWE*qC=B5cjXsbyxo1Zhwi)!0CHi7VG^si^UcFCBtK?AOr5#7;yf zD#XON#75nqTal|cT5pAj!8kAwh#2p{iW)f)Xr|#QKg?1;Mq!w3%PfY~pi7Qfc`1sh zlcF6)8mZXorkPECbObUkb8*HTUo`?C<{wUE4|;dPt8t`g2#x%znu8amGLbCnq_EzD zTM-zHJRsPMxCVqBm$@&GE$*eql?eEG4pjof)?ODaCWiX;^lCYoU;Nb-{6An&QQGRn)U*Zl1Q@ zCa|O6@(QX+qs;{IW_6(7yo~q==|WDf;wVvGME&NZ0vcM-mfGMLy1Nxax*I3C$>Mgp z*gv@ye3|X8Z8fo~;ouE!NNPy`pyHUL3wX{|F6Z?-4^BPa_fD;WTeli@*SDc34GwQK zd(GOZY&uu$=hwn$-7`8{?^l$EIdGS%ur;4-QF&|5tYV3{AoyI$K_^-fI>Gb3!9xnG zLN#bUVI{xRHu%&td? zY05Xb{3A(QBl5~TilGG}($DgTQmspoe${@HYEg6{G#s4@d^&b02PB1EL{hQ9I%=GJ zF$syeA_5EB+Om>Z)^5=moA5x+>ZZ{?yO~HsYgEZe(M693CjOqO_a+9!{8V2Oc`5uS ziZWkqrbaxWfn8*LyJ!?~RTnGIjf3o)N+@ceFJa|NRI1mOgQgvn(m2L-keU zTY4I^?@tEgRlTT`ni{2QnH!cmRKwGTcp+o)F?Et@Z3wJ%I|B7)*Vkc%x@lK89FTk4 zguQJ?YHY_lp3n>u`N;`C3>H<#^YA1;0FpI~jF{5} z>wTjbv7OR&q>pU?v$VQ*9}D(H%p7X zB_3>(W%InqX|VXrXZ$W@lgmDH--8i$TiTQMFOQ(rNmnTOY0kwjr zv*`MC7GKWBz4gM4;^*ZAqk)*b&*j+u=NToOa1e+%S)IX!2nYB6(F_bX+OgI8hb2tpzDWQ{Bcp)${=q>ZdHHY-Mv@3>A3+Im z^d1fha0Qd$5tZ^JvbCVS0LUc>@Flt;y~CNG8gJ}ouc&H-!wvAzy}7z0bTFsD3}?{# z?&PQ(3n<^qtWzOJpfkos7m%lZdXnvx+K!ZvHNM{CB|NSol$H>|x})SbUh04)hKjjs zs47)jzw+HF#R4%5>0+57w+nbMxdWAtH&8&0yD`*ETP4XL*fxlr+GN4u3Q;6CB}>w; zP)9(|BGDGyD7I%pE!0mKq9rm9Xv!IN5hh?U%Gjbuj=YEjTb0jDQmDYCAAi#^J=&_1 zG4sZm_(#CE>=}7DBi!*(!TQ*8T(*iex(4E21}KYbFu`Y#H`!pjnh9aCWu${<10sj| z9{GAkpN~2!z@Y9got8>UsSeHKvZ@u~e2W$wCxs4C7k z>bwETum(g{r5G9^)E{0c2V_lZhz%f`FgW)}W-W0cAS*(p@z83GEBi9Pt-dT|jGPJ& zi6)rR9{Wjp6RKPULDTbTu2UiM=SJ20;rh)8|J!3!m8v^!L@;eKc5Ku%J1Qy@Eaf!FUB9Td^ zU`}9f)}Or?(R;ojk{Zd1PSggL4!+hcXxM(vv}XH`|I1?=id7# z`$wKKXA6+fae?}l>!K1rLo>g0fbmb+OVer>iNIYju0m3Ei3|vLKC-H1U3N0ft(J*ETX!5uO^m|PaOZj4n;#TB|TI-Su z&Q0dnIyy#@5YX3rpXp<#w8K&<*Rvw2{Ha)Ac7o~>DCLdsB`|iU(NRL0MX5Ato-JOV zuU{{*Z+*=5aG(Wc&M0*q83n_)y=cQi1jDD_3CJ`c;y&pIt>P!#&;Dg)BX%Q z-Ha^bng3U02oL<1$dHxO4E?&Cgr*-q!(a^|^bajS(oYmgyN}qIm|VgBj3_BS%h4We zMpdKDD5ihBh)0(UFT}0ZO`h65V6*KKON{36o{PVuNBHh!x-r(eQ;a%XXH1~W3wg;= zkiFbqpubdtl9e6eRa#okPK~s0$6>jYT&QF!@~w4Z2KJbUAhQ2jWc=aQMV*TZF1u#d zXbEGdq#PZ*?o6bVzE&NTGHUADX|BPNi0a7F(#7u!s@15$7Ec08!%3j8R~sVl`o_Xm9Ioolyu6>l~GGDd(Qa&R%9Nmn{CH}dItL=n$quR;X3p3$e zWv&RKyJcb(Mn$n}cv(F04*6ufx_A*y>2y4&MXEskfiFN}>sLthnz;Z6YZc}*T$}Lx zQ$0>p%T#8i!;NHj#-rOj?xH99N(@?|E7X=(3}Hkr>KA_%TlKFFrlkClObilbmgTWa z7ObxeU*kG8%e2zib8K2$zSw0z74z*SSqjd)I!Ye#sVV)vGI|gmuUOq=Q37Yk*&DejSmlJVDmlh=rG+9=*)j*?baRXec}&wf zl{wjtXIo7#>T7 zAtXlwCp@RVc?W7_MwIAF69+9hB};>=-l^f|7~ozOtt0_S!_6#XcibJ5#F84y58P21 zuv;BBpw|zEBV^UdI~8=r*3&=Una5h*{+?dk#VyPXAb^Y(vg!AeUK+nc#d!;qIB>OP z20XG8maGmpi+SI;cdhQOBD!}^oh9hS_KQE}w1%@aZ!%jQ5G|<&Lk)`@DBxGwAJJhV z>xJDbwek}>D*1{}EPW4sykzuZK6FCd(|@7tsBX(IJO5~TiwYxykokLT|6~6s6UXB8 z@+1a7xVZ6CEgIU-jk8IROHy;I9C&FGp9~FoX*hoZ zy&KY&aJvRcz>kJk1%<&Y?_aoAfKEPp4p}u%2I;BV!iEkg+zL0 zc_gyi%`HN67#w+R50(RK-eWPK++Bkd!l?eC8moj4bk1K)sB=a%(}-)#oCePvCm@*WC#??R~zf?FM4rhZOOuuGi`; z-uRt^iGr2W;$qQ6>@ZxMTZV5bX%0Xq(u9Ex@=#3Gh|Zx}VBS#JZ>l*Vs28_NCJU_?-t?<{8S(D>N z!0w(iWzkl(@ z5N8BtX<)nd0=<f0j>3afQH7k?SfxgrqO`(;|{W;9bmY zhaKgV?-{sMV)>FF7jiU}S+!YG$K^5U`R(HwTCKImJD$2~_YzgrBl%2EL_XPL-hrxA z<$4)2vK?6kgT+#uVyotx4@|i(FFeUo3-h13oZFuqLF8NuQBm4VY=#6k9~=6;C72W8 z{O2=Eg?fi}Tz(RABb^SxDsw{k>!(GGOMwGCdT=2%y$#i^U&nhadWv1KjsBlQ9nuR2 z(ckcPXV)L}9xJIV3FY({GDR!t(OS!otF9+hWF=!*&O~9k2mHD6K273JNHVXzS8- zM#uBA(@p3W^z?Er+?|%+%h`ubvPFZe-^;#Iv&NOvR-ej6vsQS@sE+y(f=rphG|N14 z?aP8coXM}{bNV6300o)+)JC}%TFJdDB&sO-)R;dYNkd;=tRkS_AkSAY+trcSo($3 zya^A6HWOUKvJ=73g3*i@aEf&tuIY~!`n0YqYDW+);V-SAoReQ9{DHICf!0D5wPeU_ zwClSWeI-xw2?vmzI??Wk5ewaJ^RlcVJCP9BtzNl59z_copA{X4W^iFh@O+CUejvyt zkn3KWKg=R7oDy*{UL7>`I2Mqv;{8$o#PEZ`1H9vYj^u%SNz2Y>UZ!QsyOg2&jI zFvJ86a!l8e&;dq@{shS?2b<)W+p4YyAT)Tt@8a>9#LqxWYKDFLfO*r~qXBAeF7*9w zs`(leX!}FZ-Yn~$Ua)soc${kf{i;qGPCy9;WI6xKLM2Jbv}IgcTEyC#{_f%jE%YXI z4=sjJ{pu$ly_ogkwA}Wqe5|^t&5UrEn+5>DbqIxSVs`h?0iJgE6KH~+W}>`H$G?s ze1%n)b}k2uWy2^7KnZeefik{uobLRSxTt=nC@Z~+_!g~WBW~Dhq)MZCDi}yJC@n&y z6k{ja-A{X0ZlH(gz59O2QnqV+7{7}1-qkCM!G9-rO|etBg*YYVmZ~jMo+`I+uYmdq z|6`X8;X+on%1gZ?MOh{LN=zf1QRT*g2=1LL@zc-G$S-p>L}3E%KS$HmBYplss{lZPHlnYQN;B!tu3n+??-Kft?xb? zjG8H?zg2sRdR38)`!rR?totdvqJ1I4$wq)#qcT|Japr!AofD~`?G^np#&d1p9Z$9e z2syRX_^HK&oP%IQxDO=*A!QtmlxSgNOjch>0o zhn4wj8{1R`45o2<@5!7LZp|Ju;_-<@CeFh~c61qgdLwD1x=N2GnaMZkNPE zFGUZqIzsSs;orNsHFO9ltuM$ApC(YbeZ3;C^$7iM5wLU+05E)W$CKw9{7L)4hJMGJ z2U;(`PAK!Y-TFW?Wb9@8X_ZHp{8Ra9bPT`;#y;XNn2$*RFlTizJyr60&>*Y+p&Y77 z9b2me7nt;|NjyY|lIiz%*9a-if-R`bZVMm*(29}L3`(c8+H9E=9Dx&bf-_&jASoH2 z!V=ETw-(j^=!Mz1?_w}7-9Foqf0M)9aC#uEiG|Y>R{G%yzkdms$#bwyZn+Wcic_a5 zwaKbxLR|r}e2$5gbEGHrEQZwR9Y1Y&W#2 zBlTf=z$rjymh?K)x(I;@?0&bqMVu)M^*e)xoK{sbN1fP>4Jkuel4d;>omQ)E2$>wI zm-qA9328#NJdu%DK@CDcxV%zOd-K;vsEmKbR`3Zl#G0o7wyIwVX?y}-P?#7r-g6>1 zs8K31iBj?gXMKGlI(IT7x4pG%+;Qdo)%FAvjO0PMY=^eui#3~S6X=S9EWQ=&ut#KS z!;nO2v9HaurTqlS`&QTRKpEL(@8RQnjk*m%5?_^1MyOIfGN(`DbzM_(v<&P15rHy$ zcwF+VfhHwG?V9Ud!vg&I34>sN*>pb47;dMH%H3}EEFHBgUnkt)))~TN6q@%|TfcorfkhrAuk1 z49xSeDpFY-l1j9B>$MMpbV|FnsFqEU-y=j>Q38o2!7JUS9I`BsSe5nC%=rZIs1QDe%H zVnf(2rz4@dSFW&M6A?^O%Iz3cF%j7v$h%H)0>zN*%HE}H>w=@Lcx28}y;Sq2azB6sbo`FP^iiS7O zVJBj>+VL&74uyIp;$J_K9WB;!w><2(|CDYLQ*+i1SffpfC`f97M}7jGyMzf<)ape~ zaD*wZSYtBM^%k2WQ#V_fcD9m!Z52lRC)$2i%hN@f07 zzbk4H(pqyDk-7S;BhIP2+?Bups)M=u^2nh)lqq4Q& z7V--f-1vXo1wC*po*D^Klqjb?Vk+9}&XFb5IrT$sY$t7ftGh)6KL=r~$PN?!a67g!XV zpWkwzw~XRciA7PlUMvNilXzX!-lxq2NlWPu#~##2PqfBH=|TrN&SI;>_lWL6{Y<}W zp<3`D+dc#>%zRN@jWZbW()$$&qRF)5* zq)OEBte6mFHu3w))bWOjH5AB@go74J*2&}Z96a!u`Y-$$cENT*GE9RQ8fiaZm$*nn zHOVx*wZIG%!1+Ib5F)^fuXV=7yFWBx#-=7SY(IxKA|+rou7J|ipo_Jtf6Qh}{`8Bf zXg3yOnntboEqB}`czmPtz!Q5JY1DBG*@kRsKe3&EK=8(YH^p){bjeQe;3)9p|L@lP z&ql%i^%38{hw*vdNWw3)c|Y=qStwgcX;wQWThf?<_ZV9+(3{z4;3b%tbr1@(;Jb%> z&tplb-PSv{WReErWD7|tKkeEC3-bZ^uo#IGiee&6EP~Kjt6+bCpb)G5CQVioB5rth zy6ofOWe`M)aub$~Y4IYn(8`3@ha%fnsJO#*NK_5&bm*T#D4dz%AUE8#697?ZXtAX& zIH4_`mI&Y!WhHhu$ZehL4bgS9M6-%u|QOgsn@76O)8d<=_`?&z{atP%S;LBfI(W@--o8zVwhI= z^GY1+gx=p^Xd!FK6eCzQr(ik1_Gqn%my&V<9Ih9`tT$`))=g9sc*hL`8qW%7YXl?u z0XXzD!^z<(GK~r}mktCbh+l`GY<1K|(FHnDTd`5x@PnBG+OaEW0IM0X#d^YLwcoEo zeDqO`?NRn6P!3o|vZqEc=Ij{8x4$hd#0q)U-SOEvdr#*H`uywm{gvikxNXPeBFc#_ z(w4(4fzq@i5B^)dXsaA}o{UJ9tcEW0x* zR7;0L(M#mdV(Lf1G+N~*O3TI0i?BsdyBNc1hkYzWX={2!1gH+d317o0MGFPh2%N5UzOhxEzYDV2qz*UWI=amM zC91yp=3+R%U!oKFxw(?;7K?RO)U*}|@bLCPKO=#F55eoxu7JbiaYIU$=%ALSb3x{| zO)X6(aEk=?2hEPzSz$gEq;JhlO;XsCM7BMGEAIhCwy@u}8yo5r8jU14V;Quwhbh7h z3@0(}Cz0&i*4Bw)4XZ9vPpP1+nuu?OFtSr8kPX1~&j;LsDRm`AYl-I=4l=6!#u3`~ zx~L63YJNG+jqhFTMOc;)d+a$a*I)>j`cvEPhXex~1_Mf^pE zdyQB0x`V&0bxlS5zU*XEJkVu7Lj%ukfU1G%*~f&}{#a|BN+|R3m3Yh$EYb%UATbm& zz6bs@jXLtIFt}N9pEe`@oyuNzNyDg9+=G*YO&B=eW=L>w@y&%g7NZe=Ezz4?iVwM* zPsAvGhA7dU_}}6p2+bbT@0aj|CO!_WMOY)ye@*|^&biX+nR1jrxleHs*CvzH5NAmV z^i1?(`!6joub&>m33#*GJJi*>GufQ93HCz@&arhQWeDD&Nx_+1!3T`fL-E9zj@>PV zk!9XQ2RAM~TL^J+a^n2{{rjeDmqB99w1 z-~)9a3p!$EF)`S5Ex&`^hwz^C6>_>qb>@M*A`)V5d>6*k>O7k0^8kLr&pdG|Kd0@@ zsOb6h2}k8p+jy5f$CYS|?bGv5M=D+2E%*+6az);^M9{Tcs7{wzss!(9iTU3`fMNw& zA>b3xszs?L+NtDHI~EtUlm?VC76<|Sk*sC=n{D*d7j*guEitGM$FkB3z(p+U`DwQC z2aBqQrXMBg$lScKm&&an%L$q7Mw;QqavRi1M(1FD>RI9XH+SNW$=BCA`7A$X|@YTxD-|Th%bPos6`tw zL`2|DJ?2Of`%8(&TT1E>jRaQn)RY;WTPED-RGj(i_~}aL&V1K9TUHN*p@+_G=g$sn zS-X*0StKg`q(KBfIW9DyR9BGOS3B_BxBE5oa;Ef zXU3K)CLUObI~Yl|oyfVX5ghaGBxBnn3hCS21Gi-AKKCzuK&VcKBmknj%81{_VaK$$ z;0iI=JldCx^D$fh7KSz|N%iUuYW(dS#QR(Adozx#A)LT6(Jgd8dW?pvS9El>7hbfM zK{KB+KhtMWx*o{taoCPn6qEBS1Z)ce7iZVFRzyp?62|P6eQ^x^?9;V5SRg+np#NzUzayNo&)HTeY`mih>1Y~A{s-hi2{WUfLVaveHB_t>$>>b zT2#hq@)r257kF&}Sa%Mn)K>%=No-M@Fo;39sXUt(cvRI1Tnw=v}Kk0?H{^G2Y>vw;-uwUZ&{MPS~T2Lw#Way|=CO(GEO1*Oh}{ z0(`D79Ij-ZOd9^$B&PXAi*gP2{-I3Rbo^sHCAiF133L(7bRQCPdjhSCbDrrE_^PU4 zK=g*sx95byarxbIyAQgWIi3a!ni^u-G!N<%3cR-QGyPh4oXZhmQCF@WTbqDvzzjqz@_tZYN?Y z*KMV{exA{?OR|opw^BLsiceOS#uH3~#>@xP2=RM*O`;3@6aW&BfkZk1XRQwvGf-NX z*v-YWe8^G%Se_k)V?3>gsLcDu1V&uENtm)+yR#Y_)vMP~5D`m#pff}lc4THcXht9y zz2UYp!6P+0$Q6sFBJxKgc&dKkclysevr%g8JB7v8&Gp4S;>Hck3xEaTfGf?xxIsXi zpn6YgW8SJf6t%*ePngu%SCLp3#Uzp16}20uEVX2E_2oecsmoBfuzmIcoeX{SA!{r# zB6q1!BL_`Q0jlwI)H20ZT_sk|6Qstbfl*Xe7Dhhu{#>r-RV6g-ARiz-lyj`y`5`9T zTzbPNRd<7x)3#=pwHMzX0Ylh51d&M1-dGgu_es2Nu|lY@sfZ^SfDJAT`XeWd3AH2Q ziKBi0fI|NSMuCDlWELglh9l$_CXUI zi=dHmDe~QtKk==J-wfCHBf8p0{X+{NAx0`2zMdm1m;i%0sqnpp5(goycDjFNr2gRM z7r5UsP&$M6|9H!J$y@Pivtef}mf@ZI^<*%2&SpU^)-i?idxMbWPQEvkg}mz&IvNq8 zJM`dd%5=w-8=1}WfVd{9UD>nV%OC728IE}%dqg)l-ht$_Q^I>}Ob<_xwg6_t020%= zfosKW&53ZzCJR1`aKcvD*fzBOm(N?^d??cQ_jqfI!l?J6bCXWS>~UAp5URv5H#*{V z2K@CE1uZEhfPBBKL~O~hMRwwsJH*-9`+rg)e*tPg%Qw^hqzzoR1&qQe&&8Xi!Q@&% zBze{5-YU(kjLFpuAiaeYx|POug=t0R$&go)b9in-rDh6Ua2qdd#oaqNE|HgK5u(+h zDgO~-8Kd`%+kZ>mO7w$>sCX%+SQb%(+|EU#bKW0T$FYor*JOZELtXagZymu&Ux#sm?TPw=x0?L(_A76Y9!{ap`r0M|8 zE~Sf9cIlkJvn*1g#ttL0$1#7;&aQ&TPqi7OG^Zp| zbAmST{l};&xoK1Qp1}ij)vf8F7@jlweI6`wGaaAJzEUao&&FR4Fu|dcTG^1Nr+uOx z$*dpQ;GPg^nVKyH%7;Jtb%uuHvr;S>-$CXEGLr6?OxIZ)?Y*y~uwCg?`uDr*Y{v>F`HVF>7HGVj_H3sdU%8X>%U2;5Nr7`64xfstb&9?s73 zA4|0uz*AHpAyiu$Wx2j}#O#tr`@yr22umx?So)Qc3+{|eEYyg~2Dw6Z{(!1}HOe5U zxg`2>Vr#5IFeilSV_^k;>>@N1=O15cTf}Jln;XahUZhohGH)z5`5wPV-tIo`(~BPWF%0>cNb;7Y>Q`-EHN>%t-8L>PyNtX z=%cZx8ZzODm$ZB^Gi@r3T+J<^{PxXt)leV}Xb#HbT$kHAxP}y*iP>n1o+^tXN|8E1 z6gmU82kk{{zf-As&vBa7uM))*=FAo`w;T*HC~ueC|HlRM9r)VQ(%>wh$*Sdu!q-Uu z(uVdvvkIyIHB)gDW|dkOlcd>%%oa{UDzBtF(TB&EoSmI7^BpvFQO=gjOXywXHS`;h zmZ9(<_*XLPpB}sp2K-S{bMkAA?_hE-HAAnUOQ%<$7|C=Br3vx}cd3ZPdd|9m_jQZZ z#(yC>X-&0J@HXV>%n&XZx;_wQqA_PWJ-rmZGZdg}YE#y(oj8uCw&htzn7{_Z)#`o6=AJ7FdHFfXoNl3(x}JY> zH~GYbB&jqgUWIJ`5{zsM&dO0tDuR>vryYHkhi`WE$lb#Exs1d&)M=tz^`yfmy5w%r zsYwKHQXSAxnqNAG{}Ux*C=FFoSsQG>BzkU(;jB*10p*46eG99O^E-%BD1c^W<$&b$ zq2+_yhQ2PjZwD={is@)8C>_ulw_0cGdG1lX={WfT0vSn zkz#lEFoLpt_eNkvbJ;WfFX{b1)al#L0UE@1LalV`Jbli}QIwJ4`5)_q0S%>LnA(KH zVb^+mQmPPT-EU^`>Mrr=jM!@J$o~{+6cRv6Srmng4@1HPfS;V4*gHAZJnHIR6Bc=s zN7^SWx&`3JmE~SIJAaXs*{4QpfG?7%Z@y<8r}Y(o978b4Rp)D0oO`BAQ^IHvqF(D% zYAR>Cu0apiNi(vC#9M;Jp#v_0+%60JuO@m0LAKJRC? z@0{XU*l)ss53mq!e*a3x{{yIJ`H%`y9OucTj1{ZU1A4Ns-{U#hAHK#N|4_EOQJnu; zlZyukcfC@0LRZtP1G6rka%uSTzLsId{>sIs%rl+)(yN@*pMp z^XWS!xRu&z6f@q{7(U7Lrb}pHgZRjy39o6;l!~FmpkYvD9!s2I>V_f}jIHoCfP$@7 z;qu&6ID)3~oFrdU!gL(7E#_1TqX%x9nZ;^_MeWSpgr*Vztz0B%5MY{09Kjkr{;_iZ zV!yb455XWbJUKMro>NpjJa}Rzw<<*`msv*zu-O}}3QqbWVqvgXt-vytA_BT57Vg}a z&X$rs!Q=DEyq|vwK>wlUDEtAL+snX(Vzdt380VOH6ufWpQHs#A>N}c$?pRV;kerl| z*l&8Y04k0@`Q0DTT>RX?vtuA=5yUcP!?dqh!J?tnza+K{mHC|4a$%QaRvmraFK zYcb~L9J5XzpAX!;0%AWb&nWJ}_1#ztG1dxJo!S0;%v4S;KV{mE8WunTN@oVoTHoG0$EjV{y&t;bA3O{n-C-c$G^vRpg$3CK>WmH)Gb1>#g zQ2gLFe&T#!C<5o4;W*R$st4pU$wL|!r&M*Zd8vI@3ZIn@WvnP=GBr?}ud0nA)Wqag zmRA2%QIu=~pvWh-GmTSRPz+cc6*Mo~)c<-qiAV*p?Vx=j-)s4`yoTecE8o)BrWFQ> zS%MFgD^QsYoJ3>CnrAc4y?m{?A<17bOkdDZepgr(8i!LbuEGj|U+36-&0CcI~QR^FpJhOrY!`~=iQJK(; zWsvakewGwwNx{>)kzW9!9#hTZa|<@ANIK-fE?6JPsDqp2WYBUI1E{!GFSFy-GVi(A z-@?aQRnIU;6;JLfs;k5L`ue)Nf77JmefFC=fSVoxKTwX+&x-v;NrUUxc`3NS^Z9FF zzky>Z+%IDD`|!$dJ5gwgZ#_#Y$Y7lRUIhCqZ%|Y~?H53J0_IKdSmdYaS!MNrWs!(Y z5g~Z=?+g!Y&6GfIRm!(2FxR{8WsPIc96(^mLc_=??&HG`6fxHKE%JzL*#*KK z5tV--_rrW=C>XHhKBUQF0()8n@@Oz3@XqUCz(7pi41^nO>C?Xvet#9`1o?zOk_%h7 zS$C=Tpr=<9^J}|~X1KNYisS*?J%UNtka9VPf1MWD$U7oeQy$b=fFh0*b!;TeyY9kY%b7 z!1dcu@7{F{4apocAusWhEBXUTbUNaHP1PbnUr@7t)uweK>mGaZ5#I zk>OwUOzm(D{aKAz0E7I1Db(rjk4&8X>m%1Zs~;}27g#D^;gWBi*@3lmsSCYy|2M$- zH~cKd0T*FGT(BBDL^?aOf_KBUO3d2sk<`W9C0GL%j9U@^A?qfmW#QNfaf&*a3x)u4 z1iXz}?Gy)v-&02dK&-!rgiZwh>o%2%fUtLfkq~3RywAJ4yD9hADJmEskm86=>%Bc5 z_spdb7_RpBtE2wCKZQu6lA?E z^kms`Xvrj6w9L;0Q>-9s|5obdQ5Jaj_X|^5SOKbpVE(D#-FUoL;SQu3xHtEVVXz_3 z`ri)c6eaNAAO5MD+|HBUo6?Qk{F`5Q|NP@k0zd`(_cPC)1)uK~k8ukxnEyom|9P&7 zzx;8JAW+l6*`C%z-TmvZ059{`Qg_@MU+;?487Zc;_1WuLVFRbq3fs;$>c9EP4(PwT zbL(&*0cQYI^n8WVfq4OI1b<1^1a0;pR}-c)QKqB)5WJq(NmbE-htb0k5cmEEF8<5< z=H7T=DvN1dMCa=pkI%Z#&<@eyeIO@bi~q-t6;yrs0WR#REDWtO=*?{L|IKVcbg<@e z4wk&wBXE7|eVYzzQOLzt!XGu$9&*SKmp+oOi2}=N60iFI`T1+z74N-@zrOKN*9=+H zd;~hSJo3j;B3J%MbDn1mwt=-`Df|^{tp*}vuPcfXJ1+fFkA%E9Bb`g#-dqkn7=*;c zfd)TUyFj*O>t#n}vug`Y#8nRapBUsGh^QG4QD^ooTJ9G-@Ak@w%n8*;3NMt-FN43k zyFA30bN7t*$U(xF|L9t0+A&zE9-jNI9hi*L7KzpsywTc5NRm1%H2B+H*7HfEd;UOt z^Jb67nZI7{09*#Dlvs&{ae@AAs0L~arceLQn%(gd;TJXQj#l3f-LWt0m95ky$N0Wr zkf*tmDobrs=AU8YZR&h%FE8i!3>}ase3rxJ`kT~WkKv5Jx{BVq1snW{1$V#NiQkI| zAe?XbmC&L&Y6s$=ho-JC>s(SvJ750&r4bu7+*Rjs{rdJLO30gse5y zZxa@e_l_)Dj97N;Zi>ma+UXJ2fWB?2Boy*OgZ)aF1dboKcyRav~-Qx}x(YpeL z2TINPX>Q4dUw6LD3eBvH+A*eWE1rY{zptZBzMfR=Ru)tE|mTDQ<0@kbL%-L zShE_DvHGD1cat$debwILkug%l!IBy>m5EX5>`34&g2A$}vso9&?3z@%=`iE=FNUM{ zpsAH>OZ4l1M`WxKpem%7^Anf6jWqCn-Rasafd^cI#Eitoa8dha6`&Qo zKl!l!!vXJcrd+7=-t^8~h@e+sURzu&Aaato(*8=l+l((7MdIqWj;#e(JvY&zFI=}3 z<)dXB(4C+fjqhI(uG^J%`YGzh?_QGs7qkPtFX-lbQE1HjP-ImciS3|a6g{9p#dCa_ zG=2t@p7=8~^8zlP*fOYr-xFy$ZEN%Dhl}J=a^#0N z;_{}0p7_zDA$dQFZT+<2=8T6EMZ_7=)e0#*R;*)Ii(Fsfy-yMb7SmbSzj}5Tc)mAN zT}z+0Tf?F%2P1!~9U5n}8F$$oa(5Thyym)(TVJXbv-whC;Irg@WuBiK4hhIYt>h#A zu=Q1X->XTspTap??4TS+VG^wVf*EqtmFP2wsNA`f7>a%V)q zW)xZpbkzGD%%_*VX7>^W&RXZ8*dNq0Uf&~4yLQM=E{Q6i1G5;Vtor49Z%eR^Hu8I6 zS6K*-8E3Fn>@uW@PZ-GcF#v};P1#4oY{?|)_?Qk^{sYpBuvh@)O+Wys8$J(D?;6$h zjk2sU$wh)}01MteswDP%vg&WK$1cEk{rwaEHwFa8-N0`0Pf4@)t3onV+yDMxQYvT)o020_ysIxxP0W#atgLw=uacCV};x zXU51B&Fub(P;YRMV8ULkgb%mwZg=hgh3WpYikza%`GqDj!xMS*gKoh3a`!#^`-0ey zb|0yZZ2aEC4Q=~qh0vUCFiEO2!$nlIMc(y5j{iQ`D7&w^*)$|)=$W;5U4<8wUkx|? zQo2S~qGvYB6ImdgSd+KwSooZdNub?;OI&){`&3boBVpwEMQkMO?EH?-9upn=N_nR*cT$!lKXeqC&z8Z+wop(ct<`=n7_(EH1G*MkP5P(o}qisp?S>k zD?~Diew`a3ay7=U9|4Kv=b?A{+!L#MVcoa92n{InWk%{(QdgDd3=o)W3)9N!e1w6F z%hE;a4()_7qn!I^4o_6`1D%>`(-ami{ZFg5rRlsx0xJ#ZVW%rWrJ6>qM}d_Ww77nn zARv;-juo|%92^{9`d2>WLj9e}6G>`&^Q(G3{XOhQ5uq*J9>?;-TN=7BHkA<#XSEWB z`)c#<`=10Hf-dTfH9q+F)G-Cjgw&jU`cI{=S$z{axGU4iDOJ{NPp$+b8sxbY)sB#c zKX1tQg5EjM@{9u`e)RuHar@sD##9vp8ujBim-cA)*Fe^273Gh#c*n7w6055 zrAlV`gyyXNAjZAPd@MNaFd*~%9u9#@-{NIaGL(J4VM4ZvqAcKeRkHVY9m1KAaF!88 z*-}W+7vznXp5`-)h6!A&2?a7*%TJ~+Q;-Ch+f_EZal`dH!}8*9D4S=_~1 zt%v+jfHH*z!sPkm&h|HUPAn$L*^qGW^(kYh16p8(S*1#Da%usU2SR5H%_w&VlmXC^ zw=njujkr*N_^lE9`idR}WeDyK#X+I!JY)LjW<-WP@*0fSpSyn)Ma_sKrtB1;gBv&H z=(u5Y4}T_G(FlsPfSbEYrPZKg@Koz#=*`s0H#mBI_J{Qhqo-BJ%gvM({*ws%baf?t zq=LydvAP94NV{3p9#F+)NWIu-Gi;{5{^sgRCPwrwj)$}o;eCAs){E(#-J=z? zsmZd;w3D|!Jc6LnTW8d*Iu+rC6{|ix@g%O9x0yH%w}fE|1&Cry#ncR11~Iy^{yq+2 zKvN7M>&3%+9wLNJkQa#->#>Gt|g z_thGr_o^lJO+4U==^;Ebh6<)HZ7Co8m+-qF&Hb9Mz!Zeo!gpxBGe9 zCF?K1{HuVAXZMS(=RM43q|N5VYP?GMNV=OLBMfJE2UCX5$2vxpCRI`#IZyi5yEn0X!)w+uRj^I{X00C)-F$ zZtlM0e*Q;RjT*ylIT}*F!vA-t+*Dcx*QZ!ZK_ET01e>mtr!Bom4vguHP98UmQ_%gE zj`qU$g4QtW-w}sHULe=~(u`w}mh_N@?!yZA(bWK6S0gD@=r*~$R0bi%DyQmh$>;xcx;3m?%W6-*ae@} z4vp9PEb%EGJnBLLXX3cYcoEdL;+y;7he1+p zk5@fu&}!?~Phg*L9U;w7Yz2?PCt(Q~1P+S`nQb%C3dsR?F$C0knZki&G?nhJp}eH{^W2ws&w@wXnI1I~B*oyd2YGUR}O@(HnJvN=+7LL1y7 zL`fwxAdz?zjfE6@*Yl6W(k`Dg_6(Bo`Y&6e{64G=lOnz-(Z&TEaQbDmz#dx-EfF*v zi_gA;yrD8bELDW)EXU=4PaIZoo5ooTO{iMdL1=Gj*0QiQY|g~@DARi=6G zNWLCIjp+V#bsp0e2qEUA((f6GFuw`6iCA34j)Q+)si4@W>Ubb`#4x^^xg3^PKj&8){2~+q-eI_Ck1N6cLg2|GH-wI zs-DD9K&Ee9g^OB?kNAfcz~7FHe+5t3!29YeK?fdDDmb(S^_fbyVoTi`^?1E6y|dRk z8-vy-C>?*oy=d(k&!;OwbJkBpmn$Uk(=(>>6F!U7sDCAraqU@?n3F~s2@%pvxdahu zA?E@sAxU8Y#z{>Ry^D8byDG9OKMwl?M2jtmqh4u=~x97QVWyqftFE> zbzV}qnjdv}Uuz+(uuI4h+{jZWY_HlvGD~-iM1gOwp}x?xMM~e1b^HM*h*7Y%S6jlob%}Vk_lrlH+zWn zTQfh%oP{&5wX;F6`++c|76vw}ZlmudQ}bIsQq0y83gB8XdYkUxWdZZ_ay{0+c@)Zo zd3%J_U9=&8%lwGNml}4CU)_K4?1UKI9yuxt4Dfi*RcAulSwJkB0u1n&g^Dg83kK)L zi6&<;WY~FLLLY6vWx6sy{@`8jErT8%+!}2%8S*oNpy2{_e7j(?I~i9tqYC4P9Ybdh zOH3+#;}C(i^n}mrnDrl&`GBIhM^uhaM4#;vHBD1m{;2e5V-9~=KBr*F#0r|)l{?*b z)Ele?&-y!evb?2 z?hqqE38=BVB~8TSEZvFvNeWD@To?hrOD={!!)R9ENSjq&3y0TfHgH&ZEq?VVSmA-= zqOFzZk0RxLzgm$RFn;Lw7Z^&L0KvR3aMNF(qB&~yXwhz%R^8;;$|LMc4h;)k*^KaE zxjY}QDYI#DHrj47A4Fwn9!Jw*(h*DdNyOqoWT`PsUJOO- zTbBU1D#C_pTa+P#e9=DE~#CIkg`h7f10Sx2dtQv%en! zSZ8bPHzcDPn}=J2zGS(7es5exqnRLD3+x&8K+2C?^7&;TKF*s<3=tge{~GgZ0+aal z`oVsn@eBu>f=YisMe2^rkQLigCQjPAd;$?){A zZ+*)$I5qiQ8UFVBlN09~DU^Py_Bm#+-{Z(fhu_X+4mu)5eZ8!B)0#+v)KROmmmQ=S zV@Dik*Vgo}vqR>Wxt2Fo`y7ez5<&|{uy)#5U~b4W=MH01Q^Sv!>bD-Q53yO6YE9%@ z?l!}K)Wzc6%74g{fUXXxv;H&Gl>Z?gpI@#2XVm_uc!yX!#Qt(|H#W#sOJ_ihi!@3qol`JG$`Dr~Vk zGQ81n8O=}2%%Z_a!I#>a?$rpB#U;X$#(hKJn_rMrH=0p{6e9w z_*InXWU5x4l7ApW>Qen%*=}qsTzy@m(&oULW@S>tBgf??XMFzSoxx=`v0hs@bxATy{Ff;Y2f-zK}1*N&YO8!gn`hNkQy&xY57Mf5rbwOR&uG^H@`+) zbu)~C+%2HCxUuZvoE1XEkApx`?anQ@uklZ;H-jf$xZ!#7`y)M8$W-n;?U!D42Tdu+I}%MyT4Ft?B*P-64S4GxY1^|P{8$UbfeqM0cC$4%n7u! z#p+Grs z=GrkaG1slBfyx~*KqI=JmQ6@)ZEffz+B2}VY9DNE?XZY(;h2~ziql6ow(@T5Y$@5R zladO$`+2s!C;1D5eHK|VZ)id3>?D3_aj+dp1FfcH&go7>wR5w>ouLVtJdnT^JV=Z%5h7Yrzo(!LFON#AE zPD&aJMqB;P5Ab)-mutEAmX;?fauU~r2&(hBsXSgkSu(je#1fkRxHsU<|1^rW*Vsq7 zrHiiTu(^&k@1c!e6nUR!4pHlPd|?}tDEQ-{|0GrGNL{7b|I`l?et(LfGBptJBp%kC zg~rC>ezsfrEI-#_H{Cn5Vr1uMz3~*@cbx`to1h&+fpSqlME`PesX3M`7tmln`PJFv z0J41l07msZcT||(A4Dl2{5~y$1?`cwK10a$`eZ*mkrbH9t}Q^^f;>{wYOjyVLIt+y z)Y6D_+IrRPxcGUtF>JG^shuGbYi&9QBY8Kbe#dB=x%=acZmE~r*~%3A<@ws!zU1Io zV`Wxl?6C5-U-~?wp1(h2NuXz#rFB9urme43gnh1vM0a`ufmh=RJ9bw6aBw#a9j2(L zXui%2U#VOp1ZZ_e!frYZl~Ct)d(tZ{@a*4w+D3GJFf(-RKLwq;;4=i_08>(C*`Hhc zKPKna7QiaYO-84hey*y-^bgwpU|?5HeSFh-WluU`DCRClN8T-riFdHK=Ei5cD!N`N z^og+`muw_45F3jO5efN9^_AGcr%K3{F5B2IS`ZUody%x)P)tJ)xl8!7;_EQ+Ny&?e z-^U~mnPp#(4)*BeAA$bgiL$#sW9}b%4B+@z3(<86`(fd|_3waMTOuW+M58S-p?Uv4 zd|YSkAsdw_HZH(~-ye*=B1Oa53tfIkW1#reW@3(e_MapUs|Cl_`R zL6?|*( z?34Ocx+lsiu9=KlGeYBEgDMY(SezfGoLjhZIe#=pXGfADP*i^rnYL6wG2p$ZccIKk zo^>YV_t?U7w{1d8_bf+POltN&{%W}HWhOkawPoU5;OADhh?dNKpy-}{=fzF0R@22( z->`SuJYzjl#b|~OwkSXDsvYyP=-f0xvCf95FS~kx}CW^2zI}EB$d)*hiPI}%W za*V$9apLFqk;;(lJ*-dg*)sAw+w8!jSvX|BYApaw>T~L>mgdbX-zp|$vb8*zw~KVvJJXEE=X&+!uy028(=!9Q#hRZ0QxEiq*NBkT>Y^O;x^KC! z<|WFP84K z%`JGBD=Etc`G)Jhpm+C zXS2zX?-?rtvQ>)c3fDfCJk-9QRhgtc(qe^Xx_%`Yb(;KAhGjM(yXATDIHlv(`9VFH zHRkU(=lwpD{6fmYg7uTrs&BST{d|BTs_?4MT%l7=Q@zIUTdl57L_-{4|G@l4u$WJGJvkm$|Zwx6bZ=ifIMkony> z^B}`iw?@sIZP|%xB2v>x-exZr4UgP!yjlGhA+6mi)O28QluH4%o5nHkF&Y@F3vH}K28S00PsTf-p`B|HttX9e+qn}*8=7mX z!U*Ru1R|rG=j0G~TGUyhC6c1f-RO%IGL|CpPg!f%hlg9&h<)dk_O*8v#e{|k_%vHs zfwaqA2evILcIxOi=%-XJo$cMu1zDl$kMB0#O_JYNi5AZJH&fP6haAoM5<=}l9H(jC z`RC8wPl7rYz&tmpHMCv|jO2(P=mIk}zK{xg*i(tGHy*`qX}lp`=S@mLmP-mUw+B&i zSoqCzHGfLdl>C*Ww6F7#kt95pe-Yt8GFqqq#IA^|aMZxZSe8X0ZAjStyPxxJlTSDPeFunfx7s<$j?jYi8zv1RA|gZ`vs8wrZyoG%;*2#_{q{8C+r*1sipqU% zTr}isN6`vBvqz7Pq*e=_5zN8HP5*1aOT`P$yAqy@+dmp+zlaZ>bF4Ui&pbs-bM*9D z_GeF=Zst@Zt#|whHTFD3ao)df+gqp&Ut+L}i{wZO9EN8kl$HbESYO>wCN?i-aL3fT zTbDo7lbxI%tMGad3oVAn+itf;F?uD&lszppmV?ERgs%NPj6&?_v)rx!v)D<2w|Q?+c%dSGH_; zZ^x)78WnrZ4vCG1b2DRVM}6`%Izo=Wp5JdbCfEC#{o(btj;GN?DLXj~cYD2mt7VdL z-}SlkV`O+S4TVlKZrJe}Yu$sgitQdU9mi=X{=<#fTKb3#)zZ+FD5m~{CMU7q+)6+S zy&J{WqVO_SX(*w;QU1G*AU5S}CyxTW)V8OUTcu2&;+m5eDZ1aY)y9_lv<;Zecwq(M zz0>d|RgSNe@x=?+w|rN)4^K4+mdd+t9@)VbasGoR-ILE~t(}Z#D^Hqif%k@$dhFBJH^HBH}Rb0J;sI_uxops<8CyCV)Sf zO)HhEU}-ixj?9QxqFdI>Mz9pn4Vy!7VBxb$5oDh+8w)1=gRfLoLhj zV&cb6vbf6gzVI5!d&DE6b+oc~ohx)BrZ(v*_rwr>pn;+xA@m>5w0Cc#z#2lQF0m9> zh$D6_QpF7ofYVv){g{jur7xInM~PH-aEdFrkPZdfoTqz((!&-(ejX)}#bwQc2BBKa zGz}5NLw(n{k9?EnH1EAV3|rTAuF{H_8Z6zt4`(+EB|s=Hho7z2h2O>w5~Pfi`@&l5 z4+;`DoA(DtoO3x3vdm3x`0Q!X6Z0JgY@H67aGAxTHLP-b#j<3Wf9qImf5)-@VlK}O z_xwYYw)!Yql>-q!?C{$n&A933}MY{Xb&<)ZcIxY^(){dk3 z6BNZY7dSB#4d%0uq2q;GJNepIx)Snx*T!p_1}_}{hsb8WTxV!yb;?#G9<(^olM6qd zKBs0UQo$NE%Z+g>;<7TEWSP)&I_q1%aZ+zLewGjKNUR!tN2ui$@rjj#Om+8`z{vQq zM}%hGdoL!i<@KAo(8vwx$lCJLx8~SrP@3Y zKkW4%imjgzbx%_U4vpT%PY{fsuF3F<^LZ^NI-BzxJCop{pa~Wn={O#KH4;-JS$=L-4gJxW%@ZX^wwu`3M5=Gi)2MuD;PP41D(2 z8hv5%Osm)d*oGNHUBtW9>|O;r7r*?&ueDg{Fkj7aLuL~`&nzS-6%8A^-zt50kEr#Y zxDGJ1rqrR63c~UmXaS0En3Zp#$xO`2dcOW> z`_IlL7@T}`>GzC?D&gMs;13Cfj?K?+MND;cNYOQ_^#_>FGfjWjvD4s(au!<8wPKIQ=(^0)fig&jxr`QxO~WeRJIAXA2}qbUJ3DCGu1R zW1Jy9zjFpvwo%0oJ;jrav)wNo?aZw`6i8iX!eq9g=CaHvOs2~m8{{rpZ|qXZks~Zo z?Hvo>hQ4>8V79hMm9yIK(_xvB2OITSM)oUF>*`z)93(hkGWU3;u#uKM7HYAI$6P-$ zEh=;@hWF`wL?Vc_1s`Y zzy@PY8x25J2vBLOd1z?NOSxHub!`Q9D5p|?Q8=h+LV5y&UrPX+#B$)MApD0w1~B<& zTSFsxy?$z%gx+WOjlAmS^t%Z8&xyU$bW2>Ht)yd9)bfZVg1rKX0MMo%TFM%pXavw= zQf=e+ZcE#RZN5|Fh5U^0M2;gIs5C;})GUW+jk_hfYX|}sPnqeglU-P=faH>oBocq@ z2XQ8#cC}kZD&$TlHM2hQXlZQbk!kIPynMK9?xJBRe`wZua+>)gX$m2~Oz$xCpW)pBFZ$!MxErO{HyDyZ%tSh*W*ER!fC&k<1Z zy8nTqH_Y6{cX2-oXU=6f+8CZ9nQlcKGUG+9pY^kSt2ZynDn#y7q#WPG*E<2=4Q7-N zllA|v&Hv*8Ivg+|)Rp=#3ho~{-e3%;ho-ZSoXDgzA>uN^ZEkHP#5%sdJnyYEb4tY1 zWKjuH9^bBcMg2~o-%58o8BE4Co7ZZxhs>1CM9`vjcX!)xad%-I*~<4#GyFkJwEUD3 zdhcaGB@-e16@j>DQEgY@bl)g0c~6T+qsVj_Ng?NlhIP@J(y&?K8Bu`FJORHB93 zN6z{*CnZ?rPjCshqMZ2`l-x6wrE!Rkhu)sPri-dxRC>=WTTJ21qa*gez$OS*!OC>p zbE4Pe5OXa8n_C=FT_N)1FCRnJE7Fi9p3NUZ+$@nl2Nml&o4BOXns5}ocP~`pDo$)k zB-r5EqYfU!#qjJxL>1?F%CRk!3yw+7vR$q-5wKzHj5M+I>4@r(~`cbJ?Zud-=#_jt3;{KP!j+CADLdaM1Kvn6a}G zS9w-Kf|!_aaM1tv%U3LM2?@DtV@}KE;J-Cp66h4==oa+*BXxmR<;L@sWNN?6Q&>b_ zevUX=2*!Ll_TkcrCSvJqz%Uz+`KZ#swExyN6xtylcG#*!l};t*v)PMO-;)OIp%!D-v5+grD`G5uG;tsAw2_uL%@Vcy@sN#v=z_=U*<%(zSI@8W z^>$8EX1C?0_Q0)R9v!S@OA5j2{NbD9P{iPttqWF38c7pm zHzh_56;N2x-JSSZLE08jRb@wgXNB7B&2AIQFdK20D&$h! zYIGu@PQ7e7SD&#x|*7FB{-~HL8 zI0BTy1uFb8mDUy!7rSFIAtwt-Vad~(WS9x#?c$j`l2O?=Y3CC@Z%NX%tr(5wkv%l` zABfTMjLoM+)8;XUU}+_;YY|?A0o}>-?~RU?oxJ*|D~?M(O%Ibi|F&Q5!}0IAPedkj zZjuFyT81mv6=|-CfyG{DXt0SQskac~fF`2EXW#wA&3V#77n*U{45Zfs@D_tk;UmYw zMJbP;*}E0cb}%@4C>AKw%GxR?TOHv7&4c@k;I^17V~7nu+=v~B6o$!qaZfGVme)$> zT#)TeabXW(Q0oUkk^+-gQ_XZd%vswOlHvz`nbD(T#x+d)~eR357!u{6zN!M2km1 z#TdEZ4o|%-M<4r9XPm!10=gb#;Ma+pk;9=a`z0PIIT1tVW2{O0h1NwiV~QQk+Vj!= znST%g6aYb#UQG0k=$8j_b>#!N;^K4@TpztGpE(-I2;$Ev!Gh7GYBpSicDGbTu7#y& zzo#P=s#r(%e&^7NGYfSNxI~BNqm6=dX=CHBeN13M;#L)#i1VlXX5BGdTYgzb8K$bB zfE1~CA#Lm|Fp>#uad88Ppn-#ahPhvG#?jAKC^T2Al1UYQhw!mfV_9gJ*?833x%!;N zr7k|%G||i(%!fo*ylCPVtLr0S@EnD-9`|2s0ls&OC%8^)Y8p>}0z)g5NLCgH4c3nG zj8>i$c7v{e!-^@@4lxS7PCM>0DvzKtBip8g;nlJ+0a13AfefA5$Q-p`c8wDH?F@ zVuHo6G3vFpHUp+Yn=Z_jEG~gflHKof7r?T*xAmL5&#Z?D|<{DIwi}& zi>Ybqzm>JPQLI!^9%uRy9lUXnU=VQuh5GtItJP_8atiA$f%ne}yTV4*xcSzP-m+Wc z{6U_lVecf3ewLatU+&I)jcEy&fg5RRAE|+sXPg45OD!sV0yHHfm|5LF0fe*gTCYx_ zCUq$kX&jmDS+VRKqq?wkk`SP&FuOe8X|qlw+fE*)o@6f_6IB&I=PmS**DTGk_^X%Z z_h^$p2n~tOEP?C|oW#vH8aFx?biCaPWz$@o31zZ}(Yve<9)<)Pd8p|_#;{t$IkBmx zm!I*Ei$xma&RK=iY4$-pLhLOW$;qWEBMg&H z-)9G$#}zHbUFhG$4xvmMGV6^l_)?8VY-;KBFG-A=(a}KT_Yx&q#pBl7)iB_lhV-pm zwI(eLN4mITr+9wak<15%xwWw|gd$8GsH2X&k5AUjkQw3c#r4gWsGmc|1(|hr!yG?# zmMe4zF)hTag%;;M{1J|i9mS6bjh+#c@Aw!<)(LH_$qnbEa2|n1fJu!c>1(>M@m&Lw zg(ht6bS;C6f&?dz`jDL#Ua!CL0w#{A*$CY149(14{4_51tSw$m&+7O{_!C*Yz6iHC zezeWF7J6#`ggYsJnyrO-;;Kn!S(6VHO9)z`@w?-e7VrCvd~@p~+qaesgr%mh=hE6` zK9>+j5zN>^3YTwnm{XCD*)}iW0jJcuA}C(Pl@WSd5`Wt4QFjzUS_DWR(_&J1oU-`= z%;zAYZrR4O=FFc;S@uk2X=z{tc%s{0C+gJX1i3Pb&l` zaqQx1$#jMfnWs0@8|K1IO_km8YjYy-4-Bn)3vkVHB`2*q^8ORYirwQaz8DtK=E`~K z_Mjl8WdzQ^5|l57oaN9bt=%?2m|^jNsX<#-{D9jsy<*nw-=b6S~Wsdbm^NBVvanpDC z1H<&8xAAD_gP*{oskcAoam~3?LZeB=kivP2A4WmE2u}{3fh3xv2FnOwGYmkvfA_vQYrorOimulxU9gyU>?yMjxGp5Sn1|qxZQ5j&@(Xg7iHjkK^h4A z`;NH?aHKu`9HbxxYdRup77!dAUP{G}94{W2&Q?rB(>iy&@X;3ZBRY>pJPw&h(v?WT zKNv7GT33x|04yYrvdci3dqerFtfO4>TOavAWyD}>1fgpiukgz}EZDyot?*ml!nZX5 zh_cJNK+24HW8a43@dxSM9lk%C&rSa_ln}osN#iN(PVAY1tLh1CBpGR13SKF1k`3G9 z2c9GwG`MrYzFRDBQj)glD}J4%tB@CGj+?Z(m~>={zc);@WH9;P-Z12kFtoI^!C_&a z2V*H)24(|Vm|a6RyVl*Rsg_?g=)XrvW`ff7mIhJ3@*&OG;Z+Z|{T@%8>IVWa+7Vde3%viE2>;hR zQXaU{a<@OH&r=*Pkv{EX+Oyu*Zi42d9MSCST(o!10>4~e^k5I?GUo+7t+3&$MS%%0 z)p!5qzWu#@orv@19AGLca&mGQU_lE=fN!_|-tG0vz#7Zh?fnoibd3KPI`OHQ*KNPj zn6|mj^IKe^ZFk2c>ASz~@=$SXu=Bs1{a^Cc|5R*rpn=2GpqlJy{~h1?Z&~O6Btd^a zd0%zX$S44m{M?MJ+?d|6dpRh7>pq zJ`+EeF)mi#dh@E$_am4v?0;M^E;L+Mx3KJaQ?-Z=6)XIIJ=*^}|LJfB41xXql<;*= zZS6-e7>rxYGNkiA94&L50uvY4e_&w1S74ksk{KX$96!+@5J=_HF)-sGsG>pu^m)J} zAV}^naJ^-J;qQOpM!z8;CNAw0Jo1fvEg zJq`|zH$zEG{XqFv1uxDOdz{5OvmiRfVw&n{$?SNaj=MW&^Mz{o5~Z@P1bSteCVP`w z;|Z9NpPXU<(0rpVd0qj5MWoU`1pt5Dj1qW}87i~=^V@jo*N21Ivaqu=Yxy~-M;sy* zGe6%-jItXMrBgp&9oUlFta(BAtRvV$6gykS%hQ^wlwD63#|glL7PBqZh>fVh7Lk~P z2>-*+Nil$3z_E!w4ec)vU$JU|+Q*`4pByTU#@?5z*Gt9Zr13b3wz^&eB@uogY}>vd z`(+hKXY>KrRTw;ebG)?mbblGjzz5VY1#;P<0X6J?L##RlE6cUEcZYKo{TB5rfrl0C z@0WgAboWIN$^J4|wLf0On<-Xgizt0VB&dn5((1}CmChRitR7G=`Y~6o83vT_&63R# z-J33oEBf9z-{DH6(u#rN%T(=3qGACIlx$5!50)F}?vbAcu}uc>=>@J`oECRs%(HO7 zT|C=Z{d2D`;Yp|P|0N%n6wU-nKPyDXhUe;S#)!R_4HW_H6`E=^*%v+Br#Y<_DdZVq z)}j7BU1?UvvcFw%%8(naw$W&RzWGTWR+I}?)yV#WBpY>0-$HOsuqF8^J^A@e-<~ogA!tY92^It5f!s{T+M;UTzoS1dP5stUmj)4HMr#! zM*iBK&NYASB0iqKhfW<@>1vQ3Y=5)zC|qQio-I|hU5Y?P#J7h8iT8&HfQEL6AUbLp z3P9F9O!Pj=zrX<%nangqEjCLmlDM-QLm(X3Mr@QRE;12{M}M}P;YF8yL-KkTv;mhw zC7Qf*11M;+CXsb|i4w^9ZF#>F1x{zne$v+Yu(NbR@j=vPHw~stV@W*kpsA%&Wx%@6 z57%haq3mSG6&&L|1HeL$-1sR4`$M$>4H8M8XP|UqmO_!7^Ild^eAB`n6^C_nt_6cL@{f_47&!1PDwV0xQsz+6I%I|;i^aw(EVANN#zcJCJKyR*f4*I# zASV}&$pwe9%YJ45bK3q|j$0=gASqHYVG^YZ8v|%D=JT182du5-R7l+XqaJ|InJ)Hp zBn)uCpj1ICn3~0&<1=Y}iF(f`)8>AU%7a4!qAxniw>W7!Wb9@_2}Uce_nCRDB)uaq zx%HXhsB|Tn%m_oZhfTz|EoC`#?+#A$g=dj za@7NfVMJqCWJrm%Q%seYEjm|98S`^3|8X}1tWiWTU!@;JzL9+J3($^IOvmLWnhi(Z z0;oy@GnVjW^ibvMX+Z#Kfz4>NaJug(?28Ss31S*Or4s;G{A!HG)T%Mc zs(qT7wtwW?F8}_=R&N04<{X((m2(9hNF=|dN8<*}zIFn>obppEdq8*99{ z8VHIIPQdYqfKjt4*VJ99PzGAz19Kfq2rHcuu)-m-vXU8(Vauo}-{9NqQ*7-~#&`Oe zA~38(B0~s~WrNUl_jI4Y>l53-bWzT9>=V$}z$P|RA6YoRc?1J8w5~285lU`Qv~Ccw z07%C4!qLcd!2HN`HHgt{qZ*y5U(z<(!S1wS3w^p&m2HeZ;yLc>kA})&c*M2RP&{pp zDYWei*yL#f1l9^+Q=Czl1gNs&Gla-y#C)Ymk=C@xa1;ZgE@QslhEXK9%dhiJtKQg^aBo@ZvJ2$d>~(qBSC&Lkm!ZKZ@wNU5!m^az$a z>3*z{VJt}PKAUtM8ki$`c2@;_eHTSA|9{LB`3uUDnLv>Drn^c7ATY7}{*YX$K z1OR81zY~PWVFzq%Y!p)+r}MetnusRoYY`2yVAqtoL3&9cIyc&-DlE&MkH-!7J3sM+ zAR-^+k>d*gB#UDM`bdL&RUa^n~FlL$tBGCGRC?nB{pNbI=-g#C2*wAF6ae zY^&9o(r#LA^+gmjez2KDUTT@|G$q=u#o*RH;Viik5~_qg{wkn53jiUA`@Spx+s{qF zY5TH8!Wfnil$JUUZe!*JN8#GIaJIL@N>>qp*cN4{sx>Ni@lJ@8{x57?){%kBGMJ!J z+Wv*A=wQQ$09D83;=arQbJY_yM$#gYvCd$^p7=g67~=c>lf5`rLV;A8931qFM(NCA zscMb;j2|W0*96kTcK*9{KZ(w-la4^B3avHx@#k-RqLqMT1EW_jlA@rXQ2d~luSZq& zbFNQ^W*2f1TQm+PYqI?#A=2h}IQy+gja!N?tY|0ahrg+I{yL>k;+!ahbUJU* z19g5X{cgXD9JjdK_Nv=y?>EjBe<1!2Sy^=0PyHy}QG-ZHDd8h0BmaCA4UpGT7pfGp zyx9PPY5r`wA^I>5|)W=<)p0D?2ji?cn8 zuiA>St)WyqX5hjnJ$MTT*q8yD^Is2DCHPm6CDj4_bI0DsKzrref;Yr3WD$_O?*HJM z&sRc!`|(kBn+(E|Pe>I45oQtCF8qZQf|dV)isk978^efK9_I}>R|Vzf*AtpYIx%i#Suwx$2xFH(u>U#{{9lsek$y z+XL=^e2Vec|75`NlIqVjXsb5`)QJ~SskyH~D^@JYKN2Fcer7>4^Te%vYgS^hKEj_H zyYkyZ2GhLbS$CU%`%~p2X!SwZ5USD^;0k`eXZ+Yi11TMQY(Dk>_#6G2m@OmQu6b&P zU75Qw=9#}Y4d8N`|DP^LxUJpnSSD9d{i~#eJOV8DdlNYlWa>GhXth972EV&M?J-=N^T|8$H(A-UKtQcr1u30=UO0d0moJ$v-rHn*R`x{wHI_EcY(n_qFur&IqW3cF_iz%LZ5$G>pc4lrCOGNdFS z7fgOQQ&NCiqj0eAczekHy6r640RG*m8B zD<{Mh2=p^$34g<+?YDyiM!U=j)DEg3l?apN!yH4y(fWCK#(RWbNZd_s@e z#NB(&zsXtsvmzbcDt`>szsX`^5OMKh6T#~MM^W zK%wp9MbWOpbdlbZUlvR8dhz?7JWeO20Dp^r&*R9jwPx9RtUBOj<4PN+;x?h%$6-80D6Fs5I0Vx(sNe;$_H+o0egUJX z60hdN@@551rJT2q-(QdXdUhk<@x<%Z0W?!WRt+GTBDggi42L@$X0xaOtLG?oW5$%o zV?>geZKfoYwDmP*#qRC#VK;)L#&YR@P$+h}R1cbUfLR2&Q$aqBX81s`H$SM=$~0h7 z6q|>@$_tBq`9curGY^%C<}B;OZmD`YhtILTI2CHHOmwCP!vuF{OY$b(W8I9%c`-=o zUKse)cX%|7$KwDcBmnPG&^&q};csNPS-8q$rXPbVfAl`p(i*Nlkkmc4z@ik>R3f7U+E3dar`IA(PdJ?a@_t=O;U8b#9SdhCgIVNR)*P2C zjDfh>*5pKqa8Iher~DF(3L`eIOb7I&H) z>!GJSA8kq0bYbU2j?9P}tTKJqQC2KE7N-m!g*P*weFPReR`4GdK__kFbVSBp0|G_w z4fdh6(~z9cX&D*OV`5@-K6z=kM=g8!G^3pWbS726Yqgrqr#*E@<5*|rQT!2>e$?RP zaQwg{y5e)byDH`Y%s(8% zn=MgAl*F~X>^L|wzd{!icTmRA+Sq)B5~eNh?r55PE&-BkWLU%Pk-sPl6UkjHu|4$EVMm27in}~L|W&5+E2>Ai-unV;BWwu(55Trkx`=e6hudXHb=k7-S%l`5*z4er=`tnzG-_x6l#pG2mi@VM`)I`z0Y- z%IxGTk+F6UUzP{f@g@pUrLu)DGpB6y4vCxvC7hc1P{e?&< zpHKcTh>1%Ihl~OlBE?k91o8~!TzXg=fY!+G+pFGACw!baYoZUoK;ePaYIZtRI#7r$ zQy4z*)=(Pbutj}pjfS?Nvxl@{`vGaZR*?}<*c#{D^!qDn1IykZ?k`EAk-8~h%aQ%T zG_4=5eShb`3p=gQQ&FtxbYToRVv*MGNPFNk?r-G97}bAC##Adv$(JQ)vQ>L6di$IL zB`fLlyrEqd*E9 z3tIqp$YyDu&i7aM#8m`^$~fXenJnKXDB)O9oW63iu7Q_(jaZ#4KZT(4r;bt0Gwj1L+kgoAy z*)2IN^|~D4Jb*!$Ka`(2Dfye!fzL0vMF6uP8PNl>?nQ34qH z)${I5S0tR7OA0;$J(5jli1d?R;sU&6E3|w8W-6cCFJQuzphPY&w4apJD@gy<95r!A zv9Y+n0Cp2>KwuB170nLpRK2;J*N>vDmf!@P5w>h|@y2kh4y$`5_Tc($fQO0(_#6)6 zC2Ay}AZliK5h)z&E$Ht)`2)TV%&9_~=xv0gGIxW(`VA*HCo3g#X7UNc4xKhOFU!)X zK6oF^h3RD@Ng)Kk!JKtpF7@Uu_}0 zKAcmALz>G`OuF@#l-KhYlcbn7-i&4U+iNA%Ztv zsOs&60Y;*h!oBsaXqJmH)+d;rX*@`A{M!BoLGm(HE>11;x2n8$+I(D15ucA1xr5v4 z1=@yxkN!ExoM{)+IZ;23Y2Mc3-ioy~8IyKagtdxJk3NZWwNu0Gqxbo#YOQMT=Yopdi)znyAe?wacU9S%?o(#g z-OVko!s#LgQ_DHbNy&y`vpvz~7;#5nZ_U{Zr$8Zh+9sQgZQ6gW1+eZ4%Tc&2-&?sw zLv0;vX!_1QqVS^mH*MkDU_gKVgda!c=_4ZWPE?}TaBuY#p7(L=QKrIQXXg~L=bdI4 zH_1xa3yUh5>>CHQo6g`0P^JerMg}CJe^5YqV`vbE`E(bJ%ee^GwDu_Uy)=IiKStAo zgY;Pa4}ysPsI%)Xa4y0FnF6j;bm$D2VF&_+=tu!1Rz)f*k1 zMNqlUR1vSVz}B~2KvuCUBd$lE?^h~rMPn6Be`ixQYTv$nvjS60vJGVi0jj}xWT*N| z3y?5{f`_Cj20MUS%hYlHx}@pQ5_E1MC?RGb8VCKec!7d0-`oHx*t9toOnFeIa+z8l zqH3%@7_~@G?^&QsD$qS^q~GGpnnXPF->o=FM`07A?#*Mb}RcsL@l*l4y%A75}sGMh9i0m%b)C-a5GD1 zc^qbf{~%n>SFB#Q#y*5^N;3SFLIZaB5}Yrta?s}#J#h+a<&ibf7HmfW8NS8vfO!@m zx`jFx78pb!TF#M#j2Y$v6V^S;r;<#=@%^;|kWX`As)l#M*y*V_Ovl#kcC8a@=cfvD z@-ttT)~vhHBv!0y(ORwp3{!`=q!Vk$li0YV(=2@3yzzsREpl8gcMiydCX8TO`<>CV zVx0hu=zv%F@p9AKO$k2dmW<`P5C0%6P&7TF^*q3EkyOBl=)RnE9SunFT>X@=o=TO$ z7VZq5kFE^qug3Ul0y9LnzsiEWr`)PcZy1JoT=~+8xUsBir*bv1M~^fE2VvK`kG@)* zYqUSgFs*ZWYG2{Ct!kn2vGM=(t#M1z+d-(%6*86Poo$9a_@dbvv)109r2XPMjSkC9 z*@S-(;0CisIDfQ8)E&hks$LB#jvoSsnuc1~FvuV^A}yOd+&g>ns9 zO8N@4G3w1+O?BFly|ecdcc*tVh=*q|5B9}DvHLb$jt{tzVyix!O$I`3lxdx-8B|-x zPDWd{&Aa2LtFDM#=R9q%2WI9GMZ~Z*49(u4v8cZ7SF z;AVlhucqeRks@|1ZX?%woOMiU#&Y!g4CtjPfj+0BuO(6$D=G#a3bon=W;H#p3eu44Pq*t@Y;UV!xg+Wyp0?* z>c6-a_VfO*K`!-fIr4d~W$!qc=NFm)V{qq5(`S~$ZmEWwZzNIkYdg9}cHNaFBU5`T zb?kJYRN37S)yt^$hg~t9&DXlyGd{GaI&j(ZCRXX|nh`;DB{699Fl@0OCA7GHoPmVU z7#$J!O>CkBH|PNp9+PQXhA;%hJ_yt`q_X*pM+Dmd#)GWJR1dw3`i94fjI@5F$ zJNdDxsy)6T!ch*L{w^dX#t6nj`$1g`mwd+^5GBqof~AB`iVHbyNe=8(Ej_Z7I*95p zE;doP4cW}2GioCK3W@(s&1dOjZ+^R^K0iX;B%1ng5Xwprjh<@z5&Et6Kh=6BV^5*v z>YMLk=#1=AoNZ*&wD5Z1HqkSVMK)0UWH#D+ygQOH3Qxa9UW^y-?7b|o*3m{j_*J~2 zPyqt~$njcumpYDP=Ey)J!T5<St~%akcBGb7!kbGW)k|gdXZV z=^6H}oNv5XG5wSjy4959gdf5e<}s8=y0b;U_h6x2 zi|7=M__h5BmrVK--olSyFCz|Yp0*H-RTu0Jw$zkNO@Z+#c!F@7Hs+7K;a;~m#7%A= zsoK|D;9~4S&FvZCJ|r*x5~ouAcR^o{HK8Jmo};H#H{?<8k6@al-$iIS@U`yYSidZ@ z5YMZ_d{EQQvwnBFB;@?6PW13C!p5-r>?0*TM2%?lrH+`58m%ioKklqo{@S{zBUkI! z>JuxBJ|+z+_=C}JC>kUokQiaOKItm^S+8KKk}M02g}?3WJKZv1Zm++C0isIhl6;Z$ zg=Qv{dq!-eWaf^CY>)<<`6vvTbu{KXG^{TwHk-J#u&+NQtS&hC;_Lsz-djc0wJhPn zNRR{w?j9^yaCe8`?(QDkJ;B}G9To(43j}v}2rdDFJKULVCwuR6$9eh3efnS4STN^Y zU0q#Ov%2c5>eq*-jE#Ln?AD!nbi0H6xG#r*aAv75DP%z{I0KQuSKk8c2nP}dS^H#X zJ-Kv0^H^w7t7MyLmX(qi!|^U)^I;&9>q}*FC59UVn;TL5mfU>c(b&jvJtetDx3GCT z-5ha|e<_%iNZ+y+q4BB2z=VY3tEfS|hwrO5v4!akDG>tBI!Z*nJ?Z8mO&B-NO&G!8 z$|D*q64kT)g&}7^WK8CAL}}>)2)kg(m56L4f_oe*F7_Am6z_IDj&Mw#M8C-PUu7wv z^n$pC^yy`uzEwVLxdY?Dqy{v}(IK)H{75D@m6YfjdXCpF2h^w&jQR2n$=XZKBX%!> zIUX;R5R^NuJCj(k2QIp^#v)x-dmalYhL=KxE!*5pSHkFO0-fLCMcKNzBTG*3=;0~-ppdHoKZV-O?@(!?xn2?Qx zZgxS3G0$1~G}q8;Vi(GHXYoa7t!~;;Kt%d%MK(9xlt?FV9lQTBLlXCNO+0rJ)BU|r z#@ubood{Kfn_mPb?EbSv>=fVW7c{z|&$=X!QTI4Vy2-lKgV#`g%RrRZ`nZZJHtQlZ ze*^+t%wm-otF|o!t|5mUYr7{d_2dqH41x1dH39WHBl&svT54X#8D@Y57DF z??RZ065syII&TP=_$w^?qT6ng6 z(Z+|rS)&k2gM7xq`&+mV8HT}6X0)l1DN(8#x^;Gw1NdqWr+VRw%LJRd*CJthFeT|_Va9xsCs_V?@;ZreE#lRS`~(zG2`7_Se71NJ6d<~ z1oogN5Fh->>lS_g6mWKI9mv;5QbJrgroQ5Gy(7>FNuGG_nscQ)_sAB9d=ods10e(9 z@BniIS_QgP=X{+BGiq`RKG$Y9+OwD*+5qYm88BjN0p=aHU}G_zVl@{(>VH$S4=C|0 zlzStmCaxi^z(^!v3=64SQKy4VV~nE&{Z&0{Mp<4zUmpw17%Y?03;W0PD^+L+2_%Ju z!b5qS1-h)Sj-g8W^hlL6U8F|E1SArJO5>yx#m-x%b+Kc`cH_|LbTgr(g;>Sp;JKEo z7Eb6PLMWJ0d{&}UUHZ`7CCOwG1JAPd{?5bh~Kl6-LB~&QVQ^)L8c-%cxi(Fq}usPCeG6_Z|+_@B)(_yF4 zM^W79V7*O(?A!#)E@gT1>EsJe3TzpL)GgQn^~LlTD?k=8Um@~9X;V~7Wj)n}%(FO| zWQVlS%=AuJ8e&fpo)n?@s-T*?BfD_EhCsmaTYPQa|{v>-!%I9Z!(AD`k~|AY`3U_?1rw0d6aH_9xaRh&O; zd;YQGkf|;f00tS0UtFP0kj|qH?uvPeL+kk_w%(e7$zYDm8P-a+on=^cwHVKG~7 zjwL_zbb+;(c3W`@SO@^BiWg7`?2qo>0|~P&3?QiH5T=Cum~KaUL=UgNf|R%0?#D`o zFT6WHhe>3yM*}|+56up9#sX>Dw=3F#6u@*MB_<_1*WE#4Y&+aD_91(l%N4Zf96rEu z+w(g1gZ-|76do&d8mH8kTvMEux563VgZcrVn{8B_Oj4-aPZyp{aAPl3`jry7`E1T1u9CfPj z7^cSIK(nfb`=tl})m_&}l zxD+r;XE_GuR$czG&D7>ieHzyflQ@=dZ{jvnqLCd31A~ zRwhAjBm_BHJ9JLWv4_u(W8@Vw_jH8>Ft|VAq`zuLZ@cRVdFEbug-qdW5OQ}*g;&SY zlQGsB?nmd8l-ks;_LksIFZH{$139s~$t!o@Jj_!A`qAst&-!H(AEvch?KD+NfbJ@J z5~f!M3tJ7RtF6qAUOs5h&Smz>+o@4?dz=B5bcRjg1()o@X6`sld<2o^k}ewtW~h#C zS8flx9O`j8p#3uZ!zH+jp-eF;)_AQdhtG`bU`3R24(t9zG2_q{AZx)xG`snCeEjNz^9B^G2I z>AraQf#cW%M?jScW$6Nio#}egVH9bw%z2sR76UEAT#m<}Bv7=imu{h;qeeswWG>P3 zmSL7jxPYQFVT3tfy4f5RXA~EME{$N5;=tvqsS*N-o|t$NiLauuiGaKRl4^0-jB|uW zk*9{Q!l`hYlvoT`PQEWbb{XdOvJ&3cK|AJQ>IEg_1*!2KoPin18~czM#=X#))E@ox>3l1_@mONm!8V4-I1y22a>_e72`w0W4r*9Y%$8 z!-LT3ZM)%DpWH6>&v*nn-~Pm^z8Vm`OMi%~eO)k6`wjAQd2EeN8WTN-MGxmPr(F!L z-zGemC}P(EbRGj+-cup2uMEmw8)elV!#*7MK8m`k-_Qc;j|D&0;K*ZtgR~vj93&&Y z*Iy2%RNDpbSV$R>TpVe4!jFTJYar=)3g?s)Km@r86EfY6h^pC%X$s6s#?i7`O7xdg z0yhr|C*{hz3o*5;7tewS505MG;mNKq@Pl}w6fDIIt%lz}*g+S2Y07fnZVb8RYNHoW z*;AO`&vJ$o#EB8RuYl&F-+X}6=+I!h&KlwD)D~wW46<$@{x-~8o^p-duH^^;TEz}f zwHeB-uVTw;gO25nu3hL%#XnUJ1`!L<`NO{T;k{M%M5jlqfo_>WRZbEW&09+{rPtGd zcb_?X;d`FJVga`E(WP(d>P7tVA~yPl^TsY+N2lyA?zaJ6{FrJ3GKdzQ$i$eU)4s_u zdM|67V{ac$QH~l0cJW1IEP4u*l`JVS!4!{)CIdX@clQvw51ub0+@IlqlO+s{`ypLh zMPA6*J|kyIYlhXftevN`PZi{)nnfis7%`r!Nv~xalV@l@ANG|XJFn5u$r9L zm7H9BN6^)q(tY|gt;Xy@fkSvz9wY~99NE=s!C=AGRTDtenP{)Y;$n@Y?T-@Z=;rJQBkZ-Aj4aSbBH`27JaD zOL#pdep@9y<_0*yIC7td)1Xpxi^R}rFYeU*nFEbH@sQ=ww2m@HGx1gy4$(`b5TQK9 z$L2^0>W^6PMed`{WWhvGh}Z_O@9WX=6EsHa9I?b^*p{A?0Eb203!-{hn4&=;t ztuWFMw-Dlvh*G5t(WHDjIzHgFi{0I?xs+MJrp?whmE^^&`oW{{ES&A zV3|;^ZXd7czhLgvB5Fwr{&)km27UqF`dQHF8Q*0&rqXW9nJ{@9u4&XwB1)Z9Ts#(S z>psvU<9s`F^Qq`$mkbKXua$iINcFtgKCystR{gqhbe=F_=^-wOsFBi_~MZp(yYTQk#2YZ`c5G=rJbIxKJEk-Li8uHKE@2= zi|KY!zSCPC-kyHKN}-ODiAZP@gM#n5{*OhY~sB z=nX_sn#-PI(Y~eLGgtVMzp8mJQ0#w4c-fs41fw^IA{L=Nw^J;_1)r65vacOF{II@J zj>u&0XwO9#@}u^06oP}nkE2X}M^97E zTn`=1B38|Z5-+Yxi?iN0Vf<`F+A#MIXodxR6`_Zn(iC&1_$TobQu?Ef8PiJ1u75mSge>G))qTE!svLt zMQxP02d?`qGH~epbID=XfDn~w2H(-%JD>LXAkrN1p6KE&EXQUE6m!z^GgPE&lc(h% z_;f{)J_hoKi{&*kdFS?6mJN>g#J21l|eL>G0-_oUh4 z7^z2=jdLaMBSS*udvHTEWcP=iB9u%}iHN_1p(sV;R3W5d!Z*qm z?@(}zRgFVSiOJwb11|ay@UG_7)zu&l=?i})s5taaVI~VLC5Z<$lhjHazk|T=b&{Xecd_UNl6KsO; zO0ew%ML*RZ2Yxq&m0(7L6F)cNmg4Iz-FnhIMK{L%ZYWqELk!+VYPgxaBBvNctyr0( zFB>H!^gCl*+WsX3oD9MF5&MeZ9n#(iW1e>JQ0=nCKm8W0Te@-7)r>kI0`?E~ublIH zvc6XFwAeB8LcKJ-+MFZf(;Fb?I=(qUYMpDTl3Wo2v`o9hZJuI*TV~;==2_21ScS67 z;S2xIgdP+GbZo5r!t5Ui)%6IY)&tl{@ zbS{()TR*bgy6XEL`i5>iP+_*=x5x+#IPuqE%=yVQ9URpx^PPkcIZ4}=^T|&7m#|AH zeSRvXs595;vwwPUE9f^g)Udn5&CrN1`5N(k$Sa)Fi-`_QuH@@<4yn;HI!MD@oH2n? zS3(0zAl8AK)9WpInwD)Xh)Z4Oq2zO3bDBr=tB!}lq#3p7bQ2s89ntmlJzI4TrMQ`% z;Kv&5x?`=QXk6UnBRB^`$Vk5zv@ez0G527?HPV_^f_kJoaBscI?QD9Ck!`Iytw^{r zPyNBrGez4F?F}KBJac67WC(@7q@1W33_tes2%u#4fNYlYE$^k7fq8tHh?N&8P<1d9mZfYFHD1Y6qwVUDOQB59cso2>DJwAE3i8t`NIfO^+P&% zXH56!`hC}7pBxcr;snQIq**Txw9Oqtp$t>LPTxL_Y{%&H78$3b{21Lg`^2io5*S-? zapj&zCEwtMHk58%dXPUZAladrhz>V&%uW`6Z!?4!N<5i*~H3%YobpxVjbAHwh>-mWp?~nzG zA*$KZL;G$pGXL_+I|oAA09{_f;3v3u8`3VgoLNk+7oxS-`~>U@-(Gh&f-)G42jWr^ z`bSSAf}N2NpUa);=dzBLsL}*MpB$g}^|{bCCR}aLbZW6VFd-L>GphU3#&kY?Rf}ci zyPx)FH^P7%X-+My;ln4sr0DzBZM;)`iYZjuLop+y%j+kYS! zTBOmSYB^aymYzdgHpC^u8pltprdtoh*gc_p5r7yw$Ia$&O%?Ie4J!=+7Z$3|Yq5qX z(e>LFJY(=`+dIZC%bSPeV%XU~u>cB?wcKv6zGh)X2+%dgwfyYRilMAvz!^C5`I~Nv z0t44Q78eBWqD)up>bqS8^*9b}g(n`k7q6Hks70M#1e8#ba|nM*lF$FBM-8CEpdi7i zUn)d^y+kZ^+Se^!H^SGVnlG-{UQ3xx5e`N+isw2=#mg2%7t6H+frg ztI6M&?I!>lK||z6jZR#xgz4v#-2p6Cd*Uwy1bz)!=227{`=zH69ARyeMc?uelX7-g zNX@tneA0qmK0o4xR7&-^Dp!sLHqMWz(K}-mKF%OL^19=;;TXNPJWz^h3(_sn;z`M~ z%23(M^DiaSuOa(3h~5{$w*nCmfQ*q4sn{_hbnz_R-L<>yA1&Us&?d=X{hhwtEICDZ zRNOE{JEEBx*D6Hy1KCKyl&{{4AW>qfaZRoCF}bd3Sq8H^vWrp5BLinr5F2oAS?F4O zWbfe=Vs2K80eKL=_25FA8s{YmyoL@_oPpE`IWIQ-L+x%IZ1}suDKQehF8romL(uD7YAlp7K z3Ekb5(~mpp!E77`kM8}r#(7XUl?eA~pwlpF7BU&uFcO6?K+EKOv6g@vd|O#(M;u#o zOj4wP{HgB?qk`^F)N>_r($jCXi2XbesYJ$i7KM$D6yjV?2S&jPG}k2dp0WAhQ-pD? zM$&pHm?l~%#2ox}yo&A$v|@EQ&!afyo<1?3i*?$X^(_Qk@Wh+tO4{7cO%g^kp5^8H z-RDU^O5n)PSQMsa4YFT-bu1z+m3WHAnxu@BP^l3ujLDCter*6*JOtia47BsTaKWWl zgt8os#WU_jI%Yc-Dz!{mOd+K;+*MkvdCf4zjhmA_bMISnxeu9qmQIFWJU&C&-h`Pl zo0>%CD*tiot%Q;eDMP9GHvQx4tdZs+(%iZ)Nu}nowMvXkj~rFN*{nK5K#_*1KIItl zi?aZrM)6jl64rB$I#y*yBqM@B$VYHrRa9TE!SXPMGin+*9EO4XHEw`3KDqt`Q$*#g zfg;s#2^Omj8>j3Yge>dpPo<}vmpoFuQv*VBlc&NS_S~br$6t>(Pi=}R)`ugNZ!DG> z(_M4<0$pr;56js2Bka{xeH6h5g{YCwPjS_dIDnnKOLJ=IxHoc;O0V7nE}Yy3NrPjr zjMGTZbz<&f@~vxu)979DaDepLE6m508$(S7+d(2v?{=3_mJc-~<|(W64bJ9BS#_~* zHARkR;)8{HZ3M;UE;33BS6E;5IXmZD%Q)oA4$qj@Fq!A9g~@C<-MlTgKKAD5 z^s-;|RPmWpi^UkNUF&{kf-E8!&|+&IPZK1U%SZZ}KHY@i8pK8HT&P=N`Z;c%T1p(v(DT;)-bQq;Jhf=9wX@PIRK z#$jP3>-{1CCoD^iCKd9OPGpi1pG+*(dGbN2le)LSkUxz4G~apWwI|C;Br)JLdI<^< zLy1v}uQ{!T_JW{$7u`u_ZgEk7d?h=4`3c@j{*!sIdQqYg1Nt+meG{R2%~Jo)OUT$- zsoP=ZVN#ovz)Y-V0G1P&)bSRUl^#XbEs-c16Nq7rz*&gwajizzp8D8+Z8aC7C%L5b z5X6aB9FnqYswOhIa2TW#e<7Jc2r5ELk*36gk*0wUeCew zx6RMjnRp8L=UhNGiU0WCh03}Yp%c%8Pby@#&M$)%kK=`I`eBTSmzEf)CFJCFcOdk; zEinzeNUQXKs&2#RS}e zEAJ+njgK+&s#iS%)!xO{rzv>GgWO=>cDWyG3ynW2C2jfXKuaphL@=$SU-DW zF`+GW=nQALVXqGh3eyE-FE&A=IFORmI)^a{Ugfu9jZePHFG{!`!d0ut8PT=2hmx*S zoW!x{p=cGoj@LSLkx?RWSkBa+saUs_Q0a8rwPJdtc&zg6X^RFLV;z-#@Z9a?QIXYD zrv4@zW31yW_9cu!>2%v0s}zWo7qpfEX)BG-B^8BV5-~-J^|rr803{x!ypB~EB2q45?^{?$Dcp7MIq9?QdkoI)0M|Xd&!Cg#@=pHq$p*Qt<+Z>S| z%(mDxSNe$HK;9aX+>_*>QfpFIVILOu)UJszhj&=L!#}yR`0k*=pK1Pn%Bb~m6kf}0 z26v2m9>W;*%CI|KM9piX6yfN!YX0m}4gT%|jWhfftFrbTLf=^KgwMD|{N5?V-Lf+N zzK?Csmr9>6ei{||bV=`z`84+$4z~^G>rCGD+P)MF!ibP39t_Nf3;KM!ym5 zhGVGXFiU)~Q3G@g$1ZCtA;puCK;YCrN4A_C?p|!t~0+n3XWRwcOyjnLP5c)cag06Aq;2^ZrNXbu*X;4 z76fON^H${ydfGZ&*-Hb_a`^Vi>k-7!I4*!%2kh&_BJTIQO}<>&HdqnAf&k3czPnp$No7$qU+}6! zEFmZa;O#Hwi|8aQHVlBO^&btBMSqqt6*%fW-KVF;Z8iOb?H+W`;N%@GDSqCPry!0? z^kwn^bq!Z_Gg$8f5L-E15TP3i-L)6Qk*(v_$xzd*)z6&*1@5+mcRvO0#?xvD87hq7 z#e*?Bo-VjFCtujE?s33z#0p}kn*>7|lw4CM*=Aa34?!5FX~A~Im8lFVE#Y_R=Mp>i zc0=sK$h415WzHK0dn0={7gMfRr!W(}=H2D6f*xP6ziV=#l8DK4SA%waIYATWB}u1e zn@0i!Yjtkt3+Zzf;7=dFIB*pDa6^RwU5+zRbAo9U;b>bfdzjh?yR}ECwLl1aUrj;8 z<{9ioT0H|9L#G}4=ch*pm-F6R5WXMK=#(L8n;nIV`gDcYmKb$i-*#fe=Ag^Ju(Ip> z>~Q)5o`4Gx=wzHNSTpKcKQ^>?u4foOsse8Ff}wEDX_MYS$U{nf5)OL~<6WP@QM%bh znjI3P)}ha?+cE*fN40r)XE6e8b+Mu+t;Et>ecByQM_{L92`_y_qtP zQ)Dwwvbr#Dcl4)i`f_sS5Q_fm|UKT)E z3mj19yNwD}_G+oHphRPWfq{WYVl`I;F2Q*LlX9(2U7b3`{6sx1iE`KDVo%>Sb^Ci_ zG*B`9Wk|D7g&*jlSnrF|tJ*!tBXL-UEW!8p!qnb3dff{hiH1A*0`t?3DDAGLr_Y8b zqnoAWD14DV)JzS`BZcMWAn}6%A0H6GH>s|G4arRHN~K-P>7-Vd1-g`!6!VO&r;Y8h zNfW@1f>2BNpa|0q996WAi%H1>90gpi19(HZ(sd>0ZaAdL)pbSR=quu zbEsWlrcR@FIm&->?vF=DiTTA3@iyg5KmaG0+^Ix=Aq@nOw&L!(kN0=d_>qDChr#Y0 zB%w|=-@#6L|2Y@n(R5%PXF2*lsr-Wj>_K3}Act_FlsfU?0)~|_vRJSBnEQy(Eq#>T`nE%}`D*b>c1F@e-ik+6l4bj6B2o`W&c0#>_i4^pjhqOu>bJw|MKnsk#N3E z=Wj;2uAGj4xw?3#5YOsZq1(8GHl#c{ooKL+#3u09Qv4 zv`%P992KA1Z#=1cOQWVQ$!0kw5n#b;RdUVcJXb_mD|bY7%briV7j)b1?(+S*d8~UP zC@tkZ4|);EApo7*D?|mqz5G7YP3-ahLgCu^(zt?E{S-HE>r%m1WZt4z`*J#ejueEo zBG?3V)}9aa4CK4E+}y1!m(e)l~OE2GA=T}MLY z3!)?%y?r>wvDBQ9^?m7c|C7bNTt!ujh1_6PP_5g7mB@&$`N7mnLkB9A8T_%@nIJFG zx1Y7Oxp2ghU%ZzgVq%f7)7+(WHE2xqL@ye;=FM}tyHc$@wpQ-Y7?>H#&=w-%@XpKS z)=@Y~sbADoynLDwifjL&6xL#&#PIZ*yEtM(KQvgU0yt?RL8C4))3dIH_wE9+?NZQs zXbrXgSbMh1EEL5%Sbjbk7Tf)6>GPU1hlJjD9ETv4|Dt3ffSI5TU5#))`s8Yzwp)44 zbG`r7hH!6fGm-DwjJr-At^aiW-lM)LZc|W)$rbDMp0fML#e|+XFd@o zt!*v-I)-9;I47D_ap05-ZTmE(*QQCA5dNsx#HXnk(lQslW#c1`yD(*=gI7Y5K*_Gm z-gu@EXGY6Q?1A_5RSIw>&*jkIk}MSwbtkvd@b_AbbVYCX_rQ;yH@`TsNlJ3&M}+0p zlDFl(*>#@j#zb}0^J$eLt4vpZa2cvKJLYA`Q4K1RmV!uGPSb*RSo!5p+zr{mM1=kNE( z>RKFsq$g{Do28J&x!Bxj3SE?w^vb&{tzwyeFFBcWImK+29W|R}o^4{=QK<6lDO?9M z?>^mS$8S%rfJ5MXn=hnZ0Z-i@=;PwzH@xL~6nr&ls*~pQ3?npiy4~V<>T`(3Ow$q*n->%O@xKsBw5_duK%UP^$yy?_Bmi zjl5KI)1=_ZO)f3Z)Z*Jy+RPxeXczvWjt9dL=T$X=Inx;a>`sazi^Zw-*;92T!ELv? z$|WP;e|djiV*+oYXNGs}1UlTH{JbE?YCF z_jSy!(V`V?s=N%}5}kLYlh68WzDf~*N{UwHr>A8~vn>7ebyOEl3=HQh(r0s=n6~(w zn~qQWySMFgujsOJPdDoi61Y{G5?vn)O*D5tUc=IspEVhfH>hfF9*l<@;jdy8$afbW zh^NVUu{4&HvMbf!6js-)P#*R0(js7yMu9HT8rkJQCp9aAVuL0tU)k4^J{Dj1C%kW` zQ=HME)!S|`pEFI?$JQ9K1;*eq-NnBLBm6bYL;lo4B zS{@exYI9l#^ZDJoY7A=RBRu2KgirkTt@R=>C2PZBcieqpY`sX<872{jB~51ow>)wf zNBJ@oXrEssqXwF5KJKS3b=ZL~VeEeYa_NJ+aA1HPSeqncwif##A}u+aO)4vj(JBme z6fE`QzkQDQTENqifLjB*X5$OS%acFErE>fV%hJ}3=XmFXQ}!NQ5sTPH2srqshDQ+(1CSMQXggR<%y!lxHyGl%OD za<;(>`hq?EX@+L21awl}zKW`)syOTvDG`F|P;hTpUQ~82J)lWOGNY+5;rY`E|Zq3KHhU`vqWkt|t^Qm_`KRC1a z7h|dmXAXOjsS zR=YGaIyqpx#^ZC}ZiU#v6cQb4$egof$~9rGPK_f6 z%;eb_lYQ5*d3s*MQ|aZ?DD4BY^;+$6uWvG{uxxE@XwQ%4KtRJ}f4_-QF&C1SHRmBD zX7Qs>TIu#ihnDT}*@@G$AV4m*mJe}nXaJI#v^V?tCb0khXmL)Z2}A##$%$V{#1uE0{+|BAAcv-= z4(!xJ5eho?9_Vv|hf}>L$z#i05zZNg|#sWQ=ECJ_sV<({KwX@{9x-l;l$WYHmbpfFcWe&DigaR%Q7pFG&3kSgZ%lM z<%M`fLhh{r#>CeOnD*OGwPZ>@$ICP95HtN>7i&q`Nzls)9V-SrK{NT zM@$)aF+I^wF<&K-$dyABuI}Tf<#O-7Qz;TVD_uOx*uHPt zQL(CwVpLSlv&NlyzgjlK^ri03QON0N;{Cqm-2P6(+FS<}nZ?*(Nosvp_G~-DtE%t4 zdaupfF5MiB>rTiER&QR7v2Yy zD|aWa-FG6-Icx3O1x@he5^U;6cW7Y)eg4}vu%DJ+d?@{Gtgl-^AM9<#UD%xnR2rf1 zPK#3+KD9DaEc&xo{DWxVo_Lrm+(xz0T!b_25||o-!W{-jKoAP# zJ7|a-Xgjp7viL6ItPdf2OTQfl3dnZN_UZSkVj6KGpIH3h^^bZR8tleI3O0FUfr};S*FH$b z!p<;%$~<#_W&$!S9hXW_jGqSO4JtAIRL?K`mEk& zXWn!w%6D^?c>A4TZo`{*m}`n~<+fd2Q zb*@WKu>@@jjYxZ|X3lmTlBSFaJxh_W@pPus_)+%J{>w{R?*#&8Z47;FSnk$x2O&In zZ#oqXJE)4Tg{nbdH1DyJy)}Z^#-gwH=)dx9m*{oKlNZf;-%^OU=ff={I7fNsFS$72rGc|S+mWSd;*p#xMn;ANfqdd zD|~srqUI%Asf~3$JVV!b(k|2pPbJEFCu_oWJswlNP+H%*hx8paNAg6C@NDVS|06z# z?JIIGCU)V~bZaP7hPCA`0%ah72rQbRIG4%CSzb;F$+mJj1ohEc{0ZrrD8!K}OMZmFJ4QEj!))kQm>*KD%vN3xt<=oY1V<)Mw=E+#Ih1A&R%+$QJErcFt7-go>jpCjd6 zVGd(Z66>{8gYqRQYF#9vxglK+_~dc7M#YfOm=_aY&|sn{IW_f0~TIS)N=RZqJCDiHnEkPgI=(sK?L*aH8afHzbp0GEa#^>Qc7nP z4Uh4$@;|u5p%_ENDeI+8v^sB}PW61*^rln_}^_MK? z!IOavmdOMkI1ksGE$_$D7_oMhYR&A}D^;|C-J0BPU4}1pjz|ESDDc7&H$o%Pfj@r>8yZx$B>7j&t^Raf=5|<4PyVls50#MixbSv}8|*MW#SfV(&i=7zPUP zl$Uka%zZlnfu!?lb0q6K*plPk(Yu+y`Pb?;rULP}vIsTx1~yuGn2yX`2Hr5`oNm&H z+x$-!nySqjONp8Jkkmy34mU}q9@?;}xi{7fuMRK^!ypaOY&a{&vbXY<&=1)}^=E;CCT zSDOd~sk9|vR4f*67&OkK(uwV7SrczFH-*S7XA8!vl-a6NZ?fivW}%G49i*(J%V zNBitl6>6)Q0nS#2_p90_2kENe7%sIHDkENeha8^+&=gA|G|0>6W<6Rg?&jMqtkmtS z+jCuaa_!Qrr`~@Xm)EdQYG}tpKaCI7tW*;<7{^5TATEi9-?j=b8fO2 z1(QGDY7iijjf@PnrswA8!PGuS!8I+WmG%(MQ7-xGs>*G6SFDj-O|OMq@)-y4+a(<-Nx zx!r^THk&1%nFujFp>4d0L3SQOFuetGm$-D*<@5L~-Ypu&Ywc6bgU)AIxA#^<;S_oh{GiM1~(SKAkFtd5f)?b(`qt5p@8u5O5rZXX?g1_nGFTM|bi#xpxE z6UTz2FX!$Fr{a7Z90}5{%x1og)NHLVX;E-)bF(c<_?gclQ0cA8%o5u|l6qsC^dS+GMeKW#g;-ecICgUG< z?eU3oJk=vrg~X|sKWyB*2(nk6e<&&OQ_PIrp=)zH$g9RWeo)T$7xSqsqVWmRwnQfe z<>g7a{oAX}e)}^fJJHfrA^md`rzl3v{YXNaKCV)CzTdGAKb1{?ngOm+L? zIy7~?AZ0(XbK>Ijhg1mB3dP4CbqDw5c@kR0qxmennS3s4X{PRFYvoJ_1juCs5yO|M zV<;EX^CJ-zngWL2^Mv`{k``M{GgUlOT{cPOX(<6SNVY!su5G@c$cVWu+{yQ3Ivwg0 zjpSSl*)euMM|%IOgxHwRGDKw!qfL)3)XTdf7EsSacF*L zwI`Kfc2H8BEmLZ{Sd|ZG&Hjn+54%_FccKJz-pG^9{Za)f|BCIelLKtFVT>kQLl`>X zshrS|cPWNQ+eMy8tjy&qr#@#?MC<5oEcihWs(gyP^O@9esvtL8^1s!z{$ z`KaOUzSs{ir##@PkIQVe(d@D>RjNxQu#r<`IUBZx!<@t+bSB4F%QFwSvpC2a+YdOl zEm0piUu?0c-?4dD*+4F4CVakZI%A`##LqX`cS#(GmZ)W=#X zzdI(n9?L#%pNM2n!Aco~xlT-r{)gw*X^$;;<->7Zo~O#l3UaHdT(>f(y$SCH0?whF zYBIht$;QB~7e|_WvZ&6hxrq^3N+2ref{c)<>o5bfw$pH&D>&sny&;Z|uj5B7;VVug zP6KOu6M{=9t}TtnkuK93<*_eu4nYlzWfI*m%8v(>_^bC}PcE$L?mHx(9Q$|iwo%A; zuV9mP-(qFA>ziI^B^|pTe&urVKCu{yTqr)X#i&JTb@gWu)WA#$8aQ3Vz|Z$)8qqw{ zB`i0g+TMHpRSGL-9kr5**)bdEFx$BzxpY1bVdkP_u~hz@Hf7(n<)i;6jjE1No$FV# zH<6dt-?(;S(y&oq||>9<3hp z_YVWj0hB!il{OCWR~e7$a^jY)b_{d2)I`Hl($ifCF=wYQr%DN9^WCLqs+PbIZn8gF z>@Moh#Q;k-C;2&$dVuq4)8Z49%tS1$X6>_@n{x9xGK*VTUbD}Y2s3>R;9Z&+cj~P*o$uNqOWeLiqIRZW5{J+Po2?vp!pQ~m#&`YYdG(h z9^)^Sel=`*&g@^QYu!z@oBOB@*LqQM;;!sAqS)nqq|7%>@adyw`N>3*xS`R>i{G1k%ZR&4+Qkm9No`mZPuTRDJ|K;XJ? z{7=4Zy%&l8?S9fsXgaXtPed{pMJsnbaWu^`>QHXmSq)j&?1_7FMy*WCJhh4smo zN17-VcBrTqqV1+ziAE%iZ2$6=08oT85Qo@-{4ZDjPN-ZcU~&qArT>Wu_?K<+1tX?) z_;&*9pEP@;U}*MCoT{uiD=6#UHnhR!Sf10nKXCWbW02=jj>>(2{* z3O~^(B37k>|KQfY{{*}$$p1#s-~Pu>38c^y->@qG7su>xH-Z6TF#JDx!k>)>cyp4- zOW0-aThc2~eKMVU3n$2bUF#3}f58O4@MQ1*V-VQ*bYMLP7Mgo9m>3!3Q&SI6tP5g( zy=k2jqG8!S3^D(C-f6GdHWAtO~I|eCclwTw#37D!= z6LDVGKP2Z5?H*MFJY%NFSJuC1W#=WJ3EDpJ`{2Kf{gVX)fJ7yxgCv(zqG!nhLqvbc z@2>xx>N_?g=3k*t0N4McRd4d0dgXJZe<7o>9bmy>6fw_VChYfly#*v{F}B7jgbP4m z_0Ug<|FU{oz*J|q1H+;J0n7ORQh8*kqbu@tRj6s^b(d0Q=1QMusk;-&sr4nxO+4%Q zw<&1Ge_)m+>1!6_fQLjUs{doreSNI~@^L+#*>NUu6l4xM136L|tz%|wZ?!Q?XXNu( zZA*qIR;DZTk74|v$q1jbW2qWDc0}?~`5Cb#(#`}5i-|OphKi_eD|9!{tz5nguV6VN`TGzVj zJg;lZzJ%6UIlpgKoG#VteB%Eqy>xsm41xNf8Zu~5$s;qW1yU12>>XA&w;HLe+YS&2 zp^PYV1i|n-j7Y) zO-LxUJ7;qD8ux1Xu-%|-+vp`924)?OvZ<}}8&fM3JBgY_ozePVEpM0U)W0VfN;ap0 zHApXi%hmgG$N*$J`IuZmSKB%vH8y2ec`Df6r)(<6$fr&DFA{{j zdM3Ccv-lzs!ijh}G97}`upJ|9KVAxbdeLeGEtHAwZfSpQiE*dV0YMUymNpl&wDMJm zf?33l1#F*lYF|`@@%7V-4U(=HUnQ(Od*W7&Sm7}x^l=zScc8U5$ypYF)Mr$0uf^Y@ z5P2Qj^=OoH6DWg`LGSJlDSv1${%njqA4kiTf`4FG26WlvoA`B z-BaIb%%!+q@ZUO_5%NJ-YEl`987s8QYX+N)VcJFbFtKA&nsiKi#V|K|PeRTFce}GG zJhtUOqn|v=QL>^L!@c&_ zs^a!~>j_KC6}$F)dsw*(i_zns#ha-9r`~<9|I3n3I0-J2he^yvTDfh-@>8|0 z*odSel16j5Aoi1XRUCQ=BN}7*LO;l$WP{&rjuivF*{aG#<8Rtp>B**+uAT!U5ajvf zVfrtf)Qm-Rcnsl#FPQdJo2mW5F&2ojf+Vxq7XH_g#XDoJyx?uFiRvH5{#HBMT?!4Q zMYPWDPI_*aT7!_m9ohhxDy*ii{L|9_&@z@zQzm~nabI(Dewmi9ZYR@7Nm2z)z zk$U#v%#NU_DswcK=Mja7d7%R}ui=Qd!=`l_;fhFoxeJYyvURaw_e3svPXz1{sM^eu zv0W=C$+F@G)V{QPez6d+OL$T-5sd{)R&`*Otv+aeem7FYfW30E;-R$YP)NR%B{xQ7u0GgdWtkVA>ejLRbVLF0$E)su^OC)1dt+C z2NOivY})4qO3iHp8iE`aa*JzrbpjU~9$m`hlv*TnL`nxFt$i)MuAmZFZ$NMOv3I>5|RSi9jrrzi~U=beC+{ zm-qmNDvvCcC~PIJbY)G zgQ_#Ab(TJe`&6b2Y-I8~l`>)UqDqYY`(5nMl_82jZF$Mu&(%kE|HW#^m$YQuOMA3s z>|6E0E~LpjqG)qX`^BCfz}rB7^ovxit341s@Huo!@EHp63=Po7moerAbv+)C@*_QSF{ zwqo2L3Y~yzKMh2k&k(gGlmo0rDKz0Q|8dW08J`KStS_5aopKc9DLLS0wd1?kLMic> zcGDxw45Y6hWSrXKEqaV@-h4d$yjoR(-x#X~&2eF9;+z9$z!VYeHS26biOZ1t@cW?b z(z!8Wce{P2<7=3kW?C$yyfQmR6UJ9zm7%cS{9z5U>wQNt&;SzV#q88$Nw+xqmg+9v zq!o=YD1sqil4Fd+IO1@cSSN4jStO@qf|R(q_s%~0uI+gA zz-BDrfvwW?t7xO7Twb$V+%>y~@^yAn27|5UD^=3k1ELGeHBXH!0~lWsX-5Bb+l5?VeQ(x%sQQM;1k8 zo2F-M#&WA&5+F;4dm#}LzxlJj+yM&=8m>P{tJ;kq6)E7U z;tnShGXU(>+eHGfaj>o$%A9{38QhFn6EA|jwJ)P7xuXkrT>tRpCTaSnVgaBCWcyR_TKRX;Uwu4smk!8$;FtenfnHLOl#D{Fk~%Z&?rdp|?Q=L(d5{(PH<@9%7#m7px{ zwJnAEZdy_#rMt;ykPZxIt}&eKe0qxT&wXDTeSBeOo*lUE%8yG8>A1q_Wj|-?M>XCJ zN_hMVB}%Yee8G2No#pv2GR5sOc;*ZI*iYJF&EEALM?m6N2Gzu~o5B5>T8?A#o($LJ zj_duSvt0P&P5QWnRj{0lIgfF!Wc0WS$coWLAyh9WT=TsJ-(6SP?W*PKQe7EhC!kD zqypjYx_dvNcm(mRV%eb8<4yF`=Y!iK0v#$@yV3A@{afSIiA1n