From cd95f9f7740a589842f22e13c3fbde167b1735e5 Mon Sep 17 00:00:00 2001 From: thomas Date: Thu, 3 Nov 2022 15:37:58 +0100 Subject: [PATCH] setup project --- .../src/app/app.component.scss => NX | 0 apps/ngrx-1/.browserslistrc | 16 + apps/ngrx-1/.eslintrc.json | 36 + apps/ngrx-1/README.md | 41 + apps/ngrx-1/jest.config.ts | 22 + apps/ngrx-1/project.json | 90 + apps/ngrx-1/src/app/app.component.ts | 73 + .../app/store/activity/activity.actions.ts | 14 + .../app/store/activity/activity.effects.ts | 30 + .../src/app/store/activity/activity.model.ts | 55 + .../app/store/activity/activity.reducer.ts | 25 + .../app/store/activity/activity.selectors.ts | 10 + .../app/store/activity/activity.service.ts | 10 + .../src/app/store/status/status.actions.ts | 9 + .../src/app/store/status/status.effects.ts | 49 + .../src/app/store/status/status.model.ts | 6 + .../src/app/store/status/status.reducer.ts | 29 + .../src/app/store/status/status.selectors.ts | 17 + .../ngrx-1/src/app/store/user/user.actions.ts | 14 + .../ngrx-1/src/app/store/user/user.effects.ts | 23 + apps/ngrx-1/src/app/store/user/user.model.ts | 15 + .../ngrx-1/src/app/store/user/user.reducer.ts | 19 + .../src/app/store/user/user.selectors.ts | 9 + .../ngrx-1/src/app/store/user/user.service.ts | 10 + apps/ngrx-1/src/assets/.gitkeep | 0 .../src/environments/environment.prod.ts | 3 + apps/ngrx-1/src/environments/environment.ts | 16 + apps/ngrx-1/src/favicon.ico | Bin 0 -> 15086 bytes apps/ngrx-1/src/index.html | 13 + apps/ngrx-1/src/main.ts | 35 + apps/ngrx-1/src/polyfills.ts | 52 + apps/ngrx-1/src/styles.scss | 0 apps/ngrx-1/src/test-setup.ts | 1 + apps/ngrx-1/tsconfig.app.json | 10 + apps/ngrx-1/tsconfig.editor.json | 7 + apps/{projection-e2e => ngrx-1}/tsconfig.json | 19 +- apps/ngrx-1/tsconfig.spec.json | 10 + apps/projection-e2e/.eslintrc.json | 17 - apps/projection-e2e/cypress.config.ts | 6 - apps/projection-e2e/project.json | 30 - apps/projection-e2e/src/e2e/app.cy.ts | 13 - apps/projection-e2e/src/fixtures/example.json | 4 - apps/projection-e2e/src/support/app.po.ts | 1 - apps/projection-e2e/src/support/commands.ts | 33 - apps/projection-e2e/src/support/e2e.ts | 17 - apps/projection/.eslintrc.json | 41 +- apps/projection/project.json | 3 +- apps/projection/src/app/app.component.html | 1 - apps/projection/src/app/app.component.spec.ts | 32 - apps/projection/src/app/app.component.ts | 20 +- apps/projection/src/app/app.module.ts | 13 - .../city-card/city-card.component.ts | 13 + .../student-card/student-card.component.ts | 36 + .../teacher-card/teacher-card.component.ts | 36 + .../src/app/data-access/fake-http.service.ts | 68 + .../src/app/data-access/student.store.ts | 23 + .../src/app/data-access/teacher.store.ts | 23 + apps/projection/src/app/model/card.model.ts | 5 + apps/projection/src/app/model/city.model.ts | 5 + .../projection/src/app/model/student.model.ts | 9 + .../projection/src/app/model/teacher.model.ts | 15 + .../src/app/nx-welcome.component.ts | 850 --------- .../src/app/ui/card/card.component.html | 29 + .../src/app/ui/card/card.component.ts | 34 + .../app/ui/list-item/list-item.component.ts | 35 + apps/projection/src/assets/img/student.webp | Bin 0 -> 32554 bytes apps/projection/src/assets/img/teacher.png | Bin 0 -> 90137 bytes apps/projection/src/assets/svg/trash.svg | 1 + apps/projection/src/index.html | 2 +- apps/projection/src/main.ts | 8 +- apps/projection/src/styles.scss | 4 +- apps/projection/tailwind.config.js | 14 + package-lock.json | 1683 +++++++++++------ package.json | 4 + 74 files changed, 2263 insertions(+), 1653 deletions(-) rename apps/projection/src/app/app.component.scss => NX (100%) create mode 100644 apps/ngrx-1/.browserslistrc create mode 100644 apps/ngrx-1/.eslintrc.json create mode 100644 apps/ngrx-1/README.md create mode 100644 apps/ngrx-1/jest.config.ts create mode 100644 apps/ngrx-1/project.json create mode 100644 apps/ngrx-1/src/app/app.component.ts create mode 100644 apps/ngrx-1/src/app/store/activity/activity.actions.ts create mode 100644 apps/ngrx-1/src/app/store/activity/activity.effects.ts create mode 100644 apps/ngrx-1/src/app/store/activity/activity.model.ts create mode 100644 apps/ngrx-1/src/app/store/activity/activity.reducer.ts create mode 100644 apps/ngrx-1/src/app/store/activity/activity.selectors.ts create mode 100644 apps/ngrx-1/src/app/store/activity/activity.service.ts create mode 100644 apps/ngrx-1/src/app/store/status/status.actions.ts create mode 100644 apps/ngrx-1/src/app/store/status/status.effects.ts create mode 100644 apps/ngrx-1/src/app/store/status/status.model.ts create mode 100644 apps/ngrx-1/src/app/store/status/status.reducer.ts create mode 100644 apps/ngrx-1/src/app/store/status/status.selectors.ts create mode 100644 apps/ngrx-1/src/app/store/user/user.actions.ts create mode 100644 apps/ngrx-1/src/app/store/user/user.effects.ts create mode 100644 apps/ngrx-1/src/app/store/user/user.model.ts create mode 100644 apps/ngrx-1/src/app/store/user/user.reducer.ts create mode 100644 apps/ngrx-1/src/app/store/user/user.selectors.ts create mode 100644 apps/ngrx-1/src/app/store/user/user.service.ts create mode 100644 apps/ngrx-1/src/assets/.gitkeep create mode 100644 apps/ngrx-1/src/environments/environment.prod.ts create mode 100644 apps/ngrx-1/src/environments/environment.ts create mode 100644 apps/ngrx-1/src/favicon.ico create mode 100644 apps/ngrx-1/src/index.html create mode 100644 apps/ngrx-1/src/main.ts create mode 100644 apps/ngrx-1/src/polyfills.ts create mode 100644 apps/ngrx-1/src/styles.scss create mode 100644 apps/ngrx-1/src/test-setup.ts create mode 100644 apps/ngrx-1/tsconfig.app.json create mode 100644 apps/ngrx-1/tsconfig.editor.json rename apps/{projection-e2e => ngrx-1}/tsconfig.json (67%) create mode 100644 apps/ngrx-1/tsconfig.spec.json delete mode 100644 apps/projection-e2e/.eslintrc.json delete mode 100644 apps/projection-e2e/cypress.config.ts delete mode 100644 apps/projection-e2e/project.json delete mode 100644 apps/projection-e2e/src/e2e/app.cy.ts delete mode 100644 apps/projection-e2e/src/fixtures/example.json delete mode 100644 apps/projection-e2e/src/support/app.po.ts delete mode 100644 apps/projection-e2e/src/support/commands.ts delete mode 100644 apps/projection-e2e/src/support/e2e.ts delete mode 100644 apps/projection/src/app/app.component.html delete mode 100644 apps/projection/src/app/app.component.spec.ts delete mode 100644 apps/projection/src/app/app.module.ts create mode 100644 apps/projection/src/app/component/city-card/city-card.component.ts create mode 100644 apps/projection/src/app/component/student-card/student-card.component.ts create mode 100644 apps/projection/src/app/component/teacher-card/teacher-card.component.ts create mode 100644 apps/projection/src/app/data-access/fake-http.service.ts create mode 100644 apps/projection/src/app/data-access/student.store.ts create mode 100644 apps/projection/src/app/data-access/teacher.store.ts create mode 100644 apps/projection/src/app/model/card.model.ts create mode 100644 apps/projection/src/app/model/city.model.ts create mode 100644 apps/projection/src/app/model/student.model.ts create mode 100644 apps/projection/src/app/model/teacher.model.ts delete mode 100644 apps/projection/src/app/nx-welcome.component.ts create mode 100644 apps/projection/src/app/ui/card/card.component.html create mode 100644 apps/projection/src/app/ui/card/card.component.ts create mode 100644 apps/projection/src/app/ui/list-item/list-item.component.ts create mode 100644 apps/projection/src/assets/img/student.webp create mode 100644 apps/projection/src/assets/img/teacher.png create mode 100644 apps/projection/src/assets/svg/trash.svg create mode 100644 apps/projection/tailwind.config.js diff --git a/apps/projection/src/app/app.component.scss b/NX similarity index 100% rename from apps/projection/src/app/app.component.scss rename to NX diff --git a/apps/ngrx-1/.browserslistrc b/apps/ngrx-1/.browserslistrc new file mode 100644 index 0000000..4f9ac26 --- /dev/null +++ b/apps/ngrx-1/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR diff --git a/apps/ngrx-1/.eslintrc.json b/apps/ngrx-1/.eslintrc.json new file mode 100644 index 0000000..028ce09 --- /dev/null +++ b/apps/ngrx-1/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/apps/ngrx-1/README.md b/apps/ngrx-1/README.md new file mode 100644 index 0000000..4a26f96 --- /dev/null +++ b/apps/ngrx-1/README.md @@ -0,0 +1,41 @@ +# Angular Exercice 2 : NgRx + +Second exercice of a series of Angular exercices. The goal is to improve our angular skills all together. + +--- + +For this second exercice, we will deep dive inside **NgRx**. + +For this exercice, you will have a dashboard of activities displaying the name, the main teacher and a list of subtitutes. + +## Information + +In NgRx, **selectors** is a very powerful tool often **misused**. You should use them as soon as you need to transform an already existing data in the store. + +- You shouldn't store **derived state**. This is error prone because when your data change, you will have to change it at multiple places => you should have only one place of truth with that data, and every transformation should be done in a **selector**. + +- Inside a component, you shouldn't transform a selector (using map operator), or you shouldn't have to call a selector from a function in your view. The useful data for a component should be done in a **selector**. + +## Statement + +##### You will have to + +1. Refactor this working exemple of a dashboard of activities. + +##### Rules: + +- Only **one action** should be dispatched from a component +- Status effect is useless. Using **combineLatest** should be a red flag. And Effect are made for side effect, not transforming data. That's a selector role +- Status state might not be useful, it's only a **derived state** of existing state. + +## Submitting your work + +1. Fork the project +2. clone it +3. npm install +4. ng serve +5. ...Work On it +6. Commit your work +7. Submit a PR that I will review and other dev can review. + +_You can ask any question on Twitter or on Github_ diff --git a/apps/ngrx-1/jest.config.ts b/apps/ngrx-1/jest.config.ts new file mode 100644 index 0000000..f5d66b6 --- /dev/null +++ b/apps/ngrx-1/jest.config.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +export default { + displayName: 'ngrx-1', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/apps/ngrx-1', + transform: { + '^.+\\.(ts|mjs|js|html)$': 'jest-preset-angular', + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/apps/ngrx-1/project.json b/apps/ngrx-1/project.json new file mode 100644 index 0000000..f09f5d4 --- /dev/null +++ b/apps/ngrx-1/project.json @@ -0,0 +1,90 @@ +{ + "name": "ngrx-1", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "sourceRoot": "apps/ngrx-1/src", + "prefix": "app", + "targets": { + "build": { + "executor": "@angular-devkit/build-angular:browser", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/apps/ngrx-1", + "index": "apps/ngrx-1/src/index.html", + "main": "apps/ngrx-1/src/main.ts", + "polyfills": "apps/ngrx-1/src/polyfills.ts", + "tsConfig": "apps/ngrx-1/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": ["apps/ngrx-1/src/favicon.ico", "apps/ngrx-1/src/assets"], + "styles": ["apps/ngrx-1/src/styles.scss"], + "scripts": [], + "allowedCommonJsDependencies": ["seedrandom"] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "apps/ngrx-1/src/environments/environment.ts", + "with": "apps/ngrx-1/src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "executor": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "ngrx-1:build:production" + }, + "development": { + "browserTarget": "ngrx-1:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "executor": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "ngrx-1:build" + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": ["apps/ngrx-1/**/*.ts", "apps/ngrx-1/**/*.html"] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/ngrx-1/jest.config.ts", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/apps/ngrx-1/src/app/app.component.ts b/apps/ngrx-1/src/app/app.component.ts new file mode 100644 index 0000000..924d078 --- /dev/null +++ b/apps/ngrx-1/src/app/app.component.ts @@ -0,0 +1,73 @@ +import { AsyncPipe, NgFor } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + inject, + OnInit, +} from '@angular/core'; +import { Store } from '@ngrx/store'; +import { loadActivities } from './store/activity/activity.actions'; +import { ActivityType } from './store/activity/activity.model'; +import { selectActivities } from './store/activity/activity.selectors'; +import { loadStatuses } from './store/status/status.actions'; +import { selectAllTeachersByActivityType } from './store/status/status.selectors'; +import { loadUsers } from './store/user/user.actions'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [NgFor, AsyncPipe], + template: ` +

Activity Board

+
+
+

Activity Name: {{ activity.name }}

+

Main teacher: {{ activity.teacher.name }}

+ All teachers available for : {{ activity.type }} are +
    +
  • + {{ teacher.name }} +
  • +
+
+
+ `, + styles: [ + ` + section { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 2px; + } + + .card { + display: flex; + flex-direction: column; + border: solid; + border-width: 1px; + border-color: black; + padding: 2px; + } + `, + ], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AppComponent implements OnInit { + private store = inject(Store); + + activities$ = this.store.select(selectActivities); + + ngOnInit(): void { + this.store.dispatch(loadActivities()); + this.store.dispatch(loadUsers()); + this.store.dispatch(loadStatuses()); + } + + getAllTeachersForActivityType$ = (type: ActivityType) => + this.store.select(selectAllTeachersByActivityType(type)); +} diff --git a/apps/ngrx-1/src/app/store/activity/activity.actions.ts b/apps/ngrx-1/src/app/store/activity/activity.actions.ts new file mode 100644 index 0000000..cde9d59 --- /dev/null +++ b/apps/ngrx-1/src/app/store/activity/activity.actions.ts @@ -0,0 +1,14 @@ +import { createAction, props } from '@ngrx/store'; +import { Activity } from './activity.model'; + +export const loadActivities = createAction('[AppComponent] Load Activitys'); + +export const loadActivitiesSuccess = createAction( + '[Activity Effect] Load Activitys Success', + props<{ activities: Activity[] }>() +); + +export const loadActivitiesFailure = createAction( + '[Activity] Load Activitys Failure', + props<{ error: any }>() +); diff --git a/apps/ngrx-1/src/app/store/activity/activity.effects.ts b/apps/ngrx-1/src/app/store/activity/activity.effects.ts new file mode 100644 index 0000000..63b27e9 --- /dev/null +++ b/apps/ngrx-1/src/app/store/activity/activity.effects.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { of } from 'rxjs'; +import { catchError, concatMap, map } from 'rxjs/operators'; +import * as ActivityActions from './activity.actions'; +import { ActivityService } from './activity.service'; + +@Injectable() +export class ActivityEffects { + loadActivities$ = createEffect(() => { + return this.actions$.pipe( + ofType(ActivityActions.loadActivities), + concatMap(() => + this.ActivityService.fetchActivities().pipe( + map((activities) => + ActivityActions.loadActivitiesSuccess({ activities }) + ), + catchError((error) => + of(ActivityActions.loadActivitiesFailure({ error })) + ) + ) + ) + ); + }); + + constructor( + private actions$: Actions, + private ActivityService: ActivityService + ) {} +} diff --git a/apps/ngrx-1/src/app/store/activity/activity.model.ts b/apps/ngrx-1/src/app/store/activity/activity.model.ts new file mode 100644 index 0000000..b90728c --- /dev/null +++ b/apps/ngrx-1/src/app/store/activity/activity.model.ts @@ -0,0 +1,55 @@ +import { + incrementalNumber, + rand, + randFirstName, + randText, +} from '@ngneat/falso'; + +export const activityType = [ + 'Sport', + 'Sciences', + 'History', + 'Maths', + 'Physics', +] as const; +export type ActivityType = typeof activityType[number]; + +export interface Person { + id: number; + name: string; +} + +export interface Activity { + id: number; + name: string; + type: ActivityType; + teacher: Person; +} + +const factoryPerson = incrementalNumber(); + +export const randPerson = () => ({ + id: factoryPerson(), + name: randFirstName(), +}); + +const factoryActivity = incrementalNumber(); + +export const randActivity = (): Activity => ({ + id: factoryActivity(), + name: randText(), + type: rand(activityType), + teacher: randPerson(), +}); + +export const activities: Activity[] = [ + randActivity(), + randActivity(), + randActivity(), + randActivity(), + randActivity(), + randActivity(), + randActivity(), + randActivity(), + randActivity(), +]; diff --git a/apps/ngrx-1/src/app/store/activity/activity.reducer.ts b/apps/ngrx-1/src/app/store/activity/activity.reducer.ts new file mode 100644 index 0000000..f370b4b --- /dev/null +++ b/apps/ngrx-1/src/app/store/activity/activity.reducer.ts @@ -0,0 +1,25 @@ +import { createReducer, on } from '@ngrx/store'; +import * as ActivityActions from './activity.actions'; +import { Activity } from './activity.model'; + +export const activityFeatureKey = 'Activity'; + +export interface ActivityState { + activities: Activity[]; +} + +export const initialState: ActivityState = { + activities: [], +}; + +export const activityReducer = createReducer( + initialState, + on(ActivityActions.loadActivitiesSuccess, (state, { activities }) => ({ + ...state, + activities, + })), + on(ActivityActions.loadActivitiesFailure, (state) => ({ + state, + activities: [], + })) +); diff --git a/apps/ngrx-1/src/app/store/activity/activity.selectors.ts b/apps/ngrx-1/src/app/store/activity/activity.selectors.ts new file mode 100644 index 0000000..7e200de --- /dev/null +++ b/apps/ngrx-1/src/app/store/activity/activity.selectors.ts @@ -0,0 +1,10 @@ +import { createFeatureSelector, createSelector } from '@ngrx/store'; +import { activityFeatureKey, ActivityState } from './activity.reducer'; + +export const selectActivityState = + createFeatureSelector(activityFeatureKey); + +export const selectActivities = createSelector( + selectActivityState, + (state) => state.activities +); diff --git a/apps/ngrx-1/src/app/store/activity/activity.service.ts b/apps/ngrx-1/src/app/store/activity/activity.service.ts new file mode 100644 index 0000000..07aa8f8 --- /dev/null +++ b/apps/ngrx-1/src/app/store/activity/activity.service.ts @@ -0,0 +1,10 @@ +import { Injectable } from '@angular/core'; +import { map, timer } from 'rxjs'; +import { activities } from './activity.model'; + +@Injectable({ + providedIn: 'root', +}) +export class ActivityService { + fetchActivities = () => timer(500).pipe(map(() => activities)); +} diff --git a/apps/ngrx-1/src/app/store/status/status.actions.ts b/apps/ngrx-1/src/app/store/status/status.actions.ts new file mode 100644 index 0000000..c966824 --- /dev/null +++ b/apps/ngrx-1/src/app/store/status/status.actions.ts @@ -0,0 +1,9 @@ +import { createAction, props } from '@ngrx/store'; +import { Status } from './status.model'; + +export const loadStatuses = createAction('[Status] Load Statuses'); + +export const loadStatusesSuccess = createAction( + '[Status] Load Statuses Success', + props<{ statuses: Status[] }>() +); diff --git a/apps/ngrx-1/src/app/store/status/status.effects.ts b/apps/ngrx-1/src/app/store/status/status.effects.ts new file mode 100644 index 0000000..3459a59 --- /dev/null +++ b/apps/ngrx-1/src/app/store/status/status.effects.ts @@ -0,0 +1,49 @@ +import { Injectable } from '@angular/core'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { Store } from '@ngrx/store'; +import { combineLatest, concatMap, map } from 'rxjs'; +import { selectActivities } from '../activity/activity.selectors'; +import { selectUser } from '../user/user.selectors'; +import * as StatusActions from './status.actions'; +import { Status } from './status.model'; + +@Injectable() +export class StatusEffects { + loadStatuses$ = createEffect(() => { + return this.actions$.pipe( + ofType(StatusActions.loadStatuses), + concatMap(() => + combineLatest([ + this.store.select(selectUser), + this.store.select(selectActivities), + ]).pipe( + map(([user, activities]): Status[] => { + if (user?.isAdmin) { + return activities.reduce( + (status: Status[], activity): Status[] => { + const index = status.findIndex( + (s) => s.name === activity.type + ); + if (index === -1) { + return [ + ...status, + { name: activity.type, teachers: [activity.teacher] }, + ]; + } else { + status[index].teachers.push(activity.teacher); + return status; + } + }, + [] + ); + } + return []; + }), + map((statuses) => StatusActions.loadStatusesSuccess({ statuses })) + ) + ) + ); + }); + + constructor(private actions$: Actions, private store: Store) {} +} diff --git a/apps/ngrx-1/src/app/store/status/status.model.ts b/apps/ngrx-1/src/app/store/status/status.model.ts new file mode 100644 index 0000000..0773383 --- /dev/null +++ b/apps/ngrx-1/src/app/store/status/status.model.ts @@ -0,0 +1,6 @@ +import { ActivityType, Person } from '../activity/activity.model'; + +export interface Status { + name: ActivityType; + teachers: Person[]; +} diff --git a/apps/ngrx-1/src/app/store/status/status.reducer.ts b/apps/ngrx-1/src/app/store/status/status.reducer.ts new file mode 100644 index 0000000..1dd8ece --- /dev/null +++ b/apps/ngrx-1/src/app/store/status/status.reducer.ts @@ -0,0 +1,29 @@ +import { createReducer, on } from '@ngrx/store'; +import { ActivityType, Person } from '../activity/activity.model'; +import * as StatusActions from './status.actions'; +import { Status } from './status.model'; + +export const statusFeatureKey = 'status'; + +export interface StatusState { + statuses: Status[]; + teachersMap: Map; +} + +export const initialState: StatusState = { + statuses: [], + teachersMap: new Map(), +}; + +export const statusReducer = createReducer( + initialState, + on(StatusActions.loadStatusesSuccess, (state, { statuses }): StatusState => { + const map = new Map(); + statuses.forEach((s) => map.set(s.name, s.teachers)); + return { + ...state, + statuses, + teachersMap: map, + }; + }) +); diff --git a/apps/ngrx-1/src/app/store/status/status.selectors.ts b/apps/ngrx-1/src/app/store/status/status.selectors.ts new file mode 100644 index 0000000..85b72f8 --- /dev/null +++ b/apps/ngrx-1/src/app/store/status/status.selectors.ts @@ -0,0 +1,17 @@ +import { createFeatureSelector, createSelector } from '@ngrx/store'; +import { ActivityType } from '../activity/activity.model'; +import { statusFeatureKey, StatusState } from './status.reducer'; + +export const selectStatusState = + createFeatureSelector(statusFeatureKey); + +export const selectStatuses = createSelector( + selectStatusState, + (state) => state.statuses +); + +export const selectAllTeachersByActivityType = (name: ActivityType) => + createSelector( + selectStatusState, + (state) => state.teachersMap.get(name) ?? [] + ); diff --git a/apps/ngrx-1/src/app/store/user/user.actions.ts b/apps/ngrx-1/src/app/store/user/user.actions.ts new file mode 100644 index 0000000..a9e8f4a --- /dev/null +++ b/apps/ngrx-1/src/app/store/user/user.actions.ts @@ -0,0 +1,14 @@ +import { createAction, props } from '@ngrx/store'; +import { User } from './user.model'; + +export const loadUsers = createAction('[User] Load Users'); + +export const loadUsersSuccess = createAction( + '[User] Load Users Success', + props<{ user: User }>() +); + +export const loadUsersFailure = createAction( + '[User] Load Users Failure', + props<{ error: any }>() +); diff --git a/apps/ngrx-1/src/app/store/user/user.effects.ts b/apps/ngrx-1/src/app/store/user/user.effects.ts new file mode 100644 index 0000000..6f68e5b --- /dev/null +++ b/apps/ngrx-1/src/app/store/user/user.effects.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { of } from 'rxjs'; +import { catchError, concatMap, map } from 'rxjs/operators'; +import * as UserActions from './user.actions'; +import { UserService } from './user.service'; + +@Injectable() +export class UserEffects { + loadUsers$ = createEffect(() => { + return this.actions$.pipe( + ofType(UserActions.loadUsers), + concatMap(() => + this.userService.fetchUser().pipe( + map((user) => UserActions.loadUsersSuccess({ user })), + catchError((error) => of(UserActions.loadUsersFailure({ error }))) + ) + ) + ); + }); + + constructor(private actions$: Actions, private userService: UserService) {} +} diff --git a/apps/ngrx-1/src/app/store/user/user.model.ts b/apps/ngrx-1/src/app/store/user/user.model.ts new file mode 100644 index 0000000..d769204 --- /dev/null +++ b/apps/ngrx-1/src/app/store/user/user.model.ts @@ -0,0 +1,15 @@ +import { randFirstName, randLastName, randText } from '@ngneat/falso'; + +export interface User { + firstname: string; + lastname: string; + isAdmin: boolean; + apiKey: string; +} + +export const user: User = { + firstname: randFirstName(), + lastname: randLastName(), + isAdmin: true, + apiKey: randText(), +}; diff --git a/apps/ngrx-1/src/app/store/user/user.reducer.ts b/apps/ngrx-1/src/app/store/user/user.reducer.ts new file mode 100644 index 0000000..45596af --- /dev/null +++ b/apps/ngrx-1/src/app/store/user/user.reducer.ts @@ -0,0 +1,19 @@ +import { createReducer, on } from '@ngrx/store'; +import * as UserActions from './user.actions'; +import { User } from './user.model'; + +export const userFeatureKey = 'user'; + +export interface UserState { + user?: User; +} + +export const initialState: UserState = { + user: undefined, +}; + +export const userReducer = createReducer( + initialState, + on(UserActions.loadUsersSuccess, (state, { user }) => ({ ...state, user })), + on(UserActions.loadUsersFailure, (state) => ({ ...state, user: undefined })) +); diff --git a/apps/ngrx-1/src/app/store/user/user.selectors.ts b/apps/ngrx-1/src/app/store/user/user.selectors.ts new file mode 100644 index 0000000..eb6deda --- /dev/null +++ b/apps/ngrx-1/src/app/store/user/user.selectors.ts @@ -0,0 +1,9 @@ +import { createFeatureSelector, createSelector } from '@ngrx/store'; +import { userFeatureKey, UserState } from './user.reducer'; + +export const selectUserState = createFeatureSelector(userFeatureKey); + +export const selectUser = createSelector( + selectUserState, + (state) => state.user +); diff --git a/apps/ngrx-1/src/app/store/user/user.service.ts b/apps/ngrx-1/src/app/store/user/user.service.ts new file mode 100644 index 0000000..a407b02 --- /dev/null +++ b/apps/ngrx-1/src/app/store/user/user.service.ts @@ -0,0 +1,10 @@ +import { Injectable } from '@angular/core'; +import { map, timer } from 'rxjs'; +import { user } from './user.model'; + +@Injectable({ + providedIn: 'root', +}) +export class UserService { + fetchUser = () => timer(500).pipe(map(() => user)); +} diff --git a/apps/ngrx-1/src/assets/.gitkeep b/apps/ngrx-1/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/apps/ngrx-1/src/environments/environment.prod.ts b/apps/ngrx-1/src/environments/environment.prod.ts new file mode 100644 index 0000000..c966979 --- /dev/null +++ b/apps/ngrx-1/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true, +}; diff --git a/apps/ngrx-1/src/environments/environment.ts b/apps/ngrx-1/src/environments/environment.ts new file mode 100644 index 0000000..66998ae --- /dev/null +++ b/apps/ngrx-1/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false, +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/apps/ngrx-1/src/favicon.ico b/apps/ngrx-1/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..317ebcb2336e0833a22dddf0ab287849f26fda57 GIT binary patch literal 15086 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 + + + + Ngrx1 + + + + + + + + diff --git a/apps/ngrx-1/src/main.ts b/apps/ngrx-1/src/main.ts new file mode 100644 index 0000000..343da9b --- /dev/null +++ b/apps/ngrx-1/src/main.ts @@ -0,0 +1,35 @@ +import { enableProdMode } from '@angular/core'; +import { bootstrapApplication } from '@angular/platform-browser'; +import { provideEffects } from '@ngrx/effects'; +import { provideStore } from '@ngrx/store'; +import { AppComponent } from './app/app.component'; +import { ActivityEffects } from './app/store/activity/activity.effects'; +import { + activityFeatureKey, + activityReducer, +} from './app/store/activity/activity.reducer'; +import { StatusEffects } from './app/store/status/status.effects'; +import { + statusFeatureKey, + statusReducer, +} from './app/store/status/status.reducer'; +import { UserEffects } from './app/store/user/user.effects'; +import { userFeatureKey, userReducer } from './app/store/user/user.reducer'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +const reducers = { + [statusFeatureKey]: statusReducer, + [activityFeatureKey]: activityReducer, + [userFeatureKey]: userReducer, +}; + +bootstrapApplication(AppComponent, { + providers: [ + provideStore(reducers), + provideEffects([ActivityEffects, UserEffects, StatusEffects]), + ], +}); diff --git a/apps/ngrx-1/src/polyfills.ts b/apps/ngrx-1/src/polyfills.ts new file mode 100644 index 0000000..e4555ed --- /dev/null +++ b/apps/ngrx-1/src/polyfills.ts @@ -0,0 +1,52 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/apps/ngrx-1/src/styles.scss b/apps/ngrx-1/src/styles.scss new file mode 100644 index 0000000..e69de29 diff --git a/apps/ngrx-1/src/test-setup.ts b/apps/ngrx-1/src/test-setup.ts new file mode 100644 index 0000000..1100b3e --- /dev/null +++ b/apps/ngrx-1/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/apps/ngrx-1/tsconfig.app.json b/apps/ngrx-1/tsconfig.app.json new file mode 100644 index 0000000..915ae8b --- /dev/null +++ b/apps/ngrx-1/tsconfig.app.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": [] + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] +} diff --git a/apps/ngrx-1/tsconfig.editor.json b/apps/ngrx-1/tsconfig.editor.json new file mode 100644 index 0000000..20c4afd --- /dev/null +++ b/apps/ngrx-1/tsconfig.editor.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "include": ["**/*.ts"], + "compilerOptions": { + "types": ["jest", "node"] + } +} diff --git a/apps/projection-e2e/tsconfig.json b/apps/ngrx-1/tsconfig.json similarity index 67% rename from apps/projection-e2e/tsconfig.json rename to apps/ngrx-1/tsconfig.json index 9e27f75..c756d84 100644 --- a/apps/projection-e2e/tsconfig.json +++ b/apps/ngrx-1/tsconfig.json @@ -1,10 +1,20 @@ { "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + }, + { + "path": "./tsconfig.editor.json" + } + ], "compilerOptions": { - "sourceMap": false, - "outDir": "../../dist/out-tsc", - "allowJs": true, - "types": ["cypress", "node"], + "target": "es2020", "forceConsistentCasingInFileNames": true, "strict": true, "noImplicitOverride": true, @@ -12,7 +22,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"], "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/ngrx-1/tsconfig.spec.json b/apps/ngrx-1/tsconfig.spec.json new file mode 100644 index 0000000..c5db027 --- /dev/null +++ b/apps/ngrx-1/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] +} diff --git a/apps/projection-e2e/.eslintrc.json b/apps/projection-e2e/.eslintrc.json deleted file mode 100644 index 4c5989b..0000000 --- a/apps/projection-e2e/.eslintrc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["src/plugins/index.js"], - "rules": { - "@typescript-eslint/no-var-requires": "off", - "no-undef": "off" - } - } - ] -} diff --git a/apps/projection-e2e/cypress.config.ts b/apps/projection-e2e/cypress.config.ts deleted file mode 100644 index 22f7c84..0000000 --- a/apps/projection-e2e/cypress.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { defineConfig } from 'cypress'; -import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset'; - -export default defineConfig({ - e2e: nxE2EPreset(__dirname), -}); diff --git a/apps/projection-e2e/project.json b/apps/projection-e2e/project.json deleted file mode 100644 index c1db5d1..0000000 --- a/apps/projection-e2e/project.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "projection-e2e", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/projection-e2e/src", - "projectType": "application", - "targets": { - "e2e": { - "executor": "@nrwl/cypress:cypress", - "options": { - "cypressConfig": "apps/projection-e2e/cypress.config.ts", - "devServerTarget": "projection:serve:development", - "testingType": "e2e" - }, - "configurations": { - "production": { - "devServerTarget": "projection:serve:production" - } - } - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": ["{options.outputFile}"], - "options": { - "lintFilePatterns": ["apps/projection-e2e/**/*.{js,ts}"] - } - } - }, - "tags": [], - "implicitDependencies": ["projection"] -} diff --git a/apps/projection-e2e/src/e2e/app.cy.ts b/apps/projection-e2e/src/e2e/app.cy.ts deleted file mode 100644 index eab5191..0000000 --- a/apps/projection-e2e/src/e2e/app.cy.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { getGreeting } from '../support/app.po'; - -describe('projection', () => { - beforeEach(() => cy.visit('/')); - - it('should display welcome message', () => { - // Custom command example, see `../support/commands.ts` file - cy.login('my-email@something.com', 'myPassword'); - - // Function helper example, see `../support/app.po.ts` file - getGreeting().contains('Welcome projection'); - }); -}); diff --git a/apps/projection-e2e/src/fixtures/example.json b/apps/projection-e2e/src/fixtures/example.json deleted file mode 100644 index 294cbed..0000000 --- a/apps/projection-e2e/src/fixtures/example.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io" -} diff --git a/apps/projection-e2e/src/support/app.po.ts b/apps/projection-e2e/src/support/app.po.ts deleted file mode 100644 index 3293424..0000000 --- a/apps/projection-e2e/src/support/app.po.ts +++ /dev/null @@ -1 +0,0 @@ -export const getGreeting = () => cy.get('h1'); diff --git a/apps/projection-e2e/src/support/commands.ts b/apps/projection-e2e/src/support/commands.ts deleted file mode 100644 index 310f1fa..0000000 --- a/apps/projection-e2e/src/support/commands.ts +++ /dev/null @@ -1,33 +0,0 @@ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** - -// eslint-disable-next-line @typescript-eslint/no-namespace -declare namespace Cypress { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - interface Chainable { - login(email: string, password: string): void; - } -} -// -// -- This is a parent command -- -Cypress.Commands.add('login', (email, password) => { - console.log('Custom command example: Login', email, password); -}); -// -// -- This is a child command -- -// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/apps/projection-e2e/src/support/e2e.ts b/apps/projection-e2e/src/support/e2e.ts deleted file mode 100644 index 3d469a6..0000000 --- a/apps/projection-e2e/src/support/e2e.ts +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands'; diff --git a/apps/projection/.eslintrc.json b/apps/projection/.eslintrc.json index 2598c0f..a61f29b 100644 --- a/apps/projection/.eslintrc.json +++ b/apps/projection/.eslintrc.json @@ -1,36 +1,29 @@ { - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], + "extends": [ + "../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], "overrides": [ { - "files": ["*.ts"], + "files": [ + "*.ts" + ], "extends": [ "plugin:@nrwl/nx/angular", "plugin:@angular-eslint/template/process-inline-templates" ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "angularChallenges", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "angular-challenges", - "style": "kebab-case" - } - ] - } + "rules": {} }, { - "files": ["*.html"], - "extends": ["plugin:@nrwl/nx/angular-template"], + "files": [ + "*.html" + ], + "extends": [ + "plugin:@nrwl/nx/angular-template" + ], "rules": {} } ] -} +} \ No newline at end of file diff --git a/apps/projection/project.json b/apps/projection/project.json index 2a1dd5f..a166cec 100644 --- a/apps/projection/project.json +++ b/apps/projection/project.json @@ -20,7 +20,8 @@ "apps/projection/src/assets" ], "styles": ["apps/projection/src/styles.scss"], - "scripts": [] + "scripts": [], + "allowedCommonJsDependencies": ["seedrandom"] }, "configurations": { "production": { diff --git a/apps/projection/src/app/app.component.html b/apps/projection/src/app/app.component.html deleted file mode 100644 index d4e9e4e..0000000 --- a/apps/projection/src/app/app.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/projection/src/app/app.component.spec.ts b/apps/projection/src/app/app.component.spec.ts deleted file mode 100644 index 6c68a5d..0000000 --- a/apps/projection/src/app/app.component.spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { AppComponent } from './app.component'; -import { NxWelcomeComponent } from './nx-welcome.component'; - -describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [AppComponent, NxWelcomeComponent], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it(`should have as title 'projection'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('projection'); - }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('h1')?.textContent).toContain( - 'Welcome projection' - ); - }); -}); diff --git a/apps/projection/src/app/app.component.ts b/apps/projection/src/app/app.component.ts index ef5e9d3..b1d076a 100644 --- a/apps/projection/src/app/app.component.ts +++ b/apps/projection/src/app/app.component.ts @@ -1,10 +1,18 @@ import { Component } from '@angular/core'; +import { CityCardComponent } from './component/city-card/city-card.component'; +import { StudentCardComponent } from './component/student-card/student-card.component'; +import { TeacherCardComponent } from './component/teacher-card/teacher-card.component'; @Component({ - selector: 'angular-challenges-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], + selector: 'app-root', + template: ` +
+ + + +
+ `, + standalone: true, + imports: [TeacherCardComponent, StudentCardComponent, CityCardComponent], }) -export class AppComponent { - title = 'projection'; -} +export class AppComponent {} diff --git a/apps/projection/src/app/app.module.ts b/apps/projection/src/app/app.module.ts deleted file mode 100644 index ca4cff2..0000000 --- a/apps/projection/src/app/app.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; - -import { AppComponent } from './app.component'; -import { NxWelcomeComponent } from './nx-welcome.component'; - -@NgModule({ - declarations: [AppComponent, NxWelcomeComponent], - imports: [BrowserModule], - providers: [], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/apps/projection/src/app/component/city-card/city-card.component.ts b/apps/projection/src/app/component/city-card/city-card.component.ts new file mode 100644 index 0000000..30c8f88 --- /dev/null +++ b/apps/projection/src/app/component/city-card/city-card.component.ts @@ -0,0 +1,13 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-city-card', + template: 'TODO City', + standalone: true, + imports: [], +}) +export class CityCardComponent implements OnInit { + constructor() {} + + ngOnInit(): void {} +} diff --git a/apps/projection/src/app/component/student-card/student-card.component.ts b/apps/projection/src/app/component/student-card/student-card.component.ts new file mode 100644 index 0000000..8a8c8ae --- /dev/null +++ b/apps/projection/src/app/component/student-card/student-card.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { FakeHttpService } from '../../data-access/fake-http.service'; +import { StudentStore } from '../../data-access/student.store'; +import { CardType } from '../../model/card.model'; +import { Student } from '../../model/student.model'; +import { CardComponent } from '../../ui/card/card.component'; + +@Component({ + selector: 'app-student-card', + template: ``, + standalone: true, + styles: [ + ` + ::ng-deep .bg-light-green { + background-color: rgba(0, 250, 0, 0.1); + } + `, + ], + imports: [CardComponent], +}) +export class StudentCardComponent implements OnInit { + students: Student[] = []; + cardType = CardType.STUDENT; + + constructor(private http: FakeHttpService, private store: StudentStore) {} + + ngOnInit(): void { + this.http.fetchStudents$.subscribe((s) => this.store.addAll(s)); + + this.store.students$.subscribe((s) => (this.students = s)); + } +} diff --git a/apps/projection/src/app/component/teacher-card/teacher-card.component.ts b/apps/projection/src/app/component/teacher-card/teacher-card.component.ts new file mode 100644 index 0000000..5f9b3da --- /dev/null +++ b/apps/projection/src/app/component/teacher-card/teacher-card.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { FakeHttpService } from '../../data-access/fake-http.service'; +import { TeacherStore } from '../../data-access/teacher.store'; +import { CardType } from '../../model/card.model'; +import { Teacher } from '../../model/teacher.model'; +import { CardComponent } from '../../ui/card/card.component'; + +@Component({ + selector: 'app-teacher-card', + template: ``, + styles: [ + ` + ::ng-deep .bg-light-red { + background-color: rgba(250, 0, 0, 0.1); + } + `, + ], + standalone: true, + imports: [CardComponent], +}) +export class TeacherCardComponent implements OnInit { + teachers: Teacher[] = []; + cardType = CardType.TEACHER; + + constructor(private http: FakeHttpService, private store: TeacherStore) {} + + ngOnInit(): void { + this.http.fetchTeachers$.subscribe((t) => this.store.addAll(t)); + + this.store.teachers$.subscribe((t) => (this.teachers = t)); + } +} diff --git a/apps/projection/src/app/data-access/fake-http.service.ts b/apps/projection/src/app/data-access/fake-http.service.ts new file mode 100644 index 0000000..ac12467 --- /dev/null +++ b/apps/projection/src/app/data-access/fake-http.service.ts @@ -0,0 +1,68 @@ +import { Injectable } from '@angular/core'; +import { + incrementalNumber, + rand, + randCity, + randCountry, + randFirstName, + randLastName, + randNumber, + randWord, +} from '@ngneat/falso'; +import { map, timer } from 'rxjs'; +import { City } from '../model/city.model'; +import { Student } from '../model/student.model'; +import { subject, Teacher } from '../model/teacher.model'; + +const factoryTeacher = incrementalNumber(); + +export const randTeacher = () => ({ + id: factoryTeacher(), + firstname: randFirstName(), + lastname: randLastName(), + subject: rand(subject), +}); + +const teachers: Teacher[] = [ + randTeacher(), + randTeacher(), + randTeacher(), + randTeacher(), +]; + +const factoryStudent = incrementalNumber(); + +export const randStudent = (): Student => ({ + id: factoryStudent(), + firstname: randFirstName(), + lastname: randLastName(), + mainTeacher: teachers[randNumber({ max: teachers.length })], + school: randWord(), +}); + +const students: Student[] = [ + randStudent(), + randStudent(), + randStudent(), + randStudent(), + randStudent(), +]; + +const factoryCity = incrementalNumber(); + +export const randomCity = (): City => ({ + id: factoryCity(), + name: randCity(), + country: randCountry(), +}); + +const cities = [randomCity(), randomCity(), randomCity()]; + +@Injectable({ + providedIn: 'root', +}) +export class FakeHttpService { + fetchTeachers$ = timer(500).pipe(map(() => teachers)); + fetchStudents$ = timer(500).pipe(map(() => students)); + fetchCities$ = timer(500).pipe(map(() => cities)); +} diff --git a/apps/projection/src/app/data-access/student.store.ts b/apps/projection/src/app/data-access/student.store.ts new file mode 100644 index 0000000..7918118 --- /dev/null +++ b/apps/projection/src/app/data-access/student.store.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; +import { Student } from '../model/student.model'; + +@Injectable({ + providedIn: 'root', +}) +export class StudentStore { + private students = new BehaviorSubject([]); + students$ = this.students.asObservable(); + + addAll(students: Student[]) { + this.students.next(students); + } + + addOne(student: Student) { + this.students.next([...this.students.value, student]); + } + + deleteOne(id: number) { + this.students.next(this.students.value.filter((s) => s.id !== id)); + } +} diff --git a/apps/projection/src/app/data-access/teacher.store.ts b/apps/projection/src/app/data-access/teacher.store.ts new file mode 100644 index 0000000..93f68c4 --- /dev/null +++ b/apps/projection/src/app/data-access/teacher.store.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; +import { Teacher } from '../model/teacher.model'; + +@Injectable({ + providedIn: 'root', +}) +export class TeacherStore { + private teachers = new BehaviorSubject([]); + teachers$ = this.teachers.asObservable(); + + addAll(teachers: Teacher[]) { + this.teachers.next(teachers); + } + + addOne(teacher: Teacher) { + this.teachers.next([...this.teachers.value, teacher]); + } + + deleteOne(id: number) { + this.teachers.next(this.teachers.value.filter((t) => t.id !== id)); + } +} diff --git a/apps/projection/src/app/model/card.model.ts b/apps/projection/src/app/model/card.model.ts new file mode 100644 index 0000000..740cd2a --- /dev/null +++ b/apps/projection/src/app/model/card.model.ts @@ -0,0 +1,5 @@ +export enum CardType { + TEACHER, + STUDENT, + CITY, +} diff --git a/apps/projection/src/app/model/city.model.ts b/apps/projection/src/app/model/city.model.ts new file mode 100644 index 0000000..dd26b19 --- /dev/null +++ b/apps/projection/src/app/model/city.model.ts @@ -0,0 +1,5 @@ +export interface City { + id: number; + name: string; + country: string; +} diff --git a/apps/projection/src/app/model/student.model.ts b/apps/projection/src/app/model/student.model.ts new file mode 100644 index 0000000..00592d4 --- /dev/null +++ b/apps/projection/src/app/model/student.model.ts @@ -0,0 +1,9 @@ +import { Teacher } from './teacher.model'; + +export interface Student { + id: number; + firstname: string; + lastname: string; + mainTeacher: Teacher; + school: string; +} diff --git a/apps/projection/src/app/model/teacher.model.ts b/apps/projection/src/app/model/teacher.model.ts new file mode 100644 index 0000000..6e7ce56 --- /dev/null +++ b/apps/projection/src/app/model/teacher.model.ts @@ -0,0 +1,15 @@ +export const subject = [ + 'Sciences', + 'History', + 'English', + 'Maths', + 'Sport', +] as const; +export type Subject = typeof subject[number]; + +export interface Teacher { + id: number; + firstname: string; + lastname: string; + subject: Subject; +} diff --git a/apps/projection/src/app/nx-welcome.component.ts b/apps/projection/src/app/nx-welcome.component.ts deleted file mode 100644 index 6419abf..0000000 --- a/apps/projection/src/app/nx-welcome.component.ts +++ /dev/null @@ -1,850 +0,0 @@ -import { Component, OnInit, ViewEncapsulation } from '@angular/core'; - -/* eslint-disable */ - -@Component({ - selector: 'angular-challenges-nx-welcome', - template: ` - - -
-
- -
-

- Hello there, - Welcome projection 👋 -

-
- - -
-
-

- - - - You're up and running -

- What's next? -
-
- - - -
-
- - - - - -
-

Next steps

-

Here are some things you can do with Nx:

-
- - - - - Add UI library - -
# Generate UI lib
-nx g @nrwl/angular:lib ui
-
-# Add a component
-nx g @nrwl/angular:component button --project ui
-
-
- - - - - View interactive project graph - -
nx graph
-
-
- - - - - Run affected commands - -
# see what's been affected by changes
-nx affected:graph
-
-# run tests for current changes
-nx affected:test
-
-# run e2e tests for current changes
-nx affected:e2e
-
-
- -

- Carefully crafted with - - - -

-
-
- `, - styles: [], - encapsulation: ViewEncapsulation.None, -}) -export class NxWelcomeComponent implements OnInit { - constructor() {} - - ngOnInit(): void {} -} diff --git a/apps/projection/src/app/ui/card/card.component.html b/apps/projection/src/app/ui/card/card.component.html new file mode 100644 index 0000000..fcd455a --- /dev/null +++ b/apps/projection/src/app/ui/card/card.component.html @@ -0,0 +1,29 @@ +
+ + + +
+ + +
+ + +
diff --git a/apps/projection/src/app/ui/card/card.component.ts b/apps/projection/src/app/ui/card/card.component.ts new file mode 100644 index 0000000..37dd708 --- /dev/null +++ b/apps/projection/src/app/ui/card/card.component.ts @@ -0,0 +1,34 @@ +import { NgFor, NgIf } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { randStudent, randTeacher } from '../../data-access/fake-http.service'; +import { StudentStore } from '../../data-access/student.store'; +import { TeacherStore } from '../../data-access/teacher.store'; +import { CardType } from '../../model/card.model'; +import { ListItemComponent } from '../list-item/list-item.component'; + +@Component({ + selector: 'app-card', + templateUrl: './card.component.html', + standalone: true, + imports: [NgIf, NgFor, ListItemComponent], +}) +export class CardComponent { + @Input() list: any[] | null = null; + @Input() type!: CardType; + @Input() customClass = ''; + + CardType = CardType; + + constructor( + private teacherStore: TeacherStore, + private studentStore: StudentStore + ) {} + + addNewItem() { + if (this.type === CardType.TEACHER) { + this.teacherStore.addOne(randTeacher()); + } else if (this.type === CardType.STUDENT) { + this.studentStore.addOne(randStudent()); + } + } +} diff --git a/apps/projection/src/app/ui/list-item/list-item.component.ts b/apps/projection/src/app/ui/list-item/list-item.component.ts new file mode 100644 index 0000000..2258602 --- /dev/null +++ b/apps/projection/src/app/ui/list-item/list-item.component.ts @@ -0,0 +1,35 @@ +import { Component, Input } from '@angular/core'; +import { StudentStore } from '../../data-access/student.store'; +import { TeacherStore } from '../../data-access/teacher.store'; +import { CardType } from '../../model/card.model'; + +@Component({ + selector: 'app-list-item', + template: ` +
+ {{ name }} + +
+ `, + standalone: true, +}) +export class ListItemComponent { + @Input() id!: number; + @Input() name!: string; + @Input() type!: CardType; + + constructor( + private teacherStore: TeacherStore, + private studentStore: StudentStore + ) {} + + delete(id: number) { + if (this.type === CardType.TEACHER) { + this.teacherStore.deleteOne(id); + } else if (this.type === CardType.STUDENT) { + this.studentStore.deleteOne(id); + } + } +} diff --git a/apps/projection/src/assets/img/student.webp b/apps/projection/src/assets/img/student.webp new file mode 100644 index 0000000000000000000000000000000000000000..207955b5c3cbd8f5bd616ec7759ea770291e8e2f GIT binary patch literal 32554 zcmdR!Lwh9*u&tAH(6MdXw(WFm+xCuaJL%Z$*tTukcJ}@5;EwJeIOiSJq(=4B8mzTc zq$MOs03aY5;v!1wN?b%3|IK%ypt+zl&S1`90`wS>qQrlRkw56Ju)u~&Z~GLp#I^$2 z)k}L@{IxxRV?8jR2Cs-~fIGm4;EHeO3SlY07>N7b`N{aB_yln2tpm!xk{<$f0L`CC zuWb*zbASmz0FV@j_&Ey%ehaz-hkyW}_$TvsClI*qa6z~Wm;oey0>6HJ3jvwGKfgJ@ z5O4BEpNdb455Qf)A>bGg|6KmN^+QlqPyq=0 z6MYT5f_hhcx_ty}^|}KF06<{fo8UL#ZHLyt2^jy$eFyyo_-OqA-T}^m_kdg=@MZp6 zvjkdpSNSHMg7Q^Ggsg%g-9uo& zZ6j;GyI1bfMfVvwr6TZJl*pDZL=lz#8MOx2E;dkL-Pu7o> z@Y6RgzhD{k+6ko?;-G-0vMgzwJF-QQDnWv{=|^Z&nV_Wr`65#hjS~gKnwQO#Ypl?l zo}o|o7EvZ<07e#;i+`!O;Op3=oyu|oxiB|ABW?1KnCO~`!Ci@sNv^jDm4@{~-G$AQ zno$~K)k3sgf)k;P3PciDlo4Me%xR}|HhDhl%uHyf>N(((S_f(|sNbYXh+1KOKHB^X ziv(2LQ_rKKz%aw1VyB52hl>DgQxWMj@z4-NKX-QUEz%V3GZ=B8L!QP2BTo2K;>7;u zD(*zCTDnYOVEOyWj$4TGmo5Rx0vqv0Q5}v@xTYc_B+2;|n@)0SbFgUr*=3y`LFqRBvka9=5=G0AJmoeLO6M5|M-JDn z^4CQM%G~dOg0$=;qIj6L3{7-dYLEYQ5YDuiHW@BakXmfm1cwUilk~GPP53cZRX!W#-VI+y?cC&Pp+`lBM%71V zmt)euu};WLZv+w8qf(}`-~-Z|Ot`Bu13Q%nb3;UJs2lZwpn`S=eN-=rd0cbl?U%8+>dD^*<&ikeo#hC6G;-WDof&Wk<#S0NGg}MnqqeAme$UC zQ#ihm_XNH=?_G|*eM!n{V(H#@;Gl)NVJ}J^h~n3x8`}t$t`iqcKY=DZd6zeSaT&Z& z4m%ZE-=emD{s-!-rofZbu=5p@^DS}|*-7|hau|E|w;PBs5vR!7=WQFAm<_nb#S4n+ zNZ`z9xj5r3Z|8IvSr-K`R5;#wI3SPN1FG#bU{Uo~w-m)JuYo91 z*}F1~8JG7yd|~z9vXl<-^Ted0jAQySJ)$(#;fp2d*j%mD;RCCAl_A8Q2P~bAulbMm zF6nJ(By-HoU_{gyagZwwXqTPcdT5SB`YF7P8A(kZP-jay0Ir>4L`>0-cvNLPd^#Lr z|158tBT-cKo8Yvnqo5~dBeIX#;*2KiMcM2$X9B)haj7*f24b8Shx)_mb_ua2^I2Ky ztFKe1w}B!ep@;pN8Uf%;y__)UuM)X=Sm*@=!cbS48CFPncFLBWh8aXCQ{jMqN(~XZ zJRe;uk?FB)E3KNSfWMH5Fn&+qqQTX)$fOQwO5f2{0~6LQz!|eCg`=4A+^vFwq=8jN0sa zg5HSyd3AK?4w{5#Ig;RNU8&dXizPn`pc(Pji^Psx2DzG1&!?oaL9mK)lk_N*~{%*==yKGc$SMO@0Z>Ahn|;itI{l*gEA9 z#Gs2ANa&&Hi>l;T10q!XZ9YdgZDgI~senK+QsPboK>sw?{_*kJ7SYTEfxKYpg`!A3 zw5J`crw}VEi#@oo0yu<;&I#@ot4i;3O1bxzt-kknqhXNQ{`9w$9_`{{C88&m9#QfE62@9`udcFX1_GOB&9xG??Q+fD7}(T{{~AdgPMnj zhvh?rd$`0vow1J~PYGB^EJPv82#mBfH_yG>;ef7jB=ij@=)=8)7>}(Oe=LAvjGm;|dEA{)bUV7p9 zbTwj%Kku%HZx2u;@{9H&9D>|xl@PlI*YL}6ybOq*s>F>Qtf;&*M=`wJ<5+TtrgLjm z2F+HS2=a*clc@ZowOjPV(qmqFNpP>n-S!RdWKU5;&*+eAIBM`uN8HlruJb8ewsp*C8~0bRO& zS%-#haSuLjJ7w;6rxOSQ;c?I&1mHf+Y99S z6zj?%6GbzP@WRMMWcnZ*{eR?spUbJU0ot7Z-Qj;U`XC@bz|#eg{~vHt^m#Zy52^$% zO($!@tCVQ#u(@FILp;pfULGDrJ_Fe8h3t>BR8`=?zJ1W|ZzoXj02~Sa;r_|eQ*e+KUR<*1soRg6 zm~?4?k;fj$*nTeHCLvW+jx3pI=b$BQ#L8kk>>!JZ_wU*CZ;cPBs}smdiPB{#)lCf1 zA6-;m4R_JeO$E@&lMvIDX~MOFm+D#kOPNmlgqV461%<+CUUc%9tK#Dw;QVa`L4Npj zJ>}Z)lyr1XCoEUJ676{)nVDec&|&^>nOQ?gk@UUzO~alyo$ci7rg0GchbrE`5FSeLdAZUr7pX1|exG-1iyB)PLU*1HusX$3i%hCgn$j9okJpl^Ddf zp3?s}HPx~BwSjN{tqu_0aPbsb@)y7F=;kNCm1uj%N5TrOL)`!FSHcjH#IXMFx|W{! zjUYcbwKR&9U>eqa|Cc;zs9)`0GGVCY7@5S^*ltw0j$`NRckzbkp)y2G!YBh;iGnz8 zOW?21`e*HB7GJUFGw1F29|1je=N7HA@y{lLnXR zoHBU9ZG|084dkBtB6z+oN^U@UG(yNvdjsR*LLElcoXN+TF{#0Y6aud^omn8Db31gCv1PnZj zZIX5UT4Enx^-?)|<%0C&0R4|VDi6>0ZE2Gem&S3UC9vju@e)~?66N&X`X)?T%^q5p zg^x$uvb{Vvc0DQERPN3D@Ex-Mo<(eOC`LH&2q_rBPcheTSO!LNweC8U7L!2R4|*7t z%EAc33I;mPU|`ry%Y6aHp}wSD2w1OjA(pD6b$`tMiy-Ypv*+seqMqPd-}c8Jdc43z zk|Ee_{7O_}z7OcdDA?njbEI{I_h{d-v!wws0O6Y{P>E2v zJ>yU>}EQBIPWaTbDL zdZL?QG;fdPc5^0a((eqzfL@*Ey(w70_|ximF_fONH0}okI=Pi%e=@Eux1*m1@a?Al z*X-L&j?~m|ppR*wH!;I-{H(oB`j*b859^HMN$0M-6X2=3pSh^7ZFP zA6BT?+Y0R2ZdG*2GrFvrzz-ebmT-8V&2#wg9=wGv!x`aoRiTt3hAcmsXDaUscdoL>X=d!;olrOTF7hB(_J7_1UdcKpaha7 zNRATQG8s*>7B+_#)ce83LQ9juuj$m**9YwCyrfsH&w-@0HNU4S>}@oI@uWGB_{u>= z-8`};GPL{en@TJ?jPDCG6z=o|7lKe4yUdPl?L5AQE8tC~)QxKOx0r%U((sSi$ZWG{ zCsu_(y`knS1PShOxW~`^LaEauw$cIO3Qaec64D}j^rquUb5zn|Pl#A)074=hd#`0d zvJ7XmyqZE;B3UEs&x9&m0FqnWY8j=ZxZszR{q}(Qig$nNm)TwW?NoXBD9lz3aZ-Ad z=ZNM^Cp@Wh8f43oL7Is zW;V?T8)CDxc9D9c=e9-h{vD07(cLr75P!)$Hpewy&c5j&$qcPc2Dvo9Ul$SDBqz_j zUW$b6kIBJ^tXs*)U>Ll_or`w~|1e&1kkRHvZdGd;Sc!T^bi*j60wUq|BqJ0Z5A?|` z;tXJ}6S7v+tM&Kl!cIS*RW!VmJ`yx39u%CmY88C5gDLrbCi9sp5)pI<{B_?}lO9s& z(pEIwr3?K}Df~tK6?oDQ?>>qZ5T{?2=%X+YzvU&1j9A{m=q{B2yX!FsfAc)MXvVyS z)Y=qco)E>2Pf|P29bepo_Obq;d+h|!zhx~2lZMKE?_jp8tIbR)^u@Jlw$^@Zus4i9 z{&r#t-X;NvQAjLLM5Vw}=I&xiQLFyNu$*ZshmzSo44jT40jTIswx3!eQklq^In$mt)Mifu`gI;!C!aIOM4gzAR4v~Dmg10GzGV# zz$K&3ciphi#O$|Qr-l(8B=>H$rc198HMt5Jp~M1f)@!{1mf;~f6m)RkqI7hafE|0f z{Dh64VX;4XJN01?vciI2B~RRg!UbvMoCR+=bLFlgGEFh#W-F#HtQLzxPIk}nkZ;hs zkP;LHR9c6?ZxlEsIHDlWvlK|t$zg=QUVgFr}1-Y_3cgSnA(}V4exlTd?O?n_ZUfltGH$pC$hud=tw+1Zsq? zy0-(Zqsvq0(zm;4Ew*aDHnB@8BKyjeL7|o7S@2i!kVkltXS#Bbh(tGTGqXe1y)1{> zlIvqCd(QF7HR{+}kkCrle@>%%e`A?&=`4v)>!`1z|h3lZmAe{=;eYflCt$bfxD{Nz*yHkg0ynC2R{y>;S}dk-6jJij_^>$WMd0IY~nmUz3|7<9i#Ud_=pO^P#uzM(4`@8qYpA z(i+?A)W^DCXEoHBdLqm}!ltq&Jo{Sc{4>aHIgZ^W}+H?q! z{fO^^2)`jv!7#fNb88W5_hWKmj2T7P@W7-#Nl@(AI9mOO9TR|kXn8B8hsbtn&C@|+ zg-Dn7#5eJX#NY+VwoN`dQ~?79bY)#R=63o1q|(nLoNmV%sXF?Y^^o<_FT!Dcy%A_#+Vm?e1| z8lY|1wxA9hv-_>HWNacexdK<6H2cpYw5RwwMt?_ci9 z9+d+UcgpyMKFK;(3{DSVgK1Phe_S{zywCXmkTL)lmDF+*qtSNi$Me^xx*vv`LtnZ5 z`s*-scM-I=vNMjV&KsdELC&cRA3Oby4El(cB<26O{`~oeAThD}O0yrPKN1WkYkgn& zEEu!y7=RYx|G96J==kQNTy1dN*|)JkmW&^JJ^ZfaW>WJdW_ejeu@5^!oBWrTG;x4% zPn3kp1}4~d={PGLK@Q~wA{teUMya`U-#}O_Si;~Io5}p)p&i z#UWu68%y)Z+U2LhCE~&ZIX3=+@#~uaIClkWt(@;pj72#7fbbc7{s*%kcaX}I3+&-2 zs-jv$X3XaDkND21w74=f>8mHt)%Jv+g(+q7Ci`i_ZIbx-13u%ELccRB0Tdso1p*XU zevOeWIhmii0@Mj=CsmK^(k?BUybE0RKt{C;`cXW4 zH^i|JV4+}q>!5cRr!}u7xPnNB-tm!jAlU4>mzfKHmCR@5Rt$0i8bx~d&)Alk*4Fh! zG?0XF8{`LSBtgSTeL4eAyW~b9Ud7V%qc=^Pvy5Y9zXnw>ZO&-#Ca3YRmUP#nRt1wJ zM7D>!43oNH#(s1*x+~}uya16rO~FR&$;Fd`exFbX+!sv&P7-J*8iUW)4Qn!Th_srzFL$$eMHc5{3HfLC{8vGK#%XuGIjFvZ#fBUO5z zYo;gmM%|nIlt80qc$1Gbi5)1Vo?_AL8be-4hZhIP5_5H{@LNk44_*t3do~CPOjX5| zu|0MSzBEu_)ePyPUUdlM6leOrxwkwZU4_DgAU7`>fmM|z{`b8D879!J$n3eRd`HN zG$M-r*RH=SeBvu5tMbCMrOeJDCieQ#u z?ogy4nNczngAFoN@Z{ijcUg1^A8V*_?9;4?go83iI7fd!D4ww+DmNXrOBgiB0ZK!z z8=}u_%@a{nG- zEK5&PNxcMT-NV$#y>wf;EMd zqxQEdfg{rslO(5(;6=FaDNV-&cvP7QXmooz`5Xn+b?3|z(gdh6@MS0-s+BG!8X^7S z)Smnpij~XX6aYF+YL;t+6j}Kke|+O6RsPU?MK3!WAB74M%NnB-axyOU)QYIpMOqRQHBEo_LQUa>Ej5lcrZKt#eCp~gcqZw zM#4dpJysEujUe~l6U~mnV1-m(&!llaexQ~8h{;=E42*S!46*cJj*3QpNP*G}F2?uK z)3}wu(sE9380<$_Ub86Uo=6Yq5tTIYGD5!%1$5ttOjb1BUo>gPYF$movy54*l75?{ z;IH&ufwP?o#ImH7i>(O&N~?l!b#DEoADhv=wR)1>R3uofFuZJ6=s0vaU%Xkp?r844 zk&pfM*N*x$G3f6a)(9QWz@bu%u%F^aAMKtsx;KcRKuHWyo~zC+gMS~h8=GrgRDY2r zkqP{|@;?4TE+lSUUhN6us~eWx%1ki&PPEp1K`8h|mEG>Ee`Ry@KrAvAe>l;tR;#>i ztl*L?TC90?kUJzHjAtqT_=(*H7>K{Y`t8GVfBa)U2g2r><-dvNLS!#FQedA?u{V!? z?F9U7GXGZsHFF^Hop4%ba*^95qE8Sbi8Mr^HNi&tD+~=0?QNACzHvy^knf zIXr1btzRP*J1wS|e>K1mOc(22h)hPdftX zswzwEKRg5L(RVL*ArHmJtq@})r2vk#kTt05QtyFpFbBUrAvqiVI@6f%hM_bi;#%wJ zLd`0! zeclo_b0xh0gTw_Plx`jc?v64J$)nyK9CqM}lv~hUOSAgxi`wLykR+htIB{(P6DUdI z^Cx%i5%{~J?QjgV&rZjZlUalDc0?Eo0pqNt`oouJgf~kr=pW;bH?Kc)b%Z*2GNCgx zv6cbcq^&ztla2t~kJ{abr&^@rS+?M6gi5~n5|uO;{>w+5#C^X+bs>BzSs4aA-Ly$t zceTgwm@RDgrGKIdVJOm!=_AdqZM0r0i*-e(^D4%i1SlT6M*;=?8}P+CDo(BT?UM0} zM~zSY)zi!^)A#~8R`Q`jV7QGP%9hGG733>kt42M@4A5$VgZ9WWsCl`{e?g&3sLs!1 zvWVN1=9eHfGGx zQ@3n>PN-=UjVs-X$FgWm?RZP_uUmDLBAJ#Ap&sL(g<$9scWq0 zTN_0J;VhCbi53>eFwX9}6LrDzNA)7a&Ew_gGlXjcJ@I@;jr#N6Xxhoj_9c1OM~t+6 zMkWJvty$->KjQ~qNdHpgt?ZX{+qj*+@&3)RzX^wAqnLDC(Vi+$`duH*TC+<$jIHev z8<@wehwhHglOGQWn3R#kprAhYpzKr`Summn$&Zqu_mYHKcqot27Q_oy-d$g1#$YtkuU)(b z%sg&+!4`IXC@;+V;au7O(lgJ)jP}&JY3nCZ)_aBADP}ofBIu*lG+{`Y*;|4GvP2tR zGbp2}<_vd`zOR{t=}%Iba4yACkK*5YepZA+eO#jMJ$xm;5u85~KEwhV69Zkg^QruV z+|P59<-ow(pcm)TVjp8(Xt3VsAG@es>W&m0CGSU+$~_%nR`saFxnl5Pi*vt@Fo{>iFp8%+@RTlC&GER!HcP z8NT9PY1YG7hkC#bZi)led{jkpSo0u$%3Qsqaiesj=gUGtD||@USI?%&L;aZ)u~>r` zS(8!ckMz*y`SRJ~D}G1e+`rSmolMPfL>zm!1PK*~R@eEzC*e#`Iasq4;)*#1Q6Sj< zE_@p#*G717S2Ld>Txz0cjUYA0sz|2;sVHyWcg1|5L}DE(b#O5=v3S;taN+|px&ebs z4`_(8=-se=G5XE}3-DEL@sxDXGcMvYX_q3NW3UK|f>Me+evO74Yr(c%i0- zaq7;#J!Vwkk5dP^`yY3%thhrwiYKGr@zf!QeV@2&{-)5#2LN$_UczuTYQ*MDoOVXzC;puDD)bOvOAjAFVC> zCpCzXj>-9SX8{XYF49`h?N0W`(5EJd>qx+N zN-8?j4qd(=0aZ=TiEEd%Y0w2+Us)(K#zCv~1&FBn-xEVj{{>i6R%j&tx*!xE*AFUA$bMZA(uNOXENR&Ztaz{S&DhhE|jHVqvK2e$jb*R2s zrxdV0Cc@SosBc8Mi@q@RENPD#=i+sbmF`Z<#;_?kL{V^H_pduAtI6WM`rJ5eskX32 z(Khzq z0!Amf0aDSwDck=f)Ke$SCQY@g(fhPryW&X9TVP9OL+ED)Cr~NUPb)cPsd)o}D@yBe zvxS^6wFTtf9LCa?Mg{Wc35M&%5<35GCD4Dd*|qfhNJyVKs*Di`#*eR;Uj21?Hn=SX zf9ZTV6*HQ?hxLl50i$E{pVGD4NT;E*&WAp2|{!aVWj4}-S4fwtji8_vKhE}(| zpwP6PE%aJsGAa>KFT-X(t9=+n`Al#l}&7|0lN%+Ie%fHKd?DP9p@*C z^Oaz~?FMB+tKJd)!z^Q}As^YZp*}0h0cIfE#M8VOcLL@(m9*)3h zD|RL#f16E!&&0Kidz18KSRS1eM%QPKmXLi!4@eoc#aE(&VJL)u!xv(Bw#cJJm5O&) zKpvO~t~FiBlup&!MUL2qk5Jo2HGSW%*|tiDMZ%z)5PO?;YJWA)eRJSpoywas7 zmrdorp)ljiBdy%-Brq?0E=smh{1@RK+|$Yy63G4D^8!O{{VQOupt0SE)&Ix)7jaU9 zx^C#3>yLiUb{Y}265J+b7wF4+ULNPf%!+f76LURWIy=);OQ{#*FZMwSyH_luu8fGy z*$*)0ze34$noXrHs>4bukT(ImO{&#xU1FoW=J=~#VY$21m6)}b^CjFX9jD%`%8qmx z2z)X@8DmKy#KO0<#o8cJ0IBGVT2V@yvT2?AAvU0{$OMf#O5xxEBu~)3w3S-_`_20I zDtX&yrsSM9vhIupKerz;`|WS$%fqn?y%!qgN3GeDITHBwy(9do0?j_6c(lNW-@0hw z>Hd`_qi)6g3$cM7%inNCSi^!6Rhra{Bt>GdSnUOB&>p`VZPo#8Q74G;^vQ`a-G>+jGBk+l@e&p>)lGYxf+vO6s0w!$9%$*Wex(lLhsB z1QORso3WR(fdpu`qZQY?A;9<_7?Jp}j+BpZ#(_G|{(A@)S2=sl0L~;MlIZBv%R920 z=PU-g;F?2+E;o7=H7wQsHUoaQ%pe;XX1PcEEuMky-EU3C;<$FR6I#*u5g`J|_bhb# zV8TIag5q_;rkxMsIw;rNx&+~0E?@mE#lz?E$ikF>TZMsX7EliP%3ORdQ%jnw-aHTC zbwIvWb&m6iEo8U?hJeH3Y&j*s-BbrR*%xtUdiT8QGP72ht_FnG8>70&U((*qWpu97(uxlpJecMdos>}}b@B8n z7Me>K_Cdy1O`Yvw2aP-M`;ou*l7rCr8t|(L72p*Q$e(lY z_DEyLI7>7~;z}QTynjwP?=b8c@yDEuee8?E5zF5QzE81CxUy0Yc(?-_4fp^hQIi_f zvqN-hKsQoJ?I-4lotaf;Oou|L+H!<4w(+NB#d0=aNy9dV6AJ0XIE;*3&RQWr-V)d1 zfB%5i^y=tg_~SDcp)Q{_<~n#2I-Pr^GT2EdaoNM5y3Txfg8xTYZr-WMs8jo!?lS@K zN_wT%C?xbnw1;D09-)tF4*I)C5iggnJP>Ox)r>orkj+hd7Ohl6U-MeX18qnPp=ZGC z--rhXzK;qbqM{T}-oq0b`&M&Bou(x719@aTe0*C@eUGyJ@q@%GcM5sc7y$vfu@o0d zczfbvW9Ee;^6S&)U3#i)ngsWgK0v;%bb$o?48>);@wJ2mmAb+0Drnmj+GkUS+Oy5l8jdVBhp!zuzAK1?_iniI# zrLt>-;OOz}V+3TYS)mQcUYpNCjTeu<%id>z$18CrHcP;#SE@wl#i4ol;$*@JPhsq6 zMT`y7e51_>Z?waVB64RFprN0yM(1>2U#p5l#=`g=+N$$4f>vt_zqvCWC#3)>W;0;^ zWWkDFQ^0?|n6ZMk3t$7&v`(YNe-A{K69HLrT5coG)T|Bdh}jWtNZ!;HQMOeL=COVLbi ze0~@dewoc}7B8%nub074*E)tS-bRsHQ+aW3MN3s;xy|)Z9(!I;1o6dz zX&7iTJ+9A!T(jgSSIb(QNHktbmlK3P3Wh$}l1>t7lRqS5VA(U@yt!ieHXg#iW;`&h zH$%10B{2Pn46m0{OuL`MSGQ?TgM!d2sDDMKCojcEdQlmiZg4H!ph>M50=M}kb#HFl z-NZR>o1r&Re?5A&9Z9Go`1w1)HXq5D-PhXnDKf1%W=94g#-S~JfgXW**e09kEFv!m z;UNmsPrWdFg-v1avHzv+Ng)k3P~Hp=^fq!oyZGaMWm&=TnVO%f7wD$GRF%3LMU<>9 z_{A)>2}sA^2LT5Mzq(FPmL%qMB$R@1gDGaH>Gl>j!hNgx93jVNW=IYi{9T2lex7HM z3tCmWsEPx5eTynZ{bBUY<(-?I`gEi^Kh?JYLdlYGOO2Ar{X2+wq*;lfVEpzjBNcjd zpxYl%w`HuZ*F{NH(0Tqk#HcS_JiWH(-)$75+F~$SX&i~~B<9)R@rsV_BSO1*u8R{b zfmeKdqv`$XiXlf5MBeOCScw?Uf$;5DZVDMJd)5&(@%Fuc81dzF2=3uu(#4b-RHYVn zb7)hab@^y!3r&mvM-)O7xvME>TyQq2`)Ruh0da22^+-FaM#yc-y~&HjIU3;6-~a%Q zn$nCCJ$K6aZW$vYXt3*(;0_59o>%V)wWLIE8D9KXf=rTX70b|p`M@vQ8_my*;xAPW zgXh(hzo@;W7z_FsH^k<{a$9Wdbco-}wd>6riJ~WjY|N6e+w}JfyFW_Y&ZY zwMr7?9`(adjH!A_u+zoe^C!@tiuGx%4UbSt8fs;+NsXD1KhVdY)no|A%6!3s`0v?*vNTW5Z|6Y52BRM+yC z{D^^4<7{P9ZsWkhN-s0wpa`ZN##PXNwT&8JOB;->(h~K>mvHro3S!U zt4(I!+sK}ol57nbBKX|diTgK()Eb7b7_=Q^iZFrG-meaFx^~GE^CeZkIk%WrLJQ_z zdrZ z8O*gg%PJ^Hw~52Qrq0?#VFD-y46J--$;Ekv0a~`;@QtP|DL-6TE9%zJA!0Ttjp^X( z%gp?7aWP#}!AuoBUY84E6DNy9m`t3K&iQ_myU6YDLTq+z3~Q`mc7TzavyDRu_cig< z-xHdSzHzP$WX^i|ewDsy`p%u^2yOv+4Zn={Wct+)344?kpuo5ldYR{Q+Qtp`7hs;O z@_c_dUWuVD6M-nwv@bH$#Eq{xYGzlr6WB5g0{1Nj{<5w=tx7HgZY!n7GA?ZZ>URt7 zpNgxBT&NvsF}9(J;(^ll{`8JgeSgiL2y?Rt-rYB z7j0!k_o3_^X566o>Egi2JX2)!(`4-L3M8tI+oromuq(N;LdW7s0$V$H{9t0fR55AkoXDHMt?Ut=K=vbQ`Cd5d_6 zUWR(5@8l?xB~1rjFVd77iEv*!273Bu-s|*Y<3b=$NqAKhah_}J)!ONcQ2aQ@MihN{ z7pQuO>Ph83s+>YuEc5$Y)7nXqEz)2I%32@@g4w@;`a( z|9EaaKX4zB#-7Vx=HOp%w04rNS~A;c(oet#^CgCl{E!t)iANQNeb#+Y=u8e0y0UHf zclVwU#QS4GKd{IZh?z9FI`syqUg#ln*q*H|BH%y}iXKW)bri^2Dv1Y;kH?}AAc8|v z8>!J;7+#fE`GE2h;ZLoZ5Q5l@(`3YfsRoGI<5Wy6)^pF8>i9qE9dHJ?s+Bz39}%@L zfj7Z)d>_sLH6?OwE=Y#H)pVINzW)}r(}#M(z%G?N(84sW-EXM{9CpB9$Z8^(Tq&B2@K1CVOh4TpzLBW7I(4aCdpOrqa3K<4 zoW%xMCC6>lvwb)WJ>Gc#bK(4Fj$b=cTu(J|Tf1I>uxE1EtD4V4 zGB<}tfykWWNcp7OksWvuVRBGSz&7853vdvN`+I5;n*JxnAhxg-?dipl2=Ep$Fkm%bU} z82|n|9Umb4%jb2*V~_0A1&yLjjC#uqA=|JJQuNT}kL=lN>N|6{G0#m*hbN7>4u1My zaRtYc-1db2v%Aw{ZW05mAOITVIV)ES;7IJeNnXpO)vs_9C0A_ihEd71TGm39ZwQGc zn|;>qSC#FE0ff!Fqn+Pz2kl+BUjpThv!UG#! z4myipcE|s(an_d$Oud0$2i=+$=>@Xv^cehZ+%xLV@)@4MD$c6qpG%C zFQ(S8@(fZICtSuqI8EyiFjg(E(1aIKFx><@)ZJMFbCL2>NpsjFQ!Rm-_5m7$K`#r# zau%3)%ksXpQll|I@s>!o{3qC0LU-lVX%qAKLhzAOU#i97Ta1oXc}&U-P1(z;Zqp?0 zGJo4qECLG>xeA?69sBmP9w+h4v_FEr0rIB;6_prrn$yGwndgks-TaqJkH7P1Q@O7} z;IjDybknkGzdKefSbMlW`?iVTL-c?^8RJ1VbIN6ZhSo64UV~MbX-w4i0%TB10FAQ) z1OLfZE`Jq!Jp|1MRZH-2OY5|lO@?YD07hx zbePdxG>+`3fl5h!C_u;oelT!Vy*LtXkp2+hSlMe%Xz@BMY3trlkq5I^AZ@*S zU|aPn<&uPr)(D#;1)Sm73EM~f?upss9@H_GFD8dt4U~4$#v1#qjW1}mF&?qw_@|^63WT9_RhCLz;UKuq2f(xoRoTUR?ms* zn%Ak3xt9`uk&Z=vpNM2|Eeu)p>G+ctd;9z0N}O5$w?;=L4e)GX#sXJP ze&2xR8Moq)CLpB3au!`@Dc?SUdI4;j@Wp>Aw|x0m%~+p6Eud5X6t zOn*mX7Tvf+MaUcmz4Cmho|la9#Q(CYrc+4>;xQ#ZmODC7&`*_=eow$a)LQS@7eo9$shf0~0 zWzYSJ%2E&i^is&Ou^4yd67P#eDSz~aEFyYyeWD0b;k3oYNQi=@e_6^%K7t>?tHMni zBCBz3=C{SrTdF3$k16=`y^(V%d2tMxBAZCjkM*ppKq!TI=ja`F$t^KEf?2s9D9;M6 z0gC(9VawwXcq(U$6oBdX2R4i9dOC{f+$u9Ay%AK0bBl%wJKOAJqAd9Sn4`aWqZcsz zoK4sD3z}Q1Uco;*ov1ZWud_3OCKk(R;||}KuH_?xiYS|Q=v4RXh#oW*Oyq}Ki>6i# z^cFflzXr<>{vhg4mwup{Gjnp?>rO;asudUU+c0Q*hm#8bEgY(96*tL_5I;KDAeVNL zFpXUdBg%1&`@|}KKKzgT7$<0pJwhFh%?}cx3jjSd-8{Qi8vL7~e5cu`vvXs*qF3uF zErB6W${_fncU|MjM_+~ zCRpo63>7BoW;rRMMMsQRaNT+$eG`YgYlYc4Rm$69OzobOTYLN5S~x#L94Wq8+mzeWTza-) zlvph$_)d;>0;II-lc97W}EY1`NMq&_X&U7pTgfwdjr4=Y^#F=#~Bxblzl zmcAgV%XCY!oJRr$;Df*bz`4JYW7EeXgktik4*umx zvxZA~^P03IG0a&7Gxc>r2w^X2Md9}Q6NV5<;$k-wR-eTysvE*O(+JP`P&X0o7vZN0+4lel2Aa6ZIkCUZ{Mi2)fY0xDCjCm9&Zo1=LmZ~Sqmr>M8Ybv11){aT|g z4;#iOW!Fn4*w|x|@IECI=+{5ZUF8#UVfYjc#^6eQ%T7w|>0bZ#f|2ExtWIJnkUPV? z3UnsrLTdP>_~K|S7^Q}7jotluEIxP|c^*A;bgDF1$u?B-;{!5voLx|Cq-4vcj1h;YWKyEv3QV$o_*ivQe z^JBb7&R;9atABZUY>m{<6Et~I-eg*a z6M5(2PAz5;D^}`1DzT_fA4bw$oD8*`;((|NPhh+(nOHNnu|aP_PG6^~fCDcZ4meyT zrtxK?^JK!$@A0b%d;_;^@&b@5vc&9;@d5G;fc1xT;7d;fytyrOB&pg6!vKd^&ESrF zxQqG0XA+(`sL{wS;B?aqhtPdtwcw@C3Imbn6D13wO&QOVw%)KA%OII8hri&^au@#U z#v|Of`u)~w`L#*OjN(h}nM&f|D3Fsb;*jXin*fX!2eZuhkWfIty)oOoeb{u*q8qn9 zdsUSD?t~^5cR#yEI)@60Z0>gl;(hHr;*-nC8f6u)W83z()=+6h{PXU-4dhqIiuV{^Vms4Z;e} zoj_A}nmOZ9pkZ8qNSiUae%b1Eq5rF&n)a6(`ySg znoQk&U&n- zz3u0}RYsTUHfOls*XFTx_M&%Wkl!(y&9RHS#tAiy*)=*`K17h>0K>22tE~niAsRi! zoi>t}?BR)m9_cc;!hKbs{Iw`|s$j2PJ1Q;{7)c6Lb+o7pTZY_5xE=@9w2E>uRoWoh z4wO>Hb<2i9f&c>#^l3{QPU6i5tmdZrnPc{7N!w{>zIh>NuYg`{AUt#Cc-#7vz~^yL za%B#O0#;s=Yf~bHz`zMNDTT9oBc3GjskvdLmsax$y40II%nU$Yk&(qf%|GeBi{|b7 z!Q!s{%mRO%JQ$pd9+R@Z{P}pKkIhELKQZSz3c^_Zv}4m~;!q{Md}^f1YZcU_t34`- zKj;p;2y3g4-jG^$V~4dsm%O>@XC{BOv3M)1*0|+gL3r>NW8~&If|hyN>GG)p?e#Gd zfpJ&;dm6MPOqozQ+~9n7P)EzGKPs+&>QP`mX)sJhx*9N*LT2RZXg18T1BlkUkY2{x z3rmR;Nr|&dR-=1^xg~z_KP}mTdHCmYqzsq5)6$vIHGjW$bPsDPsBSzsrqw!hmGQf! zH<%q)d1X}RH|;QY6>Vf))=m6V*=%IxqA7mVQ3-KQsPSfTQOEKw>_>kW+lZr~w)3ia14g<=!-lxSsDxbMQx6%wHmU*EM&#nfSOgk?7)37Hh74LTdFm)gY1E4uvF#}$M zCnKrfUK|-oVvn$pNR!X(&%&DRG(j{(!KK5{w2KG5c1P|sdifsz{Ujf)cL^Xp)nW4r zT_zwwgDc~EA@xYiClNxeXtL;DJr_PCS9-7KfTtJ`iuRMmwl}8-+gII*<#%u^Iay@g z12UI#n<67e$Zn34ukQixcKK272}vnWwelb4%%8-eG~^;cr(kkC7173tI&E`qOf2PR@ZiouiL ztJdrmPxHfbV*0pB;Nz<`%!L5bCjJZ1pHz3UT@B1!%JNbw9p2=l(;Zqb^ZHONt!CchoaBm}5Jby$4)237m-eLA%`zYf{WX zQ-)@Fbqd=6LaW006TN80t~H7k{~=>2Cz#JrMk$gq2Jn0+Q>`>Q{#nXO|0wOwRq5Xb zt6dp%@CJm-gvp#Z$Ae-suho`_>kVK)&dYG~BV16BoUt1?XSc?8XJSN{P(5-2lTQT@ zB&sz-XpPYO7Qtr^O)GfoBc{xi>XK&;HK}a!2|V$SI=8BIXekk(W_0gbCFowERV_o$ z>K>p~^=G=xZ}#@0Ze zIx69pLhY5UWsTw#e4@y7I)DO6Dt~U%qyEI(x%Zi4UhfwbCr^T;ZYHcds0$k;-9t9! zO-%&vkwTm^#Yv0gIS@GLn+$_mo1_}vy!x2kJ!y4?Q3r=I6daBY-*pBxB{3zhK>#7M z{z4=2-(%(9KQ{Wnv7$8>Ob6(GeAOV0$AJ?YKUL#5&v!bNN^LhPyH3Q3+;Gl3=XuMPi1c2?@)XCWJG2=MQk>0 zf6iqHrkPU)waco6j5cz6u1_=$mt+->P%3ElF^jqths8`t=MA10y0uGQE>cG6-JH9Q zf&G8U-X?BFbj&oi0Xw=+hLsV3RjHbislu)xQ>k@Q>wls=v_-XfD!$NFp}^FA6o72W zHz=7g^7!FcqGMr@klN}_OE+keszF1XA~@AIec0LuEAjL|>qsSyAZByZdZ4w%;^+fd z_rb|49VOlE(Z;?(sopSwlHVXddGAYYZ8eaAU)RO&h+DwFGtSuwZ_nh!p(S^2IK_J zv?IBMaa6!R5VS=wYv9J-GfuD22t7Uj@v^$ln^GG?$_mHB9Xb0^4R@I9Ok0L(g@JSxKV-gHaHRS2Le$YEZ+FS zNmO~=Uxzf{Q;yYRv)2BYiL+iYSaBcC1nR+T)+DhHt$C z{j%jv_9c^NzB$Kx6_OMf;~t8$H6QQHnZVPiX%%@ zdu_5T0BhA>vi;@!V&Nuf+T=emZg?wbbHEi?FVL$Sjfzx9U_a-)e$9Y9e4u$-q=3a$ zJ3C1Y*Xev9OpyIHWbA2-M~fqM*G-OBe7hQfjw^;OJtdcxvk0qNr@uC%pO>s}8KiR~ z7BM|a_8kBbAC-v+4z?L&N!hrSp??7;!%=XAE^ z;{uP-N>(or!_aH$0gL?TM08iF9?MV?NaNbb_SE{kP-o{KGq0A__KzQckkJkKOt|0+ zUTjq8f5<7rVO4ZrdaoQnqGl3t4d?3q6)00l^1w0fw&EeioRy&vCh&{|FKRRuDROR7=?0SaUKP zr0T=rrR$rmiJ*JL3bfO@(`JntcO*pHJxXz|Y99!1j`8=R&jTtL|*fBp%? zJQR7t5hvMPEPKX2Bld;cQKzqdujM13;{pCtUbnwrJH@n$b0{dQ~W-qGb~pwGR(EaS3?5P>n-_iJuCqYdd1qae2PyH z+ka;24|I9#uWlQ?Wm|y-m1I+SqA}<3MNC(?6Kp$>*mlIpfALLjaEW9K49^l_9{2Aq z$fM14ECCi*S=on>RBcozKDuvGl|Z^xRvYas4da@E8i}@-|qJEVY{%) zv`t$)W9Ac#5a~3Q#*PFs3;|^SicW@3ONe&(y0p#I^^1YVf5P5Ut#~f_-Ce_kt}>ZHr0}ia4KRUjw5M@t@=G76HlL zLd;BCT=B3i0vD<}m|;vJvMp0n8jtBHw`)~>P(~F>l-{i747&gV(RO zJMm2#>P-lfPQZiP-Hdr=86;a1H0o`x8wQhU4o%`tgOJOZf#tloA96&|Cv1N}u56oFG4+E%(0xlTVl5jP8l`?M{jI zWGbasZ!RD_CwTPeM+AS2>Im%w0JGK(DayE+k~#;+H#>uDG*}ab#l4#~M)AD5Z$r0c zn;srL$EJ6TY$hQ2mn09XZh)J<7qL3Ryx+{G&+YoLtw4sCv^mG9ByiQa20?>T>KT*R z6BjS_)yui{L3Vx=+-{M(uqp*!5XkTmnQ9;QmN9I*`lw>t?~a-ID6$v2F!9pqDSD{8 zx6Lf{riBXhYdcxOtaK;{P#m3+D$wwWl=IdTOOl5Xtlp320|rORneQ!KyLO3mgw8Nn zH4?Erg8pc{+t!Xv0B};?-af8^-~}DLo4aIU33^f+Vig^spF5zc@FJf?b+K1`Q?W*Q zzpcc^cTvK5;<#v~6q0GFtH=+bNo=C>rAOXbi17m2aYWfGuD3Ls$@>T;JM>em106d$ zv5h#u@B3vmX8T;|b7r*`9)cu3f7y1+MdmW2 zr7kt^K}Tl*4t4s1%r~|yL67wwpaxxi*HSn%$QuXDL$i<-Xm2*D<@!<&Mt658=}cyx zoDbtOo<9UgTB8yTe0mM0CyE8f5(_*!`}uKy5{(1hcQUXL1nt;HQ~I4uiKkS@*GrGW;7|EVGhPRonhk*7DtksLanNr?T@?dNx6EzqkN85HWXbLfXyXF9t zz3EYD(mJyZz8!3HVO!3G?Ygd<%>*B6yqM2Z-m*Ib6USO<^d}ZbniXU3lbiURhOPLV zB2m#k%wpQeOo%*5#iyX=G`5s=d{SQWo@1^!`=mLK%>3MQy!QW;ZY#9FVec~RabMq?-5vD&$K6DOboiLya8M3Ne0@DUGs-eCWFfXb_2fSpc^X zR8O2Wxr3!kYv&3r#^9mor%LQ2XGd__?`K7^>^h0V~aQ<8GF2*-fLYS@!+6H6o@q*nWjSqftELL1sPekovp@79Y$!+O0 zokR*$vHk|;{*+xA`)XZNklS}zGALcp7%x@Nj4%JJcBx{!6$vD~{$IWneY199D9mDM zwzewh0@@_eJ#UuVt@LOff71c#HmL0A9DK*FB?r?LUCx#xS-?h<0*MywL9Fz|7U$Ll z1I7~A*#nK~f7^9e1u&&a*qpq|31v?IuG{v){}|DhULMuQ{Z{14-lR4apXi26KRE+r z>3(fBS3r|Rv76ig__&?wP23{8cSBH+oT`9*sd-#c z&BcTdr6yw97L=#0T6i0{hf)=@b?m6l2g#F)hlayPoT$P2Hc&_KxsfI`(E>-ECoGgJ?5~e9hkX_*p?sIuHX@6h|IK_@ceR;or;E(U<@wT1_SR8sra_} zG*cag89_XGg&2&NGQYVHm=H>17jt|Y*g{Z>3enl80>oHFE5!@!wuqxRc%4qbh*yyczMH#kUA_z%!jkAm~!RKlO%47EcgwB9haMI)b|o z1UX^NURr*sZf!=j?pPxRtre&mh-f>IaVy*tKI;QmO1YMJr{u;En83;p1WhCsxWYZK z?8NgC@|(W9TRMr}b6Y^lYM$1hnitF>^@Q#hCJbg0qr0a!G(Cy68MDhANgnVrM_7{2 z6hGwlLhR0_I1WQ~I%CO*n80t78M=62g4t59f-5JqZ_Apg0gp~wYhgXc)F)&%eYjutlky#b9%veR#bCB~&gRafQsKVyG8}4K^Iv z@X(+Zt)Y>Pf*y~I+R^JIM7g!J_7?DrC7rCTyp^)}UG{Vr?Yrhs(h;UkU4;xle14hU z<0<8;HP(8%h&T(tXzmkOL3Mh)5&*@DUY0`?E~hw@edIX+rs9K1xKs{gOeR%kxSi~3 zzH;e`+yJFKwUJYWF1#43pzLbbsNCj5g3C}K^V9R&*A8U3^`GyDoM|pMq!!}G`huZ< zfuWi}H`m{ESE*DXT)3B3Wm0KT*pc53Z&Sw5?I@anBgHlVQ1YxD7)eCu9|)SGR)B@X zt6)s>^_}m28V#N`9Mi{6MxD`8y`$twb@e!V90La)KS@YEiHJrIawZC08K`v4B)N8u z>3tzLH8spM5_!2LH3If6C#`0z2Z=5$-~r94(I@nZyH-kdC+`t@#P9t%j-sVOlv8Ra zT$ZOX`ej%I-p%4oY+?vnn96}F$yt17LNo~G5#%Cm2I`tuYxuSLE)@ z)?n{K%jlGw@|1Hf`(zCB4Upi1=vHVJF(u8?CbkV2JdX@R%hSA<6VETp=)v@6H{OMV z{s1omf1Bm7#!Gcb%r&pzT+;VmVs9RUBUCg6) z!2O-+gqm@;-!bBc;iEPqBIDlaS z&@zX4H2iTcGD(0|_QYLGy_8zkElh<6l2#K(?=Wixf>-G9MA|-yMqG2p&QM4Nv`R)Y zh6M5PT!z|G^28RxUX_1~0tCrHB}R@Ia+B^V=XSloZch%Q@EJX(_KMj=KTf)zx4hQ= zs$8yU8)i03AXwS@vw;-(cqVs^R-DFG~zXgq(rC8`%GI4_2*p>@19F|UtOufvEl%y+ayMJ^q zy=YFsbXYGc&|?LvoDH8qPA19qX*;_6(@;#-&}abEkr=3Sk4*@0?BMBhp~?M>0S6^4 z7yxx{fTt7H1a6Ynf^s&YfD8%kMMQVOeJiDLsYU9!N~^KDD_G>@A{$|W zLf?g4Op2lh$LpihliYteB`vPDxbns*4te&&wU7w+H?)42h@_^a=eFMGHCFe`?U)JF zc!bko=rkoDK}QB=K!LEL#tKgWdEoJm^A5mVM^OCxiG88>_gtW`%YT64=vxAjGS5J9 z)%YZnAlksng-F%IoU;{wt6X-4G)%29Org?&!uRWHFl2IP^L{>d`xOM zb5%4$##KGA@ug`5{fMB~?>*hu5CjJ)Wo1bGO924)Yk3zm@6uaXg}ei`uLPjf#Voc{ ziz+X0_=E_%*vl9D7BT69+={?I7Akmc;3g!g}{4lWZ3zdrZtmT<_ z9fwLs5R}>Dn8@}Qp|jpWH?89I-bT~ky3z_sznz^Fw6&Q_)$B|uoa?Pt?r6V$4Xp{K z6ZO-GlMsHqL|36^3x8gG$K{V92B2==P`FGyE`#;kKnRsXoW`ffoZzTKVoG!v7HRz^ zeh1hXDVXede5m|#GY5T^tt`6Lap`DIq3DoKDT_F|V-4#@Mt)poCJZwpYJq3*mRfkJ0kxBjsYRR9Zmc2mjv;DL|_2o zZtQk_&$T3vJ*vqMz5unT*Vkm6IeH3wr>Ta{bFP?s;ELGZeXy6%PP`B*k*Z|#nYdc?0NdSdq`Ued!^ zD?O7(?;Kf?Jc3360v$qCqXbud9+uG6H>ZQ7l0lMcvG~iZ&Ro-*5X6bi?mn%3!(fJ5~lBoTfu z=6wz0;L7;^g{ng=8A^4z5XA^1G_2TrEUA$4wAL0*W5sHn4+wvk79a3eW(;VpHff$y zHYI>@4no}#wmP?2AjDAo7MiH}i6aOIi%aSp5cnPBvN`IX^QRKxSjT};TL2}K_YbPy zNNl8gKM8%h&IA61HHz7|auNSQnOg}%VyHc(5;#E`WmrKPRk7_~eM zH{BLCq2@=N+8Q<)?g)MS=C8*a;86RT;7~P$U?*UpsiHntQGU&WX0t7hGhVjP6e4( zPeoBhTxt4AFI{E{LUGs&EHI;@pS*RpAgBpiu)k=OMmO+Ra$!G3a z=6E-3ETDJT6YN7=d~9+7=sI@9N+y3^nU%7k3_235)oMlrXL5PaiNF9cKtLMBAX~FL zKHBvT9^6+mWof#0?ct&sG*v&xp|HarP;nXs;S1^e+uJ`3*WfSi6#l>m=6A`v{}uZF z)=3H~71dBxS{G{Kh-biB>b_b9!c0gmSYjV8?T|lGT6-rUh$lma_lbY^nqDK@p;_MZ zIm^LiKWR-KoMO&U@tHs`uTx8$PzRbHi5*2E6RQ(=PwLTZI3XC+wjQhiDb$8xakjnG ziHMEdcF4>NXMZb@R6EeTL~=QD$Vrg??LY!d0vMoJVX3!z++5&qI>=bC4_XowRFoB} zRi}hTP!@g7AO(?2WN_!%s3hX`t1qs1uu(uhE)Z2I1EB zR*7%wWxWk*cGc17;XoOtJC}mXP!Jy~uOnnKn(?(Y6s!jm3kw*ANMC$D_BW{2&C@`- zz9?%ItC|O7`z;!ei)aEOYi;L4X}?>^v+Q zYkfJ<`FkW`@n@`udwEm4Ao-KhIMcU>!HITtqFAo7n^v?yP|i`JtBPdpDY10q1zw4! zz&J3wZ^&AojMTAH#5e}aA9c8yx9PkK1!Ve{>JB1g!OlISNW5oGgA_m_m(?2Qoj(!9 zy6u${v-^M0w*XD+L)M*5Z}z_a0u<#xMkVeF$2}qBq~SvEC9@soiHg&8xkMBU>zBaa z9H=@)<{O_q&(x^PuGMgaF&$&haD?zK>T>5bDk;<#m(v%hJ&cYQkMTMdqC6*U6NKng zZE{zGk!1e#Ydp#$*hT%%7RCs1wsgg#jdzcGaCPB_;0F2t2m0j(*=nUpN{Zd1Lk*y@$-xNaB)__Nn5GIP+0SBGP#boI3|3;8 zl5TG{%>u_E=JuFPUrttFXYI~ETN&44-&U@pLzBo*#F@jlshNBmn zF2@o`yB;XT*jJbx$%_5Xszd|RuC{a4T@S6W-A9b|$C$dWSdJV^&7QHhfhUS?D>Fw~ zDwUZ!lFvtZ5a*Ku8mtPiSbvTCL4Jw=lJdyGThQjp-Fezh5!oQLC80=MaH2pCoX{>n z7ZD4&r4Huqe^FlF)uZc|2s7^2o?zNUUc}qwsI)4us@dP%19UxB^_97E#_XsW_#zPd zI%I-EC@A0AIT4i^nKlo$kpKhKe&WOQSvCS_Sk+YA%8iAkvDxzDncGD9JAl><8}^2T zuLIOsI|y)tKu{$Sez%;P<+*<9G_?D+vPLmYq{g(-W)}4DU>uF;+uX*V=ginI2;szSGjcO7gqNfvW^Q$T&|3>< z^J%$tuhp4?)f6SvIOU>fymgSOZdQI)qUsW`1M8zcDg^oxBf^G3EGG$E1_{2l(FTEh z9fTLvr`Io^4e?D9$?d;UH_`TAj#lK@72XOTNB{K-r8dfW&;>58sKJ?W465QMdD(UT zvKV7L;pYKmD$~$QlMLrblm*^O;#>&mHxFhfY2MJF#))qiTmNx^yzx9n59aGyzE)IV zk{o#;8BcwFPNi_+FOJ+4bCCn#7s0-SbSomx$Uc|&BC$k2AQW+*7{{GDWsGxfOL?3@ z6%TE?f}}9wTFcdyQ|1do$Nfm*Mmm_8`2A*Y{{w9Mc4|F(=feTwx6aTpSrO1nCGeNK zFoHD+*jll+N0nS0JguLoL_nt~>W?!K;|Cu|+=x;5VBO+L7a5t*|Htr%p$O%pCR2R9 zytM+DRoPX!%9g|i7nQh;#lQgz@tywdJ=sq(*Rs9UDcDlbPxe+tWI*;tbl|0` zvlopco^oNE7{q&&@5ua`CS5aDQA(kPpqXj!Sw8GPzd*=QZDV<8b*unt^;s;vF}5nh!_=$4_ks!}EMxD@#5-{yuJ)s$e=J(1GgcYDz;A%<8|wIqyt zMl6$tRJfq!wgDms%;rfu8M`J$iD|WkfQhzSk{@N(8mtC>?1k{OqQg^j)EbhNi74zV z0u^_07WR36S027mxps+RP9_abvYWAQfdg0og~Pi*B;$!#x1+?0htToR99jH^#DQ93O>J{$k;I37==j^mqlXAGAl0tX zwy*lNq|$!C5We#g^x&J>n1q@eCX(qOOap_A~XVUtlU z$y`E^61N|nKuxYCaBvBtDI_UL?Z*2L7b=Wu6+xRlX{%4SiRQ$7Ed*z1^xQUZ4GYHg zt&p|#NAO?3d3W@(XH>z|@ub$W6!-M;{PBA!$S&mfk+&_ebe+}L@B32h;A~S#e3Lg` z2a?WzEE}C<4aEl8o}Rh4#2v}d zE|#bHVDgiy8xERVnsm9^B%rj~KlBl4%pM_6rZmPA5`@#i>zIO5I!KLwvXzAxQ-S>N zPELZTgqM0pVi_sdO|Kj`xvuh^N@?_%b1Aah;CcE^}J=!+s zQj-WQb3_*Z{@=cAFeFtlZN>k}Bb->M^-V@ZCH)x`ni8buF@Hb{sXDylq{m_sOk9l_sxhEh_5pp+S z&-`s|!aRAQR)m(yrU1tb8H9v`H-6oUvBoH1iHs(Hbf9Kmz7!xj{N6mLZWDB2r+JMC%Dl(-rx_e}lp^Q>J~8U|YMz zL>`Qc#3vj3c3&sXTA!{fkl-nK<8`C%qg*|KpY%e`Ryil;Mn&llI(dZ5Xg}++o;9t- zm2bd7fk>br(qw);xDrN#!6UfVlv5v%w2*o`q57R3*e2f3S0)Dn&LOt=ix(-&=|X!z zSo2a_w8n1ByYgUSoY#r!H}pehj7YIN1zWj7N}#7L+d$G6|GiHPEMt$@>v+8-@@RY4 zw=Q`*u!3|Az=_plrIJbw>@l6+iU<#~+4QWXV1T-!^+qx;Pbr%8+r|a#QI#(an}~sd z^)iL9AHwpuvWykdS)sxAWRtJ!VmXc& zZr&%%ypFGMMBU>R{&$rIz3_Hk>m$VQh|qIzX>AfHI%tJQswHCEp%^pmE=Mf^>o-4J zUKFk0Hu!dklGax*0MG06bCD83qI6@oSIQK*Zz_5wP?FK!R-em3i}gKJ{NczPCpTKu zzM^Q#I%?S-$q$lO9QcJsnt4gX2Vdy_%M7x#z<1n)?Y4ptVe_e%!-GiBf0f-(EM8^i z6XG_Tv95j9wS%pfzUE?7(j8K3|46qT%UOfvfxtYbhP^hcy=Mu_h!U|Wo5p+| zQt!n`IFj!$ATE7!ae1iInLjDqszf<*qNhU`qK%u}-OP2k1f#@H2iY-(5U%$r(KlVI zl!?;FpE}3QA-Hof&FUM+XX={g@z^$62!R~NI8X#V{u3O#S$YJ1#|Y-sb1ozgX}Y9# zXl6!^tQRE9p0F#%+}xUqSL_AsYs_m+3(nR>o!@Q*Wa{`6$-i6d{!6aR(-fsuTVub= z^8}Y%bIiGztA+ShlS!sId)5KrlP2gK-hp%sm=fMdgz0rBGNrdzZqi6Jql47WL|U!q?gL z#UHf8)7r?&alBtK-Pw|^UpxHMyv|aV6dWlh4`;V#^qoAN$Fz5^_id4s(SZOalzd3LuVLMC^0OqfUBG>OK%$*My4{qnG{{GIkKW535cmZCqm}YHoY5 z@ZAV!by{N&nvwTUfK~i`vAoDQh+3?>EEM_-ewYaAbPljbz|A>&Z5yOG6%tN+lv$83 zsBc*}d~TPIP_Z&^)TzwLD3TTkE(CBxihR;^n!SE2UZ zHy12beY%6#G*ka)ch-YjZa6lAZLGb8iGiw`xBvhE0000000000000000000000000 K000000002=l#IUs literal 0 HcmV?d00001 diff --git a/apps/projection/src/assets/img/teacher.png b/apps/projection/src/assets/img/teacher.png new file mode 100644 index 0000000000000000000000000000000000000000..b29c74d25e03f8a6ff354f1e3e8cfc956a3d314b GIT binary patch literal 90137 zcmZ^KWmr|;)Apvj1O({@X{9@*L^`CA?(ROIlypkBlz^0UgLHS7NO$LXH~#+5#}}@P zL+vwb&CHs)XXajEN(#~#s6?m$0AR?(dPJ^y4b_CX8)Dx=XJ zJ|TcVQy9yrd;kD1Isgdx3;=iFuL5=ez?B^U_6z}l{~G`hIHWf!3xa<@Go)j4h7*|NG(r6R8Hl z7AN817<)P?B*jMg3@auI7$R6f(kG$Q)i?+q#nFj>FIo8}&<+nz_T=rB zjcS1?7a$=@8RK2wN}SL5d+eWSv8QVnv zE{MU5K(wse27O3?F#ya-F@^tcOD7WiYv_hBBg#gKZt`gX6%dH<#|p7_&vs4GhLHWs zk6EZ|EZJ$gcmLDDI(Z-@Ex?y?Ct(3%4`F7jP-Ss|JwZ{*%T<7m@A?oXvq6NwUWO3j^bcYlE1 zRl;ia+0y*)z4o|YZLb`+PEkG*nJ4)wHevJbNRvYSkMJClmlU3rabiYP47)BJ2$7_C z8QQ@YP89BJRlk0c1y$!7X<1|8#ZA+~bfQ ze0V6#cQ|U_2f+&X75B|+Ylsd+`n2^BdASEh7u|MP1f^ z7G=Q=aBe(>6*+FN{i7P>9Nf;*7Y7ls3?SHAXos=Mz0`q=f*UBn)VVDFonoT)-`*VY z9vu{P$`ddpOGN}6>=1Zh%`@Ts4<6bmXFFDf34Z00*?0OUE7b3uX9`aIJDZ$WZDXjjl`l|CISavR!wBHe@36^!VfSt2$LQtSUG$K0sWIzVqi z`D6|g&H%O$mX5qRld~OZVnq5;cP5Y@9o{dl(P?+v*>mc@1MF`Gl*3}mY>QSZ(w@9_ z7+AkLK^T4CM0Q@iF0#k=;v?hbpR;IunfTt;e|taS;a{UlzmI?4D=L&F!8<#2eZFD6 zZ)w^4(if4u;AtbkRz<|_UXUr;|DRdb6{TR(3aGR1My1xI((^i2HuNp)xIaiIkF?#3 zAl#UXEByCw<}Vx+xRT2rn)fG>eZD$}1*8hFZV%SF>Spm%?66%DpxGpPo%WfhKk)ur zg|=lrswDBQJGdQ{?$N4iP~YUEF~$a9!BFmB{e&i@ue`BaGZ6ZO^Ud5;!M zR&JCoj1ZQ)LcU%U^t@+%1nO3d7R?5yL{*>Z!FzJjv#!uw8#x+~$P3rx8`A;%?+x0% z!yUmA{V`qL78!&%E1O*iZ8@0BE#$anG44JvUG1(z?j_LB;WE1$&VvM!`~JYO!KR#T zDn8qwx6?7oNN#zsmsq5(@pMH-*oV!G$w8mn5OKt$;$MX9 z?9D(-7#wUd@ZW>XVj%@C^?Y_7Zk(#~X}&zK{d$Z-I+BjrwxOF=5$v2E;{58{v;LYx zf9&J3d}?oi-my3hhjyhx>>ZB0TjzU5^G5^FnhU6Evn{ui~_?N`H35l zh;FV5sgladV@eBZ34#!-Cg66z;Y&6}h=SjRA#-69<l>>svQYTUUGaAQRc)`MMwF)98T_M@G+y^A+F{h!mq0-b|BaI0_<`HbB-ybe)v z!f?!v9oNekf?F8$WF$pf1Fy$*-_VBNSit?BBjn^iTxIHo(OmkKXzwS;pect|PzcX{ z`k62oGt^L~%^{aMve#XV-|*_;1(~lSn~wVoqo;u+Y+~8NH6<7$g3816$83-SoE`q6 z<2*@*}JuJhR1Co5=0S<#+XS*}WQ~a$%-a9oBGKDz)v0mNilI z97^ej`>jL`udJUDRj8%9l+rlFwtt!@algHNlPSC`p?8*XiNUSF>y43CH_PCv4F{R- zy|s^McWr+ZO-Sa-!>>m&uM!Q>oqiTBw`y8|+N~_#*>LUkL+y)24(FPYA?FCZsb}x0 zy#Q=A1mMatoOLs6_23UWSBRo${}Z8V!AXQ3yKccL9aV_<&6Strr=eDZE+urVO_MNs zc|MaTbFVXuI!`u~qv4EP=-URGXey>{=r!+7hC9&Q~( zMW2npn3u?iE$x8Ij=RmNMj18R*Oiea;$WwGWzdOfV83o9T+CD`$#J}Vb+LDGP56bC z0Xy<)E_$NaoX&`|Z}X~x6lx&6KNxt7fP1deG zhy2Zm;P^(ssM+}JhA=>m9~N8%MYV+FVq`}Hvmxu)HQ{LXC`7?ZC~QrXWl6p-Ne{OO+4sHKJ^|7f zJ%jtHl|T)G8C8jZ^n{H4Ly35O7$WbrL*X`8dIRkU?2)=Pq^TCm@JQfrC)HH=45ilL z0;<@BD0O4ng|$aKvNtbLzx`WYUTPHD*Dt5aT-F^63xu^}@y_1S--?}I!?z+_oFU_Z z8Ux|llrx48vM#GSrC>YqQh;;TMYPhc0*!<>()r-N7EL!{)SY{j`2~5l^Sz-9KXl%s zCwum!J<@XMv4s3p@xYdw{CkaqIjAn2|I45Fyvw6Ux400^t?}oCC6_yYr72rouPbUzl6MI!F)*?deR<>X$lu&J6H zvnZ@t5|>T+GU0?)u%$6DzykiwiS{BtFC!|dK-`mT+d95StK(JzmGT| z80w9#`*B{ukv6uY_`NvtGE89dw2Bi_V&(R2!e#^ z|Ev&7Hik|(h3S%V|@=PQ@6+ll8g3$aE=`L4gRj zt3FnlrYB8ZQz}DYGu<=hRrenhN9g_I(gUJ~eUZ^+u-uHz52MLnM5(q_5u&e2C**ye zT=*e>lghSdi7qT6e`}DlF^tubH9*W*vV;;x`uswqA8Hpg*rFYh7x;-W8+z0(k&(z? zS>sEd^#GoYC3?&o1myGIoz}HP!53KD>8iNAzT(X5pH^OV$ta>w2+;;qE4tFjlos2X z^_QT&WMwm7KXYhNMskL#OORkcW7_tq); z0>97aX@gE59SM_N-`&}{Wjd5;Fwopnpr+0 z_+4Ks6U5B?5#!(qn&BU*5W*_s+eCslSVhb=0pm_p4LqA33~F^AsD!&85ELRf90#X& z<%Kw6*C?P3@|#8x>CW1)+v!Q7)x#ZC)A-LKf2?A~R=0_jn-H+?aQR$(BwAi1H!xQx zAc41)r?ap1f?i<8D|Zo$KD3-;Wuu{p=ZzPYHzObsZ{=zhRzoaBYt{b2QW&5>60TSj zb!7Z(sw)ebf&>{pFkq~U97E|c`nU**@#(A>e!!7VZ~zGtxQ9@+XfLj!9JUqN5bI~?GG4aT1WBW3;5EmVDx`Re1X{%)^+pbh zi{^l!r!y5jCd%VAR-B=0)DzsnoE{TFtCt=f4Des@JBs__jMj_`8E42sABDf*eYh>< zH-!6nbz;u-vk-sP9=^4kPgQJMfrxb28Ox1|noIPk@8#YyOTx;sxaUJT<_}%XejX80 zle^J(aU5%e-y_hrXTC;>{4N}~7(;5HgMJ?VY7XdnyKyFG;ancyjqi>jrmE{49eSG} z283TCZ8(mE;{NBR3qE%Au<@AC)GgXAOxR%3r-xmNpEoDwI3p>r(5+9|(W#1@jGgVJ z(eCRt@kUz;Hnfq5h}UT54s8yZjdj!<<^<=v7qCg?Z0LOU?l zXy&r0lMKicz8s*Qr6;=;BPJC{=5;xq&2}le_vm26}r2Nl70W*7%&R=uR9qfF! z(Ov{NWBRwJyf=I~V*B_P4(iiI8qCpEWtGAEHnlEuS57xV`AD1qh25I(_yT@JKnQZs z>?NF`-?zO=aQDb<)jWl#Y)` zny#il)xD>Y-}=|~5ci1rEj>bwx~<*$HNehqCKw|m2xue0L{)?FiFsyY+AIUv*b zp`W$hV|(+vz4>|phrpC~BWqtGXdDTt_}7EM2ydTyoqZw_q){E1EFc08a=jSW$dc8x zD2kHTO*|SN;O74W&prz#CW52uF_E`$@s$@zr#Dg@5JAMZ{p3S4OX8m~8|)uM@Ame2X-Ogw#|cNNf7CqS0-|o940z zj3-h-`aOA20K}(#5~7b(0j2rR>+tx7usvea1Q~As-qm(=aoHYF7uE3#=?M1whP)fS znw?>mgRp-K5{e^TG5QzvSD8ejq&y{U^JsONd(xGcM)9l&WCmiz#RB3A`+jgs|SEX7_#d4RI z?i(>mAh3Si8Fb+^437j8+%Zj6>VjF^J@dt02EhUqSO1XdHm&njF-krisdsX)yU5`7 zFKIWq4JGhgZ>$bLRvlPtpI&V{S)%|RqPz~|4%8!u=bw}7FP3QZ{c1S)Gnj8QtG^5m zdfv9^`Wfi{z1)65Zfn?qbQl(9P%hVwe+PxzQHGGb$PH0@w4;h)^0i{|6P4%6I)B#Al&GI*fVmMo`xTSX+fUd!HZ8e*;I9x~dB+dcH=K%*G4q=W`67aD_)ug~A%xYU&~=Yh_^bFF ztDdDYW5F39ydYZf<~{tD;qN{Z&BUUkx2}2ZFsc9jPNSE`_1`{vr}znV-8==YFyHtA z^idbBqV12Gy&Og6i~NN|8JKzj^IN8+W!4(LXFZE-VR=x0nh#Ti7#0|aC_s^<$`1%u z)?xdEL9mlJ@$vjQ9etm~GuF09aaco4?}sBG$3*w&@iMP{c?O%VMM&RQyX9Nn!kgH8 zWW|QR-g9@2x*3Ai!i3HK=_A8z7V+fYW5?MYw-G$MWuDO zK4&7JPF%Nt|Gb)oqzlmw({{}0FN;58i*83^%%N^R>qjTG*2&BTSRjX2`az`kl{$|8 z-#F(uk1I%&3XbqgbJ1jp6 zK%%3WzQ~-;G#lkkBp?``Ouo-N`Q$qmu<~i>rU+|RHz9XmWM4YE0O#e>mH7{025fh| z_WQFv^~Kg}eH_JJ7w5sfUNom(uR)Eky}rJCoJ+2rB+ep73R#q47B1zFIAkRG63-rG zJA-+HHwUCszyweW5PwAI8>>v-1M}gi!SVQa+u6^JWnex+G9XjZYshS+4Ldqq6m}{e zx4?9FSfCH)X73i|Bkl9${oP5!ro$j9z}FTz?v5qX)$(5Yo(FO zw>WYjeN9tSFK10L%WUH6cg4zIGptME;W6;#0PI@XlZO5zmF>=x{`qja*;`z{9l3Y_HxgdppzR z1xw1kyZL#awK9ChwYQ+cLL<{F9bJfH=r&9(PfoaYb~)ugJ!V1QrlglQkm2j8+c!DU$OtSjzjn`1+os?}B%4Hg?g2 z(Iefhlc2`MrFE6Y?q!0&GwdGa04iWI0@7gWqS`%;5CafB$O)Nj_a9$u$O}RZrNN!L zUE?-=Y_8H(H=VFrA4XDv(SE zy!6!!Tq4K^#Ka6mMiYJre%7ss_L zjo=UkxKH7`#sGKWVNJaTyA-0qIS3`|qe8~~!4>EtAc9w~PS|)V-F%a#{WLd=gyhxZ zy6@1Q%z^2({5ZomIb=`nnxnHyQ-f#<$MRmobNk@Ajo;ZT5Bmfx{Tfbff&(;RujK^p zg5PxI@){eZt9_2vuKX3ZNVZbk=!9{MJCu>!aML&$AWYLoy=Bl+DTjYK*W^rL9`)72 z6Mxs$Vt6I?!G3-Zb(%%%mJO`k-fT~1=DS58;M1t;{ro`!3KK8t1Pq1OlA@Alh7tTf zER6Dei_q5hsgDOmEf|dTA zNMNZ>!xa!k^TEuQOS=u;k)f{B&tS!04`S93*w$+b%kbV;)BM#`5o#>MHmf)Zf-^6h zueCuvA56BVnY5#cFqWKqP7$In*D3X@FIOYxd!}Z%yx(aZ*YhXxWFCJ}s8CmL@XK_U zAq#$%$nOgG7xq*6ow)lDq=kUDKUs&8MkeG4`PhEO49OM4ElXgv$$p52<|A8ORB{$)n)8wnuOZm&P4239;lfS;j7R&51R>+v0ECxP!@A37a71N!|$#sJM z5i^FO1TQzZW>3J9+h$3l>}dq*OIp8P#i^cj*p&6vIIh^Oc^Nus!yQpV1AjH@i@yvqaPkZN z-f`gMKSsIQ`pd(JUOK|y znrZO`X46TBca6K=5KVDRBqmwVu)K*wqkjkclc_G&lga8^(~s0?oxRF=A%S-soF97! zqg|79hI*NG^+(?E*lBDftU4=%uTAtT+uhogbp)`sSMM)4U-2ldW-mEqDL)43)La=@ za~egUpYKc{YkJ&I`q*$^D(Lw?99=E>n5LHOD@j4019Zi?dFSI(yM6&IpuL76TKG40 zZ;~(OzC7IAq|LCxVm@lujQ@LD!+J9zV~OpMj`Hx(tva)=YEaMKO0s^QSXT&}3+)>P zH^&QFrdds=k!fN}8x@1x0lPyuk9D`}tyBlQ`|bGv1J|;uL9Zw83xgnGPGnz)m{~n= zN;d3sW(%yH0Wo%KUM0N;VHpangl^0|$tRt6yrKPFLXnSUR}d?Llk_#v&hG%f~g@Yh#N{6c*zkRLCvyxa&N`92`9ttI~Tt$KbuiaK^%hd6KJj5{N;&J zFJ{XXi*3Bt5~BKQin@=D)yTR!s9~_g)7TX3}hVC};1f?96RLsWCI^P+PPBQuiGK!^*$SstFK zWrd#q0a|02a_7gMCBO%vKi*yAa=rOWKVX+N=jTG;DGCm;l_F36$RO&!4TKOxudU7a z{CaGR)jR)XSiR7kb0gb6*kEVM*=NV3ka#=z?G1sT^!{#n^V zTEg4M$1BOtjco2kly6BgwB{v~umr0^l2?W==S~BIE)KMW(_;)*F#`1cN8QwE0TLdn zaQoH$GK-Or%}Soa%+}3hre8sU8WmgNuj&Rao(JY78agV&jTIU{ZD$Zur?WWPF(Y7; zYW}d*U9nU$Ib^1e-2FZ`_Bcs}ulR7WZ3R{hIW0l27VdApi&)FY-L5VUYbgy(5p$1^ zS!kNx2Ex|(oS8K02tfI(Wlu*$+G)3GPS3m>cm=0sQ@zY`72TgYQYOV&?k>?c&w0GO zK7cvkOPw>`vhW*Q(Il5AFsc>lJIFIo+Y^lj6nA~R>^J)LP>&g+SG$O14dH>Th&sQ2 zaO5hHCKN$u} zQ&5E}PtrMzEGFa5@+l9$J4Do7p0MaR-9t&wN#baEjN>gA;E^g9B0CCmV9!&>%L8;Mu3Ge zS4+L(wbFOJ#G@HwlYGRJv9iO54KFNA6}N67!J+n{==+#dldBRhCf3T6;?4$K{>Wp9 zM#a15cq2tr7ED%ny?Ic_N=?P39r-Q-_Q=f@pg`f(!7z94T*KC{r_c0I zTbI0~GAdKaw@Fl7`R-jY{%keHEqk|FaS?WQsd+wKFD3N1uN=Kj18di>JYFw|Hpm6C zT#iX{=PEJ0FbtZClP1WW0q!0b#?+yVTDm|rnY)A2Uvs@Dtt-B?|Sb+QQjw_2YwD=aS;l+(2RR!z;Vk;{~OfwxW$`Loknc7AZ=z6A$6 z{zlh$RFk>S<9iOO|R_pPMYFH_gSaGAOU<|{my#?0JYiyMy5L9 z=J;_{jZ!P}3*(0C0S~%Jm+RDruKlMLhF76daGC}Qo!@V}>K_--sk(IBj(1&%z#iDf zw&MNSytR-_IM4mzqr>!ME^J=-S-8eMJd*1)Co#}$oSlD@$BeM86@r>yLn%Iqe5 z`#pf(VEB8@(gxR7>&}#nelzv_VegyIU$W6qFZQ_0?SEDpYVlcfYg9V<(jt6`1UR)1 zz`5k^!kceL84}-oRG3dI&mQh4zwp?Y{XHLs5<8Y_!;AE^OL>hyTFkA)Vm z(9PhIeR(icL$z47K{X27FKZ5JU0sn|p~5ylj;`A5b}kJjus%j^_kvv=TYC$y-G|bj zsyAB^LCq%`n71JUpI3|?#*{LfSo#lp#}QInTFll&|H4LTKAsfSR{S#s&;}X z2*&qgkuJL*^P7=wP5aAk6PMAcGjsBtzG8Z>)+-D12i3WV;>?D1-?=^1kT9K!N{e`k1}QuPW7|7TEdgxcs^CGU0siR^L}7 zdVsNXHbX)qJd7<%*8RSvWZd$NRPf*r{Eohk*yd{=o@9HJ`!Uzv=WG!Gav$GW!vf|^S{p})aNjtoeGT`iCBXBkU8U&khXQga7C9(qX?#z_Mx%pG_KC-1R3HoWiVM2OEfB8pmve9YDGBpl!huBWhLo z?z)V5(4+6;gBB%)^M{z_&Av=bGa6o(p7013w`cP%jdkwOJ35Jv42|tTgGaaj9(e2& z^$!&!@-hlanLdJ$sxwzgZh#q_+;mH&g+_9}EmGtK+o3OB?g@;xgJV|?f6J7OEg9mu zsJSQ}H;4W@f*p&R{ zElHWyFU^bm>o&pm8YDLl-)-pr_FKZG$w%t%!9TIH=8hDR-Al@>zmL{$;l1Q}t%Hq` zet(4D?e|rF3;ivT;qU8F1mY(P2)%y426)PA$mhWs44ACC4J=%>xoCc8oV1;hY_dga zmbifBIvU-;jMz~d5tqdUe=!o4*J+0C0OJpRohOh3wJMm^LBZqx#6^S=e8PV5_Rt^{ zTH~n0W$)W;fX~Jo#7a(!K?Q=72Z>(XM%+~Faub~2#r%N7-VXbyGc zHq@tO+IrV}1)KKk7&$vB6A**xqE_OfO8;&^eIpD_nO^LrqIPptV6MameXXl{1~`${ zq@Dn~ql~DE@!dD?q;t9Ce)&^sZ-CA`SJNVO>a>H-kEkoCOY~fs@`jIWdK;pv9gxnV zUkGRbqLt%NutgK(jW~$Ef%5ioHSaGA>*at`AuUnLrPNEk>LmfH3Jms7;b95Qc;Yo< zAgamq0y&if6Xy|6V21l|$R29p+BJ4KU(-M z^)>&NYniqBQU=vC@URk$Ta1Sw0#hbiwef)CC1gHEo!pAfx3&-@UzK`+TCv zT^f0JrcG3`XIWyIfXX++l%??XO}mVPJTfHqiEnN3wwvtWTZ?RQ*EOFuAPR@BTA~); z8$7tYPN@w}2DyQleLa`}u!rXXja3s5TyoE_h>(iF$+2*8VnKBj6n?k^zG^0w<}$;v zk%qng=;Ve>`5^tl5ntf1jS+N#B-|YjtY-36qEtmcQtSpT#Pa>1wuGx1OM9f|(Nd}4 z6gQG6=2I){UiT(p0mjHe)pI4mQR1C@qOz!BZ1D`)(VvC`|q;x!PB)<6#D?#{hvF;`*O$%}*W7xPc@Kjm0(I!S=Z zkOu*&xNYQ;A7gYWu6uGaZfW9n)+mP{pI7ImK92nY2RhBF{7_a61LfY%Wb^ae9((1gy1wmEo(A_uql!DxUh2mw z4IBT!H*n&AFi)^ko{l|_(&dg(mDjymJ%vHiiNhneK2gR?UkmKt^@JBW9oey%LD*%d zcOmy$t>4A*O=S<0W$)ImCK$w#v&^a&zTMx*C$;gArxj>1c1JQ|C7dr`l2^NrW3FNX z7qafGjha%yR%QSp22t=;(gBo=+PYkbm4#Nc)^vZBB?f`~m$`|E=1LF|rxaXpD7(Dl z_)bvJxJ{-`xG7}Nnj||&t8Zvd@4S5ur{#xYhuns^PQ(x23Jhq1)(J&f5F(vEuiq=kbA>pL3La{_4w3=Y2$DzvXwG+_ZU44@Akh#r(jGXa?=>ItTu zKb4aFCLprZIy_8bdDFQV>^WFyJ$Tp23T^VI1f5$+KT6gL+|SiiGuLOMyRZ!tf^o!e z?6#}N2jY1C%D!Xx@hd;|aupo0JEJM8GXvPZ`L6&nb8gGs8CKD9r)WgL#6<&z#~`JA z=d>%(wb{`C6{MUg$eRqh(~eniS$vSX$e|=O&SmeBHjY4+CdZ@bprKqU%AFX%ue0kZ zkBgXm?aN^y()g7#0=u)&_R$oMt4Cc0hwX65|LNVazL&A!poD()CA+g*rPaXX^+OJr9o~0=g_ri}i1>h$Tt1Z=jrT4q=u=~b zBmIOHDtlvp+Yo_97%y76@iv_p-T6$K{Th6H0^>iA1dSZG6PI%~M`<&}uk6;2h&dWS zc8ymCywB$oI)SSxr)}dV(1f8=7I%uIbQsj1Pdx9F4ie;)QaV{~Ij1>|P~Y4S@$I7X zyC9Nsmkv*ca6i`4&&d{}?kv7D13cn>%xkRdtcM`k+xA}dbk!fl zsqH?Xt()%c+3Gqxnt?BS3^9nmSKi=ch?yawQ2H2L#p$V_FdEm*zaHfKEOO ze4;VCTAi_cKNWvcwD{Ur<{*~w-&PWDO%t{g<=z!3xhms_3Hj`&U(msgt?hOZ;b8$T z{hWjNhn66M*U)3Xe;`=o)LHf=3pW?^>)xyXJ-a-c5`2-s%h2I&;C9^W9_WCwlE zeW3MOq?=C~Z)i<>{rV6P_IS6tKbAMMe}S}g<-hoH0<+Jp>3po(q^|xQ>~$ETCS^^E zBa5H_%t@C}s{)PziezvgNR-|30%0eClIGJeR7u*otUuWCj>|3mG}(|SRN(T*_--{ zBF%1GH~&3N@9&EV_UXX@$9WPLD{0yd zk{46}3QBEQU_cVcM+E^X3J7SN@4NN}ILkP82%+sJ7iPC9%%4w0;vNk$s-#?u+TV2* zP%YsBV{qX%KM4OR2-}Z}rw#JeZYi)Yl6+tNf_n?$pMcWRXroQmbpV(gNm=G05Zd0qt z3uv4mDn`cNMO~~iilif`d+ddVt5GnbJu5#xEP;jfT)mGqX!GcC6J3Zw= zXudu5n@%k4-F@6)|CPoW1IkoCU@I{4FE;8OC0fBL8)-9>*pJ{xhmi_277rT;r7W;V z3(IFCJ5J!__bX*%V{72k4`M`IJk?uV##jMd(GGL0%`S!H3dMwT4WhVHfDVr)Q z5W|%l&l#Y^31F9WL%JkrfNa7Ly*+RQvXuY*S4wrol8n|Dbyrhj-$lvJc!&~Rnt zHNm;02;rn6&L5>M;d3ki3du0I!50ASJv0vf`O%JrgSAd#?rLMjvb}*BTNQHtOp1N5 z`%L9MZ`b2wga9I-RX$lFu^R(`LOuy#ApGwH)~Ei58qa#;-cBd7H0qI1+Yzxvg4ZcU zuT-|aL(MUd85S#0q3D1N=CiPW{;b(_yes5$uNu2IV2aA^e3oZE&HIc^n1_UgFEc(J#58uFF;(fh|zLN%N?~toF5& zjYL4~pOxJS>$BB9pY2;-PJGb&?Ic&{si= zc^m^a%sD;)#m876KzXK>VHTSF3INM&RImx;IDNSIv-G4Pbx9zjBRM)r>VUI@&dl=f@TgH0Axx@oj-qg92RKzi^?rE z^ya}73p&Zy>>@);2FlMjXtdSP!i)ZPJewpbY(El!y}#(Q5e)DzjFxF=+kHBt-G9wm zSybhdXO|)>K5O#tsr~zkWwDX7<#1Ai?@%-@1Rz3=WG)-z(HPMnf%SEboNrL1bNNCa zSj(v=Rcya{+~u#V<4kz2XUDH#_XeyI`RWnh2G=A@VV8iXJT6?N6x5aq2_{nCTQH*X zvVzP40{ylWb>b3mr1VGM620w7@>w!3ENvmQ*Ij{%mrjjHtcVWC26IQ50;9n=MZgE} zHVX2%3U^u%ll|g={Z~14t=5=&b~-^PI_;J}vpC|R)QCXRYXTr<7Yg272~c>8%R~ai z2tGgc!mTN&^mysFdmCPHm5*0^W>|E_J5i5p&Lr?swwR|K3jX~do`Bzs19+lb5dgg1 zFl*Bo@p*y;v*#lw`JNv-yWEmdVNRxI4#UNMv@#ib_>CeGG?8?rV#h9Yy+8IDUQr{f zgU{x~0|B`t!^0{l;>eCaw)5fad_Cy1{0)j0-eR`e;2lc4#{LHV!njXAR~N`$?i-l^ z#9d*4SEyGKZqL%X-z?wGv93Tj0;~pSce{@+viNn0kWZ|DsmIGH}SDH#Kz zu|n%6h>e~3Fd(V5h|J3l%ig!jpmyv1PSVhvfTFSm4tVd?Bl>{032*OERLKSTG$TGA z2fXtD*i;d;5MoDJGKnLRn#`3!% z#HnCN^Z>Hw|H>nRObWlf0(a+z!`KX7wFm0rt~opOMwf(to)Yp96ICmxK!CURr{#tstiWRXmD^ zyy>Hfq)?N^;$(aQSj5Ddb2)HowbNjM-cK%cP2#XR+2ncoCJ?)@)2$dsXA8 z#)OT1cA!$p3zLbY;-n-gQ(z)Ug9o(Bf9b;lR)*G9*~wO5XBY*pIG|@Pv+!V#^x%+zPVFL0>?Gu0iMl$3XGZJnAqOdg(v!@ULUAy!C zb$)yOrG&MRk27F0vn^n42iuYpGb-+@k5Jm|?q z6-Ca6qiUs*8>CJBt47y;0&NlLWIaI+#r~oT$S@ln#+9yCXg(lzypri<7k25~w#8E4Y8s`qz zv>RLH;*!DQY3r1mIV~EO_eoN?;-MOhgM5;veko2c0XYNk0LYH0+}rFq(5oT!uC97y z25Uc3XP#=~BeQ4lXw-u9JRxdXe`!HIn(GM)^^o zmEi$t{2v5aWXc5w?=YuHDD|Xqs7&P9&YRM&j9QncMs6d^5nbi2wzjA|$J@OEtu*DT zR1)Px5^}5P4KnK3K#|5qdo4y4Mz%KZf!o1{mo;>GYQfl@=HM--XL_4fZI0ZfDXHHw zFMrmQD$xf}j!ge0REsSA$=?1~_4;Dsj|T@z?$Wz^^&SDV6vzE-6LibbB1>H4Ftqru z)5owt6a91+p;)s2%^A#yD8tu8{~1%{&5A7CKNxt0J|NLHf`AVVT1-J{N@&g(!&$v(H3VNj!5D>yWG!K$2>&bR#(LU3^1HuN=hAMyhz=^S>mCp zJAIB-?>m~pXmXk@rOZ7G&jkA>rs0qT96xM#UxrmmEx!u>`#t!?hbJB>mDw5fjQZz@ zFHTE-;k0&N99@26)-kp#yHq*YH)U3t*@*hL$fMklIR8WeFvqi* zE1o!H3#hlff`NNf0DeMtG`@PFUH?vb&>*usQ-gnL%R5T|bi((d3^Wni>e*A4=(qUmfk-jMZmF-bh)hH-}j5y#!Qc|EGW zmGIo7<8=j3As^1nb4cFEape~ei3|ZMb^1rwk&N0VBptg!+*h{XUf-?Xo~W&k0rp1_ z4K-s2>U)+_y*^JRhH!S|8J@7~w>FFQtZU~3aN6j?n8A7jNZF#ttv}GRTX3OI3C4R} zrJZki?tmtyn^gMSzOVX>luY=1`1+q^H}nK4c~+y_#GD#TU2R)0doYI)F1@q86a%+Q zY}>b5o^$1#pDZm*Zcws&q#@2n5T3_SlqyFgo@JP-{Ihy8EyGt=%|3|Ru{=x_&x=*0 zHAdRBf)@7?7%`do%1Y^5ZEtT@FAqOS9dyc>tg`Oz%W-Ry!)}KZu9T?=3jPHnq{s%08VPDFwZ&Eb=DyXJ$zUn~G$l9^nVLw5(!Z=?z;bwxhyHK{DM^|KU z);iA+(<^VS>RA$|1GkM1wEF--c$$x1ut6i)lWPlkVrRz(47C$h)(OrdMy2=cNiFC} z0i(NOEr8~iYaPDQCoR@@ns^Y`Yc|O5fDpBMg$;43;r+JJV;I|Vf@`*Mx}I$2mz-$f^s>@}NPv1~)0czH;yao$rmtHSykFfh#5)92akbH(}4-lU6xJd1mBT?fH#WJPf z=jp{5aqhP!fKbUb0+E&SX|nq;8Z+F9Ay}sAk~Eho8q60LzE^=f-fsGJdcgr*m;cinYr_%h@HUPEy$Gwu1UAA!B~y8IsRaaFWs6dg`>C z%+t>t%?b|i{@skVNv)Ed(nhl4!T%V`+-qo?h1g+uiQ~HD5sU;|G7(s(9J- z4x^`A)wBtp5kt+b-dKq&^JQ|w==B7LrSHrOF@?I~xVGYf=)ePi$Op_cq1M;LZbywT ztH}+)V@$1A_hpON+yx*t-L0c7BByo>@5{!&>jNqdpn2w+{H4QWBB1TLSyS!9AbvW!S^PhP_THtS+t93?G(u;0$su`jUcqi3FqhNt>r(} zqWqN=j4=gGn{Y`&Vbal?OyeLv!*{&5Mx5bmq6{+cf`<--FG^(C#tdxF=2yeCyfyca z_Ip*|T*Hjqp8(iyeV1&!fAhYN@-Z@k29?p>IAnf5WZ@p{V#tDDil<;+VSpl^kMs8P za+QTFp9>S1wG}VHK#1^kX$F$B!<8{fPEN(uXl)N8MCqv&^3`&5G}W%hI}cm6?u7T8 zj{6q&aXK3jyB=M(OBjDOztm)SM#1dZ%AItaMmeep9t;A@0jt+w|z!PXYli`RZ|v$BcW+wi1Bk5kb}vIqC`EKB)V&o#48o{tSE8qA#s`3(eoO0h?$s3ZI8_kXZV%qI?I6 z$Ow`KSj0w*>ii-Zz?4bsrbtMpd=_4AeT;_v(UetQP4k178{BF@xVIC{tHL9-Nxl$ z3)PM9szrcNRU`jg53m)+8S-cpcuxsMrR!ZK&pO9CV9rZgBv7Yrp7t4H-YFAYL%A80pm0%P~px4-W@Cl)g6U`nfMR96}#(8b)>P@z7quP zFP<&$aYvWW)kO7vBGXFDV14;6@DMw(-)&z{LfNE%z9Ofy$>9K0TkT70XH=2Q2(;GWE#e)knaKsGRc7W=yES~0nzJHn zW#w)wh;k$=qqjwb(|WB;tIE~-H{8C}-QiE}t0*^)p8I_mLpLD}KMs%-xtX-LY;*Rx zpRYG!g!PT=5}MNOBFm6`z>FsgGpDDt|73l~>^s>kft@HD`?wL0KYPnJTA5I#8*>$~ z=RPPAsLji&Hbuu%Pp+|0J3e!)Q*y`_9jb7;f@c=}7_wUR7Wnl6CGKX)9}Kefds6S- zteySHIO|b9(WIZK(6h-=eFOzUBJN8M%bxjkFikJqrc2{TtJ>7rqCV@_>zPY*H&>>_ zbI2KK0huO)t>6SYrt^NEBH8@a@PvWYQPkq*)Nx!A{33B~Vxz}CI07=JBaYpX>o}xj zOXp62Ib5%K+7-RWU^7~V6#EdG0=Kt@><@<@$Lw}3v)Og4b;DbgL2wvrmVUW|*H=Cb z@|h`cTuD6G5JQ6I-MX~P^1f1L7p$zFJ2X10`r^!O^$?+MIxabQCpvao4p6>n{=3dH z*HR%RcR9b`CK5oW7;}Yw&xsdf1Y&(!dS?0zhhSs;bWnM?Gi?@C>*l;Xc2BjSK!K># zdM+(9t46Z)C>z^ievRl!$5R~Kzo|W<^n}oa9yN9hSQeo)W5^BF_^}U-%IMTYMgE`c z{@kWN?YDCKX$Xm)_;R7&KEgHAV1=kv*H z$)V0zNJtAA3fy@R=9ns>+2XraoOd{xM0mC~;s_qlIL}RY=e_9M3gH?}!^k8W-MNnD zNVO8XS{Kuc{V_05qzFn5^lu`r$|uZ>|C@ku?q0p-h+@;N{XS=kEo?e?X-u|KZO7XT z@&}S<1azwXy=m6i5bZk=fht2}`=n>H^SLAD_|y2Qd8yj9tM~#qP^ao|oXMxqLC$>4 z_{9zPT~kfadz#_}FxR;5{xYH*SsPg8kZX*QiEP^&U1xO`$6oV1dGW(uEP05C1V6CK z|N7;jv9~*QfFjZW?aPGK-0Rx(}==I;={s zxJ2Xs9iF`3<##R!S&n)PO%!navLIRgG9-KjyFutup)05xWR`Y?OlCwA*q>t>xV(X> z1nVVQg7%UCJqrEyM1w4y`2Kf>~&cSk305nFW_vP*~4%tG1x zR|BMtvSJ_2-WW$Gd+AOw_OXw0(EpN_KuZ&%VPg&|b&)jy^NUgmUFfZ4S?+|Mq>fvm zm?(!OwhF^jp9&3YJe%%U*825^ca2_B(O~ufMw^-!tw2io(*ZkU!?n$ow1gPQ59UCbzzch{rbYRZ~!8@2pk_+SRsf_|si z49OCS?*t%he%S3%+i+sTj2Y})EJ#t_)r@hj+wGrS$*7>9{W-1!1zOO4^a5}}H<7Bv zR6yhb?gBpd8Gv6+?~cpyxYutj9Ycs9vjUq``9IckW#3#Jy3QYn1mMII$kd{;jgg=P z|8?0Z~N~Y`ppw1>hIRoQ!Ao2#t`%xH+5jDsyKYsO>qD=6{|JiH7JKj z!@xoL9X2vE(tGzVP)6Rl2;q{p;cQ<)G1~UZSZ*tN?J)B-q=L$TZ_c2>vmOnkld44< zHbhR8B-hsunFL^!6GB>J4!{pVTU;TTi3TqP;9ALcrgx%T)#J9x8|H!ghS>FXG2eCd zOV8U4t=JnjYQ;22$p2pErNx0ZvS(O*ZqgZ1Cg3J1FCVW$C)E78DB3APwg=Javw}=| zD6K{Oe~yz7E$D3~r4Rj3yJcp+f$@YF$!NW&vtk+r!gvkYF}|zpYq*eQP6}XI1WgxZ zG+LsIe*04(`jyLRW3tf25PxX-7K=jiM>rlu+e|2h(bh`1^%eO&Y(Ajr@*4U_TXIV$ zH1})gmCbSX$_Zk`JN|j^qga@&tK#d{BC_?dvhx(4#2VQjM{Yn0sgM=@XS^)JQUp1Yz)4n{E|KSxHVUDt;_uM%q#hnY17b}p$Vb|c=%Uwos= zr@ucyza=m2TwG68@*4=L5qMp4HP%;ny_PB^h3@J5G)SpLBV6_smt#uQYRt{iZ4Wz3bVY0ie*Tt^&cIc1ohppvV^{0e_!fd9&<1s^oI&Bn6s;)?#YM0*;p_u} zOB6Fw8Fw&D;H4cdzd1Nd>d#=8s@> zl@(7TLNFpKM)jf`4D3SXvGik9l%*bl)8kRwPk7qr1>-5zg6$;&8uu?h#GU-*w$Z2> zdE|YMA$hl&xZ0!Ke!+4JsYp0??J$RJi+*rIu3}( zoiX84e5d}(64nF-5V=3piFotic`1jhx2nybc0M45^7zUgLPBdLvfx+-Htl;t5cn1U ze8H?Ov?!-k3#F=6`(eOn>mh0P%}4%erh(xE3J{*4jRE|DXNygJG527jcJjY#?X7=jj3|ig58Vq2lCNCa$U`Znr_3_Vrja7t zGl6gMyM=#Mq~jxq$MwY3KItj<@@noq2^JG?*`?KpJ^l8qk~0o71Jg>Z!+y4lcue8Y z=kSa>0T?jVb}oSSwz76Q1~nJWh??UPGBB4PT?YbNgG*BZ=)TcW?*^4IAVUM9!)=>1 z9d9o))E_@WtG2KzW4jK03Vgs}^MoKzc^2wK_rpHi^Wp^a$=>Y0-HyOOv_n@2O8f!c zdrstqE#{v9P!DdQun~sf9jfl&JF)7YuNdD7hZ};_;7eWd(lFqRz0^qbIBqyG6JY~R%d#R~Kgyenz<+@@h}d@p=}Xr7 zZ%D*}`2uJaqk1gBQI=6AR6E&D=f!G-3fW>oBb-xREM;LaW>GQrNcCh*aVlwMMEw-w z0k(G&-~0ApT70T1oX3+c{`ZJ}@zbOB&_I)=iRbOXK`%j=oiN9&^qVLzoP};RyEY(> zA0E|BkLcON)#o_6C|q~E)S#)c?nZ=v6!D{VXbO%#by&op#KVoo{Qy?1l4_J(@GMOS z6%fWByP96M^$RLJM1qPpEhlygTw!Uyjm0-pC@~j*L(Q_8=oM_)3dj&ME6fS=Ql#6u zaDwh#Otp<*MvR2}e&{(fI>e4NDdZtXXl5Gn z8u_z7lLv7eT(fosMjZT&P3-h$9)bGsxtr6}W+Gn=8)qZC?-II%^o41*?RLLr)n36W zu(H2NsJM5rJwbc&Gec}0Cw9-0c_g!-r5kXDi0u;!`bzOk(y>e()_nncvRU3NI!&y$ z7)ZGbOqzZUir1z*ye-}Y0Wq5hrs}m}sz8%F)O$w|yB`J$1Wg0sxl#A__s4(B=lfB@ z?!qf@Z$!qIB=y@n_C1evwWhdg@_-Ld@$Pmr;a&YLtE=}pcHaR|-Sy>gqljK-4zH*1M~X-ELZMYr32$!kI9xJ}(D&;^=6J#JFQTWwNk0$uv-^Ov)o z*d%C*zPh!(&pF}3<2X_ZXTYh)U4_7&+4@7fy zAYw4X;Rt`qy=A?nhX7-OqM7tr=q?h4py7alBfqTn2Wx3jtVtMo|%# z{5t8^nEUefQ!Dfk`bTk3q=`nC1rc+da~cJ%>n6!pJ1%ne=UDPUydO`f*oA z5%BsC4qxLzk1trpD1iV$+{H(^jMxl}HU_h6^c+^XCbK5%9TerK)!)DX-R;DM`k)tepV6`mRbPNs4Wo>Q5zz!fpEDlJ+~wxg#e2D( zuIv<>%E|JBk6q@a#^m9+1z4rJ+bVQ)cE|lnrJA*y!wsjc*~^#od=G*}mk&Luf>rL9 zI?ayekJXDbEp(uiUftAYVRp9Y$4o{dj2ETKOGoGg7yda)!q_8TPctDw7$v9&uI_C* zwX6|i#F_Yg4T#1vEkvbMh>3XhiR!IZuxP6r&56lS7&G5HFYbMBUJA={8R9V!(B=a; zT;q=9DcG%scu8_Wg%Im7N~iea7j$#d4!`67x;}ecYO-YD$s#1LG%fvJ;hDckFh~-G z*TWa>0^s*eh20FsS55WO&nE-c_iO!DE@($%M*-tPOe&-jY|6U=xJ_VGb^C)W4B9jF zvh*H6ti~*th>GLtJ|mXtLRW4ew${mlha2?A+&?*BI-D*y-ZHdoIOw9Z*pAi_gSBP6 zH)FT<_=NeG{cxq?IF4ua!5-{T%3H5Wf_NMyX%PhPCu<6?zQb%-EkG~y?fx_TPp^4e zgpB;Y){!z#XNH+ZFh>ZiZ^l{KUEh1V%hDRutdYz-lH5SesER7;8{}D`Jog?WG+vea zy$2T|tMcg~(EZ9!*H1wd3J}-7=O2Ff(H|IzZk0BH_4t9`L;9xqdS0qiajF-L^2FD) zU|w;gNXZS{HFtVM)|mAqOw`^H($9bDU#3pB(`}vM;o){@p4%}`*J7Yjh4Ojsv6p7z zO)(Xc52&ynNovz`THe->a=QuM#KVi0@b<$~ZwexukKd7@Whz&Lz2KSGcZ1>TJqU zo)uTWMq60;Cb)63|JOiF$y#~lM5y8Ui-ghkJ;AC{mqo0rMBX@%ZWb~fk@CMA-;PuL zpt#R|#yqoFzD_%d2(<cpgdtYb4y;0fb>ZbE~5ewSL zsShU6<-f!8ne$erw*`!VK_WE&7*P#zkvGS~egK^zRR%tQoH-@8D}4I)7LsEz>}mO~-9D!{f0hn*G7d$2 zhm+~EI`kN4m#vP+)}Bw%`T2K7F;R|;X?QQrNvU(((#evJ_0aUwX{HfD!J~k0#ewB< zEB9d!3oH*7`7&QN1>RRf z`?@p~N0OBYbH?-VHOJl2OSMFP*-@=)vSRTzWa!9I9?j=lAdiXkbr4{snQ!NS^xp)( zR06_8W<)3@yFg;eU$hjy>fS}xD;WFF`HNuiVe@Ez0{;eJzs1vCX(1?89R1ANg9M*q zRJH!YY9HU3Z1~dZ#w_KJ@WyiO8HB9{a%V}H&|dwXbXBjr|8#L2BO9{c!5eUTnlC>p zxe73KJBc|)!#r#Bc*6?Jx@c(`{wxD&WzGDrPMtE}-5l-=yx33dSjjJk%8afMxT}Rz zJ!2{3`B{9o*;t_CL7ceV7s)4B60abuU)1J{h~~!gJ?~tfZsOJK)f(>;_$sgfHl_xk z9yeo}mU{JD^11i8{S^!7dHB*Vf%h&uXtN`tIAvjY-G-WwV@vejn(CRZ++`8Jxs27-)LfV}Z&`eOd;j|>5Lc`$^DrVJx+8tUmP|qR z3SwFQPf$;jTf~4~ga01cu;*RkD?D_l^C`5rztiVT0N;ym>`;R>Jn$&jp}(b#xXwub zcQtl4qw&h<1ffUzWU>hCj6T&o2v7U{0pe$p}bL?TmH@iyN|{yeKVH^Y4qI= z+qLO~=9SD%^wW1<)ahTO21tAAC{otJ_csxzaO=eQHx`0eu}9Ik>QnMOyXpJ98@9!{ zUNkcF60FG0?3@U14&7O=zL>SdI}gJBFiF8F50#R5K+Xs_$;N+Jojpk5xGniLgYN+{ zIlxY5LnpiG_sE@ytiyv;$0^CV62w>tu7Oh9iYE)y4)TTvPQr7>MMTJy6wN zcp-$?EKljVbdsn93p4)E@ZWYt5yBwYWA7w6Y1r+$)N+F78h@|WByi<1&XPKd7&QuE z%G+Pj^Mb8n12Y@dNiY!=Ax^hb2m~0) zpM{TZe@&4}QnE*R=LzjcNApIGoYAf9aH+L!t;;tQY=@%;hrlhMC`yQD?eG zv(xY~Hs%rFGg5P_z{K3bvRXKo-Dz*F8t>-L2xf>z0Vr%t5TlV#4e37CI;SL&Y!f)11Z3Iw@*BEozACx#S{Z^peT!v;J= zT3%K%5xj6^TQ8=}VcCWhD}e8<-?`w46OSnNUOV@*fVbw-g2>XMxgZE+K?4El{bLU! z*P`CN?UqlzsIzoewF}9Pkxt-^Lo&BEXcjPE{8^sMkgqZ@F!dMhk=|QPVo@rfExx`5>-CCikOHOdWNu=c3Dz>Ymch1W&pw@xt@ptOjTyk29+>rWks_ zyEeorMr4VfPF(f4pE1r97fX0y5J?ebgj8(B>)Fr+j!gG0~#>X9& zl`eCP7bbJY4>#~>+?F1v)>Vnig{&6k4=jK``f9RBY%ndVKTw)`?vJ;LZ@qEWWr;=C z3ygAcSe`)aqun-KEr^vOMVml3bpt>4W|;V9WPeC)LSxyEMB@+|8pg>rN5O<%cf`22 zl1ltN5Xnf+b@0t)gi1tng^Pf<=5O2^xJBIVWU#iU9yvk2dsdPjn;RO@<8X2`D2MkI ztRpA`_7KH886Lw_f3))BCEhqQ(-$SVjRA8*)WLkIZ_3|e|1&fkaDuIkXVt5+G67=E z0Fw=&f#~f<>?Y7H3O<2Ux=H2R^?yX_B%_h*^i>~_eVIw9IAhUKAQGRo z89xEpqL{{8UMi1~@&)y&|kB=sPkrt{|={R`e0T2uPUlTQHq%WQ#8$>ep z^RU$;Jers#dI_X}r9ccA=T4;S$+0<#v9+tzgZqp!u9U_ZWih>rRloz`XDzpNyGN?K z#>?mVAVP>co+AFyqGCp!9`k<#42cWJf}QJVvt7Q`>~v?8RvBHsvf4UK8-bO`Q;@KZ zm2-Oc4GTsomI3CnTTVPj~!RdLTjGknOEF+8YeAa2w8& z6t!u}exglo!LvaNtbM6CQYp#s`GUPB~vApT4d=*$?!YnTBWHRsd^)T znAff_Xaf{zUGW1d;nD; z2m4GeBl#qqN)r+8DMj0s^SYk38tC4fgjrNwUFRbuDb?4jbol1mC$$y@GeWv} z5M=sNC=?aq*f(#U+G$Qbzw2L&IIYya?exZq&UcwTzasibPlXu9{EDPZwiDHoP&#>|aEtxH(4|eX^pSOUgn> zYNonUbN?Lv{3_$d&QQVP26k(F;0!vr5;YFzkVj+LfWg|&=B`#`?`GYUE=Fxx9K^tA z`0aSyBXwN znw|EIMXF=tMM^;*$Js86!FUt0^EyEpTfNULxBpHTT}GOOGr66ym>{>nuYwU*9;4So z;QX8A$r$2hh;N1_KTHwQy+Z*`F*F$EG{P*B0IT@?nJ_DooAp`wU7zCj%{Iaf#p3kYsKH44~}49in03 zq*CCq)G$Bn*Hc>VlK#;O@DSByI24KNtGj+k#32Ln4+qcO@}s4oIOc7H)_GmlXxIpE za3h9G4j;4tn?|S*M3rAu*5=VGS-_>;Wr$vIhQvOCoRQxNeb2_IH?ibbOWM@IZ*Y=B z359F@-Dj{ILA)3@bKO2;lL*36se9pIS{Da?VJgaB01tgTN1Uf{vTJrSasB<`YfMUC z{5v%#=!3Be9ziTG0$!6CQAVGlp{vhI{2d*enuj$gqefiu>2Ha^(3jlI5i5RXic9I= ze?Ar~9`0&;bw|TR>k~*nux4F4B8depUgx1RC+5og<+zy_rZ;i4Y-#<6@=gHK*p1Pz^3CgyQLNfEtl=Z2uQmLCi(6-^#EFlb89sE~I;lhd6<8WQ=oY!Yu8dL1tYRxs)SYC9|Yi)~E#YAkEt+^k~I=<-_edHw8rr(HOT=ld@vPu$mO8@kM1G+RY|!wGz>VnyRa zjSM6?PxU!^s&Pcm34(*45cn9Sf>QJ3lX#z9PM;t^u4Url)&eBaug$%>NXHax2q-{U z(x9)(U6u?#D^IeZsQj?!H@(0`T98bAgKd4wMJJ9xBjPKhIEr^T;9*>_*iNU| zHz_0a94)(4#UBs})rZ;x4UV5J(}=Ds1c%gaN>>cUcy5ulW>U<_`@8aSPtZ?uoP33= z%pO9JjMr6SDHoRT5gD>Bch2WQhE`QLOjrt+)}i_DHY#^hiiWhF>HTpPgMj$I`52YDU^gh93*n&;Jomc6dUNpZ@~`4w4_CSYof( zu>1npIW*|#b5p^SR{BpE{6iU4hEq(LI2qAiYLq`;Oip;n6mTj3iUb(4caGRrqG2gh zyZ8agv?ZYH1hyYLLqis<>f2gWbiUM^cE`5s*_Ck2RkQ1p*Uf%$^zW~eY!u1g0AvV~ z`ce+QL0>(ISsB+GBCT=r{KD#CD@S>iW5i@{{_WS<`XbVPRZt{-b#GvpXkWu<12; z$H147zh*-b1`<+%luUHr$iWRU&GZv&5jT)3o2-U^chWj9<;@WlTST7PR z`axUydDr8AuiM0i1en5;lZH0HJaK=Wm|-i?qXHGfkEKT^bKwkzGA)5p;{%M8+Swli zs|a&8bcSGKh;_#KzATE7$~{5A^m_G^F>(fA-)C!ap%Qg6tEt&$9~-f~MEqEd$+G%z zVEN~gx5``yi$)P4K*!R^&8w97N#Wc*Sj6YvCPB|MJC6d5R-Q6yR|a1)RFzmPGdr)7 zW=yXAsW zf@GY^@KXeWsuJv=u|#?`zN@jA`@JIDeEdt69|H-pt)S&uqoOA1&6%RV=Uj*fC3U6=Ls zYSx6z$Jm@)jM*({@0FR2au5_wwHp@8(XcYcg`?ElALR&06VHY=Ly_!JKmBRh8O+vg zwFVQOWSsQ9cp+^<{dhh+dtn0x?xhNzN#_aU(@9R>cPY#YGHzuzFSZ-NJ_P7xP&vQo z#o>mQ9QA7sWgBz~Ovvhyg%6G#;Z?m`wAI99^ODoMD7CJfyTgr`_+~Y1z3&?ST9Wu` zBL}T5OwxLFzThFtE%Kap-Z!1zyXCvyd-8PoCAaC)8|EZdQIkjiWk~mXI1jtdF)q9= zsfiN`^62&4RG8SjwYq}lRi8fBHyGORPINlL5yjprN+uI%NK|BlunGoNo3FIlH8J1r zE=z2uhybVi>(4TG>wa{U4U$D)w-LryaLYCqnRXogzf<}OB5te!*WQqR7YRJqa`It6 z6M`pblb+KL8x{KXCAyhQj?ld)`BBx5dDs~59EJ1a@SB4bD!)hZDk?>zyl2Pl*gY4< zlN`USor`mNT9zDiuMTK*FE32NN9xZs4KZ%%oZE03`ginBBs1Dmz>$&y2KTw~&D2#` zyZT1mbn8Ske^(b&vtd`nXG$8I^e!gn0LOfgL!KVBIR)_j0nTJAfJ-j8^rTyq2>(nx zpCn6j_JW;Kn^@cxKOr+7g~S1*;zgfAb-(&kU*($8*D{>b>&5_X_cyC2ubeE1+gtrA z6$OnQ-QPc5oYHjnEiC_cRXwK}&GF8)$Gy4fUHvPPla8WaK7DE5rFt)dTDq)xST|1X zV%@1X#S6yRQorT+Y95>1(q0SilRe*xYwU~wX=a_;7Tsmi0zsMa9q)xAr<4sq(cmwi)8SNrDzxgmY zcUI?Iyp6SF!{tUD7t_%9JlB+xJ#48trTOD6`voPCk#x;qpB}S#9y|jS*2>|`v%Qf) zqs2%Hf`iFk|3n^V2z&N3Ry>{k&;qDXL{r@K9>SuXX-H}5yVkhd^Sp1yvWaw0=j=Ha z%Zar@to!aK+_I`Dgh*59B5VQRIc@$-oIm>RnfprL@{j%q7j)ZyV>>hq_RJ4)=%d4N zx)KSCUNY%k_9K>pub(>(CnP$b2MCN`BJv}SEXdtgEw2)tNm39sXaTL1gue;7lvUd> zvEfqtN;b>O`|H=r>xkkVXH>TJLW2b&7l)4F6uX=PNn*Hv!zar@5ZEDrbHs)Ycm+G@ zF=y9Gcz?u*egvs9#BS5bj3MepltrKXdD~45!}yNouqJk>AT^)Z0jwop403+OI}D07 zYLRY$wFA{E%tAT4AcNN1>rOJluoa(4?34LBLV>G?*)yj|+s&oRZnm`-=5!a+_G-CKDC|LeVW4)12CFEQfaeg zw-%VP0VTOmo@-lX`o~#C1|R=72$%=nc3UF|S*8)SG9Zs35}LwY;XAE7Zyj#S83=1`-SGUy-8`d7P3my;#W-ei&l&EBY;Vp|`2r_g z?VGz#YYi%iZms17QxzT8Q`JR307wt3w_y1fZyy-i{}`#{`rJCO5PyJl>U~*MeR$=c z?j|Z;eBL`?6T}UFy6SkUsiOWz&c)0BqN}9{f_xx}kMEWH@{-@97s~eJ4kWHep6=3- zWEZz6j;~x+IsS2Bj9gQS{oz~xX1kW*$740-KQhjrh-l`Huz*h@^4AqL+&0oAA-Ecz z*po`-Y(i<+V zh8~Yh&l{FcXA0w4`4S3VNK7qIfEh0t2BThPc8>$I(@hmQ@h?Wc)3fs+u5*EyqUlAp z_0oIR`>q6C!FBM56uHU<=1G^#ULl6le8)i-h*>Cd)oKh-goPbRt z^DJUMXPoI@BeDd0%;)?2oIlvs6}o-yWc4rTczO1WdJ?*r>SXA z4woc$aVgthPQ1^Z`x}RdP9e~m;KkzkN5rK8z|2NvaSUbE@wcZ{v2GjD#kVit>jOr< zKj92{UB=@JxI_eCO`wbtf1ha~yB?k;fn3$%>!1c8X9}?Wzv&UqACCYn7ILG80G(s# zUa08!4>dmqH7K<7>dc=XLm;l3`D8Pu|2LMElTRsU1b*+?!F=n>z z>FfDB`s%QHfPZUmlE>X{%k?r@H5XSyz1M#8>ZYarTZ&vawXQlGBXoSuwaVb{P*vKnS#0W_Dba~q{6y?*8gfX~~zA+gKV#%uAA^F1b*WOu&XLMF@Q zRct2L%H=~LCF@s$^SAHr^H(9ubyEIl)$$Hk|G_czRq-P+Q2*T3KVRj#qP{i=O@(fO z#f)vV;v|7N<425&ou?a%#i+{InNUvzh5MU6CtPTGJRsRne9ME6Zd@nSSPaU z`Op{ewuIU)WgG~=#7A#5@Z*AMwEh7y%xV*1Q)+>t3Da%ltcmH~GdA-)%irL_ zSEOtKIooLTB1G⁡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 literal 0 HcmV?d00001 diff --git a/apps/projection/src/assets/svg/trash.svg b/apps/projection/src/assets/svg/trash.svg new file mode 100644 index 0000000..8e4d059 --- /dev/null +++ b/apps/projection/src/assets/svg/trash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/projection/src/index.html b/apps/projection/src/index.html index 8b24f81..5083d8a 100644 --- a/apps/projection/src/index.html +++ b/apps/projection/src/index.html @@ -8,6 +8,6 @@ - + diff --git a/apps/projection/src/main.ts b/apps/projection/src/main.ts index d9a2e7e..54c2d48 100644 --- a/apps/projection/src/main.ts +++ b/apps/projection/src/main.ts @@ -1,13 +1,11 @@ import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; -import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; if (environment.production) { enableProdMode(); } -platformBrowserDynamic() - .bootstrapModule(AppModule) - .catch((err) => console.error(err)); +bootstrapApplication(AppComponent); diff --git a/apps/projection/src/styles.scss b/apps/projection/src/styles.scss index 90d4ee0..bd6213e 100644 --- a/apps/projection/src/styles.scss +++ b/apps/projection/src/styles.scss @@ -1 +1,3 @@ -/* You can add global styles to this file, and also import other style files */ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/apps/projection/tailwind.config.js b/apps/projection/tailwind.config.js new file mode 100644 index 0000000..f9b2a5e --- /dev/null +++ b/apps/projection/tailwind.config.js @@ -0,0 +1,14 @@ +const { createGlobPatternsForDependencies } = require('@nrwl/angular/tailwind'); +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ...createGlobPatternsForDependencies(__dirname), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/package-lock.json b/package-lock.json index be45b5d..c1a5f6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,12 @@ "@angular/platform-browser": "~14.2.0", "@angular/platform-browser-dynamic": "~14.2.0", "@angular/router": "~14.2.0", + "@ngneat/falso": "^6.1.0", + "@ngrx/effects": "^14.3.2", + "@ngrx/store": "^14.3.2", "@nrwl/angular": "15.0.7", "rxjs": "~7.5.0", + "tailwindcss": "^3.2.1", "tslib": "^2.3.0", "zone.js": "~0.11.4" }, @@ -409,6 +413,22 @@ "node": ">=6.0.0" } }, + "node_modules/@angular-devkit/build-angular/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/@angular-devkit/build-angular/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -580,6 +600,12 @@ "node": ">=0.10.0" } }, + "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", @@ -1181,6 +1207,26 @@ } } }, + "node_modules/@angular-devkit/core/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/@angular-devkit/core/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/@angular-devkit/core/node_modules/rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -3478,7 +3524,7 @@ "version": "2.88.10", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, + "devOptional": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -3507,7 +3553,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, + "devOptional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -3521,7 +3567,7 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.6" } @@ -3559,7 +3605,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -3569,7 +3615,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "devOptional": true, "dependencies": { "ms": "^2.1.1" } @@ -3603,7 +3649,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, + "devOptional": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -3622,33 +3668,17 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "devOptional": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, + "devOptional": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -3663,7 +3693,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "dependencies": { "argparse": "^2.0.1" }, @@ -3671,17 +3701,11 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/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, + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3693,7 +3717,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -3711,7 +3735,7 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, + "devOptional": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -3725,7 +3749,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "devOptional": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -4288,6 +4312,40 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@ngneat/falso": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@ngneat/falso/-/falso-6.1.0.tgz", + "integrity": "sha512-eka5OxW65B1RphpLJ04Pd4PEkrmTab/Ut50K0OceAdM+O+MZA7YF9xo51uZgkxbhg8bJ5zEh5vucDRMSofcqsw==", + "dependencies": { + "seedrandom": "3.0.5", + "uuid": "8.3.2" + } + }, + "node_modules/@ngrx/effects": { + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-14.3.2.tgz", + "integrity": "sha512-6bpGfA44jzwhBcmNaTwVgnFmYOX9iKPFpXyetDe41tVESo1CsNhUBPTmISDXKN9Mx2mwGbsMxrn6QFRypSsKAQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "^14.0.0", + "@ngrx/store": "14.3.2", + "rxjs": "^6.5.3 || ^7.5.0" + } + }, + "node_modules/@ngrx/store": { + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-14.3.2.tgz", + "integrity": "sha512-XGHjr0arh6gClo8Ce+xqJLvW9PkeXPW2tCo9Z5qMtHFI/z5dUppLVKGmMgD/fQBDyoqWTK5xu+89tDkdeZfRjQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "^14.0.0", + "rxjs": "^6.5.3 || ^7.5.0" + } + }, "node_modules/@ngtools/webpack": { "version": "14.2.8", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.8.tgz", @@ -5397,13 +5455,13 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true + "devOptional": true }, "node_modules/@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true + "devOptional": true }, "node_modules/@types/sockjs": { "version": "0.3.33", @@ -6210,11 +6268,40 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, + "devOptional": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -6266,7 +6353,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, + "devOptional": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -6276,13 +6363,13 @@ } }, "node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" }, "funding": { @@ -6306,6 +6393,26 @@ } } }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -6391,7 +6498,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -6462,7 +6569,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, + "devOptional": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -6471,7 +6578,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.8" } @@ -6480,7 +6587,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -6499,7 +6606,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 4.0.0" } @@ -6551,7 +6658,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -6560,7 +6667,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "devOptional": true }, "node_modules/axios": { "version": "1.1.3", @@ -6773,7 +6880,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, + "devOptional": true, "dependencies": { "tweetnacl": "^0.14.3" } @@ -6808,7 +6915,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true + "devOptional": true }, "node_modules/bluebird": { "version": "3.7.1", @@ -6983,7 +7090,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -7083,7 +7190,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -7116,6 +7223,14 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -7146,7 +7261,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "devOptional": true }, "node_modules/chalk": { "version": "4.1.0", @@ -7189,7 +7304,7 @@ "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.8.0" } @@ -7251,7 +7366,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -7282,7 +7397,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, + "devOptional": true, "dependencies": { "string-width": "^4.2.0" }, @@ -7297,7 +7412,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, + "devOptional": true, "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -7421,7 +7536,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=4.0.0" } @@ -7588,6 +7703,21 @@ "webpack": "^5.1.0" } }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/copy-webpack-plugin/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -7610,6 +7740,11 @@ "node": ">=10.13.0" } }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -7833,6 +7968,21 @@ } } }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -7857,6 +8007,11 @@ "node": ">= 10.13.0" } }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -8099,7 +8254,7 @@ "version": "10.11.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz", "integrity": "sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "dependencies": { "@cypress/request": "^2.88.10", @@ -8156,19 +8311,19 @@ "version": "14.18.33", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", - "dev": true + "devOptional": true }, "node_modules/cypress/node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "devOptional": true }, "node_modules/cypress/node_modules/commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 6" } @@ -8177,7 +8332,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, + "devOptional": true, "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -8200,7 +8355,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "devOptional": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -8215,7 +8370,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "dependencies": { "pump": "^3.0.0" }, @@ -8230,7 +8385,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8.12.0" } @@ -8239,13 +8394,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true + "devOptional": true }, "node_modules/cypress/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, + "devOptional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8260,7 +8415,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, + "devOptional": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -8299,7 +8454,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==", - "dev": true + "devOptional": true }, "node_modules/debug": { "version": "4.3.4", @@ -8340,7 +8495,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "devOptional": true }, "node_modules/deepmerge": { "version": "4.2.2", @@ -8380,6 +8535,14 @@ "node": ">=8" } }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -8433,6 +8596,27 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -8460,6 +8644,11 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -8480,7 +8669,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "devOptional": true, "dependencies": { "esutils": "^2.0.2" }, @@ -8568,7 +8757,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, + "devOptional": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -9209,7 +9398,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", - "dev": true, + "devOptional": true, "dependencies": { "@eslint/eslintrc": "^1.2.3", "@humanwhocodes/config-array": "^0.9.2", @@ -9305,7 +9494,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, + "devOptional": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -9323,7 +9512,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -9332,38 +9521,22 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, + "devOptional": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/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/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "devOptional": true }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -9375,7 +9548,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, + "devOptional": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -9388,7 +9561,7 @@ "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, + "devOptional": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -9400,7 +9573,7 @@ "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, + "devOptional": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -9415,7 +9588,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "dependencies": { "argparse": "^2.0.1" }, @@ -9423,17 +9596,11 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/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/eslint/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, + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9445,7 +9612,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" }, @@ -9457,7 +9624,7 @@ "version": "9.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, + "devOptional": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -9538,7 +9705,7 @@ "version": "6.4.7", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true + "devOptional": true }, "node_modules/eventemitter3": { "version": "4.0.7", @@ -9579,7 +9746,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, + "devOptional": true, "dependencies": { "pify": "^2.2.0" }, @@ -9716,7 +9883,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "devOptional": true }, "node_modules/external-editor": { "version": "3.1.0", @@ -9748,7 +9915,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -9768,7 +9935,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "dependencies": { "pump": "^3.0.0" }, @@ -9783,7 +9950,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, + "devOptional": true, "engines": [ "node >=0.6.0" ] @@ -9817,7 +9984,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "devOptional": true }, "node_modules/fastq": { "version": "1.13.0", @@ -9850,7 +10017,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "dependencies": { "pend": "~1.2.0" } @@ -9873,7 +10040,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "devOptional": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -9900,26 +10067,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/file-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, "node_modules/file-loader/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -10045,7 +10192,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "devOptional": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -10058,7 +10205,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "devOptional": true }, "node_modules/follow-redirects": { "version": "1.15.2", @@ -10083,7 +10230,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -10121,21 +10268,6 @@ } } }, - "node_modules/fork-ts-checker-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==", - "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/fork-ts-checker-webpack-plugin/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -10151,11 +10283,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/fork-ts-checker-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==" - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -10276,7 +10403,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "devOptional": true }, "node_modules/gauge": { "version": "4.0.4", @@ -10349,7 +10476,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, + "devOptional": true, "dependencies": { "async": "^3.2.0" } @@ -10358,7 +10485,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, + "devOptional": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -10413,7 +10540,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, + "devOptional": true, "dependencies": { "ini": "2.0.0" }, @@ -10428,7 +10555,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -10747,7 +10874,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, + "devOptional": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -10951,7 +11078,7 @@ "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, + "devOptional": true, "engines": { "node": ">=8" } @@ -11066,7 +11193,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, + "devOptional": true, "dependencies": { "ci-info": "^3.2.0" }, @@ -11138,7 +11265,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, + "devOptional": true, "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -11176,7 +11303,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -11224,7 +11351,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "devOptional": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -11276,7 +11403,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "devOptional": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -12306,7 +12433,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "devOptional": true }, "node_modules/jsdom": { "version": "19.0.0", @@ -12404,24 +12531,24 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "devOptional": true }, "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==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "devOptional": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "devOptional": true }, "node_modules/json5": { "version": "2.2.1", @@ -12463,7 +12590,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, + "devOptional": true, "engines": [ "node >=0.6.0" ], @@ -12512,7 +12639,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, + "devOptional": true, "engines": { "node": "> 0.8" } @@ -12616,7 +12743,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "devOptional": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -12658,7 +12785,7 @@ "version": "3.14.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, + "devOptional": true, "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -12732,13 +12859,13 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "devOptional": true }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "devOptional": true }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -12764,7 +12891,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -12782,7 +12909,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -12799,7 +12926,7 @@ "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, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13019,6 +13146,21 @@ "webpack": "^5.0.0" } }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/mini-css-extract-plugin/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -13030,6 +13172,11 @@ "ajv": "^8.8.2" } }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -13739,6 +13886,14 @@ "node": ">=10" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -13821,7 +13976,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "devOptional": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -13869,7 +14024,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true + "devOptional": true }, "node_modules/p-limit": { "version": "3.1.0", @@ -13914,7 +14069,7 @@ "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, + "devOptional": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -14132,13 +14287,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "devOptional": true }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "devOptional": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -14649,6 +14804,24 @@ "postcss": "^8.0.0" } }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, "node_modules/postcss-lab-function": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", @@ -14669,6 +14842,34 @@ "postcss": "^8.2" } }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, "node_modules/postcss-loader": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", @@ -14861,6 +15062,24 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, "node_modules/postcss-nesting": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", @@ -15280,7 +15499,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.8.0" } @@ -15289,7 +15508,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, + "devOptional": true, "bin": { "prettier": "bin-prettier.js" }, @@ -15304,7 +15523,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" }, @@ -15418,13 +15637,13 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "devOptional": true }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -15477,6 +15696,17 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -15534,26 +15764,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/raw-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/raw-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, "node_modules/raw-loader/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -15730,7 +15940,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" }, @@ -15782,7 +15992,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, + "devOptional": true, "dependencies": { "throttleit": "^1.0.0" } @@ -15911,7 +16121,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "devOptional": true }, "node_modules/rimraf": { "version": "3.0.2", @@ -16063,31 +16273,16 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, "node_modules/secure-compare": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -16339,7 +16534,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -16545,7 +16740,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, + "devOptional": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -16894,6 +17089,88 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/tailwindcss": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", + "integrity": "sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==", + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.17", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/tailwindcss/node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "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/tailwindcss/node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -16999,21 +17276,6 @@ } } }, - "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==", - "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/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -17027,11 +17289,6 @@ "node": ">= 10.13.0" } }, - "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==" - }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -17102,13 +17359,13 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "devOptional": true }, "node_modules/throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true + "devOptional": true }, "node_modules/through": { "version": "2.3.8", @@ -17167,7 +17424,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, + "devOptional": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -17365,7 +17622,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, + "devOptional": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -17377,13 +17634,13 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "devOptional": true }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "devOptional": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -17431,7 +17688,6 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17531,7 +17787,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -17662,7 +17918,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, + "devOptional": true, "engines": [ "node >=0.6.0" ], @@ -17676,7 +17932,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "devOptional": true }, "node_modules/w3c-hr-time": { "version": "1.0.2", @@ -17813,6 +18069,21 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/webpack-dev-middleware/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -17824,6 +18095,11 @@ "ajv": "^8.8.2" } }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -17896,6 +18172,21 @@ } } }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "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/webpack-dev-server/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -17907,6 +18198,11 @@ "ajv": "^8.8.2" } }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/webpack-dev-server/node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -17978,26 +18274,6 @@ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==" }, - "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==", - "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/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -18112,7 +18388,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -18185,6 +18461,14 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -18235,7 +18519,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -18548,6 +18832,18 @@ "@jridgewell/trace-mapping": "^0.3.9" } }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -18681,6 +18977,12 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "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 + }, "less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", @@ -19075,6 +19377,22 @@ "source-map": "0.7.4" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==" + }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -20571,19 +20889,21 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true + "dev": true, + "requires": {} }, "@csstools/selector-specificity": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", - "dev": true + "dev": true, + "requires": {} }, "@cypress/request": { "version": "2.88.10", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, + "devOptional": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -20609,7 +20929,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, + "devOptional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -20620,7 +20940,7 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true + "devOptional": true } } }, @@ -20650,7 +20970,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, + "devOptional": true, "requires": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -20660,7 +20980,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "devOptional": true, "requires": { "ms": "^2.1.1" } @@ -20684,7 +21004,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, + "devOptional": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -20697,29 +21017,17 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "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 + "devOptional": true }, "globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, + "devOptional": true, "requires": { "type-fest": "^0.20.2" } @@ -20728,22 +21036,16 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "requires": { "argparse": "^2.0.1" } }, - "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 - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -20752,7 +21054,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "devOptional": true } } }, @@ -20766,7 +21068,7 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, + "devOptional": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -20777,7 +21079,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "devOptional": true }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -21229,11 +21531,37 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "@ngneat/falso": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@ngneat/falso/-/falso-6.1.0.tgz", + "integrity": "sha512-eka5OxW65B1RphpLJ04Pd4PEkrmTab/Ut50K0OceAdM+O+MZA7YF9xo51uZgkxbhg8bJ5zEh5vucDRMSofcqsw==", + "requires": { + "seedrandom": "3.0.5", + "uuid": "8.3.2" + } + }, + "@ngrx/effects": { + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-14.3.2.tgz", + "integrity": "sha512-6bpGfA44jzwhBcmNaTwVgnFmYOX9iKPFpXyetDe41tVESo1CsNhUBPTmISDXKN9Mx2mwGbsMxrn6QFRypSsKAQ==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@ngrx/store": { + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-14.3.2.tgz", + "integrity": "sha512-XGHjr0arh6gClo8Ce+xqJLvW9PkeXPW2tCo9Z5qMtHFI/z5dUppLVKGmMgD/fQBDyoqWTK5xu+89tDkdeZfRjQ==", + "requires": { + "tslib": "^2.0.0" + } + }, "@ngtools/webpack": { "version": "14.2.8", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.8.tgz", "integrity": "sha512-ugQRiOgQBbZUFSRRfj+KOUrtGHWI7IyVfnK3HA08+QFQOygY6igs07D6v4l5RHkUnyQkCgUE30EaFaj58fGJjg==", - "dev": true + "dev": true, + "requires": {} }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -22157,13 +22485,13 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true + "devOptional": true }, "@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true + "devOptional": true }, "@types/sockjs": { "version": "0.3.33", @@ -22740,13 +23068,37 @@ "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "devOptional": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + } + } }, "acorn-walk": { "version": "8.2.0", @@ -22787,20 +23139,20 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, + "devOptional": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, @@ -22810,12 +23162,31 @@ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "requires": { "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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==" + } } }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "ansi-colors": { "version": "4.1.3", @@ -22867,7 +23238,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true + "devOptional": true }, "are-we-there-yet": { "version": "3.0.1", @@ -22912,7 +23283,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, + "devOptional": true, "requires": { "safer-buffer": "~2.1.0" } @@ -22921,13 +23292,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true + "devOptional": true }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "devOptional": true }, "async": { "version": "3.2.4", @@ -22943,7 +23314,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "devOptional": true }, "atob": { "version": "2.1.2", @@ -22967,13 +23338,13 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true + "devOptional": true }, "aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "devOptional": true }, "axios": { "version": "1.1.3", @@ -23128,7 +23499,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, + "devOptional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -23157,7 +23528,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true + "devOptional": true }, "bluebird": { "version": "3.7.1", @@ -23288,7 +23659,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "devOptional": true }, "buffer-from": { "version": "1.1.2", @@ -23372,7 +23743,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true + "devOptional": true }, "call-bind": { "version": "1.0.2", @@ -23393,6 +23764,11 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -23413,7 +23789,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "devOptional": true }, "chalk": { "version": "4.1.0", @@ -23444,7 +23820,7 @@ "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true + "devOptional": true }, "chokidar": { "version": "3.5.3", @@ -23486,7 +23862,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "devOptional": true }, "cli-cursor": { "version": "3.1.0", @@ -23505,7 +23881,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, + "devOptional": true, "requires": { "@colors/colors": "1.5.0", "string-width": "^4.2.0" @@ -23515,7 +23891,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, + "devOptional": true, "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -23608,7 +23984,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true + "devOptional": true }, "commondir": { "version": "1.0.1", @@ -23731,6 +24107,17 @@ "serialize-javascript": "^6.0.0" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -23747,6 +24134,11 @@ "is-glob": "^4.0.3" } }, + "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==" + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -23861,7 +24253,8 @@ "css-declaration-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==" + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "requires": {} }, "css-has-pseudo": { "version": "3.0.4", @@ -23900,6 +24293,17 @@ "source-map": "^0.6.1" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -23918,6 +24322,11 @@ "supports-color": "^8.0.0" } }, + "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==" + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -23948,7 +24357,8 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true + "dev": true, + "requires": {} }, "css-select": { "version": "4.3.0", @@ -24043,7 +24453,8 @@ "cssnano-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} }, "csso": { "version": "4.2.0", @@ -24080,7 +24491,7 @@ "version": "10.11.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz", "integrity": "sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==", - "dev": true, + "devOptional": true, "requires": { "@cypress/request": "^2.88.10", "@cypress/xvfb": "^1.2.4", @@ -24130,25 +24541,25 @@ "version": "14.18.33", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", - "dev": true + "devOptional": true }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "devOptional": true }, "commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true + "devOptional": true }, "execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, + "devOptional": true, "requires": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -24165,7 +24576,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "devOptional": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -24177,7 +24588,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "requires": { "pump": "^3.0.0" } @@ -24186,19 +24597,19 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true + "devOptional": true }, "proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true + "devOptional": true }, "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, + "devOptional": true, "requires": { "has-flag": "^4.0.0" } @@ -24209,7 +24620,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "^1.0.0" } @@ -24241,7 +24652,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==", - "dev": true + "devOptional": true }, "debug": { "version": "4.3.4", @@ -24271,7 +24682,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "devOptional": true }, "deepmerge": { "version": "4.2.2", @@ -24299,6 +24710,11 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -24336,6 +24752,21 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -24354,6 +24785,11 @@ "path-type": "^4.0.0" } }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -24371,7 +24807,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "devOptional": true, "requires": { "esutils": "^2.0.2" } @@ -24432,7 +24868,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, + "devOptional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -24818,7 +25254,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", - "dev": true, + "devOptional": true, "requires": { "@eslint/eslintrc": "^1.2.3", "@humanwhocodes/config-array": "^0.9.2", @@ -24857,35 +25293,23 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "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 + "devOptional": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "devOptional": true }, "eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, + "devOptional": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -24895,7 +25319,7 @@ "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, + "devOptional": true, "requires": { "is-glob": "^4.0.3" } @@ -24904,7 +25328,7 @@ "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, + "devOptional": true, "requires": { "type-fest": "^0.20.2" } @@ -24913,22 +25337,16 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "requires": { "argparse": "^2.0.1" } }, - "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 - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -24937,7 +25355,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "devOptional": true } } }, @@ -24945,7 +25363,8 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz", "integrity": "sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-cypress": { "version": "2.12.1", @@ -24976,7 +25395,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, + "devOptional": true, "requires": { "eslint-visitor-keys": "^2.0.0" }, @@ -24985,7 +25404,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "devOptional": true } } }, @@ -24993,13 +25412,13 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "devOptional": true }, "espree": { "version": "9.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, + "devOptional": true, "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -25052,7 +25471,7 @@ "version": "6.4.7", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true + "devOptional": true }, "eventemitter3": { "version": "4.0.7", @@ -25084,7 +25503,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, + "devOptional": true, "requires": { "pify": "^2.2.0" } @@ -25193,7 +25612,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "devOptional": true }, "external-editor": { "version": "3.1.0", @@ -25221,7 +25640,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -25233,7 +25652,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "requires": { "pump": "^3.0.0" } @@ -25244,7 +25663,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true + "devOptional": true }, "fast-deep-equal": { "version": "3.1.3", @@ -25272,7 +25691,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "devOptional": true }, "fastq": { "version": "1.13.0", @@ -25302,7 +25721,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "requires": { "pend": "~1.2.0" } @@ -25319,7 +25738,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "devOptional": true, "requires": { "flat-cache": "^3.0.4" } @@ -25333,22 +25752,6 @@ "schema-utils": "^3.0.0" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "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==" - }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -25452,7 +25855,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "devOptional": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -25462,7 +25865,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "devOptional": true }, "follow-redirects": { "version": "1.15.2", @@ -25473,7 +25876,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true + "devOptional": true }, "fork-ts-checker-webpack-plugin": { "version": "7.2.13", @@ -25494,17 +25897,6 @@ "tapable": "^2.2.1" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -25514,11 +25906,6 @@ "supports-color": "^7.1.0" } }, - "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==" - }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -25605,7 +25992,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "devOptional": true }, "gauge": { "version": "4.0.4", @@ -25657,7 +26044,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, + "devOptional": true, "requires": { "async": "^3.2.0" } @@ -25666,7 +26053,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "^1.0.0" } @@ -25711,7 +26098,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, + "devOptional": true, "requires": { "ini": "2.0.0" }, @@ -25720,7 +26107,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true + "devOptional": true } } }, @@ -25975,7 +26362,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -26017,7 +26404,8 @@ "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} }, "identity-obj-proxy": { "version": "3.0.0", @@ -26112,7 +26500,7 @@ "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 + "devOptional": true }, "infer-owner": { "version": "1.0.4", @@ -26208,7 +26596,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, + "devOptional": true, "requires": { "ci-info": "^3.2.0" } @@ -26253,7 +26641,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, + "devOptional": true, "requires": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -26279,7 +26667,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true + "devOptional": true }, "is-plain-obj": { "version": "3.0.0", @@ -26309,7 +26697,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "devOptional": true }, "is-unicode-supported": { "version": "0.1.0", @@ -26349,7 +26737,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "devOptional": true }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -26797,7 +27185,8 @@ "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "requires": {} }, "jest-preset-angular": { "version": "12.2.2", @@ -27156,7 +27545,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "devOptional": true }, "jsdom": { "version": "19.0.0", @@ -27233,24 +27622,24 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "devOptional": true }, "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==" + "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==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "devOptional": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "devOptional": true }, "json5": { "version": "2.2.1", @@ -27281,7 +27670,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -27318,7 +27707,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true + "devOptional": true }, "less": { "version": "3.12.2", @@ -27387,7 +27776,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "devOptional": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -27415,7 +27804,7 @@ "version": "3.14.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, + "devOptional": true, "requires": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -27469,13 +27858,13 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "devOptional": true }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "devOptional": true }, "lodash.uniq": { "version": "4.5.0", @@ -27495,7 +27884,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, + "devOptional": true, "requires": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -27507,7 +27896,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -27518,7 +27907,7 @@ "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, + "devOptional": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -27681,6 +28070,17 @@ "schema-utils": "^4.0.0" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -27689,6 +28089,11 @@ "fast-deep-equal": "^3.1.3" } }, + "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==" + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -28231,6 +28636,11 @@ } } }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -28289,7 +28699,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, + "devOptional": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -28325,7 +28735,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true + "devOptional": true }, "p-limit": { "version": "3.1.0", @@ -28357,7 +28767,7 @@ "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, + "devOptional": true, "requires": { "aggregate-error": "^3.0.0" } @@ -28535,13 +28945,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "devOptional": true }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "devOptional": true }, "picocolors": { "version": "1.0.0", @@ -28742,22 +29152,26 @@ "postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "requires": {} }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} }, "postcss-double-position-gradients": { "version": "3.1.2", @@ -28800,13 +29214,15 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true + "dev": true, + "requires": {} }, "postcss-gap-properties": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true + "dev": true, + "requires": {} }, "postcss-image-set-function": { "version": "4.0.7", @@ -28831,7 +29247,16 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true + "dev": true, + "requires": {} + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "requires": { + "camelcase-css": "^2.0.1" + } }, "postcss-lab-function": { "version": "4.2.1", @@ -28843,6 +29268,15 @@ "postcss-value-parser": "^4.2.0" } }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, "postcss-loader": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", @@ -28857,13 +29291,15 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true + "dev": true, + "requires": {} }, "postcss-media-minmax": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-merge-longhand": { "version": "5.1.7", @@ -28924,7 +29360,8 @@ "postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -28952,6 +29389,14 @@ "icss-utils": "^5.0.0" } }, + "postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, "postcss-nesting": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", @@ -28965,7 +29410,8 @@ "postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -29061,7 +29507,8 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-place": { "version": "7.0.5", @@ -29159,7 +29606,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-selector-not": { "version": "6.0.1", @@ -29205,19 +29653,19 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "devOptional": true }, "prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true + "devOptional": true }, "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true + "devOptional": true }, "pretty-format": { "version": "28.1.3", @@ -29305,13 +29753,13 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "devOptional": true }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -29341,6 +29789,11 @@ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -29381,22 +29834,6 @@ "schema-utils": "^3.0.0" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "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==" - }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -29543,7 +29980,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "devOptional": true }, "regexpu-core": { "version": "5.2.1", @@ -29582,7 +30019,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, + "devOptional": true, "requires": { "throttleit": "^1.0.0" } @@ -29676,7 +30113,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "devOptional": true }, "rimraf": { "version": "3.0.2", @@ -29759,24 +30196,6 @@ "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "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==" - } } }, "secure-compare": { @@ -29784,6 +30203,11 @@ "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -29998,7 +30422,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, + "devOptional": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -30168,7 +30592,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, + "devOptional": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -30285,7 +30709,8 @@ "style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "requires": {} }, "stylehacks": { "version": "5.1.1", @@ -30403,6 +30828,73 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "tailwindcss": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", + "integrity": "sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==", + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.17", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "dependencies": { + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "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==", + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -30487,17 +30979,6 @@ "terser": "^5.14.1" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -30508,11 +30989,6 @@ "supports-color": "^8.0.0" } }, - "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==" - }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -30547,13 +31023,13 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "devOptional": true }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true + "devOptional": true }, "through": { "version": "2.3.8", @@ -30600,7 +31076,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, + "devOptional": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -30729,7 +31205,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, + "devOptional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -30738,13 +31214,13 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "devOptional": true }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "devOptional": true, "requires": { "prelude-ls": "^1.2.1" } @@ -30776,8 +31252,7 @@ "typescript": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -30843,7 +31318,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true + "devOptional": true }, "update-browserslist-db": { "version": "1.0.10", @@ -30940,7 +31415,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, + "devOptional": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -30951,7 +31426,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "devOptional": true } } }, @@ -31043,22 +31518,6 @@ "webpack-sources": "^3.2.3" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "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==" - }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -31083,6 +31542,17 @@ "schema-utils": "^4.0.0" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -31091,6 +31561,11 @@ "fast-deep-equal": "^3.1.3" } }, + "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==" + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -31140,6 +31615,17 @@ "ws": "^8.4.2" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -31148,6 +31634,11 @@ "fast-deep-equal": "^3.1.3" } }, + "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==" + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -31268,7 +31759,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "devOptional": true }, "wrap-ansi": { "version": "7.0.0", @@ -31297,7 +31788,8 @@ "ws": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", - "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==" + "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", + "requires": {} }, "xml-name-validator": { "version": "4.0.0", @@ -31311,6 +31803,11 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -31349,7 +31846,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/package.json b/package.json index aa8689b..75fc31a 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,12 @@ "@angular/platform-browser": "~14.2.0", "@angular/platform-browser-dynamic": "~14.2.0", "@angular/router": "~14.2.0", + "@ngneat/falso": "^6.1.0", + "@ngrx/effects": "^14.3.2", + "@ngrx/store": "^14.3.2", "@nrwl/angular": "15.0.7", "rxjs": "~7.5.0", + "tailwindcss": "^3.2.1", "tslib": "^2.3.0", "zone.js": "~0.11.4" },