From 64164b28de770563ac29f170e30a8cbf17738b8d Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 09:42:21 -0400 Subject: [PATCH 01/17] fix(plex): More config data normalization * Split user value on comma to align with what config describes as acceptable (comma-delim) * Trim found values to fix any whitespace typos * On disallowed event logging add expected/found values to help with debugging Fixes #84 --- src/sources/PlexSource.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/sources/PlexSource.ts b/src/sources/PlexSource.ts index 5514b2c9..beb964ec 100644 --- a/src/sources/PlexSource.ts +++ b/src/sources/PlexSource.ts @@ -29,7 +29,11 @@ export default class PlexSource extends AbstractSource { const {data: {user = [], libraries = [], servers = []} = {}} = config if (!Array.isArray(user)) { - this.users = [user]; + if(user.trim() === '') { + this.users = []; + } else { + this.users = user.split(',').map(x => x.trim()); + } } else { this.users = user; } @@ -123,7 +127,7 @@ export default class PlexSource extends AbstractSource { if (user === undefined) { this.logger.warn(`Config defined users but payload contained no user info${hint}`); } else if (!this.users.includes(user.toLocaleLowerCase())) { - this.logger.verbose(`Will not scrobble event because author was not an allowed user: ${user}`, { + this.logger.verbose(`Will not scrobble event because author was not an allowed user. Expected: ${this.users.map(x => `'${x}'`).join(' or ')} | Found: '${user.toLocaleLowerCase()}'`, { artists, track }) @@ -151,7 +155,7 @@ export default class PlexSource extends AbstractSource { if (library === undefined) { this.logger.warn(`Config defined libraries but payload contained no library info${hint}`); } else if (!this.libraries.includes(library.toLocaleLowerCase())) { - this.logger.verbose(`Will not scrobble event because library was not on allowed list: ${library}`, { + this.logger.verbose(`Will not scrobble event because library was not an allowed library. Expected: ${this.libraries.map(x => `'${x}'`).join(' or ')} | Found: '${library.toLocaleLowerCase()}'`, { artists, track }) @@ -163,7 +167,7 @@ export default class PlexSource extends AbstractSource { if (server === undefined) { this.logger.warn(`Config defined server but payload contained no server info${hint}`); } else if (!this.servers.includes(server.toLocaleLowerCase())) { - this.logger.verbose(`Will not scrobble event because server was not on allowed list: ${server}`, { + this.logger.verbose(`Will not scrobble event because server was not an allowed server. Expected: ${this.servers.map(x => `'${x}'`).join(' or ')} | Found: '${server.toLocaleLowerCase()}'`, { artists, track }) -- 2.51.2 From 19c3d97a4683c49ea74fdf3581c529ece524e628 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 09:46:22 -0400 Subject: [PATCH 02/17] chore(docker): Remove armv7 buildx platform It's legacy and not supported in most places! Don't need to build for this anymore. --- .github/workflows/dockerhub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index ec73ffa5..cd963132 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -52,4 +52,4 @@ jobs: push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - platforms: linux/amd64,linux/arm64,linux/arm/v7 + platforms: linux/amd64,linux/arm64 -- 2.51.2 From e452bd761c3fddd230e247c6498cf4930c1e15c8 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 09:58:07 -0400 Subject: [PATCH 03/17] chore(github): Publish to GHCR Also pin actions at versions instead of commits --- .../{dockerhub.yml => publishImage.yml} | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) rename .github/workflows/{dockerhub.yml => publishImage.yml} (59%) diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/publishImage.yml similarity index 59% rename from .github/workflows/dockerhub.yml rename to .github/workflows/publishImage.yml index cd963132..f5d89f5d 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/publishImage.yml @@ -15,22 +15,36 @@ jobs: push_to_registry: name: Push Docker image to Docker Hub runs-on: ubuntu-latest + # https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token + permissions: + packages: write + contents: read steps: - name: Check out the repo - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b + uses: actions/checkout@v2 - name: Log in to Docker Hub if: github.event_name != 'pull_request' - uses: docker/login-action@dd4fa0671be5250ee6f50aedf4cb05514abda2c7 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Login to GitHub Container Registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta - uses: docker/metadata-action@f2a13332ac1ce8c0a71aeac48a150dbb1838ab67 + uses: docker/metadata-action@v3 with: - images: foxxmd/multi-scrobbler + images: | + foxxmd/multi-scrobbler + ghcr.io/foxxmd/multi-scrobbler # generate Docker tags based on the following events/attributes tags: | type=raw,value=latest,enable=${{ endsWith(github.ref, 'master') }} @@ -40,16 +54,16 @@ jobs: latest=false - name: Set up QEMU - uses: docker/setup-qemu-action@27d0a4f181a40b142cce983c5393082c365d1480 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@94ab11c41e45d028884a99163086648e898eed25 + uses: docker/setup-buildx-action@v2 - name: Build and push Docker image - uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a + uses: docker/build-push-action@v4 with: context: . - push: ${{ github.event_name != 'pull_request' }} + push: ${{ github.event_name != 'pull_request' && !env.ACT}} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 -- 2.51.2 From 226b7c741c4cd0d729df77e04d3d6db638bd71b8 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 11:07:12 -0400 Subject: [PATCH 04/17] feat: Implement filter logging controls For jellyfin/plex/tautulli -- `logFilterFailure` option in config allows controlling if and what log LEVEL user/server filter failures are logged. #85 * Updated schema * Updated examples * Also added expected/found detailed logging for filters to jellyfin #84 --- config/jellyfin.json.example | 3 +- config/plex.json.example | 5 +- config/tautulli.json.example | 5 +- .../infrastructure/config/source/jellyfin.ts | 14 ++++ .../infrastructure/config/source/plex.ts | 20 ++++++ src/common/schema/aio-source.json | 29 +++++++- src/common/schema/aio.json | 29 +++++++- src/common/schema/source.json | 29 +++++++- src/sources/JellyfinSource.ts | 56 +++++++++++++--- src/sources/PlexSource.ts | 67 +++++++++++++------ 10 files changed, 224 insertions(+), 33 deletions(-) diff --git a/config/jellyfin.json.example b/config/jellyfin.json.example index 4fda84d3..a8a01f70 100644 --- a/config/jellyfin.json.example +++ b/config/jellyfin.json.example @@ -6,7 +6,8 @@ "users": ["FoxxMD"], "servers": ["myServer","anotherServer"], "options": { - "logPayload": false + "logPayload": false, + "logFilterFailure": "warn" } } } diff --git a/config/plex.json.example b/config/plex.json.example index 5c8b15ce..0410a3d1 100644 --- a/config/plex.json.example +++ b/config/plex.json.example @@ -5,7 +5,10 @@ "data": { "user": ["username@gmail.com","anotherUser@gmail.com"], "libraries": ["music","my podcasts"], - "servers": ["myServer","anotherServer"] + "servers": ["myServer","anotherServer"], + "options": { + "logFilterFailure": "warn" + } } } ] diff --git a/config/tautulli.json.example b/config/tautulli.json.example index 811976c5..eaa6c822 100644 --- a/config/tautulli.json.example +++ b/config/tautulli.json.example @@ -5,7 +5,10 @@ "data": { "user": ["username@gmail.com","anotherUser@gmail.com"], "libraries": ["music","my podcasts"], - "servers": ["myServer","anotherServer"] + "servers": ["myServer","anotherServer"], + "options": { + "logFilterFailure": "warn" + } } } ] diff --git a/src/common/infrastructure/config/source/jellyfin.ts b/src/common/infrastructure/config/source/jellyfin.ts index 59d2805c..dcae98c0 100644 --- a/src/common/infrastructure/config/source/jellyfin.ts +++ b/src/common/infrastructure/config/source/jellyfin.ts @@ -29,6 +29,20 @@ export interface JellyData extends CommonSourceData { * @examples [false] * */ logPayload?: boolean + + /** + * How MS should log when a Jellyfin event fails a defined filter (users/servers) + * + * * `false` => do not log + * * `debug` => log to DEBUG level + * * `warn` => log to WARN level (default) + * + * Hint: This is useful if you are sure this source is setup correctly and you have multiple other Jellyfin sources. Set to `debug` or `false` to reduce log noise. + * + * @default warn + * @examples ["warn"] + * */ + logFilterFailure?: false | 'debug' | 'warn' } } diff --git a/src/common/infrastructure/config/source/plex.ts b/src/common/infrastructure/config/source/plex.ts index d4ff98a4..62159fe0 100644 --- a/src/common/infrastructure/config/source/plex.ts +++ b/src/common/infrastructure/config/source/plex.ts @@ -25,6 +25,26 @@ export interface PlexSourceData extends CommonSourceData { * @examples [["MyServerName"]] * */ servers?: string | string[] + + /** + * Additional options for Plex/Tautulli logging and tuning + * */ + options?: { + + /** + * How MS should log when a Plex/Tautulli event fails a defined filter (users/servers) + * + * * `false` => do not log + * * `debug` => log to DEBUG level + * * `warn` => log to WARN level (default) + * + * Hint: This is useful if you are sure this source is setup correctly and you have multiple other Plex/Tautulli sources. Set to `debug` or `false` to reduce log noise. + * + * @default warn + * @examples ["warn"] + * */ + logFilterFailure?: false | 'debug' | 'warn' + } } export interface PlexSourceConfig extends CommonSourceConfig { diff --git a/src/common/schema/aio-source.json b/src/common/schema/aio-source.json index e809b75a..5c90dc07 100644 --- a/src/common/schema/aio-source.json +++ b/src/common/schema/aio-source.json @@ -234,6 +234,18 @@ "options": { "description": "Additional options for jellyfin logging and tuning", "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Jellyfin event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Jellyfin sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ] + }, "logPayload": { "default": false, "description": "Log raw Jellyfin webhook payload to debug", @@ -969,7 +981,22 @@ "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "description": "Additional options for Plex/Tautulli logging and tuning", + "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Plex/Tautulli event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Plex/Tautulli sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ] + } + }, + "type": "object" }, "retryMultiplier": { "default": 1.5, diff --git a/src/common/schema/aio.json b/src/common/schema/aio.json index 5ae6251f..7abda462 100644 --- a/src/common/schema/aio.json +++ b/src/common/schema/aio.json @@ -341,6 +341,18 @@ "options": { "description": "Additional options for jellyfin logging and tuning", "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Jellyfin event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Jellyfin sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ] + }, "logPayload": { "default": false, "description": "Log raw Jellyfin webhook payload to debug", @@ -1499,7 +1511,22 @@ "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "description": "Additional options for Plex/Tautulli logging and tuning", + "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Plex/Tautulli event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Plex/Tautulli sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ] + } + }, + "type": "object" }, "retryMultiplier": { "default": 1.5, diff --git a/src/common/schema/source.json b/src/common/schema/source.json index 94bd84a9..2e1e84de 100644 --- a/src/common/schema/source.json +++ b/src/common/schema/source.json @@ -261,6 +261,18 @@ "options": { "description": "Additional options for jellyfin logging and tuning", "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Jellyfin event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Jellyfin sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ] + }, "logPayload": { "default": false, "description": "Log raw Jellyfin webhook payload to debug", @@ -947,7 +959,22 @@ "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "description": "Additional options for Plex/Tautulli logging and tuning", + "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Plex/Tautulli event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Plex/Tautulli sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ] + } + }, + "type": "object" }, "retryMultiplier": { "default": 1.5, diff --git a/src/sources/JellyfinSource.ts b/src/sources/JellyfinSource.ts index 4af2a9c9..89a3cc25 100644 --- a/src/sources/JellyfinSource.ts +++ b/src/sources/JellyfinSource.ts @@ -17,28 +17,52 @@ export default class JellyfinSource extends MemorySource { constructor(name: any, config: JellySourceConfig, internal: InternalConfig, emitter: EventEmitter) { super('jellyfin', name, config, internal, emitter); - const {data: {users, servers} = {}} = config; + const { + data: { + users, + servers, + options: { + logFilterFailure = 'warn' + } = {} + } = {} + } = config; + + if(logFilterFailure !== false && !['debug', 'warn'].includes(logFilterFailure)) { + this.logger.warn(`logFilterFailure value of '${logFilterFailure.toString()}' is NOT VALID. Logging will not occur if filters fail. You should fix this.`); + } if (users === undefined || users === null) { this.users = undefined; } else { if (!Array.isArray(users)) { - this.users = users.split(',') + if(users.trim() === '') { + this.users = undefined; + } else { + this.users = users.split(',').map(x => x.trim()); + } } else { this.users = users; } - this.users = this.users.map((x: any) => x.toLocaleLowerCase()) + if(this.users !== undefined) { + this.users = this.users.map((x: any) => x.toLocaleLowerCase()) + } } if (servers === undefined || servers === null) { this.servers = undefined; } else { if (!Array.isArray(servers)) { - this.servers = servers.split(',') + if(servers.trim() === '') { + this.servers = undefined; + } else { + this.servers = servers.split(',').map(x => x.trim()); + } } else { this.servers = servers; } - this.servers = this.servers.map((x: any) => x.toLocaleLowerCase()) + if(this.servers !== undefined) { + this.servers = this.servers.map((x: any) => x.toLocaleLowerCase()); + } } if (users === undefined && servers === undefined) { @@ -124,6 +148,22 @@ export default class JellyfinSource extends MemorySource { } } + protected logFilterFailure = (str: string, meta?: any) => { + const { + data: { + options: { + logFilterFailure = 'warn' + } = {} + } = {} + } = this.config; + + if(logFilterFailure === false || !['warn','debug'].includes(logFilterFailure)) { + return false; + } + + this.logger[logFilterFailure](str, meta); + } + isValidEvent = (playObj: PlayObject) => { const { meta: { @@ -148,7 +188,7 @@ export default class JellyfinSource extends MemorySource { } if (this.servers !== undefined && !this.servers.includes(server.toLocaleLowerCase())) { - this.logger.warn(`Will not scrobble event because server was not on allowed list, found server: ${server}`, { + this.logFilterFailure(`Will not scrobble event because server was not an allowed server. Expected: ${this.servers.map(x => `'${x}'`).join(' or ')} | Found: '${server.toLocaleLowerCase()}'`, { track }) return false; @@ -156,10 +196,10 @@ export default class JellyfinSource extends MemorySource { if (this.users !== undefined) { if (user === undefined) { - this.logger.warn(`Will not scrobble event because config defined users but payload contained no user info`); + this.logFilterFailure(`Will not scrobble event because config defined users but payload contained no user info`); return false; } else if (!this.users.includes(user.toLocaleLowerCase())) { - this.logger.warn(`Will not scrobble event because author was not an allowed user: ${user}`, { + this.logFilterFailure(`Will not scrobble event because author was not an allowed user. Expected: ${this.users.map(x => `'${x}'`).join(' or ')} | Found: '${user.toLocaleLowerCase()}'`, { artists, track }) diff --git a/src/sources/PlexSource.ts b/src/sources/PlexSource.ts index beb964ec..20456295 100644 --- a/src/sources/PlexSource.ts +++ b/src/sources/PlexSource.ts @@ -26,7 +26,20 @@ export default class PlexSource extends AbstractSource { constructor(name: any, config: PlexSourceConfig, internal: InternalConfig, type: SourceType = 'plex',emitter: EventEmitter) { super(type, name, config, internal, emitter); - const {data: {user = [], libraries = [], servers = []} = {}} = config + const { + data: { + user = [], + libraries = [], + servers = [], + options: { + logFilterFailure = 'warn' + } = {} + } = {}, + } = config + + if(logFilterFailure !== false && !['debug', 'warn'].includes(logFilterFailure)) { + this.logger.warn(`logFilterFailure value of '${logFilterFailure.toString()}' is NOT VALID. Logging will not occur if filters fail. You should fix this.`); + } if (!Array.isArray(user)) { if(user.trim() === '') { @@ -110,6 +123,22 @@ export default class PlexSource extends AbstractSource { } } + protected logFilterFailure = (str: string, meta?: any) => { + const { + data: { + options: { + logFilterFailure = 'warn' + } = {} + } = {} + } = this.config; + + if(logFilterFailure === false || !['warn','debug'].includes(logFilterFailure)) { + return false; + } + + this.logger[logFilterFailure](str, meta); + } + isValidEvent = (playObj: PlayObject) => { const { meta: { @@ -123,20 +152,8 @@ export default class PlexSource extends AbstractSource { const hint = this.type === 'tautulli' ? ' (Check notification agent json data configuration)' : ''; - if (this.users.length !== 0) { - if (user === undefined) { - this.logger.warn(`Config defined users but payload contained no user info${hint}`); - } else if (!this.users.includes(user.toLocaleLowerCase())) { - this.logger.verbose(`Will not scrobble event because author was not an allowed user. Expected: ${this.users.map(x => `'${x}'`).join(' or ')} | Found: '${user.toLocaleLowerCase()}'`, { - artists, - track - }) - return false; - } - } - if (event !== undefined && event !== 'media.scrobble') { - this.logger.verbose(`Will not scrobble event because it is not media.scrobble (${event})`, { + this.logger.debug(`Will not scrobble event because it is not media.scrobble (${event})`, { artists, track }) @@ -144,18 +161,30 @@ export default class PlexSource extends AbstractSource { } if (mediaType !== 'track') { - this.logger.verbose(`Will not scrobble event because media type was not a track (${mediaType})`, { + this.logger.debug(`Will not scrobble event because media type was not a track (${mediaType})`, { artists, track }); return false; } + if (this.users.length !== 0) { + if (user === undefined) { + this.logFilterFailure(`Config defined users but payload contained no user info${hint}`); + } else if (!this.users.includes(user.toLocaleLowerCase())) { + this.logFilterFailure(`Will not scrobble event because author was not an allowed user. Expected: ${this.users.map(x => `'${x}'`).join(' or ')} | Found: '${user.toLocaleLowerCase()}'`, { + artists, + track + }) + return false; + } + } + if (this.libraries.length !== 0) { if (library === undefined) { - this.logger.warn(`Config defined libraries but payload contained no library info${hint}`); + this.logFilterFailure(`Config defined libraries but payload contained no library info${hint}`); } else if (!this.libraries.includes(library.toLocaleLowerCase())) { - this.logger.verbose(`Will not scrobble event because library was not an allowed library. Expected: ${this.libraries.map(x => `'${x}'`).join(' or ')} | Found: '${library.toLocaleLowerCase()}'`, { + this.logFilterFailure(`Will not scrobble event because library was not an allowed library. Expected: ${this.libraries.map(x => `'${x}'`).join(' or ')} | Found: '${library.toLocaleLowerCase()}'`, { artists, track }) @@ -165,9 +194,9 @@ export default class PlexSource extends AbstractSource { if (this.servers.length !== 0) { if (server === undefined) { - this.logger.warn(`Config defined server but payload contained no server info${hint}`); + this.logFilterFailure(`Config defined server but payload contained no server info${hint}`); } else if (!this.servers.includes(server.toLocaleLowerCase())) { - this.logger.verbose(`Will not scrobble event because server was not an allowed server. Expected: ${this.servers.map(x => `'${x}'`).join(' or ')} | Found: '${server.toLocaleLowerCase()}'`, { + this.logFilterFailure(`Will not scrobble event because server was not an allowed server. Expected: ${this.servers.map(x => `'${x}'`).join(' or ')} | Found: '${server.toLocaleLowerCase()}'`, { artists, track }) -- 2.51.2 From b81b1d94a342a29c1b678fac48eca4cd1380e39d Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 11:21:27 -0400 Subject: [PATCH 05/17] docs: Update docker registry options --- docs/installation.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index 58ded300..5078e7cd 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -59,12 +59,18 @@ There are a few [options for running flatpak applications with temporary or perm flatpak run --env=SPOTIFY_CLIENT_ID=yourId --envSPOTIFY_CLIENT_SECRET=yourSecret --env=MALOJA_URL="http://domain.tld" io.github.foxxmd.multiscrobbler ``` -# [Docker](https://hub.docker.com/r/foxxmd/multi-scrobbler) +# Docker -Cross-platform images are built for x86 (Intel/AMD) and ARM (IE Raspberry Pi) +Cross-platform images are built for x86 (Intel/AMD) and ARM64 (IE Raspberry Pi) +[Dockerhub](https://hub.docker.com/r/foxxmd/multi-scrobbler) ``` -foxxmd/multi-scrobbler:latest +docker.io/foxxmd/multi-scrobbler:latest +``` + +[Github Packages](https://github.com/FoxxMD/multi-scrobbler/pkgs/container/multi-scrobbler) +``` +ghcr.io/foxxmd/multi-scrobbler:latest ``` Or use the provided [docker-compose.yml](/docker-compose.yml) after modifying it to fit your configuration. -- 2.51.2 From daea76eef3f3006b1d7a126d62298f3832723f41 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 15:08:00 -0400 Subject: [PATCH 06/17] feat: Implement somewhat-working docusaurus site --- docsite/.gitignore | 20 + docsite/README.md | 41 + docsite/babel.config.js | 3 + docsite/docs/FAQ.md | 136 + docsite/docs/configuration/_category_.json | 8 + docsite/docs/configuration/configuration.md | 768 + docsite/docs/configuration/google-header.jpg | Bin 0 -> 231527 bytes docsite/docs/configuration/kitchensink.md | 293 + docsite/docs/configuration/mpris.jpg | Bin 0 -> 36520 bytes docsite/docs/configuration/plex.md | 73 + docsite/docs/installation/_category_.json | 8 + docsite/docs/installation/installation.md | 123 + docsite/docs/installation/service.md | 73 + docsite/docusaurus.config.js | 146 + docsite/package-lock.json | 12912 +++++++++++++++++ docsite/package.json | 48 + docsite/sidebars.js | 40 + docsite/src/components/JSONSchemaData.tsx | 44 + docsite/src/components/PlaygroundInner.tsx | 59 + docsite/src/contexts/PlaygroundContext.tsx | 50 + docsite/src/css/custom.css | 30 + docsite/src/pages/index.mdx | 100 + docsite/src/pages/playground.tsx | 38 + docsite/static/.nojekyll | 0 docsite/static/aio.json | 2439 ++++ docsite/static/configExample.json | 59 + docsite/static/img/icon.png | Bin 0 -> 4306 bytes docsite/static/img/icon.svg | 12 + docsite/static/img/status-ui.jpg | Bin 0 -> 196020 bytes docsite/static/source.json | 1568 ++ docsite/tsconfig.json | 10 + flatpak/icon.svg | 12 + flatpak/io.github.foxxmd.multiscrobbler.yml | 3 +- package-lock.json | 104 +- package.json | 14 +- src/common/schema/aio-client.json | 76 +- src/common/schema/aio-source.json | 293 +- src/common/schema/aio.json | 416 +- src/common/schema/client.json | 63 +- src/common/schema/source.json | 269 +- tsconfig.json | 3 +- typedoc.json | 14 + 42 files changed, 20191 insertions(+), 177 deletions(-) create mode 100644 docsite/.gitignore create mode 100644 docsite/README.md create mode 100644 docsite/babel.config.js create mode 100644 docsite/docs/FAQ.md create mode 100644 docsite/docs/configuration/_category_.json create mode 100644 docsite/docs/configuration/configuration.md create mode 100644 docsite/docs/configuration/google-header.jpg create mode 100644 docsite/docs/configuration/kitchensink.md create mode 100644 docsite/docs/configuration/mpris.jpg create mode 100644 docsite/docs/configuration/plex.md create mode 100644 docsite/docs/installation/_category_.json create mode 100644 docsite/docs/installation/installation.md create mode 100644 docsite/docs/installation/service.md create mode 100644 docsite/docusaurus.config.js create mode 100644 docsite/package-lock.json create mode 100644 docsite/package.json create mode 100644 docsite/sidebars.js create mode 100644 docsite/src/components/JSONSchemaData.tsx create mode 100644 docsite/src/components/PlaygroundInner.tsx create mode 100644 docsite/src/contexts/PlaygroundContext.tsx create mode 100644 docsite/src/css/custom.css create mode 100644 docsite/src/pages/index.mdx create mode 100644 docsite/src/pages/playground.tsx create mode 100644 docsite/static/.nojekyll create mode 100644 docsite/static/aio.json create mode 100644 docsite/static/configExample.json create mode 100644 docsite/static/img/icon.png create mode 100644 docsite/static/img/icon.svg create mode 100644 docsite/static/img/status-ui.jpg create mode 100644 docsite/static/source.json create mode 100644 docsite/tsconfig.json create mode 100644 flatpak/icon.svg create mode 100644 typedoc.json diff --git a/docsite/.gitignore b/docsite/.gitignore new file mode 100644 index 00000000..b2d6de30 --- /dev/null +++ b/docsite/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/docsite/README.md b/docsite/README.md new file mode 100644 index 00000000..aaba2fa1 --- /dev/null +++ b/docsite/README.md @@ -0,0 +1,41 @@ +# Website + +This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. + +### Installation + +``` +$ yarn +``` + +### Local Development + +``` +$ yarn start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Deployment + +Using SSH: + +``` +$ USE_SSH=true yarn deploy +``` + +Not using SSH: + +``` +$ GIT_USER= yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/docsite/babel.config.js b/docsite/babel.config.js new file mode 100644 index 00000000..e00595da --- /dev/null +++ b/docsite/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/docsite/docs/FAQ.md b/docsite/docs/FAQ.md new file mode 100644 index 00000000..d8f354a5 --- /dev/null +++ b/docsite/docs/FAQ.md @@ -0,0 +1,136 @@ +* [Connection Issues](#connection-issues) + * [Plex/Tautulli/Jellyfin don't connect](#plextautullijellyfin-dont-connect) + * [Jellyfin has warnings about undefined or missing data](#jellyfin-has-warnings-about-undefined-or-missing-data) + * [Spotify/Deezer/LastFM won't authenticate](#spotifydeezerlastfm-wont-authenticate) +* [Configuration Issues](#configuration-issues) + * [Config could not be parsed](#config-could-not-be-parsed) +* [Scrobbling Issues](#scrobbling-issues) + * [Last.fm does not scrobble tracks with multiple artists correctly](#lastfm-does-not-scrobble-tracks-with-multiple-artists-correctly) + * [Jellyfin does not scrobble tracks with multiple artists correctly](#jellyfin-does-not-scrobble-tracks-with-multiple-artists-correctly) + +# Connection Issues + +## Plex/Tautulli/Jellyfin don't connect + +These three [sources](/README.md#source) are **ingress-based** which means that multi-scrobbler waits for the Plex/Tautulli/Jellyfin server to contact multi-scrobbler, as opposed to multi-scrobbler contacting the server. + +multi-scrobbler will log information about any server that connects to it for these three services. In the logs it looks something like this: + +``` +2023-02-22T10:55:56-05:00 info : [Ingress - Plex ] Received request from a new remote address: ::ffff:192.168.0.140 (UA: PlexMediaServer/1.24.5.5173-8dcc73a59) +2023-02-22T10:55:56-05:00 info : [Ingress - Plex ] ::ffff:192.168.0.140 (UA: PlexMediaServer/1.24.5.5173-8dcc73a59) Received valid data from server examplePlex for the first time. +2023-02-22T10:55:56-05:00 warn : [Plex Request ] Received valid Plex webhook payload but no Plex sources are configured +``` +It also logs if a server tries to connect to a URL that it does not recognize: +``` +2023-02-22T11:16:12-05:00 debug : [App ] Server received POST request from ::ffff:192.168.0.140 (UA: PlexMediaServer/1.24.5.5173-8dcc73a59) to unknown route: /plkex +``` +**So, if you do not see either of these in your logs then Plex/Tautulli/Jellyfin is not able to connect to your multi-scrobbler instance at all.** + +This is not something multi-scrobbler can fix and means you have an issue in your network. + +### Troubleshooting + +Check or try all these steps before submitting an issue: + +#### Turn on Debug Logging + +First, turn on **debug** logging for multi-scrobbler by setting the environmental variable `LOG_LEVEL=debug`: + +* using node `LOG_LEVEL=debug ... node src/index.js` +* using docker `docker run -e LOG_LEVEL=debug ... foxxmd/multi-scrobbler` + +Check the output for any additional information. + +#### Check Host name and URL + +The URLs examples in the [configuration](/docs/configuration.md) documentation assume you are running Plex/Tautulli/Jellyfin on the same server as multi-scrobbler. If these are not the same machine then you need to determine the IP address or domain name that multi-scrobbler is reachable at and use that instead of `localhost` when configuring these sources. **This is likely the same host name that you would use to access the web interface for multi-scrobbler.** + +EX `http://localhost:9078/plex` -> `http://192.168.0.140:9078/plex` + +#### Check Firewall and Port Forwarding + +If the machine multi-scrobbler is running on has a firewall ensure that port **9078** is open. Or if it is in another network entirely make sure your router is forwarding this port and it is open to the correct machine. + +#### Check Source Service Logs + +Plex/Tautulli/Jellyfin all have logs that will log if they cannot connect to multi-scrobbler. Check these for further information. + +##### Plex + +Settings -> Manage -> Console + +##### Tautulli + +Check the command-line output of the application or docker logs. + +##### Jellyfin + +Administration -> Dashboard -> Advanced -> Logs + +## Jellyfin has warnings about undefined or missing data + +Make sure you have +* [Configured the webhook plugin correctly](/docs/configuration.md#jellyfin) + * Checked the **Send All Properties(ignores template)** option in the webhook settings and **Saved** + +multi-scrobbler is known to work on Jellyfin `10.8.9` with Webhook version `11.0.0.0`. + +You can verify the payload sent from the webhook by modifying your jellyfin configuration to include `logPayload: true` which will output the raw payload to DEBUG level logging: + +```json +[ + { + "name": "MyJellyfin", + "clients": [], + "data": { + "users": ["FoxxMD"], + "options": { + "logPayload": true + } + } + } +] +``` + +If your issue persists and you open an Issue for it please include the raw payload logs in your report. + + +## Spotify/Deezer/LastFM won't authenticate + +Ensure any **client id** or **secrets** are correct in your configuration. + +The callback/redirect URL for these services must be: + +* the same address you would use to access the multi-scrobbler web interface + * the web-interface must be accessible from the browser you are completing authentication from. + +If multi-scrobbler is not running on the same machine your browser is on then the default/example addresses (`http://localhost...`) **will not work.** You must determine the address you can reach the web interface at (such as `http://192.168.0.140:9078`) then use that in place of `localhost` in the callback URLs. + +EX `http://localhost:9078/lastfm/callback` -> `http://192.168.0.220:9078/lastfm/callback` + +# Configuration Issues + +## Config could not be parsed + +If you see something like this in your logs: + +``` +2023-02-19T10:05:42-06:00 warn : [App] App config file exists but could not be parsed! +2023-02-19T10:05:42-06:00 error : [App] Exited with uncaught error +2023-02-19T10:05:42-06:00 error : [App] Error: config.json could not be parsed +``` + +It means the JSON in your configuration file is not valid. Copy and paste your configuration into a site like [JSONLint](https://jsonlint.com/) to find out where errors you have and fix them. + +# Scrobbling Issues + +## Last.fm does not scrobble tracks with multiple artists correctly + +This is a limitation of the [Last.fm API](https://www.last.fm/api/show/track.scrobble) where the **artist** field is only one string and Last.fm does not recognize (play well) with "combined" artists. + +Multi-scrobbler works the same was the official Spotify-Last.fm integration works -- it only scrobbles the **first** artist on a multi-artist track. + +## Jellyfin does not scrobble tracks with multiple artists correctly + +This is a limitation caused by the [Jellyfin webhook plugin](https://github.com/FoxxMD/multi-scrobbler/issues/70#issuecomment-1443804712) only sending the first artist to multi-scrobbler. This issues needs to be [fixed upstream on the Jellyfin webhook repository.](https://github.com/jellyfin/jellyfin-plugin-webhook/issues/166) diff --git a/docsite/docs/configuration/_category_.json b/docsite/docs/configuration/_category_.json new file mode 100644 index 00000000..18e70148 --- /dev/null +++ b/docsite/docs/configuration/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Configuration", + "position": 2, + "link": { + "type": "generated-index", + "description": "Configuring Multi-Scrobbler and examples" + } +} diff --git a/docsite/docs/configuration/configuration.md b/docsite/docs/configuration/configuration.md new file mode 100644 index 00000000..51dcb6f7 --- /dev/null +++ b/docsite/docs/configuration/configuration.md @@ -0,0 +1,768 @@ +--- +sidebar_position: 2 +title: Overview +--- + +# Configuration + +* [Overview](#overview) + * [ENV-Based Configuration](#env-based-configuration) + * [File-Based Configuration](#file-based-configuration) + * [All-in-One File Configuration](#all-in-one-file-configuration) + * [Specific File Configuration](#specific-file-configuration) +* [Source Configurations](#source-configurations) + * [Spotify](#spotify) + * [Plex](#plex) + * [Tautulli](#tautulli) + * [Subsonic](#subsonic) + * [Jellyfin](#jellyfin) + * [Last.fm (Source)](#lastfm--source-) + * [Listenbrainz (Source)](#listenbrainz--source-) + * [Deezer](#deezer) + * [Youtube Music](#youtube-music) + * [MPRIS (Linux Desktop)](#mpris) + * [Mopidy](#mopidy) + * [JRiver](#jriver) + * [Kodi](#kodi) +* [Client Configurations](#client-configurations) + * [Maloja](#maloja) + * [Last.fm](#lastfm) + * [Listenbrainz](#listenbrainz) +* [Monitoring](#monitoring) + * [Webhooks](#webhook-configurations) + * [Health Endpoint](#health-endpoint) + +# Overview + +[**Sources** and **Clients**](/README.md#how-does-multi-scrobbler-ms-work) are configured using environmental (ENV) variables and/or json files. + +**MS will parse configuration from both configuration types.** You can mix and match configurations but it is generally better to stick to one or the other. + +TIP: Check the [**FAQ**](/docs/FAQ.md) if you have any issues after configuration! + +## ENV-Based Configuration + +This is done by passing environmental variables and so does not require any files to run MS. + +* Using a docker container EX `docker run -e "SPOTIFY_CLIENT_ID=yourId" -e "SPOTIFY_CLIENT_SECRET=yourSecret" ...` +* Using a local installations by exporting variables before running MS EX `SPOTIFY_CLIENT_ID=yourId SPOTIFY_CLIENT_SECRET=yourSecret node index.js` + +Use ENV-based configuration if: + +* You are the only person for whom MS is scrobbling for +* You have a very simple setup for MS such as one scrobble [Client](/README.md#client) and one [Source](/README.md#source) IE Plex -> Maloja + +## File-Based Configuration + +MS will parse configuration files located in the directory specified by the `CONFIG_DIR` environmental variable. This variable defaults to: + +* Local installation -> `PROJECT_DIR/config` +* Docker -> `/config` (in the container) -- see the [install docs](/docs/installation.md#docker) for how to configure this correctly + +Use File-based configuration if: + +* You have many [Sources](/README.md#source) +* You have many of each type of **Source** you want to scrobble from IE 2x Plex accounts, 3x Spotify accounts, 1x + Funkwhale... +* You have more than one scrobble **Client** you want to scrobble to IE multiple Maloja servers +* You want only some **Sources** to scrobble to some **Clients** IE Fred's Spotify account scrobbles to Fred's Maloja + server, but not Mary's Maloja server + +File-based configurations located in the `CONFIG_DIR` directory can be parsed from + +* an **all-in-one** config file named `config.json` that contains information for all Sources and Clients and/or +* many **specific** files named based on the client/source to configure IE `plex.json` `spotify.json` + +There are **example configurations** for all Source/Client types and AIO config located in the [/config](/config) directory of this project. These can be used as-is by renaming them to `.json`. +For docker installations these examples are copied to your configuration directory on first-time use. + +There is also a [**kitchensink example**](/docs/kitchensink.md) that provides examples of using all sources/clients in a complex configuration. + +### All-in-One File Configuration + +[**Explore the schema for this configuration, along with an example generator and validator, here**](https://json-schema.app/view/%23?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Faio.json) + +Example directory structure: + +``` +/CONFIG_DIR + config.json +``` + +
+Config Example + +```json5 +// in config.json +{ + //... + "sources": [ + { + "name": "myConfig", + "type": "spotify", + "clients": [ + "myMalojaClient" + ], + "data": { + "clientId": "anExample" + //... + } + } + ], + "clients": [ + { + "name": "myFirstMalojaClient", + "type": "maloja", + "data": { + "url": "http://myMalojaServer.example", + // ... + } + } + ] +} +``` + +
+ +`config.json` can also be used to set default behavior for all sources/clients using `sourceDefaults` and `clientDefaults` properties. + +See [config.json.example](/config/config.json.example) for an annotated example or check out [the kitchen sink example](kitchensink.md). + +### Specific File Configuration + +Each file is named by the **type** of the Client/Source found in below sections. Each file as an **array** of that type of Client/Source. + +Example directory structure: + +``` +/CONFIG_DIR + plex.json + spotify.json + maloja.json +``` + +
+Config Example + +```json5 +// in maloja.json +[ + { + "name": "myFirstMalojaClient", + "data": { + "url": "http://myMalojaServer.example", + "apiKey": "myKey" + } + }, + { + "name": "mySecondMalojaClient", + "data": { + "url": "http://my2ndMalojaServer.example", + "apiKey": "myKey" + } + } +] + +``` + +
+ +See the [/config](/config) directory of this project for examples of each type of config file or reference specific files below. + +# Source Configurations + +## [Spotify](https://www.spotify.com) + +To access your Spotify history you must [register an application](https://developer.spotify.com/dashboard) to get a +Client ID/Secret. Make sure to also whitelist your redirect URI in the application settings. + +### ENV-Based + +| Environmental Variable | Required? | Default | Description | +|----------------------------|-----------|----------------------------------|----------------------------------------------------| +| `SPOTIFY_CLIENT_ID` | Yes | | | +| `SPOTIFY_CLIENT_SECRET` | Yes | | | +| `SPOTIFY_REDIRECT_URI` | No | `http://localhost:9078/callback` | URI must end in `callback` | + +### File-Based + +See [`spotify.json.example`](/config/spotify.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSpotifySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Plex](https://plex.tv) + +Check the [instructions](plex.md) on how to setup a [webhooks](https://support.plex.tv/articles/115002267687-webhooks) to scrobble your plays. + +### ENV-Based + +| Environmental Variable | Required | Default | Description | +|------------------------|----------|---------|-------------------------------------------------| +| `PLEX_USER` | No | | The a comma-delimited list of usernames to scrobble tracks for. No usernames specified means all tracks by all users will be scrobbled. | + +### File-Based + +See [`plex.json.example`](/config/plex.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FPlexSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Tautulli](https://tautulli.com) + +Check the [instructions](plex.md) on how to setup a notification agent. + +### ENV-Based + +| Environmental Variable | Required | Default | Description | +|------------------------|----------|---------|-------------------------------------------------| +| `TAUTULLI_USER` | No | | The a comma-delimited list of usernames to scrobble tracks for. No usernames specified means all tracks by all users will be scrobbled. | + +### File-Based + +See [`tautulli.json.example`](/config/tautulli.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FTautulliSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Subsonic](http://www.subsonic.org/) + +Can use this source for any application that implements the [Subsonic API](http://www.subsonic.org/pages/api.jsp) (such as [Airsonic](https://airsonic.github.io/)) + +**Known Issues:** +* "Time played at" is somewhat inaccurate since the api only reports "played X minutes ago" so... + * All scrobble times are therefore "on the minute" and you may experience occasional duplicate scrobbles + * "played X minutes ago" sometimes is also not reported correctly +* Multiple artists are reported as one value and cannot be separated +* If using [Airsonic Advanced](https://github.com/airsonic-advanced/airsonic-advanced) the password used (under **Credentials**) must be **Decodable** + +### ENV-Based + +| Environmental Variable | Required? | Default | Description | +|----------------------------|-----------|----------------------------------|----------------------------------------------------| +| `SUBSONIC_USER` | Yes | | | +| `SUBSONIC_PASSWORD` | Yes | | | +| `SUBSONIC_URL` | Yes | | Base url of your subsonic-api server | + +### File-Based + +See [`subsonic.json.example`](/config/subsonic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSubSonicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Jellyfin](https://jellyfin.org/) + +Must be using Jellyfin 10.7 or greater + +* In the Jellyfin desktop web UI Navigate to -> Administration -> Dashboard -> Plugins -> Catalog + * Under Notifications -> **Webhook** -> Install, then restart your server +* Navigate back to -> Administration -> Dashboard -> Plugins -> My Plugins -> Webhook + * Click "..." -> Settings +* In Webhook settings: + * `Add Generic Destination` + * In the new `Generic` dropdown: + * Webhook Url: `http://localhost:9078/jellyfin` + * Notification Type: `Playback Progress` + * Item Type: `Songs` + * Check `Send All Properties` + * Save + +### ENV-Based + +| Environmental Variable | Required? | Default | Description | +|------------------------|-----------|---------|-------------------------------------------------------------------| +| `JELLYFIN_USER` | | | Comma-separated list of usernames (from Jellyfin) to scrobble for | +| `JELLYFIN_SERVER` | | | Comma-separated list of Jellyfin server names to scrobble from | + +### File-Based + +See [`jellyfin.json.example`](/config/jellyfin.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FJellySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Last.fm (Source)](https://www.last.fm) + +See the [Last.fm (Client)](#lastfm) setup for registration instructions. + +### ENV-Based + +No support for ENV based for Last.fm as a client (only source) + +### File-Based + +See [`lastfm.json.example`](/config/lastfm.json.example), change `configureAs` to `source`. Or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Listenbrainz (Source)](https://listenbrainz.org) + +You will need to run your own Listenbrainz server or have an account [on the official instance](https://listenbrainz.org/login/) + +On your [profile page](https://listenbrainz.org/profile/) find your **User Token** to use in the configuration. + +**NOTE:** You cannot use ENV variables shown in the [Listenbrainz Client config](#listenbrainz) -- multi-scrobbler assumes Listenbrainz ENVs are always used for the **client** configuration. You must use the file-based config from below to setup Listenbrainz as a Source. + +### File-Based + +See [`listenbrainz.json.example`](/config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +**Change `configureAs` to `source`** + +## [Deezer](https://deezer.com/) + +Create a new application at [Deezer Developers](https://developers.deezer.com/myapps) + +* Application Domain must be the same as your multi-scrobbler domain. Default is `localhost:9078` +* Redirect URL must end in `deezer/callback` + * Default would be `http://localhost:9078/deezer/callback` + +After application creation you should have credentials displayed in the "My Apps" dashboard. You will need: + +* **Application ID** +* **Secret Key** +* **Redirect URL** (if not the default) + +**If no access token is provided...** + +After starting multi-scrobbler with credentials in-place open the dashboard (`http://localhost:9078`) and find your Deezer source. Click **(Re)authenticate and (re)start polling** to start the login process. After login is complete polling will begin automatically. + +### ENV-Based + +| Environmental Variable | Required? | Default | Description | +|----------------------------|-----------|-----------------------------------------|----------------------------------------------------| +| `DEEZER_CLIENT_ID` | Yes | | Your **Application ID** | +| `DEEZER_CLIENT_SECRET` | Yes | | Your **Secret Key** | +| `DEEZER_REDIRECT_URI` | No | `http://localhost:9078/deezer/callback` | URI must end in `deezer/callback` | + +### File-Based + +See [`deezer.json.example`](/config/deezer.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FDeezerSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Youtube Music](https://music.youtube.com) + +Credentials for YT Music are obtained from a browser request to https://music.youtube.com **once you are logged in.** [Specific requirements are here and summarized below:](https://github.com/nickp10/youtube-music-ts-api/blob/master/DOCUMENTATION.md#authenticate) + +* Open a new tab +* Open the developer tools (Ctrl-Shift-I) and select the “Network” tab +* Go to https://music.youtube.com and ensure you are logged in + +Then... + +1. Find and select an authenticated POST request. The simplest way is to filter by /browse using the search bar of the developer tools. If you don’t see the request, try scrolling down a bit or clicking on the library button in the top bar. +2. **Make sure **Headers** pane is selected and open +3. In the **Request Headers** section find and copy the **entire value** found after `Cookie:` and use this as the `cookie` value in your multi-scrobbler config +4. If present, in the **Request Headers** section find and copy the number found in `X-google-AuthUser` and use this as the value for `authUser` in your multi-scrobbler config + +![Google Headers](google-header.jpg) + +NOTES: + +* YT Music authentication is "browser based" which means your credentials may expire after a (long?) period of time OR if you log out of https://music.youtube.com. In the event this happens just repeat the steps above to get new credentials. +* Communication to YT Music is **unofficial** and not supported or endorsed by Google. This means that **this integration may stop working at any time** if Google decides to change how YT Music works in the browser. + +### File-Based + +See [`ytmusic.json.example`](/config/ytmusic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FYTMusicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [MPRIS](https://specifications.freedesktop.org/mpris-spec/latest/) + +MPRIS is a standard interface for communicating with Music Players on **linux operating systems.** + +If you run Linux and have a notification tray that shows what media you are listening to, you likely have access to MPRIS. + +![Notification Tray](mpris.jpg) + +multi-scrobbler can listen to this interface and scrobble tracks played by **any media player** that communicates to the operating system with MPRIS. + +**NOTE:** multi-scrobbler needs to be running as a [**Local Installation**](/docs/installation.md#local) in order to use MPRIS. This cannot be used from docker. + +### ENV-Based + +| Environmental Variable | Required? | Default | Description | +|------------------------|-----------|---------|----------------------------------------------------------------------------------| +| MPRIS_ENABLE | No | | Use MPRIS as a Source (useful when you don't need any other options) | +| MPRIS_BLACKLIST | No | | Comma-delimited list of player names not to scrobble from | +| MPRIS_WHITELIST | No | | Comma-delimited list of players names to ONLY scrobble from. Overrides blacklist | + +### File-Based + +See [`mpris.json.example`](/config/mpris.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMPRISSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Mopidy](https://mopidy.com/) + +Mopidy is a headless music server that supports playing music from many [standard and non-standard sources such as Pandora, Bandcamp, and Tunein.](https://mopidy.com/ext/) + +multi-scrobbler can scrobble tracks played from any Mopidy backend source, regardless of where you listen to them. + +### File-Based + +See [`mopidy.json.example`](/config/mopidy.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMopidySourceConfig/%23%2Fdefinitions%2FMopidyData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +Configuration Options: + +##### `url` + +The URL used to connect to the Mopidy server. You MUST have [Mopidy-HTTP extension](https://mopidy.com/ext/http) enabled. + +If no `url` is provided a default is used which assumes Mopidy is installed on the same server as multi-scrobbler: `ws://localhost:6680/mopidy/ws/` + +Make sure the hostname and port number match what is found in the Mopidy configuration file `mopidy.conf`: + +``` +... + +[http] +hostname = localhost +port = 6680 + +... +``` + +The URL used to connect ultimately must be formed like this: `[protocol]://[hostname]:[port]/[path]` +If any part of this URL is missing multi-scrobbler will use a default value, for your convenience. This also means that if any part of your URL is **not** standard you must explicitly define it. + +Part => Default Value + +* Protocol => `ws://` +* Hostname => `localhost` +* Port => `6680` +* Path => `/mopidy/ws/` + +
+URL Transform Examples + +```json +{ + "url": "mopidy.mydomain.com" +} +``` + +MS transforms this to: `ws://mopidy.mydomain.com:6680/mopidy/ws/` + +```json +{ + "url": "192.168.0.101:3456" +} +``` + +MS transforms this to: `ws://192.168.0.101:3456/mopidy/ws/` + +```json +{ + "url": "mopidy.mydomain.com:80/MOPWS" +} +``` + +MS transforms this to: `ws://mopidy.mydomain.com:80/MOPWS` + +
+ + +#### URI Blacklist/Whitelist + +If you wish to disallow or only allow scrobbling from some sources played through Mopidy you can specify these using `uriBlacklist` or `uriWhitelist` in your config. multi-scrobbler will check the list to see if any string matches the START of the `uri` on a track. If whitelist is used then blacklist is ignored. All strings are case-insensitive. + +EX: + +```json +{ + "uriBlacklist": ["soundcloud"] +} +``` + +Will prevent multi-scrobbler from scrobbling any Mopidy track that start with a `uri` like `soundcloud:song:MySong-1234` + +#### Album Blacklist + +For certain sources (Soundcloud) Mopidy does not have all track info (Album) and will instead use "Soundcloud" as the Album name. You can prevent multi-scrobbler from using this bad Album data by adding the fake Album name to this list. Multi-scrobbler will still scrobble the track, just without the bad data. All strings are case-insensitive. + +EX: + +```json +{ + "albumBlacklist": ["SoundCloud", "Mixcloud"] +} +``` + +If a track would be scrobbled like `Album: Soundcloud, Track: My Cool Track, Artist: A Cool Artist` +then multi-scrobbler will instead scrobble `Track: My Cool Track, Artist: A Cool Artist` + +## [JRiver](https://jriver.com/) + +In order for multi-scrobbler to communicate with JRiver you must have [Web Server Interface](https://wiki.jriver.com/index.php/Web_Service_Interface#Documentation_of_Functions) enabled. This can can be in the JRiver GUI: + +* Tools -> Options -> Media Network + * Check `Use Media Network to share this library...` + * If you have `Authentication` checked you will need to provide the **Username** and **Password** in the ENV/File configuration below. + +#### URL + +If you do not provide a URL then a default is used which assumes JRiver is installed on the same server as multi-scrobbler: `http://localhost:52199/MCWS/v1/` + +* Make sure the port number matches what is found in `Advanced` section in the [Media Network](#jriver) options. +* If your installation is on the same machine but you cannot connect using `localhost` try `0.0.0.0` instead. + +The URL used to connect ultimately must be formed like this: `[protocol]://[hostname]:[port]/[path]` +If any part of this URL is missing multi-scrobbler will use a default value, for your convenience. This also means that if any part of your URL is **not** standard you must explicitly define it. + +Part => Default Value + +* Protocol => `http://` +* Hostname => `localhost` +* Port => `52199` +* Path => `/MCWS/v1/` + +
+URL Transform Examples + +```json +{ + "url": "jriver.mydomain.com" +} +``` + +MS transforms this to: `http://jriver.mydomain.com:52199/MCWS/v1/` + +```json +{ + "url": "192.168.0.101:3456" +} +``` + +MS transforms this to: `http://192.168.0.101:3456/MCWS/v1/` + +```json +{ + "url": "mydomain.com:80/jriverReverse/MCWS/v1/" +} +``` + +MS transforms this to: `http://mydomain.com:80/jriverReverse/MCWS/v1/` + +
+ +### ENV-Based + + +| Environmental Variable | Required | Default | Description | +|------------------------|----------|---------------------------------|------------------------------------------------| +| JRIVER_URL | Yes | http://localhost:52199/MCWS/v1/ | The URL of the JRiver server | +| JRIVER_USERNAME | No | | If authentication is enabled, the username set | +| JRIVER_PASSWORD | No | | If authenticated is enabled, the password set | + + +### File-Based + +See [`jriver.json.example`](/config/jriver.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FJRiverSourceConfig/%23%2Fdefinitions%2FJRiverData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +## [Kodi](https://kodi.tv/) + +In order for multi-scrobbler to communicate with Kodi you must have the [Web Interface](https://kodi.wiki/view/Web_interface) enabled. This can can be in the Kodi GUI: + +* Settings -> Services -> Control + * Check `Allow remote control via HTTP` + * Ensure you have a **Username** and **Password** set, you will need to provide them in the ENV/File configuration below. + +#### URL + +If you do not provide a URL then a default is used which assumes Kodi is installed on the same server as multi-scrobbler: `http://localhost:8080/jsonrpc` + +* Make sure the port number matches what is found in **Port** in the [Control](#kodi) section mentioned above. +* If your installation is on the same machine but you cannot connect using `localhost` try `0.0.0.0` instead. + +The URL used to connect ultimately must be formed like this: `[protocol]://[hostname]:[port]/[path]` +If any part of this URL is missing multi-scrobbler will use a default value, for your convenience. This also means that if any part of your URL is **not** standard you must explicitly define it. + +Part => Default Value + +* Protocol => `http://` +* Hostname => `localhost` +* Port => `8080` +* Path => `/jsonrpc` + +
+URL Transform Examples + +```json +{ + "url": "kodi.mydomain.com" +} +``` + +MS transforms this to: `http://kodi.mydomain.com:8080/jsonrpc` + +```json +{ + "url": "192.168.0.101:3456" +} +``` + +MS transforms this to: `http://192.168.0.101:3456/jsonprc` + +```json +{ + "url": "mydomain.com:80/kodiReverse/jsonrpc" +} +``` + +MS transforms this to: `http://mydomain.com:80/kodiReverse/jsonrpc` + +
+ +### ENV-Based + + +| Environmental Variable | Required | Default | Description | +|------------------------|----------|-------------------------------|----------------------------| +| KODI_URL | Yes | http://localhost:8080/jsonrpc | The URL of the Kodi server | +| KODI_USERNAME | No | | The username set | +| KODI_PASSWORD | No | | The password set | + + +### File-Based + +See [`kodi.json.example`](/config/kodi.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FKodiSourceConfig/%23%2Fdefinitions%2FKodiData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) + +# Client Configurations + +## [Maloja](https://github.com/krateng/maloja) + +### ENV-Based + +| Environmental Variable | Required? | Default | Description | +|----------------------------|-----------|---------|-------------------------------| +| `MALOJA_URL` | Yes | | Base URL of your installation | +| `MALOJA_API_KEY` | Yes | | Api Key | + +### File-Based + +See [`maloja.json.example`](/config/maloja.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FMalojaClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) + +## [Last.fm](https://www.last.fm) + +[Register for an API account here.](https://www.last.fm/api/account/create) + +The Callback URL is actually specified by multi-scrobbler but to keep things consistent you should use +``` +http://localhost:9078/lastfm/callback +``` +or replace `localhost:9078` with your own base URL + +### ENV-Based + +| Environmental Variable | Required? | Default | Description | +|----------------------------|-----------|-----------------------------------------|-------------------------------| +| `LASTFM_API_KEY` | Yes | | Api Key from your API Account | +| `LASTFM_SECRET` | Yes | | Shared secret from your API Account | +| `LASTFM_REDIRECT_URI` | No | `http://localhost:9078/lastfm/callback` | Url to use for authentication. Must include `lastfm/callback` somewhere in it | +| `LASTFM_SESSION` | No | | Session id. Will be generated by authentication flow if not provided. | + +### File-Based + +See [`lastfm.json.example`](/config/lastfm.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) + +## [Listenbrainz](https://listenbrainz.org) + +You will need to run your own Listenbrainz server or have an account [on the official instance](https://listenbrainz.org/login/) + +On your [profile page](https://listenbrainz.org/profile/) find your **User Token** to use in the configuration. + +### ENV-Based + + +| Environmental Variable | Required? | Default | Description | +|------------------------|-----------|-------------------------------|---------------------------------| +| LZ_TOKEN | Yes | | User token from your LZ profile | +| LZ_USER | Yes | | Your LZ username | +| LZ_URL | No | https://api.listenbrainz.org/ | The base URL for the LZ server | + +### File-Based + +See [`listenbrainz.json.example`](/config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) + +# Monitoring + +multi-scrobbler supports some common webhooks and a healthcheck endpoint in order to monitor Sources and Clients for errors. + +## Webhook Configurations + +Webhooks will **push** a notification to your configured servers on these events: + +* Source polling started +* Source polling retry +* Source polling stopped on error +* Scrobble client scrobble failure + +Webhooks are configured in the main [config.json](#all-in-one-file-configuration) file under the `webhook` top-level property. Multiple webhooks may be configured for each webhook type. EX: + +```json +{ + "sources": [ + ... + ], + "clients": [ + ... + ], + "webhooks": [ + { + "name": "FirstGotifyServer", + "type": "gotify", + "url": "http://192.168.0.100:8070", + "token": "abcd" + }, + { + "name": "SecondGotifyServer", + "type": "gotify", + ... + }, + { + "name": "NtfyServerOne", + "type": "ntfy", + ... + }, + ... + ] +} +``` + +### [Gotify](https://gotify.net/) + +Refer to the [config schema for GotifyConfig](https://json-schema.app/view/%23/%23%2Fdefinitions%2FGotifyConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Faio.json) + +multi-scrobbler optionally supports setting message notification priority via `info` `warn` and `error` mappings. + +EX + +```json +{ + "type": "gotify", + "name": "MyGotifyFriendlyNameForLogs", + "url": "http://192.168.0.100:8070", + "token": "AQZI58fA.rfSZbm", + "priorities": { + "info": 5, + "warn": 7, + "error": 10 + } +} +``` + +### [Ntfy](https://ntfy.sh/) + +Refer to the [config schema for NtfyConfig](https://json-schema.app/view/%23/%23%2Fdefinitions%2FNtfyConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Faio.json) + +multi-scrobbler optionally supports setting message notification priority via `info` `warn` and `error` mappings. + +EX + +```json +{ + "type": "ntfy", + "name": "MyNtfyFriendlyNameForLogs", + "url": "http://192.168.0.100:9991", + "topic": "RvOwKJ1XtIVMXGLR", + "username": "Optional", + "password": "Optional", + "priorities": { + "info": 3, + "warn": 4, + "error": 5 + } +} +``` + +## Health Endpoint + +An endpoint for monitoring the health of sources/clients is available at GET `http://YourMultiScrobblerDomain/health` + +* Returns `200 OK` when **everything** is working or `500 Internal Server Error` if **anything** is not +* The plain url (`/health`) aggregates status of **all clients/sources** -- so any failing client/source will make status return 500 + * Use query params `type` or `name` to restrict client/sources aggregated IE `/health?type=spotify` or `/health?name=MyMaloja` +* On 500 the response returns a JSON payload with `messages` array that describes any issues + * For any clients/sources that require authentication `/health` will return 500 if they are **not authenticated** + * For sources that poll (spotify, yt music, subsonic) `/health` will 500 if they are **not polling** diff --git a/docsite/docs/configuration/google-header.jpg b/docsite/docs/configuration/google-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ca5f28b25f0e2fc44930040dadb95fba912e770 GIT binary patch literal 231527 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

$-Q@ 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 literal 0 HcmV?d00001 diff --git a/docsite/docs/configuration/kitchensink.md b/docsite/docs/configuration/kitchensink.md new file mode 100644 index 00000000..fad0d7d3 --- /dev/null +++ b/docsite/docs/configuration/kitchensink.md @@ -0,0 +1,293 @@ +--- +sidebar_position: 3 +title: Kitchen Sink +--- + +# Example Config using all Possible Features + +Scenario: + +* You want to scrobble plays for yourself (Foxx), Fred, and Mary +* Each person has their own Maloja server +* Each person has their own Spotify account +* You have your own Airsonic (subsonic) server you to scrobble from +* You have your own Youtube Music account you want to scrobble from +* Mary has her own Last.fm account she also wants to scrobble to +* Fred has his own Spotify application and provides you with just his access and refresh token because he doesn't trust you (wtf Fred) +* Fred has a Plex server and wants to scrobble everything he plays +* Mary uses Fred's Plex server but only wants to scrobble her plays from the `podcast` library +* The three of you have a shared library on Plex called `party` that you only play when you are hanging out. You want plays from that library to be scrobbled to everyone's servers. +* Fred also has his own Jellyfin server and wants to scrobble everything he plays + +### All-in-one Config + +Using just one config file located at `CONFIG_DIR/config.json`: + +```json5 +{ + "sourceDefaults": { + "maxPollRetries": 0, // optional, default # of automatic polling restarts on error. can be overridden by property in individual config + "maxRequestRetries": 1, // optional, default # of http request retries a source can make before error is thrown. can be overridden by property in individual config + "retryMultiplier": 1.5, // optional, default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying). can be overridden by property in individual config + }, + "clientDefaults": { + "maxRequestRetries": 1, // optional, default # of http request retries a client can make before error is thrown. can be overridden by property in individual config + "retryMultiplier": 1.5, // optional, default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying). can be overridden by property in individual config + }, + "sources": [ + { + "type": "spotify", + "name": "foxxSpot", + "clients": ["foxxMaloja"], + "data": { + "clientId": "foxxSpotifyAppId", + "clientSecret": "foxxSpotifyAppSecret", + "maxRequestRetries": 2, // override default max retries because spotify can...spotty + } + }, + { + "type": "spotify", + "name": "marySpot", + "clients": ["maryMaloja"], + "data": { + "clientId": "foxxSpotifyAppId", // only need one application, it can be used by all users of this multi-scrobbler instance + "clientSecret": "foxxSpotifyAppSecret", + } + }, + { + "type": "spotify", + "name": "fredSpot", + "clients": ["fredMaloja"], + "data": { + "accessToken": "fredsToken", + "refreshToken": "fredsRefreshToken", + "interval": 120, // he also wants a slower check interval because his application already has heavy api usage + } + }, + { + "type": "plex", + "name": "fredPlex", + "clients": ["fredMaloja"], + "data": { + "user": ["fred@email.com"] + } + }, + { + "type": "plex", + "name": "maryPlex", + "clients": ["maryMaloja"], + "data": { + "user": ["mary@email.com"], // still need to specify mary as user so not all users who play from 'podcasts' get scrobbled + "libraries": ["podcasts"] + } + }, + { + "type": "plex", + "name": "partyPlex", + // omitting clients (or making it empty) will make this Source scrobble to all Clients + "data": { + "libraries": ["party"], + } + }, + { + "type": "jellyfin", + "name": "FredJelly", + // omitting clients (or making it empty) will make this Source scrobble to all Clients + "data": { + "user": ["fred@email.com"] + } + }, + { + "type": "subsonic", + "name": "foxxAirsonic", + "clients": ["foxxMaloja"], + "data": { + "user": "foxx", + "password": "foxxPassword", + "url": "https://airsonic.foxx.example" + } + }, + { + "type": "ytmusic", + "name": "foxxYoutube", + "clients": ["foxxMaloja"], + "data": { + "cookie": "__Secure-3PAPISID=3AxsXpy0MKGu75Qb/AkISXGqOnSDn1jEKn; DEVICE_INFO=ChxOekU0Tmpjek5EWTBPRGd3TlRBMk16QXpNdz09EJbS8Z0GGJbS8Z0G; ...", + "authUser": 1 + } + }, + ], + "clients": [ + { + "type": "maloja", + "name": "foxxMaloja", + "data": { + "url": "https://maloja.foxx.example", + "apiKey": "foxxApiKey" + } + }, + { + "type": "maloja", + "name": "fredMaloja", + "data": { + "url": "https://maloja.fred.example", + "apiKey": "fredApiKey" + } + }, + { + "type": "maloja", + "name": "maryMaloja", + "data": { + "url": "https://maloja.mary.example", + "apiKey": "maryApiKey" + } + }, + { + "type": "lastfm", + "name": "maryLFM", + "data": { + "apiKey": "maryApiKey", + "secret": "marySecret", + "redirectUri": "http://localhost:9078/lastfm/callback" + } + } + ] +} + +``` + +### Separate JSON files + +In `CONFIG_DIR/spotify.json`: + +```json5 +[ + { + // may omit 'type' property since app knows this is file is for spotify configs + "name": "foxxSpot", + "clients": ["foxxMaloja"], + "data": { + "clientId": "foxxSpotifyAppId", + "clientSecret": "foxxSpotifyAppSecret" + } + }, + { + "name": "marySpot", + "clients": ["maryMaloja"], + "data": { + "clientId": "foxxSpotifyAppId", + "clientSecret": "foxxSpotifyAppSecret" + } + }, + { + "name": "fredSpot", + "clients": ["fredMaloja"], + "data": { + "accessToken": "fredsToken", + "refreshToken": "fredsRefreshToken", + "interval": 120 + } + }, +] +``` + +In `CONFIG_DIR/plex.json` + +```json5 +[ + { + "name": "fredPlex", + "clients": ["fredMaloja"], + "data": { + "user": ["fred@email.com"] + } + }, + { + "name": "maryPlex", + "clients": ["maryMaloja"], + "data": { + "user": ["mary@email.com"], + "libraries": ["podcasts"] + } + }, + { + "name": "partyPlex", + "data": { + "libraries": ["party"] + } + } +] +``` + +In `CONFIG_DIR/jellyfin.json` + +```json5 +[ + { + "name": "FredJelly", + "data": { + "user": ["fred@email.com"] + } + } +] +``` + +In `CONFIG_DIR/ytmusic.json` + +```json5 +[ + { + "type": "ytmusic", + "name": "foxxYoutube", + "clients": ["foxxMaloja"], + "data": { + "cookie": "__Secure-3PAPISID=3AxsXpy0MKGu75Qb/AkISXGqOnSDn1jEKn; DEVICE_INFO=ChxOekU0Tmpjek5EWTBPRGd3TlRBMk16QXpNdz09EJbS8Z0GGJbS8Z0G; ...", + "authUser": 1 + } + } +] +``` + +In `CONFIG_DIR/maloja.json`: + +```json5 +[ + { + "name": "foxxMaloja", + "data": { + "url": "https://maloja.foxx.example", + "apiKey": "foxxApiKey" + } + }, + { + "name": "fredMaloja", + "data": { + "url": "https://maloja.fred.example", + "apiKey": "fredApiKey" + } + }, + { + "name": "maryMaloja", + "data": { + "url": "https://maloja.mary.example", + "apiKey": "maryApiKey" + } + } +] +``` + +In `CONFIG_DIR/lastfm.json`: + +```json5 +[ + { + "name": "maryLFM", + "data": { + "apiKey": "maryApiKey", + "secret": "marySecret", + "redirectUri": "http://localhost:9078/lastfm/callback" + } + } +] +``` + diff --git a/docsite/docs/configuration/mpris.jpg b/docsite/docs/configuration/mpris.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4ebb006d0c4733c937e48ac805d7a3abbd64f89 GIT binary patch literal 36520 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 literal 0 HcmV?d00001 diff --git a/docsite/docs/configuration/plex.md b/docsite/docs/configuration/plex.md new file mode 100644 index 00000000..834a67ec --- /dev/null +++ b/docsite/docs/configuration/plex.md @@ -0,0 +1,73 @@ +--- +sidebar_position: 2 +title: Plex/Tautulli +--- + +Tracks played on [Plex](https://plex.tv/) can be scrobbled either by: + * A [Tautulli](https://tautulli.com/) notification agent with a webhook. + * Using Plex [Webhooks](https://support.plex.tv/articles/115002267687-webhooks) (restricted to Plex Pass users) + +# Using Tautulli + +## Create a new Notification Agent + +* Navigate to the **Notification Agents** page in **Settings** +* Click **Add a new notification agent** +* Select **Webhook** + +## Configure the Agent + +The below sections correspond with the tabs available in the notification agent configuration popup. + +### Configuration +* Webhook URL -- `http://localhost:9078/tautulli` (substitute your domain if different than the default) +* Webhook Method -- POST + +### Triggers + +Select **Watched** + +### Conditions + +Refer to [Tautulli's documentation](https://github.com/Tautulli/Tautulli-Wiki/wiki/Custom-Notification-Conditions) if you need help here. It may be a good idea to restrict notifications to only one library (if you have a Music library, for instance) + +**This app will only scrobble an item if `media_type` is a "track", which is the default for all music.** + +### Data + +Expand the **Watched** dropdown and add the following code block to the **JSON Data** text field: + +``` +{ +"artist_name": "{artist_name}", +"track_name": "{track_name}", +"track_artist": "{track_artist}", +"album_name": "{album_name}", +"media_type": "{media_type}", +"title": "{title}", +"duration": "{duration_sec}", +"username": "{username}", +"server": "{server_name}", +"version": "{server_version}", +"library": "{library_name}", +"player": "{player}", +"device": "{device}", +"platform": "{platform}", +"action": "{action}", +"machine_id": "{machine_id}", +"session_key": "{session_key}" +} +``` + +**Click the Save button to finish.** + +Your agent is now configured and ready to scrobble. + +# Using Plex Webhooks + +* Navigate to your **Account/Settings** and find the **Webhooks** page +* Click **Add Webhook** +* URL -- `http://localhost:9078/plex` (substitute your domain if different than the default) +* **Save Changes** + +Plex is now configured to scrobble. diff --git a/docsite/docs/installation/_category_.json b/docsite/docs/installation/_category_.json new file mode 100644 index 00000000..89454591 --- /dev/null +++ b/docsite/docs/installation/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Installation", + "position": 1, + "link": { + "type": "generated-index", + "description": "Way to install Multi-Scrobbler" + } +} diff --git a/docsite/docs/installation/installation.md b/docsite/docs/installation/installation.md new file mode 100644 index 00000000..b3274442 --- /dev/null +++ b/docsite/docs/installation/installation.md @@ -0,0 +1,123 @@ +--- +sidebar_position: 1 +title: 'Overview' +--- + +# Installation + +# Local + +After installation see [service.md](/docs/service.md) to configure multi-scrobbler to run automatically in the background. + +## Nodejs + +Clone this repository somewhere and then install from the working directory + +```shell +git clone https://github.com/FoxxMD/multi-scrobbler.git . +cd multi-scrobbler +nvm use # optional, to set correct Node version +npm install +npm build +npm start +``` + +### Usage Examples + +* The web UI is served on port `9078`. This can be modified using the `PORT` environmental variable. + +#### Using [file-based](/docs/configuration.md#file-based-configuration) configuration + +```shell +npm start +``` + +#### Using [env-based](/docs/configuration.md#env-based-configuration) configuration + +```shell +SPOTIFY_CLIENT_ID=yourId SPOTIFY_CLIENT_SECRET=yourSecret MALOJA_URL="http://domain.tld" node src/index.js +``` + +## Flatpak + +You must have [Flatpak](https://flatpak.org/) installed on your system. + +```shell +flatpak install flathub io.github.foxxmd.multiscrobbler +``` + +### Usage Examples + +#### Using [file-based](/docs/configuration.md#file-based-configuration) configuration + +The config directory for multi-scrobbler as a flatpak can be found under `/home/YourUser/.var/app/io.github.foxxmd.multiscrobbler/config` + +```shell +flatpak run io.github.multiscrobbler +``` + +#### Using [env-based](/docs/configuration.md#env-based-configuration) configuration + +There are a few [options for running flatpak applications with temporary or permanent environmental variables.](https://ardasevinc.dev/launch-flatpak-apps-with-custom-args-and-environment-variables) + +```shell +flatpak run --env=SPOTIFY_CLIENT_ID=yourId --envSPOTIFY_CLIENT_SECRET=yourSecret --env=MALOJA_URL="http://domain.tld" io.github.foxxmd.multiscrobbler +``` + +# Docker + +Cross-platform images are built for x86 (Intel/AMD) and ARM64 (IE Raspberry Pi) + +[Dockerhub](https://hub.docker.com/r/foxxmd/multi-scrobbler) +``` +docker.io/foxxmd/multi-scrobbler:latest +``` + +[Github Packages](https://github.com/FoxxMD/multi-scrobbler/pkgs/container/multi-scrobbler) +``` +ghcr.io/foxxmd/multi-scrobbler:latest +``` + +Or use the provided [docker-compose.yml](/docker-compose.yml) after modifying it to fit your configuration. + +Recommended configuration steps for docker or docker-compose usage: + +* If you must **bind a host directory into the container for storing configurations and credentials:** + * [Using `-v` method for docker](https://docs.docker.com/storage/bind-mounts/#start-a-container-with-a-bind-mount): `-v /path/on/host/config:/config` + * [Using docker-compose](https://docs.docker.com/compose/compose-file/compose-file-v3/#short-syntax-3): `- /path/on/host/config:/config` +* (Optionally) map the web UI port in the container **9078** to the host + * With [docker](https://docs.docker.com/engine/reference/commandline/run/#publish): `-p 9078:9078` (first port is the port on the host to use) + * With [docker-compose](https://docs.docker.com/compose/compose-file/compose-file-v3/#short-syntax-1): `- "9078:9078"` +* (Optionally) set the [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for the container using the environmental variable `TZ` ([docker](https://docs.docker.com/engine/reference/commandline/run/#env)) ([docker-compose](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment)) + +### Linux Host + +If you are + +* using [rootless containers with Podman](https://developers.redhat.com/blog/2020/09/25/rootless-containers-with-podman-the-basics#why_podman_) +* running docker on MacOS or Windows + +this **DOES NOT** apply to you. + +If you are running Docker on a **Linux Host** you must specify `user:group` permissions of the user who owns the **configuration directory** on the host to avoid [docker file permission problems.](https://ikriv.com/blog/?p=4698) These can be specified using the [environmental variables **PUID** and **PGID**.](https://docs.linuxserver.io/general/understanding-puid-and-pgid) + +To get the UID and GID for the current user run these commands from a terminal: + +* `id -u` -- prints UID +* `id -g` -- prints GID + +## Docker Usage Examples + +### Using [env-based](/docs/configuration.md#env-based-configuration) configuration + +```bash +docker run -e "SPOTIFY_CLIENT_ID=yourId" -e "SPOTIFY_CLIENT_SECRET=yourSecret" -e "MALOJA_URL=http://domain.tld" -e "MALOJA_API_KEY=1234" -e "PUID=1000" -e "PGID=1000" -p 9078:9078 -v /path/on/host/config:/config foxxmd/multi-scrobbler +``` + +### Using [file-based](/docs/configuration.md#file-based-configuration) configuration + +```bash +docker run -e "PUID=1000" -e "PGID=1000" -p 9078:9078 -v /path/on/host/config:/config foxxmd/multi-scrobbler +``` + +See the [docker-compose.yml](/docker-compose.yml) file for how to use with docker-compose. diff --git a/docsite/docs/installation/service.md b/docsite/docs/installation/service.md new file mode 100644 index 00000000..97a28116 --- /dev/null +++ b/docsite/docs/installation/service.md @@ -0,0 +1,73 @@ +--- +sidebar_position: 2 +title: 'As a Service' +--- + +If you have multi-scrobbler installed [locally](/docs/installation.md#local) you can enable it to run as a background service when you login. + +Before running as a service you should run it at least once in the foreground to ensure it can start up correctly! + +# [Systemd](https://systemd.io/) + +Systemd is system and service manager that is used by [most popular linux distros](https://en.wikipedia.org/wiki/Systemd#Adoption) including [Ubuntu](https://wiki.ubuntu.com/SystemdForUpstartUsers), [Fedora](https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/), Pop!_OS, [Debian](https://wiki.debian.org/systemd), and [Arch](https://wiki.archlinux.org/title/systemd). + +This setup will create a [user service](https://wiki.archlinux.org/title/systemd/User) that runs on login. + +## Create A Unit File + +Create a new service file for multi-scrobbler under your HOME config: + +```console +mkdir -p ~/.config/systemd/user +touch ~/.config/systemd/user/multi-scrobbler.service +``` + +In a text editor add contents below to the file you created, `multi-scrobbler.service`: + +```ini +[Unit] +Description=multi-scrobbler +After=network.target + +[Service] +Type=simple +ExecStart=flatpak run io.github.multiscrobbler +Restart=no + +[Install] +WantedBy=default.target +``` + +The above assumes you [installed multi-scrobbler using flatpak](/docs/installation.md#flatpak) + +### Node.js Installs + +If you are running multi-scrobbler directly with [nodejs from a clone repository directory](/docs/installation.md#nodejs) you should modify the `[Service]`: + +```ini +[Service] +Type=simple +WorkingDirectory=/path/to/multi-scrobbler/directory +ExecStart=node src/index.js +Restart=no +``` + +## Start the Service + +Save the file then run: + +```console +systemctl daemon-reload +systemctl --user enable multi-scrobbler.service +systemctl --user start multi-scrobbler.service +``` + +This will + +* scan for new services and pickup our multi-scrobbler user service +* enable the service to run at login automatically +* start the service now + +# Other Service Methods + +Open a PR if you would like to document setting up multi-scrobbler for other service managers! diff --git a/docsite/docusaurus.config.js b/docsite/docusaurus.config.js new file mode 100644 index 00000000..5e61904e --- /dev/null +++ b/docsite/docusaurus.config.js @@ -0,0 +1,146 @@ +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'My Site', + tagline: 'Dinosaurs are cool', + favicon: 'img/favicon.ico', + + // Set the production url of your site here + url: 'https://your-docusaurus-test-site.com', + // Set the // pathname under which your site is served + // For GitHub pages deployment, it is often '//' + baseUrl: '/', + + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: 'facebook', // Usually your GitHub org/user name. + projectName: 'docusaurus', // Usually your repo name. + + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + presets: [ + [ + 'classic', + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarPath: require.resolve('./sidebars.js'), + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + editUrl: + 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', + }, + // blog: { + // showReadingTime: true, + // // Please change this to your repo. + // // Remove this to remove the "edit this page" links. + // editUrl: + // 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', + // }, + blog: false, + + theme: { + customCss: require.resolve('./src/css/custom.css'), + }, + }), + ], + ], + themes: ["docusaurus-json-schema-plugin"], + plugins: [require.resolve("@cmfcmf/docusaurus-search-local")], + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + // Replace with your project's social card + image: 'img/docusaurus-social-card.jpg', + navbar: { + title: 'Multi-Scrobbler', + logo: { + alt: 'Logo', + src: 'img/icon.svg', + }, + items: [ + { + type: 'docSidebar', + sidebarId: 'tutorialSidebar', + position: 'left', + label: 'Docs', + }, + { + to: 'playground', + position: 'left', + label: 'Config Playground', + }, + { + href: 'https://github.com/foxxmd/multi-scrobbler', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { + label: 'Installation', + to: '/docs/installation', + }, + { + label: 'Configuration', + to: '/docs/configuration', + }, + ], + }, +/* { + title: 'Community', + items: [ + { + label: 'Stack Overflow', + href: 'https://stackoverflow.com/questions/tagged/docusaurus', + }, + { + label: 'Discord', + href: 'https://discordapp.com/invite/docusaurus', + }, + { + label: 'Twitter', + href: 'https://twitter.com/docusaurus', + }, + ], + },*/ + { + title: 'More', + items: [ + { + label: 'GitHub', + href: 'https://github.com/foxxmd/multi-scrobbler', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Multi-Scrobbler. Built with Docusaurus.`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + }), +}; + +module.exports = config; diff --git a/docsite/package-lock.json b/docsite/package-lock.json new file mode 100644 index 00000000..7336e8c6 --- /dev/null +++ b/docsite/package-lock.json @@ -0,0 +1,12912 @@ +{ + "name": "my-website", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "my-website", + "version": "0.0.0", + "dependencies": { + "@cmfcmf/docusaurus-search-local": "^1.1.0", + "@docusaurus/core": "2.4.1", + "@docusaurus/preset-classic": "2.4.1", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "docusaurus-json-schema-plugin": "^1.6.1", + "prism-react-renderer": "^1.3.5", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.4.1", + "@tsconfig/docusaurus": "^1.0.5", + "typescript": "^4.7.4" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-js": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-js/-/autocomplete-js-1.10.0.tgz", + "integrity": "sha512-PpDNZs6/H5u9yOvpZ1HWb5Uf40zXOGCmhjDEfODQ6Q506hxAKhquxNLI+o8Chgda4bvRai1gGfFdZ5RSr0oHbA==", + "dependencies": { + "@algolia/autocomplete-core": "1.10.0", + "@algolia/autocomplete-preset-algolia": "1.10.0", + "@algolia/autocomplete-shared": "1.10.0", + "htm": "^3.1.1", + "preact": "^10.13.2" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.5.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-js/node_modules/@algolia/autocomplete-core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.10.0.tgz", + "integrity": "sha512-zaQ4ZOtGkeUvDGObZvaULuZmU4kAcVu/Wm9EP6Vzij5wQ98FAKz1uHn2EPiCI0aFIoUfZi/WhJvn5l6qVBdYEA==", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.10.0", + "@algolia/autocomplete-shared": "1.10.0" + } + }, + "node_modules/@algolia/autocomplete-js/node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.10.0.tgz", + "integrity": "sha512-mXKrO9gBIgjLHKfIN9aGqdMfWEXlk+ttiR1mgXrUtyMp6IKhZiXoNpvG2Xg2SiQakmZOtxagut3Wq1DpdwCq6Q==", + "dependencies": { + "@algolia/autocomplete-shared": "1.10.0" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-js/node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.10.0.tgz", + "integrity": "sha512-CABQm+VJvuwl5XeVYbPISc8OAac7+nX+yDzG0nJRsSd64IeI6e/Jxrg13quxpTvOe7JZXYdW1y1kV7srPuFpmA==", + "dependencies": { + "@algolia/autocomplete-shared": "1.10.0" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-js/node_modules/@algolia/autocomplete-shared": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.10.0.tgz", + "integrity": "sha512-JKZGomjcUeKKtkymeZuWjKNIJU7UzuaCN3/eKlpOXxmvWCd5aJrVTDgbOm0pOjv0Ef9xVzIZx9cS/GL1Snxo1g==", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-theme-classic": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.10.0.tgz", + "integrity": "sha512-YiKqXxWoQdbcxHnC9TK2PSoEHQtlqfnhBnbfejjS3U//5ASLvkF/rAcSFGfcZUzo8IvDKA/oYgK1CDQJ3+lMMQ==" + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz", + "integrity": "sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw==", + "dependencies": { + "@algolia/cache-common": "4.18.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.18.0.tgz", + "integrity": "sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz", + "integrity": "sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw==", + "dependencies": { + "@algolia/cache-common": "4.18.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.18.0.tgz", + "integrity": "sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew==", + "dependencies": { + "@algolia/client-common": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.18.0.tgz", + "integrity": "sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ==", + "dependencies": { + "@algolia/client-common": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.18.0.tgz", + "integrity": "sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==", + "dependencies": { + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.18.0.tgz", + "integrity": "sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A==", + "dependencies": { + "@algolia/client-common": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.18.0.tgz", + "integrity": "sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==", + "dependencies": { + "@algolia/client-common": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "node_modules/@algolia/logger-common": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.18.0.tgz", + "integrity": "sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.18.0.tgz", + "integrity": "sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g==", + "dependencies": { + "@algolia/logger-common": "4.18.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz", + "integrity": "sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ==", + "dependencies": { + "@algolia/requester-common": "4.18.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.18.0.tgz", + "integrity": "sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz", + "integrity": "sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ==", + "dependencies": { + "@algolia/requester-common": "4.18.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.18.0.tgz", + "integrity": "sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==", + "dependencies": { + "@algolia/cache-common": "4.18.0", + "@algolia/logger-common": "4.18.0", + "@algolia/requester-common": "4.18.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", + "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", + "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", + "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", + "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz", + "integrity": "sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz", + "integrity": "sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", + "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz", + "integrity": "sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw==", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cmfcmf/docusaurus-search-local": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-1.1.0.tgz", + "integrity": "sha512-0IVb/aA0IK8ZlktuxmgXmluXfcSpo6Vdd2nG21y1aOH9nVYnPP231Dn0H8Ng9Qf9ronQQCDWHnuWpYOr9rUrEQ==", + "dependencies": { + "@algolia/autocomplete-js": "^1.8.2", + "@algolia/autocomplete-theme-classic": "^1.8.2", + "@algolia/client-search": "^4.12.0", + "algoliasearch": "^4.12.0", + "cheerio": "^1.0.0-rc.9", + "clsx": "^1.1.1", + "lunr-languages": "^1.4.0", + "mark.js": "^8.11.1" + }, + "peerDependencies": { + "@docusaurus/core": "^2.0.0", + "nodejieba": "^2.5.0" + }, + "peerDependenciesMeta": { + "nodejieba": { + "optional": true + } + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.1.tgz", + "integrity": "sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==" + }, + "node_modules/@docsearch/react": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.1.tgz", + "integrity": "sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==", + "dependencies": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.1", + "algoliasearch": "^4.0.0" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.1.tgz", + "integrity": "sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g==", + "dependencies": { + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.4.1", + "@docusaurus/logger": "2.4.1", + "@docusaurus/mdx-loader": "2.4.1", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.4.1", + "@docusaurus/utils-common": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^2.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.3", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz", + "integrity": "sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ==", + "dependencies": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/logger": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.1.tgz", + "integrity": "sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg==", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz", + "integrity": "sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ==", + "dependencies": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.4.1", + "@docusaurus/utils": "2.4.1", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz", + "integrity": "sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A==", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.4.1", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz", + "integrity": "sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/logger": "2.4.1", + "@docusaurus/mdx-loader": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils": "2.4.1", + "@docusaurus/utils-common": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "cheerio": "^1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz", + "integrity": "sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/logger": "2.4.1", + "@docusaurus/mdx-loader": "2.4.1", + "@docusaurus/module-type-aliases": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "@types/react-router-config": "^5.0.6", + "combine-promises": "^1.1.0", + "fs-extra": "^10.1.0", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz", + "integrity": "sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/mdx-loader": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "fs-extra": "^10.1.0", + "tslib": "^2.4.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz", + "integrity": "sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils": "2.4.1", + "fs-extra": "^10.1.0", + "react-json-view": "^1.21.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz", + "integrity": "sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz", + "integrity": "sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz", + "integrity": "sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz", + "integrity": "sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/logger": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils": "2.4.1", + "@docusaurus/utils-common": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "fs-extra": "^10.1.0", + "sitemap": "^7.1.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz", + "integrity": "sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/plugin-content-blog": "2.4.1", + "@docusaurus/plugin-content-docs": "2.4.1", + "@docusaurus/plugin-content-pages": "2.4.1", + "@docusaurus/plugin-debug": "2.4.1", + "@docusaurus/plugin-google-analytics": "2.4.1", + "@docusaurus/plugin-google-gtag": "2.4.1", + "@docusaurus/plugin-google-tag-manager": "2.4.1", + "@docusaurus/plugin-sitemap": "2.4.1", + "@docusaurus/theme-classic": "2.4.1", + "@docusaurus/theme-common": "2.4.1", + "@docusaurus/theme-search-algolia": "2.4.1", + "@docusaurus/types": "2.4.1" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz", + "integrity": "sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg==", + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/mdx-loader": "2.4.1", + "@docusaurus/module-type-aliases": "2.4.1", + "@docusaurus/plugin-content-blog": "2.4.1", + "@docusaurus/plugin-content-docs": "2.4.1", + "@docusaurus/plugin-content-pages": "2.4.1", + "@docusaurus/theme-common": "2.4.1", + "@docusaurus/theme-translations": "2.4.1", + "@docusaurus/types": "2.4.1", + "@docusaurus/utils": "2.4.1", + "@docusaurus/utils-common": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.43", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.14", + "prism-react-renderer": "^1.3.5", + "prismjs": "^1.28.0", + "react-router-dom": "^5.3.3", + "rtlcss": "^3.5.0", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.1.tgz", + "integrity": "sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA==", + "dependencies": { + "@docusaurus/mdx-loader": "2.4.1", + "@docusaurus/module-type-aliases": "2.4.1", + "@docusaurus/plugin-content-blog": "2.4.1", + "@docusaurus/plugin-content-docs": "2.4.1", + "@docusaurus/plugin-content-pages": "2.4.1", + "@docusaurus/utils": "2.4.1", + "@docusaurus/utils-common": "2.4.1", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.5", + "tslib": "^2.4.0", + "use-sync-external-store": "^1.2.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz", + "integrity": "sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ==", + "dependencies": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.4.1", + "@docusaurus/logger": "2.4.1", + "@docusaurus/plugin-content-docs": "2.4.1", + "@docusaurus/theme-common": "2.4.1", + "@docusaurus/theme-translations": "2.4.1", + "@docusaurus/utils": "2.4.1", + "@docusaurus/utils-validation": "2.4.1", + "algoliasearch": "^4.13.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", + "eta": "^2.0.0", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-translations": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz", + "integrity": "sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA==", + "dependencies": { + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/types": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.1.tgz", + "integrity": "sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA==", + "dependencies": { + "@docusaurus/logger": "2.4.1", + "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.1.tgz", + "integrity": "sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz", + "integrity": "sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA==", + "dependencies": { + "@docusaurus/logger": "2.4.1", + "@docusaurus/utils": "2.4.1", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", + "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "dependencies": { + "@jest/schemas": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nicolo-ribaudo/semver-v6": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", + "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "dependencies": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@stoplight/json": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.21.0.tgz", + "integrity": "sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==", + "dependencies": { + "@stoplight/ordered-object-literal": "^1.0.3", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^13.6.0", + "jsonc-parser": "~2.2.1", + "lodash": "^4.17.21", + "safe-stable-stringify": "^1.1" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/@stoplight/json-ref-resolver": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@stoplight/json-ref-resolver/-/json-ref-resolver-3.1.5.tgz", + "integrity": "sha512-uaKLITor7UF+JBtI84zs3aOWM0L79zp7w9TrBTwPtx5SLbaQQ4HadDKgX5yhFOLMApLdhwhiftF4c0GFanOxGg==", + "dependencies": { + "@stoplight/json": "^3.17.0", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^12.3.0 || ^13.0.0", + "@types/urijs": "^1.19.19", + "dependency-graph": "~0.11.0", + "fast-memoize": "^2.5.2", + "immer": "^9.0.6", + "lodash": "^4.17.21", + "tslib": "^2.3.1", + "urijs": "^1.19.11" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/@stoplight/ordered-object-literal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", + "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@stoplight/path": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", + "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@stoplight/types": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.15.0.tgz", + "integrity": "sha512-pBLjVRrWGVd+KzTbL3qrmufSKIEp0UfziDBdt/nrTHPKrlrtVwaHdrrQMcpM23yJDU1Wcg4cHvhIuGtKCT5OmA==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dependencies": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "dependencies": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "dependencies": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/docusaurus": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", + "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.5.tgz", + "integrity": "sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + }, + "node_modules/@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "node_modules/@types/node": { + "version": "20.4.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", + "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/react": { + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", + "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.7.tgz", + "integrity": "sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + }, + "node_modules/@types/urijs": { + "version": "1.19.19", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", + "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==" + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.18.0.tgz", + "integrity": "sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.18.0", + "@algolia/cache-common": "4.18.0", + "@algolia/cache-in-memory": "4.18.0", + "@algolia/client-account": "4.18.0", + "@algolia/client-analytics": "4.18.0", + "@algolia/client-common": "4.18.0", + "@algolia/client-personalization": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/logger-common": "4.18.0", + "@algolia/logger-console": "4.18.0", + "@algolia/requester-browser-xhr": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/requester-node-http": "4.18.0", + "@algolia/transporter": "4.18.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.13.3", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.13.3.tgz", + "integrity": "sha512-jhbbuYZ+fheXpaJlqdJdFa1jOsrTWKmRRTYDM3oVTto5VodZzM7tT+BHzslAotaJf/81CKrm6yLRQn8WIr/K4A==", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", + "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.1", + "@nicolo-ribaudo/semver-v6": "^6.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", + "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.1", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", + "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001515", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", + "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compressible/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz", + "integrity": "sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", + "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "dependencies": { + "browserslist": "^4.21.9" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz", + "integrity": "sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "dependencies": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", + "dependencies": { + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.14", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/docusaurus-json-schema-plugin": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/docusaurus-json-schema-plugin/-/docusaurus-json-schema-plugin-1.6.1.tgz", + "integrity": "sha512-CcFcQPIZ8aTtvUmg8p5q+7Zyk+VW+5lUsiZmuFFDZPxAAsYbSnBEUMaM9AueOCWY8W0zFSSbYLXHJe2bnNyUkg==", + "dependencies": { + "@stoplight/json-ref-resolver": "^3.1.5", + "monaco-editor": "^0.36.1", + "monaco-editor-webpack-plugin": "^7.0.1", + "react-monaco-editor": "^0.52.0" + }, + "peerDependencies": { + "@docusaurus/core": "^2.4.0", + "@docusaurus/theme-classic": "^2.4.0", + "react": "^17.0.2 || ^18.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.459", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.459.tgz", + "integrity": "sha512-XXRS5NFv8nCrBL74Rm3qhJjA2VCsRFx0OjHKBMPI0otij56aun8UWiKTDABmd5/7GTR021pA4wivs+Ri6XCElg==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-memoize": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", + "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flux": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "dependencies": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" + }, + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/htm": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz", + "integrity": "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==" + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.43", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", + "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz", + "integrity": "sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==", + "dependencies": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", + "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", + "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.9.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-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/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", + "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lunr-languages": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.12.0.tgz", + "integrity": "sha512-C2z02jt74ymrDocBwxYB4Cr1LNZj9rHGLTH/00+JuoT6eJOSSuPBzeqQG8kjnlPUQe+/PAWv1/KHbDT+YYYRnA==" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==" + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "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.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/monaco-editor": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.36.1.tgz", + "integrity": "sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg==" + }, + "node_modules/monaco-editor-webpack-plugin": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.1.0.tgz", + "integrity": "sha512-ZjnGINHN963JQkFqjjcBtn1XBtUATDZBMgNQhDQwd78w2ukRhFXAPNgWuacaQiDZsUr4h1rWv5Mv6eriKuOSzA==", + "dependencies": { + "loader-utils": "^2.0.2" + }, + "peerDependencies": { + "monaco-editor": ">= 0.31.0", + "webpack": "^4.5.0 || 5.x" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz", + "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", + "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", + "dependencies": { + "cosmiconfig": "^8.2.0", + "jiti": "^1.18.2", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.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==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", + "dependencies": { + "sort-css-media-queries": "2.1.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/preact": { + "version": "10.16.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.16.0.tgz", + "integrity": "sha512-XTSj3dJ4roKIC93pald6rWuB2qQJO9gO2iLLyTe87MrjQN+HklueLsmskbywEWqCHlclgz3/M4YLL2iBr9UmMA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", + "peerDependencies": { + "react": ">=0.14.9" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dependencies": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-monaco-editor": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/react-monaco-editor/-/react-monaco-editor-0.52.0.tgz", + "integrity": "sha512-jhQSekf2JABbcpN45gKZlWfTS0QcBOZAbAWKGyfqy/KEcMXTwJpCOYGcn2Ur11SUUxWJUzhKjE2fx9BGBc5S8g==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@types/react": ">=16 <= 18", + "monaco-editor": "^0.36.1", + "react": ">=16 <= 18" + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.2.tgz", + "integrity": "sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "dependencies": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "node_modules/rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "dependencies": { + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", + "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/search-insights": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.7.0.tgz", + "integrity": "sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==", + "peer": true, + "engines": { + "node": ">=8.16.0" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", + "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", + "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.0.tgz", + "integrity": "sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "deprecated": "Use String.prototype.trim() instead" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/update-notifier/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "dependencies": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz", + "integrity": "sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "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/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "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.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/docsite/package.json b/docsite/package.json new file mode 100644 index 00000000..b1570263 --- /dev/null +++ b/docsite/package.json @@ -0,0 +1,48 @@ +{ + "name": "my-website", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc" + }, + "dependencies": { + "@cmfcmf/docusaurus-search-local": "^1.1.0", + "@docusaurus/core": "2.4.1", + "@docusaurus/preset-classic": "2.4.1", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "docusaurus-json-schema-plugin": "^1.6.1", + "prism-react-renderer": "^1.3.5", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.4.1", + "@tsconfig/docusaurus": "^1.0.5", + "typescript": "^4.7.4" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "engines": { + "node": ">=16.14" + } +} diff --git a/docsite/sidebars.js b/docsite/sidebars.js new file mode 100644 index 00000000..b233bcdc --- /dev/null +++ b/docsite/sidebars.js @@ -0,0 +1,40 @@ +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [ + {type: 'autogenerated', dirName: '.'}, + { + type: "link", + label: "Config Playground", + href: "/pages/playground" + } + ], + + // But you can create a sidebar manually + /* + tutorialSidebar: [ + 'intro', + 'hello', + { + type: 'category', + label: 'Tutorial', + items: ['tutorial-basics/create-a-document'], + }, + ], + */ +}; + +module.exports = sidebars; diff --git a/docsite/src/components/JSONSchemaData.tsx b/docsite/src/components/JSONSchemaData.tsx new file mode 100644 index 00000000..76414edc --- /dev/null +++ b/docsite/src/components/JSONSchemaData.tsx @@ -0,0 +1,44 @@ +import React from "react" +import BrowserOnly from "@docusaurus/BrowserOnly" +import { useColorMode } from "@docusaurus/theme-common" + +import JSONSchemaEditor from "@theme/JSONSchemaEditor" +// Context +import { usePlaygroundContext } from "@site/src/contexts/PlaygroundContext" + +// Common stringify of the JSON +const STRINGIFY_JSON = (json: unknown) => JSON.stringify(json, null, "\t") + +function JSONSchemaDataInner(): JSX.Element { + const { + state: { userSchema, editorRef, data: value }, + updateState, + } = usePlaygroundContext() + + const { colorMode } = useColorMode() + + return ( +
+ { + updateState({ editorRef: editor }) + }} + height={"70vh"} + key={STRINGIFY_JSON(userSchema)} + /> +
+ ) +} + +export default function JSONSchemaDataComponent(): JSX.Element { + return ( + Loading...}> + {() => { + return + }} + + ) +} diff --git a/docsite/src/components/PlaygroundInner.tsx b/docsite/src/components/PlaygroundInner.tsx new file mode 100644 index 00000000..e0f15bd6 --- /dev/null +++ b/docsite/src/components/PlaygroundInner.tsx @@ -0,0 +1,59 @@ +import React from "react" +import BrowserOnly from "@docusaurus/BrowserOnly" + +import Schema from "@site/static/aio.json"; +import ConfigExample from "@site/static/configExample.json"; +import JSONSchemaViewer from "@theme/JSONSchemaViewer" +import JSONSchemaEditor from "@theme/JSONSchemaEditor"; +import {useColorMode} from "@docusaurus/theme-common"; +const STRINGIFY_JSON = (json: unknown) => JSON.stringify(json, null, "\t") + +// based on https://github.com/jy95/docusaurus-json-schema-plugin/blob/main/testsite/src/components/PlaygroundInner.tsx +function PlaygroundInner(): JSX.Element { + + const { colorMode } = useColorMode() + + return ( +
+
+
+ +
+
+ +
+
+
+ ) +} + +export default function PlaygroundComponent(): JSX.Element { + return ( + Loading...}> + {() => { + return + }} + + ) +} diff --git a/docsite/src/contexts/PlaygroundContext.tsx b/docsite/src/contexts/PlaygroundContext.tsx new file mode 100644 index 00000000..99159c33 --- /dev/null +++ b/docsite/src/contexts/PlaygroundContext.tsx @@ -0,0 +1,50 @@ +import { useContext, createContext } from "react" + +// Type I need for useRef +import type { MonacoEditorTypes } from "@theme/MonacoEditor" + +export type State = { + // The full schema + // We might need to scope it with a JSON Pointer + fullSchema: unknown + // The current schema displayed (after the json pointer) + userSchema: unknown + // The current json pointer + jsonPointer: string + // Schema editor ref + schemaRef: undefined | MonacoEditorTypes.IStandaloneCodeEditor + // Data editor ref + editorRef: undefined | MonacoEditorTypes.IStandaloneCodeEditor + // Data on the data editor + // When using "Infer schema from data", it would be annoying to lose our written + data: string + // Errors in schema + schemaErrors: MonacoEditorTypes.IMarkerData[] + // Errors in data + dataErrors: MonacoEditorTypes.IMarkerData[] +} + +export type Playground = { + // state + state: State + // update function + updateState: (_: Partial) => void +} + +export const PlaygroundContext = createContext({ + state: { + fullSchema: {}, + userSchema: {}, + jsonPointer: "", + data: "{}", + schemaRef: undefined, + editorRef: undefined, + schemaErrors: [], + dataErrors: [], + }, + updateState: () => {}, +}) + +export const usePlaygroundContext = () => useContext(PlaygroundContext) + +export const PlaygroundContextProvider = PlaygroundContext.Provider diff --git a/docsite/src/css/custom.css b/docsite/src/css/custom.css new file mode 100644 index 00000000..2bc6a4cf --- /dev/null +++ b/docsite/src/css/custom.css @@ -0,0 +1,30 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #2e8555; + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: #33925d; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: #25c2a0; + --ifm-color-primary-dark: #21af90; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: #29d5b0; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); +} diff --git a/docsite/src/pages/index.mdx b/docsite/src/pages/index.mdx new file mode 100644 index 00000000..2be09e18 --- /dev/null +++ b/docsite/src/pages/index.mdx @@ -0,0 +1,100 @@ +--- +title: Multi-Scrobbler +--- + +# multi-scrobbler + +![Latest Release](https://img.shields.io/github/v/release/foxxmd/multi-scrobbler) +![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg) +![Docker Pulls](https://img.shields.io/docker/pulls/foxxmd/multi-scrobbler) + +multi-scrobbler logo + +A javascript app to scrobble music you listened to, to [Maloja](https://github.com/krateng/maloja), [Last.fm](https://www.last.fm), and [ListenBrainz](https://listenbrainz.org) + +* Supports scrobbling from many **Sources** + * [Spotify](/docs/configuration.md#spotify) + * [Plex](/docs/configuration.md#plex) or [Tautulli](/docs/configuration.md#tautulli) + * [Subsonic-compatible APIs](/docs/configuration.md#subsonic) (like [Airsonic](https://airsonic.github.io/)) + * [Jellyfin](/docs/configuration.md#jellyfin) + * [Youtube Music](/docs/configuration.md#youtube-music) + * [Last.fm](/docs/configuration.md#lastfm-source) + * [ListenBrainz](/docs/configuration.md#listenbrainz--source-) + * [Deezer](/docs/configuration.md#deezer) + * [MPRIS (Linux Desktop)](/docs/configuration.md#mpris) + * [Mopidy](/docs/configuration.md#mopidy) + * [JRiver](/docs/configuration.md#jriver) + * [Kodi](/docs/configuration.md#kodi) +* Supports scrobbling to many **Clients** + * [Maloja](/docs/configuration.md#maloja) + * [Last.fm](/docs/configuration.md#lastfm) + * [ListenBrainz](/docs/configuration.md#listenbrainz) +* Monitor status of Sources and Clients using [webhooks (Gotify or Ntfy)](/docs/configuration.md#webhook-configurations) or [healthcheck endpoint](/docs/configuration.md#health-endpoint) +* Supports configuring for single or multiple users (scrobbling for your friends and family!) +* Web server interface for stats, basic control, and detailed logs +* Smart handling of credentials (persistent, authorization through app) +* Easy configuration through ENVs or JSON +* Install using [Docker images for x86/ARM](/docs/installation.md#docker), [flatpak](/docs/installation.md#flatpak), or [locally with NodeJS](/docs/installation.md#nodejs) + +**Why should I use this over a browser extension and/or mobile app scrobbler?** + +* **Platform independent** -- Because multi-scrobbler communicates directly with service APIs it will scrobble everything you play regardless of where you play it. No more need for apps on every platform you use! +* **Open-source** -- Get peace of mind knowing exactly how your personal data is being handled. +* **Track your activity regardless of where you listen** -- Scrobble from many Sources to one Client with ease and without duplicating tracks. +* **Manage scrobbling for others** -- Scrobble for your friends and family without any setup on their part. Easily silo sources to specific clients to keep plays separate. + +**But I already scrobble my music to Last.fm/ListenBrainz, is multi-scrobbler for me?** + +Yes! You can use [Last.fm as a **Source**](/docs/configuration.md#lastfm--source-) or [Listenbrainz as a **Source**](/docs/configuration.md#listenbrainz--source-) to forward scrobbles from your profile to any other Client! That way you can keep your current scrobble setup as-is but still get the benefit of capturing your data to a self-hosted location. + + + +## How Does multi-scrobbler (MS) Work? + +You set up configurations for one or more **Sources** and one or more **Clients**. MS monitors all of your configured **Sources**. When new tracks are played by a Source it grabs that information and then sends it (scrobbles it) to all **Clients** that Source is configured to scrobble to. + +### Source + +A **Source** is a data source that contains information about tracks you are playing like a music player or platform. Examples are **Spotify, Jellyfin, Plex, Youtube Music, Airsonic**, etc... + +Source configurations consist of: + +* A friendly name. +* Any data needed to communicate or authenticate with the Source. +* An optional list of Client names that the Source should scrobble to. If omitted the Source also scrobbles to all configured Clients. + +### Client + +A **Client** is an application that stores the historical information about what songs you have played (scrobbles). Examples are **Maloja, Last.fm, Listenbrainz**... + +Client configurations consist of: + +* A friendly name. +* Any data needed to communicate or authenticate with the Client. + +## Installation + +[See the **Installation** documentation](/docs/installation.md) + +## Configuration + +[See the **Configuration** documentation](/docs/configuration.md) + +## Usage + +A status page with statistics, recent logs, and some runtime configuration options can be found at + +``` +http://localhost:9078 +``` +Output is also provided to stdout/stderr as well as file if specified in configuration. + +On first startup you may need to authorize Spotify and/or Last.fm by visiting the callback URL (which can also be accessed from the status page). Visit the status page above to find the applicable link to trigger this. + +## Help/FAQ + +Having issues with connections or configuration? Check the [FAQ](/docs/FAQ.md) before creating an issue! + +## License + +MIT diff --git a/docsite/src/pages/playground.tsx b/docsite/src/pages/playground.tsx new file mode 100644 index 00000000..fc1f8a42 --- /dev/null +++ b/docsite/src/pages/playground.tsx @@ -0,0 +1,38 @@ +import React from "react" +import Layout from "@theme/Layout" +import BrowserOnly from "@docusaurus/BrowserOnly" +import ErrorBoundary from "@docusaurus/ErrorBoundary" +// based on https://github.com/jy95/docusaurus-json-schema-plugin/blob/main/testsite/src/pages/playground.tsx +function PlaygroundComponent(): JSX.Element { + // No SSR for the live preview + // See https://github.com/facebook/docusaurus/issues/5747 + return ( + ( +
+

Playground component crashed because of error: {error.message}.

+ +
+ )} + > + Loading...}> + {() => { + const PlaygroundInnerComponent = + require("@site/src/components/PlaygroundInner").default + return + }} + +
+ ) +} + +export default function Playground(): JSX.Element { + return ( + + + + ) +} diff --git a/docsite/static/.nojekyll b/docsite/static/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docsite/static/aio.json b/docsite/static/aio.json new file mode 100644 index 00000000..e20f612c --- /dev/null +++ b/docsite/static/aio.json @@ -0,0 +1,2439 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ClientAIOConfig": { + "anyOf": [ + { + "$ref": "#/definitions/LastfmClientAIOConfig" + }, + { + "$ref": "#/definitions/ListenBrainzClientAIOConfig" + }, + { + "$ref": "#/definitions/MalojaClientAIOConfig" + } + ], + "title": "ClientAIOConfig" + }, + "CommonClientData": { + "properties": { + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a client can make before error is thrown.", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "properties": { + "checkExistingScrobbles": { + "default": true, + "description": "Check client for an existing scrobble at the same recorded time as the \"new\" track to be scrobbled. If an existing scrobble is found this track is not track scrobbled.", + "examples": [ + true + ], + "title": "checkExistingScrobbles", + "type": "boolean" + }, + "refreshEnabled": { + "default": true, + "description": "Try to get fresh scrobble history from client when tracks to be scrobbled are newer than the last scrobble found in client history", + "examples": [ + true + ], + "title": "refreshEnabled", + "type": "boolean" + }, + "verbose": { + "description": "Options used for increasing verbosity of logging in MS (used for debugging)", + "properties": { + "match": { + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" + } + }, + "title": "verbose", + "type": "object" + } + }, + "title": "options", + "type": "object" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying).", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + } + }, + "title": "CommonClientData", + "type": "object" + }, + "DeezerData": { + "properties": { + "clientId": { + "description": "deezer client id", + "examples": [ + "a89cba1569901a0671d5a9875fed4be1" + ], + "title": "clientId", + "type": "string" + }, + "clientSecret": { + "description": "deezer client secret", + "examples": [ + "ec42e09d5ae0ee0f0816ca151008412a" + ], + "title": "clientSecret", + "type": "string" + }, + "interval": { + "default": 60, + "description": "optional, how long to wait before calling spotify for new tracks (in seconds)", + "examples": [ + 60 + ], + "title": "interval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "redirectUri": { + "default": "http://localhost:9078/deezer/callback", + "description": "deezer redirect URI -- required only if not the default shown here. URI must end in \"callback\"", + "examples": [ + "http://localhost:9078/deezer/callback" + ], + "title": "redirectUri", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + } + }, + "required": [ + "clientId", + "clientSecret", + "redirectUri" + ], + "title": "DeezerData", + "type": "object" + }, + "DeezerSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/DeezerData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "deezer" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "DeezerSourceAIOConfig", + "type": "object" + }, + "GotifyConfig": { + "properties": { + "name": { + "description": "A friendly name used to identify webhook config in logs", + "title": "name", + "type": "string" + }, + "priorities": { + "$ref": "#/definitions/PrioritiesConfig", + "description": "Priority of messages\n\n* Info -> 5\n* Warn -> 7\n* Error -> 10", + "title": "priorities" + }, + "token": { + "description": "The token created for this Application in Gotify", + "examples": [ + "AQZI58fA.rfSZbm" + ], + "title": "token", + "type": "string" + }, + "type": { + "description": "Webhook type. Valid values are:\n\n* gotify\n* ntfy", + "enum": [ + "gotify", + "ntfy" + ], + "examples": [ + "gotify" + ], + "title": "type", + "type": "string" + }, + "url": { + "description": "The URL of the Gotify server. Same URL that would be used to reach the Gotify UI", + "examples": [ + "http://192.168.0.100:8078" + ], + "title": "url", + "type": "string" + } + }, + "required": [ + "token", + "type", + "url" + ], + "title": "GotifyConfig", + "type": "object" + }, + "JRiverData": { + "properties": { + "interval": { + "default": 30, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 30 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 60, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 60 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "password": { + "description": "If you have enabled authentication, the password you set", + "title": "password", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "url": { + "default": "http://localhost:52199/MCWS/v1/", + "description": "URL of the JRiver HTTP server to connect to\n\nmulti-scrobbler connects to the Web Service Interface endpoint that ultimately looks like this => `http://yourDomain:52199/MCWS/v1/`\n\nThe URL you provide here will have all parts not explicitly defined filled in for you so if these are not the default you must define them.\n\nParts => [default value]\n\n* Protocol => `http://`\n* Hostname => `localhost`\n* Port => `52199`\n* Path => `/MCWS/v1/`", + "examples": [ + "http://localhost:52199/MCWS/v1/" + ], + "title": "url", + "type": "string" + }, + "username": { + "description": "If you have enabled authentication, the username you set", + "title": "username", + "type": "string" + } + }, + "required": [ + "url" + ], + "title": "JRiverData", + "type": "object" + }, + "JRiverSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/JRiverData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "jriver" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "JRiverSourceAIOConfig", + "type": "object" + }, + "JellyData": { + "properties": { + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "description": "Additional options for jellyfin logging and tuning", + "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Jellyfin event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Jellyfin sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ], + "title": "logFilterFailure" + }, + "logPayload": { + "default": false, + "description": "Log raw Jellyfin webhook payload to debug", + "examples": [ + false + ], + "title": "logPayload", + "type": "boolean" + } + }, + "title": "options", + "type": "object" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "servers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of servers to scrobble tracks from\n\nIf none are provided tracks from all servers will be scrobbled", + "examples": [ + [ + "MyServerName1" + ] + ], + "title": "servers" + }, + "users": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of users to scrobble tracks from\n\nIf none are provided tracks from all users will be scrobbled", + "examples": [ + [ + "MyUser1", + "MyUser2" + ] + ], + "title": "users" + } + }, + "title": "JellyData", + "type": "object" + }, + "JellySourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/JellyData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "jellyfin" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "JellySourceAIOConfig", + "type": "object" + }, + "KodiData": { + "properties": { + "interval": { + "default": 30, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 30 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 60, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 60 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "password": { + "description": "The password set for Remote Control via Web Sever", + "title": "password", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "url": { + "default": "http://localhost:8080/jsonrpc", + "description": "URL of the Kodi HTTP server to connect to\n\nmulti-scrobbler connects to the Web Service Interface endpoint that ultimately looks like this => `http://yourDomain:8080/jsonrpc`\n\nThe URL you provide here will have all parts not explicitly defined filled in for you so if these are not the default you must define them.\n\nParts => [default value]\n\n* Protocol => `http://`\n* Hostname => `localhost`\n* Port => `8080`\n* Path => `/jsonrpc`", + "examples": [ + "http://localhost:8080/jsonrpc" + ], + "title": "url", + "type": "string" + }, + "username": { + "description": "The username set for Remote Control via Web Sever", + "title": "username", + "type": "string" + } + }, + "required": [ + "password", + "url", + "username" + ], + "title": "KodiData", + "type": "object" + }, + "KodiSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/KodiData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "kodi" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "KodiSourceAIOConfig", + "type": "object" + }, + "LastFmSouceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "configureAs": { + "default": "source", + "description": "When used in `lastfm.config` this tells multi-scrobbler whether to use this data to configure a source or client.", + "enum": [ + "source" + ], + "examples": [ + "source" + ], + "title": "configureAs", + "type": "string" + }, + "data": { + "$ref": "#/definitions/LastFmSourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "lastfm" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "LastFmSouceAIOConfig", + "type": "object" + }, + "LastFmSourceData": { + "properties": { + "apiKey": { + "description": "API Key generated from Last.fm account", + "examples": [ + "787c921a2a2ab42320831aba0c8f2fc2" + ], + "title": "apiKey", + "type": "string" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "redirectUri": { + "default": "http://localhost:9078/lastfm/callback", + "description": "Optional URI to use for callback. Specify this if callback should be different than the default. MUST have \"lastfm/callback\" in the URL somewhere.", + "examples": [ + "http://localhost:9078/lastfm/callback" + ], + "title": "redirectUri", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "secret": { + "description": "Secret generated from Last.fm account", + "examples": [ + "ec42e09d5ae0ee0f0816ca151008412a" + ], + "title": "secret", + "type": "string" + }, + "session": { + "description": "Optional session id returned from a completed auth flow", + "title": "session", + "type": "string" + } + }, + "required": [ + "apiKey", + "secret" + ], + "title": "LastFmSourceData", + "type": "object" + }, + "LastfmClientAIOConfig": { + "properties": { + "configureAs": { + "default": "client", + "description": "Should always be `client` when using LastFM as a client", + "enum": [ + "client", + "source" + ], + "examples": [ + "client" + ], + "title": "configureAs", + "type": "string" + }, + "data": { + "allOf": [ + { + "$ref": "#/definitions/CommonClientData" + }, + { + "$ref": "#/definitions/LastfmData" + } + ], + "description": "Specific data required to configure this client", + "title": "data" + }, + "name": { + "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", + "examples": [ + "MyConfig" + ], + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "lastfm" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "name", + "type" + ], + "title": "LastfmClientAIOConfig", + "type": "object" + }, + "LastfmData": { + "properties": { + "apiKey": { + "description": "API Key generated from Last.fm account", + "examples": [ + "787c921a2a2ab42320831aba0c8f2fc2" + ], + "title": "apiKey", + "type": "string" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "redirectUri": { + "default": "http://localhost:9078/lastfm/callback", + "description": "Optional URI to use for callback. Specify this if callback should be different than the default. MUST have \"lastfm/callback\" in the URL somewhere.", + "examples": [ + "http://localhost:9078/lastfm/callback" + ], + "title": "redirectUri", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "secret": { + "description": "Secret generated from Last.fm account", + "examples": [ + "ec42e09d5ae0ee0f0816ca151008412a" + ], + "title": "secret", + "type": "string" + }, + "session": { + "description": "Optional session id returned from a completed auth flow", + "title": "session", + "type": "string" + } + }, + "required": [ + "apiKey", + "secret" + ], + "title": "LastfmData", + "type": "object" + }, + "ListenBrainzClientAIOConfig": { + "properties": { + "configureAs": { + "default": "client", + "description": "Should always be `client` when using Listenbrainz as a client", + "enum": [ + "client", + "source" + ], + "examples": [ + "client" + ], + "title": "configureAs", + "type": "string" + }, + "data": { + "$ref": "#/definitions/ListenBrainzClientData", + "description": "Specific data required to configure this client", + "title": "data" + }, + "name": { + "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", + "examples": [ + "MyConfig" + ], + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "listenbrainz" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "name", + "type" + ], + "title": "ListenBrainzClientAIOConfig", + "type": "object" + }, + "ListenBrainzClientData": { + "properties": { + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "properties": { + "checkExistingScrobbles": { + "default": true, + "description": "Check client for an existing scrobble at the same recorded time as the \"new\" track to be scrobbled. If an existing scrobble is found this track is not track scrobbled.", + "examples": [ + true + ], + "title": "checkExistingScrobbles", + "type": "boolean" + }, + "refreshEnabled": { + "default": true, + "description": "Try to get fresh scrobble history from client when tracks to be scrobbled are newer than the last scrobble found in client history", + "examples": [ + true + ], + "title": "refreshEnabled", + "type": "boolean" + }, + "verbose": { + "description": "Options used for increasing verbosity of logging in MS (used for debugging)", + "properties": { + "match": { + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" + } + }, + "title": "verbose", + "type": "object" + } + }, + "title": "options", + "type": "object" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "token": { + "description": "User token for the user to scrobble for", + "examples": [ + "6794186bf-1157-4de6-80e5-uvb411f3ea2b" + ], + "title": "token", + "type": "string" + }, + "url": { + "default": "https://api.listenbrainz.org/", + "description": "URL for the ListenBrainz server, if not using the default", + "examples": [ + "https://api.listenbrainz.org/" + ], + "title": "url", + "type": "string" + }, + "username": { + "description": "Username of the user to scrobble for", + "title": "username", + "type": "string" + } + }, + "required": [ + "token", + "username" + ], + "title": "ListenBrainzClientData", + "type": "object" + }, + "ListenBrainzSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "configureAs": { + "default": "source", + "description": "When used in `listenbrainz.config` this tells multi-scrobbler whether to use this data to configure a source or client.", + "enum": [ + "source" + ], + "examples": [ + "source" + ], + "title": "configureAs", + "type": "string" + }, + "data": { + "$ref": "#/definitions/ListenBrainzSourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "listenbrainz" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "ListenBrainzSourceAIOConfig", + "type": "object" + }, + "ListenBrainzSourceData": { + "properties": { + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "token": { + "description": "User token for the user to scrobble for", + "examples": [ + "6794186bf-1157-4de6-80e5-uvb411f3ea2b" + ], + "title": "token", + "type": "string" + }, + "url": { + "default": "https://api.listenbrainz.org/", + "description": "URL for the ListenBrainz server, if not using the default", + "examples": [ + "https://api.listenbrainz.org/" + ], + "title": "url", + "type": "string" + }, + "username": { + "description": "Username of the user to scrobble for", + "title": "username", + "type": "string" + } + }, + "required": [ + "token", + "username" + ], + "title": "ListenBrainzSourceData", + "type": "object" + }, + "LogLevel": { + "enum": [ + "debug", + "error", + "info", + "verbose", + "warn" + ], + "title": "LogLevel", + "type": "string" + }, + "LogOptions": { + "properties": { + "console": { + "$ref": "#/definitions/LogLevel", + "description": "Specify the minimum log level streamed to the console (or docker container)", + "title": "console" + }, + "file": { + "description": "Specify the minimum log level to output to rotating files. If `false` no log files will be created.", + "enum": [ + "debug", + "error", + false, + "info", + "verbose", + "warn" + ], + "title": "file" + }, + "level": { + "$ref": "#/definitions/LogLevel", + "default": "'info'", + "description": "Specify the minimum log level for all log outputs without their own level specified.\n\nDefaults to env `LOG_LEVEL` or `info` if not specified.", + "title": "level" + }, + "stream": { + "$ref": "#/definitions/LogLevel", + "description": "Specify the minimum log level streamed to the UI", + "title": "stream" + } + }, + "title": "LogOptions", + "type": "object" + }, + "MPRISData": { + "properties": { + "blacklist": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "DO NOT scrobble from any players that START WITH these values, case-insensitive", + "examples": [ + [ + "spotify", + "vlc" + ] + ], + "title": "blacklist" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "whitelist": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "ONLY from any players that START WITH these values, case-insensitive\n\nIf whitelist is present then blacklist is ignored", + "examples": [ + [ + "spotify", + "vlc" + ] + ], + "title": "whitelist" + } + }, + "title": "MPRISData", + "type": "object" + }, + "MPRISSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/MPRISData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "mpris" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "MPRISSourceAIOConfig", + "type": "object" + }, + "MalojaClientAIOConfig": { + "properties": { + "data": { + "$ref": "#/definitions/MalojaClientData", + "description": "Specific data required to configure this client", + "title": "data" + }, + "name": { + "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", + "examples": [ + "MyConfig" + ], + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "maloja" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "name", + "type" + ], + "title": "MalojaClientAIOConfig", + "type": "object" + }, + "MalojaClientData": { + "properties": { + "apiKey": { + "description": "API Key for Maloja server", + "examples": [ + "myApiKey" + ], + "title": "apiKey", + "type": "string" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "properties": { + "checkExistingScrobbles": { + "default": true, + "description": "Check client for an existing scrobble at the same recorded time as the \"new\" track to be scrobbled. If an existing scrobble is found this track is not track scrobbled.", + "examples": [ + true + ], + "title": "checkExistingScrobbles", + "type": "boolean" + }, + "refreshEnabled": { + "default": true, + "description": "Try to get fresh scrobble history from client when tracks to be scrobbled are newer than the last scrobble found in client history", + "examples": [ + true + ], + "title": "refreshEnabled", + "type": "boolean" + }, + "verbose": { + "description": "Options used for increasing verbosity of logging in MS (used for debugging)", + "properties": { + "match": { + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" + } + }, + "title": "verbose", + "type": "object" + } + }, + "title": "options", + "type": "object" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "url": { + "description": "URL for maloja server", + "examples": [ + "http://localhost:42010" + ], + "title": "url", + "type": "string" + } + }, + "required": [ + "apiKey", + "url" + ], + "title": "MalojaClientData", + "type": "object" + }, + "MatchLoggingOptions": { + "description": "Scrobble matching (between new source track and existing client scrobbles) logging options. Used for debugging.", + "properties": { + "confidenceBreakdown": { + "default": false, + "description": "Include confidence breakdowns in track match logging, if applicable", + "examples": [ + false + ], + "title": "confidenceBreakdown", + "type": "boolean" + }, + "onMatch": { + "default": false, + "description": "Log to DEBUG when a new track DOES match an existing scrobble", + "examples": [ + false + ], + "title": "onMatch", + "type": "boolean" + }, + "onNoMatch": { + "default": false, + "description": "Log to DEBUG when a new track does NOT match an existing scrobble", + "examples": [ + false + ], + "title": "onNoMatch", + "type": "boolean" + } + }, + "title": "MatchLoggingOptions", + "type": "object" + }, + "MopidyData": { + "properties": { + "albumBlacklist": { + "default": [ + "Soundcloud" + ], + "description": "Remove album data that matches any case-insensitive string from this list when scrobbling,\n\nFor certain sources (Soundcloud) Mopidy does not have all track info (Album) and will instead use \"Soundcloud\" as the Album name. You can prevent multi-scrobbler from using this bad Album data by adding the fake name to this list. Multi-scrobbler will still scrobble the track, just without the bad data.", + "examples": [ + [ + "Soundcloud", + "Mixcloud" + ] + ], + "items": { + "type": "string" + }, + "title": "albumBlacklist", + "type": "array" + }, + "interval": { + "default": 10, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 10 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 30, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 30 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "uriBlacklist": { + "description": "Do not scrobble tracks whose URI STARTS WITH any of these strings, case-insensitive\n\nEX: Don't scrobble tracks from soundcloud by adding 'soundcloud' to this list.\n\nList is ignored if uriWhitelist is used.", + "items": { + "type": "string" + }, + "title": "uriBlacklist", + "type": "array" + }, + "uriWhitelist": { + "description": "Only scrobble tracks whose URI STARTS WITH any of these strings, case-insensitive\n\nEX: Only scrobble tracks from soundcloud by adding 'soundcloud' to this list.", + "items": { + "type": "string" + }, + "title": "uriWhitelist", + "type": "array" + }, + "url": { + "default": "ws://localhost:6680/mopidy/ws/", + "description": "URL of the Mopidy HTTP server to connect to\n\nYou MUST have Mopidy-HTTP extension enabled: https://mopidy.com/ext/http\n\nmulti-scrobbler connects to the WebSocket endpoint that ultimately looks like this => `ws://localhost:6680/mopidy/ws/`\n\nThe URL you provide here will have all parts not explicitly defined filled in for you so if these are not the default you must define them.\n\nParts => [default value]\n\n* Protocol => `ws://`\n* Hostname => `localhost`\n* Port => `6680`\n* Path => `/mopidy/ws/`", + "examples": [ + "ws://localhost:6680/mopidy/ws/" + ], + "title": "url", + "type": "string" + } + }, + "title": "MopidyData", + "type": "object" + }, + "MopidySourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/MopidyData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "mopidy" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "MopidySourceAIOConfig", + "type": "object" + }, + "NtfyConfig": { + "properties": { + "name": { + "description": "A friendly name used to identify webhook config in logs", + "title": "name", + "type": "string" + }, + "password": { + "description": "Required if topic is protected", + "title": "password", + "type": "string" + }, + "priorities": { + "$ref": "#/definitions/PrioritiesConfig", + "description": "Priority of messages\n\n* Info -> 3\n* Warn -> 4\n* Error -> 5", + "title": "priorities" + }, + "topic": { + "description": "The topic mutli-scrobbler should POST to", + "title": "topic", + "type": "string" + }, + "type": { + "description": "Webhook type. Valid values are:\n\n* gotify\n* ntfy", + "enum": [ + "gotify", + "ntfy" + ], + "examples": [ + "gotify" + ], + "title": "type", + "type": "string" + }, + "url": { + "description": "The URL of the Ntfy server", + "examples": [ + "http://192.168.0.100:8078" + ], + "title": "url", + "type": "string" + }, + "username": { + "description": "Required if topic is protected", + "title": "username", + "type": "string" + } + }, + "required": [ + "topic", + "type", + "url" + ], + "title": "NtfyConfig", + "type": "object" + }, + "PlexSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/PlexSourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "plex" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "PlexSourceAIOConfig", + "type": "object" + }, + "PlexSourceData": { + "properties": { + "libraries": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of libraries to scrobble tracks from\n\nIf none are provided tracks from all libraries will be scrobbled", + "examples": [ + [ + "Audio", + "Music" + ] + ], + "title": "libraries" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "description": "Additional options for Plex/Tautulli logging and tuning", + "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Plex/Tautulli event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Plex/Tautulli sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ], + "title": "logFilterFailure" + } + }, + "title": "options", + "type": "object" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "servers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of servers to scrobble tracks from\n\nIf none are provided tracks from all servers will be scrobbled", + "examples": [ + [ + "MyServerName" + ] + ], + "title": "servers" + }, + "user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of users to scrobble tracks from\n\nIf none are provided tracks from all users will be scrobbled", + "examples": [ + [ + "MyUser1", + "MyUser2" + ] + ], + "title": "user" + } + }, + "title": "PlexSourceData", + "type": "object" + }, + "PrioritiesConfig": { + "properties": { + "error": { + "examples": [ + 10 + ], + "title": "error", + "type": "number" + }, + "info": { + "examples": [ + 5 + ], + "title": "info", + "type": "number" + }, + "warn": { + "examples": [ + 7 + ], + "title": "warn", + "type": "number" + } + }, + "required": [ + "error", + "info", + "warn" + ], + "title": "PrioritiesConfig", + "type": "object" + }, + "Record": { + "title": "Record", + "type": "object" + }, + "RequestRetryOptions": { + "properties": { + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + } + }, + "title": "RequestRetryOptions", + "type": "object" + }, + "ScrobbleThresholds": { + "properties": { + "duration": { + "default": 30, + "description": "The number of seconds before a track should be considered scrobbled.", + "examples": [ + 30 + ], + "title": "duration", + "type": "number" + }, + "percent": { + "description": "The percentage of a track that should have been seen played before it should be scrobbled. Only used if the Source provides information about how long the track is.\n\nNOTE: This should be used with care when the Source is a \"polling\" type (has an 'interval' property). If the track is short and the interval is too high MS may ignore the track if percentage is high because it had not \"seen\" the track for long enough from first discovery, even if you have been playing the track for longer.", + "title": "percent", + "type": "number" + } + }, + "title": "ScrobbleThresholds", + "type": "object" + }, + "SourceAIOConfig": { + "anyOf": [ + { + "$ref": "#/definitions/SpotifySourceAIOConfig" + }, + { + "$ref": "#/definitions/PlexSourceAIOConfig" + }, + { + "$ref": "#/definitions/TautulliSourceAIOConfig" + }, + { + "$ref": "#/definitions/DeezerSourceAIOConfig" + }, + { + "$ref": "#/definitions/SubsonicSourceAIOConfig" + }, + { + "$ref": "#/definitions/JellySourceAIOConfig" + }, + { + "$ref": "#/definitions/LastFmSouceAIOConfig" + }, + { + "$ref": "#/definitions/YTMusicSourceAIOConfig" + }, + { + "$ref": "#/definitions/MPRISSourceAIOConfig" + }, + { + "$ref": "#/definitions/MopidySourceAIOConfig" + }, + { + "$ref": "#/definitions/ListenBrainzSourceAIOConfig" + }, + { + "$ref": "#/definitions/JRiverSourceAIOConfig" + }, + { + "$ref": "#/definitions/KodiSourceAIOConfig" + } + ], + "title": "SourceAIOConfig" + }, + "SourceRetryOptions": { + "properties": { + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + } + }, + "title": "SourceRetryOptions", + "type": "object" + }, + "SpotifySourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/SpotifySourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "spotify" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "SpotifySourceAIOConfig", + "type": "object" + }, + "SpotifySourceData": { + "properties": { + "clientId": { + "description": "spotify client id", + "examples": [ + "787c921a2a2ab42320831aba0c8f2fc2" + ], + "title": "clientId", + "type": "string" + }, + "clientSecret": { + "description": "spotify client secret", + "examples": [ + "ec42e09d5ae0ee0f0816ca151008412a" + ], + "title": "clientSecret", + "type": "string" + }, + "interval": { + "default": 30, + "description": "How long to wait before polling the source API for new tracks (in seconds)\n\nIt is unlikely you should need to change this unless you scrobble many very short tracks often\n\nReading:\n* https://developer.spotify.com/documentation/web-api/guides/rate-limits/\n* https://medium.com/mendix/limiting-your-amount-of-calls-in-mendix-most-of-the-time-rest-835dde55b10e\n * The rate limit is ~180 req/min", + "examples": [ + 30 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 60, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 60 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "redirectUri": { + "default": "http://localhost:9078/callback", + "description": "spotify redirect URI -- required only if not the default shown here. URI must end in \"callback\"", + "examples": [ + "http://localhost:9078/callback" + ], + "title": "redirectUri", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + } + }, + "required": [ + "clientId", + "clientSecret", + "redirectUri" + ], + "title": "SpotifySourceData", + "type": "object" + }, + "SubsonicData": { + "properties": { + "interval": { + "default": 10, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 10 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 30, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 30 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "password": { + "description": "Password for the user to login to the server with", + "examples": [ + "MyPassword" + ], + "title": "password", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "url": { + "description": "URL of the subsonic media server to query", + "examples": [ + "http://airsonic.local" + ], + "title": "url", + "type": "string" + }, + "user": { + "description": "Username to login to the server with", + "title": "user", + "type": "string" + } + }, + "required": [ + "password", + "url", + "user" + ], + "title": "SubsonicData", + "type": "object" + }, + "SubsonicSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/SubsonicData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "subsonic" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "SubsonicSourceAIOConfig", + "type": "object" + }, + "TautulliSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/PlexSourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "tautulli" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "TautulliSourceAIOConfig", + "type": "object" + }, + "WebhookConfig": { + "anyOf": [ + { + "$ref": "#/definitions/GotifyConfig" + }, + { + "$ref": "#/definitions/NtfyConfig" + } + ], + "title": "WebhookConfig" + }, + "YTMusicData": { + "properties": { + "authUser": { + "description": "If the 'X-Goog-AuthUser' header is present in the Request Headers for music.youtube.com it must also be included", + "title": "authUser", + "type": "number" + }, + "cookie": { + "description": "The cookie retrieved from the Request Headers of music.youtube.com after logging in.\n\nSee https://github.com/nickp10/youtube-music-ts-api/blob/master/DOCUMENTATION.md#authenticate and https://ytmusicapi.readthedocs.io/en/latest/setup.html#copy-authentication-headers for how to retrieve this value.", + "examples": [ + "VISITOR_INFO1_LIVE=jMp2xA1Xz2_PbVc; __Secure-3PAPISID=3AxsXpy0M/AkISpjek; ..." + ], + "title": "cookie", + "type": "string" + }, + "interval": { + "default": 30, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 30 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 60, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 60 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + } + }, + "required": [ + "cookie" + ], + "title": "YTMusicData", + "type": "object" + }, + "YTMusicSourceAIOConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/YTMusicData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + }, + "type": { + "enum": [ + "ytmusic" + ], + "title": "type", + "type": "string" + } + }, + "required": [ + "data", + "type" + ], + "title": "YTMusicSourceAIOConfig", + "type": "object" + } + }, + "properties": { + "clientDefaults": { + "$ref": "#/definitions/RequestRetryOptions", + "title": "clientDefaults" + }, + "clients": { + "items": { + "$ref": "#/definitions/ClientAIOConfig" + }, + "title": "clients", + "type": "array" + }, + "logging": { + "$ref": "#/definitions/LogOptions", + "title": "logging" + }, + "port": { + "default": 9078, + "description": "Set the port the multi-scrobbler UI will be served from", + "examples": [ + 9078 + ], + "title": "port", + "type": "number" + }, + "sourceDefaults": { + "allOf": [ + { + "$ref": "#/definitions/SourceRetryOptions" + }, + { + "properties": { + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + } + }, + "type": "object" + } + ], + "title": "sourceDefaults" + }, + "sources": { + "items": { + "$ref": "#/definitions/SourceAIOConfig" + }, + "title": "sources", + "type": "array" + }, + "webhooks": { + "items": { + "$ref": "#/definitions/WebhookConfig" + }, + "title": "webhooks", + "type": "array" + } + }, + "type": "object" +} + diff --git a/docsite/static/configExample.json b/docsite/static/configExample.json new file mode 100644 index 00000000..bd49c58f --- /dev/null +++ b/docsite/static/configExample.json @@ -0,0 +1,59 @@ +{ + "sourceDefaults": { + "maxPollRetries": 0, + "maxRequestRetries": 1, + "retryMultiplier": 1.5 + }, + "clientDefaults": { + "maxRequestRetries": 1, + "retryMultiplier": 1.5 + }, + "sources": [ + { + "type": "spotify", + "clients": ["myConfig"], + "name": "mySpotifySource", + "data": { + "clientId": "a89cba1569901a0671d5a9875fed4be1", + "clientSecret": "ec42e09d5ae0ee0f0816ca151008412a", + "redirectUri": "http://localhost:9078/callback" + } + } + ], + "clients": [ + { + "type": "maloja", + "name": "myConfig", + "data": { + "url": "http://localhost:42010", + "apiKey": "myMalojaKey" + } + } + ], + "webhooks": [ + { + "name": "FirstGotifyServer", + "type": "gotify", + "url": "http://localhost:8070", + "token": "MyGotifyToken", + "priorities": { + "info": 5, + "warn": 7, + "error": 10 + } + }, + { + "type": "ntfy", + "name": "MyNtfyFriendlyNameForLogs", + "url": "http://localhost:9991", + "topic": "MyMultiScrobblerTopic", + "username": "Optional", + "password": "Optional", + "priorities": { + "info": 3, + "warn": 4, + "error": 5 + } + } + ] +} diff --git a/docsite/static/img/icon.png b/docsite/static/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0d73da594f1d053206920d337f78685e7b984d96 GIT binary patch literal 4306 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4mJh`hA$OYelajGwq!ax2Y5O=D-;yvr)B1( zGB9XNtet4f6fYxgLr79CZylc3Eid^632U&83@UWAX0z?&|*C#*>-+3f^NkLu3ml)B7jZ=Ti1F-c z=PKu0obj6ERO4rpc!9N3ey85i_RhKwNa>Gpns>_Q-IraB6+>B@WgXE&&i2QCVyL*KGeD0pTf+R-+0e-`}S*g ze)0`GrBin?^6@o(R7zc6y=V9G&D-nGZ~66`v2JH=O_UFvv0y6qC)!`Bh41DK3T^vIyZoR#G zI!xJ8%ptHfSFNUh+VL8zWc^xx;Xf-JgKvtQJbYszhiCcwK>Jlj8+#tjo6tM+Qtr0j zbNV@@iZoI;ab4MV{%4YC#+zH)eKqIS|9J6DV3zo0@U1j=lcxiR#2<{0tP=6 zA8gIpln4>BGP`M_z`|44QO)8D7iP^1x>d>M$iQ%L&yzn{ zq7DoUjed+Wf14Q?9=#2{F1jJGapt=f{`l9U`Pn`mN{$v4`K{R0|OI7gxlHcFZTZ9XJTN0n8^Uv-f${wPvm)N21f=42Id=) zOL&5&@sF2JDbu&y&(+X2e+mEp z`&-Wcd~^Gz)M19|!s$U)wcGt$58Tb(4?1V9`*B<^{9kcI zaz?Ge+_YPpYxb5+he#cgauyM48VUc~?2+QlfqaNt4n|K023IT{!k*yMlN+bqkR z|M})-9wr8fiVyXV9)&QlFid##uVSu1!`GiO3=!!Jd4F>Do)>3OXGnO_8qdF+QGwyW z192vY)Ho)F!}p^ag&7VQ6iYGqF)$pyFV!T>kkE7R>&J7up058MaO#N)0}I0zyC2&% zmxkKEeK#%f=jHvy8mZHRtU4J47#x(#|9bNrt37x8`~SZir?fwx(wDtvy#NCvLt^{? zTh1R;pI`s$)qg*e;mqOL3=8K!w0~Q?Z;QpBY5#WZu@soYaNxt?{mXaX{T`qFc59&! zgC9e}iHG-J-L3PE-#?i_fWhF>2l-d$zP;U;V^yo?z`*d8{oL)?&y`zDZ$GbDC286o z6m$B)^gZkhbq_aAY40jOdHDDD!my4Nr;|1L^)2`R(qmO;FxdT^%l^0A$KD)MxzC>u z&G%+tVrW`X_(lF_>>E?L-QSrT7#fzbd%u7GA-_`Ag@J=1qwGiY)m_<2Ob!eOE;OIJ z#lXZMwg0#IgK4qK%R%MN2XV#*hK4%!S*FY^3?&8M^Czs`U*^Z?z;IwIbMiF*6DEIV zcQIVI5@7hSc(STQp9C`_!~J`jR=?!GiyZJ~RA5-}x3Sffm62iYoxjo{x$X_Y3_tAm z^GWdJAK+wY2nHptw>P7h1Q;Cl1UD=WWng4D($lazj_ZRFG<}1tVqj?gWXT|KWNY~z zJAOtM27#0p^MFU|-G!8`^=hPL_( zlNlTs8XoF1)qR%u)0N1=;L!i>PvL>hqAm;!@BT5*V*+KYw&(8Y1@0$u&R3qFf9iR) zm^!!^W?*4BFkNPGGq@acsP(^hgNKQseWR7GQADcYggSn*mfu9hMhhP+)q*Q*W=v&cxu-VEz9> zKRZ}L=*J{~rWQu!gm=n?^Cz)0F>r`5z5C(Fz#!XxAU{dr(gkq~4u%68UQc*jzhkaB zBgoqwh2P)*kcarC99o@R_<@pm|I>e-u|e{^4)63==cX~tVK}hn znZ&)m<*ZU13M}D zMK&`B!;2>(2Np!9`Q8DkPE&T^koc#-ppd}gV$W+aWs~6_M+OJ|wEt5MbO?Uy*bJ)NQAcGf7>)K5j85!E>k>Lnu zqh8%iK@Nt5vjR7kPVsy9jggUIqtk;Q@9W=v4FM}TW8zVpX0O1YP{FfBfQ8MDgCXIA zg29_a9XoagHtr^==35}|fbuG?+5%h6fK803DhZlBzzq}P>m315<%vys#%a6f-OKMv zHQTy=F)d?aNLcZZCE-ne&g_Fy&53>4_ZZX}KsE52*lZaChPsa|K4#6PZI0g_UHh
-Config Example - -```json5 -// in config.json -{ - //... - "sources": [ - { - "name": "myConfig", - "type": "spotify", - "clients": [ - "myMalojaClient" - ], - "data": { - "clientId": "anExample" - //... - } - } - ], - "clients": [ - { - "name": "myFirstMalojaClient", - "type": "maloja", - "data": { - "url": "http://myMalojaServer.example", - // ... - } - } - ] -} -``` - -
- -`config.json` can also be used to set default behavior for all sources/clients using `sourceDefaults` and `clientDefaults` properties. - -See [config.json.example](/config/config.json.example) for an annotated example or check out [the kitchen sink example](kitchensink.md). - -### Specific File Configuration - -Each file is named by the **type** of the Client/Source found in below sections. Each file as an **array** of that type of Client/Source. - -Example directory structure: - -``` -/CONFIG_DIR - plex.json - spotify.json - maloja.json -``` - -
-Config Example - -```json5 -// in maloja.json -[ - { - "name": "myFirstMalojaClient", - "data": { - "url": "http://myMalojaServer.example", - "apiKey": "myKey" - } - }, - { - "name": "mySecondMalojaClient", - "data": { - "url": "http://my2ndMalojaServer.example", - "apiKey": "myKey" - } - } -] - -``` - -
- -See the [/config](/config) directory of this project for examples of each type of config file or reference specific files below. - -# Source Configurations - -## [Spotify](https://www.spotify.com) - -To access your Spotify history you must [register an application](https://developer.spotify.com/dashboard) to get a -Client ID/Secret. Make sure to also whitelist your redirect URI in the application settings. - -### ENV-Based - -| Environmental Variable | Required? | Default | Description | -|----------------------------|-----------|----------------------------------|----------------------------------------------------| -| `SPOTIFY_CLIENT_ID` | Yes | | | -| `SPOTIFY_CLIENT_SECRET` | Yes | | | -| `SPOTIFY_REDIRECT_URI` | No | `http://localhost:9078/callback` | URI must end in `callback` | - -### File-Based - -See [`spotify.json.example`](/config/spotify.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSpotifySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Plex](https://plex.tv) - -Check the [instructions](plex.md) on how to setup a [webhooks](https://support.plex.tv/articles/115002267687-webhooks) to scrobble your plays. - -### ENV-Based - -| Environmental Variable | Required | Default | Description | -|------------------------|----------|---------|-------------------------------------------------| -| `PLEX_USER` | No | | The a comma-delimited list of usernames to scrobble tracks for. No usernames specified means all tracks by all users will be scrobbled. | - -### File-Based - -See [`plex.json.example`](/config/plex.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FPlexSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Tautulli](https://tautulli.com) - -Check the [instructions](plex.md) on how to setup a notification agent. - -### ENV-Based - -| Environmental Variable | Required | Default | Description | -|------------------------|----------|---------|-------------------------------------------------| -| `TAUTULLI_USER` | No | | The a comma-delimited list of usernames to scrobble tracks for. No usernames specified means all tracks by all users will be scrobbled. | - -### File-Based - -See [`tautulli.json.example`](/config/tautulli.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FTautulliSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Subsonic](http://www.subsonic.org/) - -Can use this source for any application that implements the [Subsonic API](http://www.subsonic.org/pages/api.jsp) (such as [Airsonic](https://airsonic.github.io/)) - -**Known Issues:** -* "Time played at" is somewhat inaccurate since the api only reports "played X minutes ago" so... - * All scrobble times are therefore "on the minute" and you may experience occasional duplicate scrobbles - * "played X minutes ago" sometimes is also not reported correctly -* Multiple artists are reported as one value and cannot be separated -* If using [Airsonic Advanced](https://github.com/airsonic-advanced/airsonic-advanced) the password used (under **Credentials**) must be **Decodable** - -### ENV-Based - -| Environmental Variable | Required? | Default | Description | -|----------------------------|-----------|----------------------------------|----------------------------------------------------| -| `SUBSONIC_USER` | Yes | | | -| `SUBSONIC_PASSWORD` | Yes | | | -| `SUBSONIC_URL` | Yes | | Base url of your subsonic-api server | - -### File-Based - -See [`subsonic.json.example`](/config/subsonic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSubSonicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Jellyfin](https://jellyfin.org/) - -Must be using Jellyfin 10.7 or greater - -* In the Jellyfin desktop web UI Navigate to -> Administration -> Dashboard -> Plugins -> Catalog - * Under Notifications -> **Webhook** -> Install, then restart your server -* Navigate back to -> Administration -> Dashboard -> Plugins -> My Plugins -> Webhook - * Click "..." -> Settings -* In Webhook settings: - * `Add Generic Destination` - * In the new `Generic` dropdown: - * Webhook Url: `http://localhost:9078/jellyfin` - * Notification Type: `Playback Progress` - * Item Type: `Songs` - * Check `Send All Properties` - * Save - -### ENV-Based - -| Environmental Variable | Required? | Default | Description | -|------------------------|-----------|---------|-------------------------------------------------------------------| -| `JELLYFIN_USER` | | | Comma-separated list of usernames (from Jellyfin) to scrobble for | -| `JELLYFIN_SERVER` | | | Comma-separated list of Jellyfin server names to scrobble from | - -### File-Based - -See [`jellyfin.json.example`](/config/jellyfin.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FJellySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Last.fm (Source)](https://www.last.fm) - -See the [Last.fm (Client)](#lastfm) setup for registration instructions. - -### ENV-Based - -No support for ENV based for Last.fm as a client (only source) - -### File-Based - -See [`lastfm.json.example`](/config/lastfm.json.example), change `configureAs` to `source`. Or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Listenbrainz (Source)](https://listenbrainz.org) - -You will need to run your own Listenbrainz server or have an account [on the official instance](https://listenbrainz.org/login/) - -On your [profile page](https://listenbrainz.org/profile/) find your **User Token** to use in the configuration. - -**NOTE:** You cannot use ENV variables shown in the [Listenbrainz Client config](#listenbrainz) -- multi-scrobbler assumes Listenbrainz ENVs are always used for the **client** configuration. You must use the file-based config from below to setup Listenbrainz as a Source. - -### File-Based - -See [`listenbrainz.json.example`](/config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -**Change `configureAs` to `source`** - -## [Deezer](https://deezer.com/) - -Create a new application at [Deezer Developers](https://developers.deezer.com/myapps) - -* Application Domain must be the same as your multi-scrobbler domain. Default is `localhost:9078` -* Redirect URL must end in `deezer/callback` - * Default would be `http://localhost:9078/deezer/callback` - -After application creation you should have credentials displayed in the "My Apps" dashboard. You will need: - -* **Application ID** -* **Secret Key** -* **Redirect URL** (if not the default) - -**If no access token is provided...** - -After starting multi-scrobbler with credentials in-place open the dashboard (`http://localhost:9078`) and find your Deezer source. Click **(Re)authenticate and (re)start polling** to start the login process. After login is complete polling will begin automatically. - -### ENV-Based - -| Environmental Variable | Required? | Default | Description | -|----------------------------|-----------|-----------------------------------------|----------------------------------------------------| -| `DEEZER_CLIENT_ID` | Yes | | Your **Application ID** | -| `DEEZER_CLIENT_SECRET` | Yes | | Your **Secret Key** | -| `DEEZER_REDIRECT_URI` | No | `http://localhost:9078/deezer/callback` | URI must end in `deezer/callback` | - -### File-Based - -See [`deezer.json.example`](/config/deezer.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FDeezerSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Youtube Music](https://music.youtube.com) - -Credentials for YT Music are obtained from a browser request to https://music.youtube.com **once you are logged in.** [Specific requirements are here and summarized below:](https://github.com/nickp10/youtube-music-ts-api/blob/master/DOCUMENTATION.md#authenticate) - -* Open a new tab -* Open the developer tools (Ctrl-Shift-I) and select the “Network” tab -* Go to https://music.youtube.com and ensure you are logged in - -Then... - -1. Find and select an authenticated POST request. The simplest way is to filter by /browse using the search bar of the developer tools. If you don’t see the request, try scrolling down a bit or clicking on the library button in the top bar. -2. **Make sure **Headers** pane is selected and open -3. In the **Request Headers** section find and copy the **entire value** found after `Cookie:` and use this as the `cookie` value in your multi-scrobbler config -4. If present, in the **Request Headers** section find and copy the number found in `X-google-AuthUser` and use this as the value for `authUser` in your multi-scrobbler config - -![Google Headers](/docs/google-header.jpg) - -NOTES: - -* YT Music authentication is "browser based" which means your credentials may expire after a (long?) period of time OR if you log out of https://music.youtube.com. In the event this happens just repeat the steps above to get new credentials. -* Communication to YT Music is **unofficial** and not supported or endorsed by Google. This means that **this integration may stop working at any time** if Google decides to change how YT Music works in the browser. - -### File-Based - -See [`ytmusic.json.example`](/config/ytmusic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FYTMusicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [MPRIS](https://specifications.freedesktop.org/mpris-spec/latest/) - -MPRIS is a standard interface for communicating with Music Players on **linux operating systems.** - -If you run Linux and have a notification tray that shows what media you are listening to, you likely have access to MPRIS. - -![Notification Tray](/assets/mpris.jpg) - -multi-scrobbler can listen to this interface and scrobble tracks played by **any media player** that communicates to the operating system with MPRIS. - -**NOTE:** multi-scrobbler needs to be running as a [**Local Installation**](/docs/installation.md#local) in order to use MPRIS. This cannot be used from docker. - -### ENV-Based - -| Environmental Variable | Required? | Default | Description | -|------------------------|-----------|---------|----------------------------------------------------------------------------------| -| MPRIS_ENABLE | No | | Use MPRIS as a Source (useful when you don't need any other options) | -| MPRIS_BLACKLIST | No | | Comma-delimited list of player names not to scrobble from | -| MPRIS_WHITELIST | No | | Comma-delimited list of players names to ONLY scrobble from. Overrides blacklist | - -### File-Based - -See [`mpris.json.example`](/config/mpris.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMPRISSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Mopidy](https://mopidy.com/) - -Mopidy is a headless music server that supports playing music from many [standard and non-standard sources such as Pandora, Bandcamp, and Tunein.](https://mopidy.com/ext/) - -multi-scrobbler can scrobble tracks played from any Mopidy backend source, regardless of where you listen to them. - -### File-Based - -See [`mopidy.json.example`](/config/mopidy.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMopidySourceConfig/%23%2Fdefinitions%2FMopidyData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -Configuration Options: - -##### `url` - -The URL used to connect to the Mopidy server. You MUST have [Mopidy-HTTP extension](https://mopidy.com/ext/http) enabled. - -If no `url` is provided a default is used which assumes Mopidy is installed on the same server as multi-scrobbler: `ws://localhost:6680/mopidy/ws/` - -Make sure the hostname and port number match what is found in the Mopidy configuration file `mopidy.conf`: - -``` -... - -[http] -hostname = localhost -port = 6680 - -... -``` - -The URL used to connect ultimately must be formed like this: `[protocol]://[hostname]:[port]/[path]` -If any part of this URL is missing multi-scrobbler will use a default value, for your convenience. This also means that if any part of your URL is **not** standard you must explicitly define it. - -Part => Default Value - -* Protocol => `ws://` -* Hostname => `localhost` -* Port => `6680` -* Path => `/mopidy/ws/` - -
-URL Transform Examples - -```json -{ - "url": "mopidy.mydomain.com" -} -``` - -MS transforms this to: `ws://mopidy.mydomain.com:6680/mopidy/ws/` - -```json -{ - "url": "192.168.0.101:3456" -} -``` - -MS transforms this to: `ws://192.168.0.101:3456/mopidy/ws/` - -```json -{ - "url": "mopidy.mydomain.com:80/MOPWS" -} -``` - -MS transforms this to: `ws://mopidy.mydomain.com:80/MOPWS` - -
- - -#### URI Blacklist/Whitelist - -If you wish to disallow or only allow scrobbling from some sources played through Mopidy you can specify these using `uriBlacklist` or `uriWhitelist` in your config. multi-scrobbler will check the list to see if any string matches the START of the `uri` on a track. If whitelist is used then blacklist is ignored. All strings are case-insensitive. - -EX: - -```json -{ - "uriBlacklist": ["soundcloud"] -} -``` - -Will prevent multi-scrobbler from scrobbling any Mopidy track that start with a `uri` like `soundcloud:song:MySong-1234` - -#### Album Blacklist - -For certain sources (Soundcloud) Mopidy does not have all track info (Album) and will instead use "Soundcloud" as the Album name. You can prevent multi-scrobbler from using this bad Album data by adding the fake Album name to this list. Multi-scrobbler will still scrobble the track, just without the bad data. All strings are case-insensitive. - -EX: - -```json -{ - "albumBlacklist": ["SoundCloud", "Mixcloud"] -} -``` - -If a track would be scrobbled like `Album: Soundcloud, Track: My Cool Track, Artist: A Cool Artist` -then multi-scrobbler will instead scrobble `Track: My Cool Track, Artist: A Cool Artist` - -## [JRiver](https://jriver.com/) - -In order for multi-scrobbler to communicate with JRiver you must have [Web Server Interface](https://wiki.jriver.com/index.php/Web_Service_Interface#Documentation_of_Functions) enabled. This can can be in the JRiver GUI: - -* Tools -> Options -> Media Network - * Check `Use Media Network to share this library...` - * If you have `Authentication` checked you will need to provide the **Username** and **Password** in the ENV/File configuration below. - -#### URL - -If you do not provide a URL then a default is used which assumes JRiver is installed on the same server as multi-scrobbler: `http://localhost:52199/MCWS/v1/` - -* Make sure the port number matches what is found in `Advanced` section in the [Media Network](#jriver) options. -* If your installation is on the same machine but you cannot connect using `localhost` try `0.0.0.0` instead. - -The URL used to connect ultimately must be formed like this: `[protocol]://[hostname]:[port]/[path]` -If any part of this URL is missing multi-scrobbler will use a default value, for your convenience. This also means that if any part of your URL is **not** standard you must explicitly define it. - -Part => Default Value - -* Protocol => `http://` -* Hostname => `localhost` -* Port => `52199` -* Path => `/MCWS/v1/` - -
-URL Transform Examples - -```json -{ - "url": "jriver.mydomain.com" -} -``` - -MS transforms this to: `http://jriver.mydomain.com:52199/MCWS/v1/` - -```json -{ - "url": "192.168.0.101:3456" -} -``` - -MS transforms this to: `http://192.168.0.101:3456/MCWS/v1/` - -```json -{ - "url": "mydomain.com:80/jriverReverse/MCWS/v1/" -} -``` - -MS transforms this to: `http://mydomain.com:80/jriverReverse/MCWS/v1/` - -
- -### ENV-Based - - -| Environmental Variable | Required | Default | Description | -|------------------------|----------|---------------------------------|------------------------------------------------| -| JRIVER_URL | Yes | http://localhost:52199/MCWS/v1/ | The URL of the JRiver server | -| JRIVER_USERNAME | No | | If authentication is enabled, the username set | -| JRIVER_PASSWORD | No | | If authenticated is enabled, the password set | - - -### File-Based - -See [`jriver.json.example`](/config/jriver.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FJRiverSourceConfig/%23%2Fdefinitions%2FJRiverData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -## [Kodi](https://kodi.tv/) - -In order for multi-scrobbler to communicate with Kodi you must have the [Web Interface](https://kodi.wiki/view/Web_interface) enabled. This can can be in the Kodi GUI: - -* Settings -> Services -> Control - * Check `Allow remote control via HTTP` - * Ensure you have a **Username** and **Password** set, you will need to provide them in the ENV/File configuration below. - -#### URL - -If you do not provide a URL then a default is used which assumes Kodi is installed on the same server as multi-scrobbler: `http://localhost:8080/jsonrpc` - -* Make sure the port number matches what is found in **Port** in the [Control](#kodi) section mentioned above. -* If your installation is on the same machine but you cannot connect using `localhost` try `0.0.0.0` instead. - -The URL used to connect ultimately must be formed like this: `[protocol]://[hostname]:[port]/[path]` -If any part of this URL is missing multi-scrobbler will use a default value, for your convenience. This also means that if any part of your URL is **not** standard you must explicitly define it. - -Part => Default Value - -* Protocol => `http://` -* Hostname => `localhost` -* Port => `8080` -* Path => `/jsonrpc` - -
-URL Transform Examples - -```json -{ - "url": "kodi.mydomain.com" -} -``` - -MS transforms this to: `http://kodi.mydomain.com:8080/jsonrpc` - -```json -{ - "url": "192.168.0.101:3456" -} -``` - -MS transforms this to: `http://192.168.0.101:3456/jsonprc` - -```json -{ - "url": "mydomain.com:80/kodiReverse/jsonrpc" -} -``` - -MS transforms this to: `http://mydomain.com:80/kodiReverse/jsonrpc` - -
- -### ENV-Based - - -| Environmental Variable | Required | Default | Description | -|------------------------|----------|-------------------------------|----------------------------| -| KODI_URL | Yes | http://localhost:8080/jsonrpc | The URL of the Kodi server | -| KODI_USERNAME | No | | The username set | -| KODI_PASSWORD | No | | The password set | - - -### File-Based - -See [`kodi.json.example`](/config/kodi.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FKodiSourceConfig/%23%2Fdefinitions%2FKodiData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) - -# Client Configurations - -## [Maloja](https://github.com/krateng/maloja) - -### ENV-Based - -| Environmental Variable | Required? | Default | Description | -|----------------------------|-----------|---------|-------------------------------| -| `MALOJA_URL` | Yes | | Base URL of your installation | -| `MALOJA_API_KEY` | Yes | | Api Key | - -### File-Based - -See [`maloja.json.example`](/config/maloja.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FMalojaClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) - -## [Last.fm](https://www.last.fm) - -[Register for an API account here.](https://www.last.fm/api/account/create) - -The Callback URL is actually specified by multi-scrobbler but to keep things consistent you should use -``` -http://localhost:9078/lastfm/callback -``` -or replace `localhost:9078` with your own base URL - -### ENV-Based - -| Environmental Variable | Required? | Default | Description | -|----------------------------|-----------|-----------------------------------------|-------------------------------| -| `LASTFM_API_KEY` | Yes | | Api Key from your API Account | -| `LASTFM_SECRET` | Yes | | Shared secret from your API Account | -| `LASTFM_REDIRECT_URI` | No | `http://localhost:9078/lastfm/callback` | Url to use for authentication. Must include `lastfm/callback` somewhere in it | -| `LASTFM_SESSION` | No | | Session id. Will be generated by authentication flow if not provided. | - -### File-Based - -See [`lastfm.json.example`](/config/lastfm.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) - -## [Listenbrainz](https://listenbrainz.org) - -You will need to run your own Listenbrainz server or have an account [on the official instance](https://listenbrainz.org/login/) - -On your [profile page](https://listenbrainz.org/profile/) find your **User Token** to use in the configuration. - -### ENV-Based - - -| Environmental Variable | Required? | Default | Description | -|------------------------|-----------|-------------------------------|---------------------------------| -| LZ_TOKEN | Yes | | User token from your LZ profile | -| LZ_USER | Yes | | Your LZ username | -| LZ_URL | No | https://api.listenbrainz.org/ | The base URL for the LZ server | - -### File-Based - -See [`listenbrainz.json.example`](/config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) - -# Monitoring - -multi-scrobbler supports some common webhooks and a healthcheck endpoint in order to monitor Sources and Clients for errors. - -## Webhook Configurations - -Webhooks will **push** a notification to your configured servers on these events: - -* Source polling started -* Source polling retry -* Source polling stopped on error -* Scrobble client scrobble failure - -Webhooks are configured in the main [config.json](#all-in-one-file-configuration) file under the `webhook` top-level property. Multiple webhooks may be configured for each webhook type. EX: - -```json -{ - "sources": [ - ... - ], - "clients": [ - ... - ], - "webhooks": [ - { - "name": "FirstGotifyServer", - "type": "gotify", - "url": "http://192.168.0.100:8070", - "token": "abcd" - }, - { - "name": "SecondGotifyServer", - "type": "gotify", - ... - }, - { - "name": "NtfyServerOne", - "type": "ntfy", - ... - }, - ... - ] -} -``` - -### [Gotify](https://gotify.net/) - -Refer to the [config schema for GotifyConfig](https://json-schema.app/view/%23/%23%2Fdefinitions%2FGotifyConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Faio.json) - -multi-scrobbler optionally supports setting message notification priority via `info` `warn` and `error` mappings. - -EX - -```json -{ - "type": "gotify", - "name": "MyGotifyFriendlyNameForLogs", - "url": "http://192.168.0.100:8070", - "token": "AQZI58fA.rfSZbm", - "priorities": { - "info": 5, - "warn": 7, - "error": 10 - } -} -``` - -### [Ntfy](https://ntfy.sh/) - -Refer to the [config schema for NtfyConfig](https://json-schema.app/view/%23/%23%2Fdefinitions%2FNtfyConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Faio.json) - -multi-scrobbler optionally supports setting message notification priority via `info` `warn` and `error` mappings. - -EX - -```json -{ - "type": "ntfy", - "name": "MyNtfyFriendlyNameForLogs", - "url": "http://192.168.0.100:9991", - "topic": "RvOwKJ1XtIVMXGLR", - "username": "Optional", - "password": "Optional", - "priorities": { - "info": 3, - "warn": 4, - "error": 5 - } -} -``` - -## Health Endpoint - -An endpoint for monitoring the health of sources/clients is available at GET `http://YourMultiScrobblerDomain/health` - -* Returns `200 OK` when **everything** is working or `500 Internal Server Error` if **anything** is not -* The plain url (`/health`) aggregates status of **all clients/sources** -- so any failing client/source will make status return 500 - * Use query params `type` or `name` to restrict client/sources aggregated IE `/health?type=spotify` or `/health?name=MyMaloja` -* On 500 the response returns a JSON payload with `messages` array that describes any issues - * For any clients/sources that require authentication `/health` will return 500 if they are **not authenticated** - * For sources that poll (spotify, yt music, subsonic) `/health` will 500 if they are **not polling** diff --git a/docs/google-header.jpg b/docs/google-header.jpg deleted file mode 100644 index 4ca5f28b25f0e2fc44930040dadb95fba912e770..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231527 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
T(Zv< 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

$-Q@ z=|$pCuRpw6`mKM{~c#O5nPD$$o9& z_IvzVI!UL}U*BD1EhMpcva{U>_H~-FlXumc6 zQhnO*z;E`CX1_Jx{8#bs@*n1h;yM2QmfDfC+Trp18v{SdeNm(#XiMg{ZLTxo>=xv0 z`jNa;?>|Fc=iXoI_oshrf3fTL{!71N!|!jDUR}1U+1lQ}dtH~^`Cq?%r@P0>mXxxU z#R}JT@0>FK=H1f3`n-J?>aVY=zkVxz(W}L8if8@3A{-R*vK@-vOx4L@F% z33DfSovpK873!W4;-)MeTGUqZpJC#Oi@asuQ(c&C<{9$NZtT!m|2ArghtOpiH=B|U z&E#~BC$rPEANGjEZOU)?H>G~5en#zohS0t9Z|-CH^}Rl$cKNS>-@b4Bm-27<&%pNk z`}|Atx9ZoI{jk4&^xA^Gk^eS-`|>Yrf#IanNvcdK8;awWpKRBj6mY^zGQx4laVQPP~!Zf9_{kos6 zJ$>e${>`kKwnx1xML1@*o1|o4K)bTwhhx)xUhWhA^Uzv7`+ zOJl44RIS?^?s^eawf{T&3si7)`~{UFw_fqQ`76BX#e#ch-`Zc@Wz}3$rS?1Cd)4$U zcE6U_?dM;5wepZ=}BrB3LF`^~-GKNkG+m>>7?+w{#f@-O+{|I&T)pCR6|+WoEf&3%9G z-?BUZp?-b#eST;SFLgE8A5j+#dTtCgEiLuMK}bZhe^a_>s3_ zjLSa^IVPqo)^c{3MVJUb;Ku!4-ZE;}dt*S+GCk-?gyiF_-cu@zp(Y z_a8>BSQEOock0B7o%^?VFRHv)FMeMp()ep^c<9wq|2L;s)u(@Zd9|eE?BxeApiRM)2sFN*2&lFFTLu0%RVda?Du#7F2>gG zs@|>Fy=d=;FZbf+)`V=1sC3ww?>ED4)hTw}Nz<>JRreOx$h`TK{@O+ky7J1UOvTV$ z&29SB*+P+=LX0~OuiZMmymFQ3!K8CeI$Bu{+yk@d7t(l)?$aFWr-a|#w_!{7T1YNpLn#Z`eNa?KhZb;O|DV=w)E@A`pJKk zzs-N}@9ekvx8$?x<0bzp*2TSj^PhqJTYlQ_pl|v6D{BugIRNI9c3p-j)4Nea^k!s|yR=iRkhcT=zb?VStJ$L2haZkus9`WR?ZZ{o4n1=k*~Jse>1 z>%A11^KtECzrxjK*0ryadULe47IuUkmAw9Ko|Kh(*p|ODLl%5{Xyd7{C(>lP{7r#? zxgE|tNnZ2JC$h@#`ua5GeCK4f1GnC=auo?byt^nTnn7uaXgr^>+%~gtm70Wm%m=M+ zWi76_wle65azFRYd1lH-oh3E>k9sdzVX$0kY9GVn)wc_h5-x0D*qd-k(LEs0aG_hU zI!9k`Q0OzSeip4qDtgzmK7E^h|FEEpZQPloBE~p zThlk!{)xU7cj=q_t@)SwH~;p3>3*ZW?)?W)b)kOgME&9a3_(*ZV@>BA7wCXa@te++ zN;`4l;>4R*mfmx`IiZzjrLw)gna-ymg~OHY;iqTL{j}-z&MC|9TU}EPId;lDu*i5L zU(PO}kKDqkK9TO~$$KiBdM2Ek#WwYmm+mxU(M@8ClJ}E%KLy{=x!5FCX|Z+F6E(;4 z+PTlJofNbSnR|7U@LKU5MhjyERPqfsB(Lbd_MJ3c;k(=+#aWsA>~BOev6#LW+SL2WZEyGG4Qp$wc{cGpp0u{g z@VJPsw)tv(r8j45-fG@4x%@=OqLL-(WW;3C&zt((jwIY<-Y{D^ap{vB!<}uuC1=*B zbfz6CGE>S|P4rewa-8RMqRv<5%{YBRKHTQ+=6#h1c51V= ze43`#J!wOVPHV#!BlhNFA0Jsf$#HSr=5(e~xGVX@4dG8*vy~H<>rCyGJ{|dfp3{+M zK1-Vpg`Zc|>Fu=1ouz$3dXu;>t4wRh=~EFmcXXxCjQ%$_#+VZ{61 zV6PZ!Sqrhb8A_LsS8`-x<%+ax{AYN6OlVfCHmlQt8BD5` z=v!RLXQ5xM3YL2^ejqJMUh?hXW7&(1TF>?L9936cT9(RxZiOXV18ZK;ky)mD{B}eh zm0DZ>%iz!JrZDeE_0w%*1%5K|M4#>Io@KGUFmm~^weqV>*%OSHsV&b@>ev+G9Jx>6 z_bLfLgGKg=RXYy8{l~!J8?Efza!>UZ+i{^Cy+8P>P8gmjp8uh#eUfTb@ToSpKBry! zNh|A2A95e8I(n+3>zqefNKtW{{n>-dejdyC`QiJ|A7ACF7k$3VZu4j2=Hs`YuhqBB ztbFZ#J}R#2(&uZ_=WW^ZbtyhUFU#MuHMc%zpIvXZ=h3H-XM0*%&mQ0Px-0&z_urNE zTOl(rA45CflP@{qAwQ(O58R4lyOhIeRpI(jyd_SsV%DP=F7C~utpBc@e3!fk|IAO- zqs;Vk%V%yk)15T`Db{H=OUcb5pNu`uyxzTMhs}zO-J0{)m-S}XME$w>LiMp&*rvOA zQr|uuIde*WhOdI?JGK34!KY5;RNJ)uXIRXCZs*g8^^=t+9GiIm$&rGavOjxmZ+@Hg z<&Bel=-R?K@!jls*Y(Oa8EyWEQq5Y<)r#D2ZJ>H{lFG?5J^2RjZB z|1-E(iapXj;`d(v_kl&x{tw>kvsVi3X*M6|1!eqsubxdf`#m)D$p>DB{0DswstH~v zAKzNZ;qS-5Bl6K%M(44VntWpVvDFIa`30qqnOCgL-NBO(yR^HT>zJ0A&Zz~rg?b#Tb9pqJ#Cdts!m>^+Uh%g@ zukyI8dh?^0H9rm=WfuQ)qVSW2v-65*3HQ*CfBmeQE2i@%7=J7dUU-T9$fQ-g38&H* zOC6e8_4kg|(#en6CHER`s&R=EIJR-^Ub)8&LL2;*uD(B zr@_G=wWBHF-YNrE*gA!fRi8u*=ly56CF-u_c>KhpkDFhtt<`f6HS(Cx5qU+vZpE>w zO~;CwraZOJ+jr2U(Y`(O`ZsqhQ$xC)VySzTOuEj^i@glrf|zX0KJ!lIy^WSd=U$c1 zE4X#aK2fJ3Ud3(plax2tmmJ0VEE8XcJ4 zsa(wUbnZ)mn3JCp%4Ov4hgxr*@@Hk$Pfn$$+(`*Gt0#U^DUvvsKmX@!tz@NJcVgGR zjeD~CSedHf=V;H|^7d1cSFU;2zF9%`^|F(b_ny7FB&_srYqrP3qU4SuW0tGy7amU3 zKHF(zcTr2?;?1>>cX@6&dh5pW!fhIxikvsa8CB_An3_>oKYgCc#5gmRmB~U?SNEq6 zuJvh&;&1B~m#Zwg;8*Fj$4I#4b!z0Z@5?@ZRxMNc{p9+IGchyM{`@>qd`74!`%~A( z{E6~6|FvaScs}hpXjgDie7#j=XKg{!MO%k(-j57Ih~CMHbC*7<1s|2-&6o4?xbc%g zOMV8UwlJF+Z;Zrs8~zx6=0M)63CCEU^3+$<7|JX=UboMF%lZzJfRB%R8?Ug(T@zd$ zv}UcTz_FymCzf3dX{^z?G4-SMbE~9Q?ioLW!!oZgTOB@iv#s65A1lk-#V-GJlFpsi z(;%PmH=Ln6;>shbI*U596OB^Gjvk2Q{`!FFxAVIh50WcpZ2n!}TF`Lyw3qSbM^A62 zEm^g=PF6%~^CI4v6AYhkvN-zGn(;z@Wt)?qrTZD>67jk-5Z6+#`PC_CJ`71A)2r?_GcW-9esI%g+&Z&SE znR^a+@LV|?E46U-;t?vhH|MrbRXA+@_r>%lA=yu??J7tHu%vwXTDchcec_v90GTt1$fx_s;Iw6ID48Tit@ChoMDQJ$t| zdQxoXeundriFYF=rwfR3KUl|h@({zPjT2g@bc@{7^fUUKa+B*_*0oue`|j3GPua*jCr#tcJy# zB)rPmO05r0i2JZ6lD93%bYt=}ofWQ}bNKCI(_6c@F1EbA_O|im%80!Y+Zof=NX+DL zb374RQq*=}wr1qXCk_{CW<2Fr;k$g3^=P)Ta9`QMtiO}5TKk=izF2)V$>B+paQI0U z!R*qx>mww!{xdvm>dduo-m^#ciPtBdJCJqE8qh@zu(ilj*dU9LAxj-#qS$ztOCExy z%fa11ANX!d^loA9ZK#Q|glx^XtELd+opPB{&Ik?3!%LRb@`d2wI%Z znpgITJbhkYSjsNO2u!s!{l1Q=_hVD_9EPnkk~%dzO7E>S+?e%G^I5@Tx6A^oLs#`Q z_V~;^*eml~roM=^VDo{}rx910m3|y5UG1VOvGJ}H_VKd?EG}yeuO;kN{K*t3(P7nW zyWsI*jcTJMf)P3_oY%G}9^(GZplDkC{$a-DzD(I1;WrIvz*&=PD`PZM9FD!o_vto6#&bcLUs#%wRMc|WyHjC<@6 zmVfeWwDz_4CcRPO^Nw~$O3cfz>DRoc^7_1%lgv!r6VtwhKl6PqGg0Z%UcGB4#W$!G z_?4@999F*nd96m@!%e)4%;%Nm&tp@PoKslSA9U_as$R*quq|Gba~5yjzgc1C0l#bu z|Kgf&o7cZR{W4-(nNzu%$9ZMTt?QSb=$XiU|1Ec##7?yei6$J&<6<}i1TcjIi4+|rN5Dm|Rn)mx@pH{=!_nPl4SvoN8lOyvsShnm=q)8FzJ z&WaO)E#N#iFDX9g$kD@ASD(M--=iuQxoO7F51N;%3qJO}I54$%y12rmtC_(@?axDG znjM(7YbNU!wG zXsURTk;$s5`p`lN?W>QY?r*Vs5%Oe3(ysOE^FOQ&5M!=u4l{oE^MfJvBZQ=f_*)b{Cmfn!Q z%u;#z$xlmd_NkMqo!{+kU$=OwdiDI(9&29z(T-IOiC*V&Q^@3bQP8UVgN3`4xHsP@ z?a8PXn%dC6JjBpr-yLmP*}3})T9z&36#UPS$~1@yLKnS@2I*SI>Mw0tc{6Fvz1e%) z@*d4wSrlv&C7r|^^Y~mXQ{L&k@6ib`tUuE(uiRo{)w;2zG+zG7 z;}zze1=pDE#Z9eb6>2=S7F^?5R%N(GGkpEs!>c0g3<_somR3LF`j97E>h{HV7L3{~ zAL|d8=GoXef%l-ld))1Oui-%ER*$V(J6_yams7*;+;C3&s*7N?(Q*!v3#()Pp|!LX zJ>E;63Yz{`I8yQPZ*ALsH5;ocB{zEJxzyEc-{-xwC}w7Y_mPP^ zTZ_(p>Cj90X<*&QpTBDE%~N$Dduv)I7PW3PkPAKWQ^=Ah-TeHYvr`Qx=H}^L`_?!o zIcMrL=IA%U`!%~Pg$(*j&-14_8aFv^U&NPIYE-WOMmx%#d$Nr4#2IR9YuTi^Bo929 z{g!E^!iRTUJDTn8{kHh^VSZPJ$;Selhdt7#4s4PBHV?A5?(#&)5gP%@yTKde;7fTi z7wlqutFFB_Az{ zbQ0Q^d8nxJ%ygfK^O`B0o77XTbzCw`DXP1&HX@Prz@gG9`}WjCiDg_{#WN$jso?i= z$9E1hiX1BzWtv%UQdrTyFW~vm^KCX)G8~OQW^O+|EtglmDAG6i2;Lj0t#c>Bbd-6^`TB1^;sG2Y%sHtdS>?TRAiz^GA-#`2(x`JiG(yqBL zD$ZSuKjzhB{tz}EBrfG=6l5@+>3qdeWr;1k+%e88lHZ(iTN7ZhQsC?IK9fW#v6O|~ z@BJe#3Vz%rwN*2sN6YhxPoztCx56w@PR&CrxjDm3Qof!Pk#e)F$=Tg0)^a-7;iSW% zhE+2@wk8SM=>;k$`Ci)_zTujt*B(yqfO{)vdNn3VhU>W7q&wLe^s*oIGw#zkH(SCz z<58#O_2qkPgnYw~&pXKLGGRuh!19lq-sX75Onq(Jnjo|$|4(BK&+&;TKHDz+%CqJ{ zfBgh)G1at!-=Zs73{Hy~e^yC4uddV~{zz+H%9;1mrpLb7{rj}XJ8rX21*tMEkLGKt zYZNVEjZ95(?_71%UsrQR{Pz`>}(CbU*A`Dm=;+@glQWj=c%inKD0$BR+39Oob^O32b0az z^054#E6!7R78u-1KoqcZE5t^sLu$Tcm}jK9EyBv&BdF`o*F*IqWCG%heK6 z4D=a9l_##hr_GpfV~>(k`RaLc5w51$A2=RYIO%3zS{;1Cz2jy@In$3e%akLJp18OD zbntm(k<2|!>TLg?0xU~?1yMGQY~9oVJxvPxfh6#4db&B7`%6wGLryC>*@mQS>!xc+ zI|z4|ZaUI9?`i*|8%tf+id~74ztWRx{&)F{ZPVLe=jGgAJ~im5yU*+E(>KG;lM>Bc z*vjGbaN(L$XCp&OTPxpR`)t>a^G*g^P?-}iB z0>*n-RrjXmh9Q9_gDXCNW3?p)mc&Mf?(Dmm(_Q}9+&(GIX>%2 zdh=GXk7d)lx3sr!anXt0&+sy&x+%`tsmr4l%~P{|-~U=(KK9X#9c&w498$JbI2CZrV*{W5+KNZJQ>+*^nMwFv zFSsCbTi}h^QPy<@+Gh-o?9vndtF%JtlC9Kj-{ziBF9WTqQs?de#zW_n;adk6dhq2- z*&zmPL|)qNs5oAd;I;E~_XN+ZEh}d_e_qAsIIHnufyNkWkHu-UN@mIG6Z`ewXTzT6PDCX6XZGK3; z)S2^`i2D=$a0%P}hxQq%ua1`04#)|4vYF$4`vLP49EW}$H#_CUeae$v>6}Eojqek+ zcR!mgZF*)D?aRGz(syCnd9{RX4`jU$HzZD}@UZk`tqd;z$@#L)D=;(V&W7sCQ<5jl z_A`HCp0iO(;G{_Q$w@-J8()7~Qh8dAN{E@cA_O)^8It3bNw;*(P|> zv(skEQu)8}*p7_~JaKl$@`DKf3Ah&+wOAQ+z$6w zTi0nH`kwIi*3)y>+`{S%ey>kFu(&Qa=Ue&F`i8fe5_xBMWLg?JJjKc~PMOp(FH72R zRN3dt=_q}<32*;1I7vK7D)U}_^zmCpuL6xFoa^R>JbFBTd-fhDO}Y9_j4s>eAG{aG z_er&qEe|rDFvSh6g@k;0-7^>0hv0nP~Z?thG{3m<+GF}qPyD4d+~>VVwN zP%Z1DkAH<)G#}gQqRfAAs?@~|%lmnY!dLTcXO#L@zlAaOmEUCBpN~@|qSk!n&VKz& z>5TA{c|rfC-+y!7|7jMpq|P>_05xxR(^oY!igv0*3+bG$a>*2(YqNVfeDP+~bqSf1 zFXvvG7FM)3Pwd?zmo=yC6HQi6++@_0oiF0um%*;(Fi-p`$BDl##kS4$QTB*IYtYgh z#YqZM;ZHso&iNer&TCIiqqWZMCySn_c+^O;Oq4#Xs^2x;&0IE`1e;&y0mV+qD`mYP4@U%k_ZQ?^bDNkBFB{X_>j$&cw2<5$BII zPMxK5VroK8JKJv7kEX|ykA}V5CNXcj1b^5E_K2x%;>YD0B&HQ!UCsPWwjg5LKW(Kw zVXndnX-^<6=PMlVzz5;Mo8DL&+ZYXUaAOw91tkt~tl3^{}8#rtdW zY=+Xe#CnXJF1B;ru@SdAeDICv5$W`GXH(8{Mwl$rzNRjDLo>oMnrSAdvhVww6-<8~ zCP`Kvs+pW^+H|w_$lIAG+!{O7S~qjmEH0}%{KeS&5bQvg%FAcGUpI?&zGB*u-@!1& z?!%PIv{T8?53KflbEsmIW5uORUA}9)n)A5i=b7!%x!Y&?W{csG>j(Zb#CIqOJMXi& zxX;1l(U;c&Q&&`6%G~S}+Wyy~uC#T}Jk?urD!rc*cdq%d()zftxz6L87Jrj7k6m2B z5T@faCvNhk*Zn5~cq^(8gT}Lcn0f!SR$Se*|B%RWErw&K4(y5frCcY^bw%nxR^ysk z5r@hP{I8v}n0jTSYS!gti7lcF6+W~ZY%@B%?5Ol+dGEP)EcXnK+?w_Ac;*ZirsaLr zjI9BF>)*@?UlG-(6}P5mfq!sQ_7%$&&+>AcSETL^T;KE9bj6L?VmuoqcO*@7zH(u| zPq{==U-Xha$DO=2jx>A<6xgX8WO1iqtJKp^d$s%xEvKJy-hbLVk=OSj&%@R<%Vw9P zGY(3hVnx?1(PiJqjRkV4He2Mn?KwH&ro82~+7GdC=(v?JQZGKa-FRKGiMs8ERDUfm z9)9^E4Wwhyz#xx>F+m3 z>pb8*Eo|%kHYR23{rGRb@jnb7u}VdD`Iy$cjg)FSgiQZ!*2eDnp7LZ^CO7nSslIp z=%%X4>&#c0t(<&ZSp0YM|04{(f((pIOe~xn9IQ;NEKH2742%qdOw25bhJmaCLc)%T z6Bm9EQAj9k+<5RJo2ZzQK~Ts;BV&h@kIDgR!AS*+Or4yIR8&n|8k#0-0^e!G%*bfZ z_@Cj|iTPGFJ7)Q;*?5iVX~_NM{~0F4teXAhKf@>Pslj#g|2Y<|%D?=d;e=kO@2~ow ztfyA)_y5nJurt*B<$s1J;#$l8+W%>S>I(?cEOcQhlBj=Ue_v<8(F<)lbDs6TSs)al zVJqK#S2(RBsq4V`w5^_tkGsrD_1RLt!H~URiRT&b6XgyD|4zEiQaRU@c){^TPf%uX z%B9q6idA<)9(z2TCbRVP(o6SZ8;tM&J1~KFg%kUKhK)ZGyHcDum?tgyW!s|Ges+6g zaINeip@pYT)-77*-4zol*k<*g!J9Ytnwf|_hi&b1K~tfQjE+YaI={yh9(bqGroMLf z#>|u#Q8$iOZwMX#MLl7eYS9tv0KWi zb=N|ge0EkHZ(c6@_grt-0u$-mJ8c~e%XV^|R$OS|Vwl{qaB_?$kmT<4v>}OM)|5M%4hQ3&@lE52Hy8b`#UkbFez9E_ zZgdnlscj16lip}ODgRmQ>cf%@S2~Mcv`59SE)o@gb!Us2*~*D}@!Jn_Z4`LdS@i2} zgvINaJVvhWN0+#=W(qz1vTmK^pKEPLuDyQ7H9JVuJnuilQ?BiKQPQ$TE-#*SPAbv7 zQWf)Kp5fhROPvzh7)mOQUOjet+}rv3{;?xkQL$Xz3xl(q)|u`%_Ffo}a@DBne)qf3F^f!{2`{(qo}cO-mhu0Q$^M&8h*LHedg;d@$)-=>PH9ct37_Q>Q?LLcXr;_ zuISG%{1mrsVa@OUNnf{eKfhBmeeH^PyT?!V<~sfSF0ZPUBmA^;(&^@Z=K@q`e%V=c zY?AnriHF4mdbcoGF4}bZBm1LkN0;u{Kg(O~FT)!9gQ7P-u-4zn<~z}#CH_Mx>&**U zzDAGbu9KC--v#{@U$W6SS)jGWKvu88=)~!^kB=<4FIF;Xxs-IQX(<0YHz<8p$dBi; zsy{dUQ!1@!(P@xgbbCs4@vDG;2H)FXtvq}EW>V`brE6WcZ)|U!`@+;A;=`M&uU}sT zojwxZwPW3Ni#G~)+^fvGcf5TaZnuB)`#UePul)XZ?$q<^_rsppi;L$RUsBrl^?7{z z{dfKC{gd>LuabLpZSw7JA2xC`zfkVJxLq*xNoY1dyX=W=-4<_M|9;!r-k-EuYxVbn zUl;z^w!i7?-gi6K-OZx@{hN=jM>e^xWxJ;T-L>TqYoD2IhMjM?{H9ggHm$SyuAFe3 zckRNfl~T8>bf<<+{h=6e?ZS8Q(2dyoWeGlO{!8Zo>!w%T8Gx4uL*$gMZ4TjTV!i(kZ=TQnuC z(qfvgnTQ(AZ`{!SRnzE<;miE3dlz1{p7ebGkN(MP6L@r$`WY7mIWsR`?-&uzc6wob zSja&Um8+{4Z*=7mn>ugm=ib$}+Rvo}6x!wAnwoB2_|7SyM5R4xMf|j?{|vXXd{(w4 z%w#B?IX8Z1-u_)eE0x{0x=u+wo$*V2;$NS~{~5T=j!5wLi|Je~yP9?83iAzy8!gK^ z=JR?R2k<8_C(YDw=M-PeX%uCsc9%c*!{mH5+n`&xhByc=g1XS?E%Pk``RL4hf{ zW!JM=CwW%Ay>s}e$*I*!x8K|GX3a{<*1B4JeWz`Lc-H%?x2rOmC%rp-^!nbZOJBdr zx_!{Z!FV?7-(6Qk-#zZT8eyt%VBg+r6_Yo**e|a=usJmPwV?UeMz-yZZP-7tZihI(UB(MwG~MpQ{g6+}|qlKyr26mvn)z zk;jhmBs4s`I$udg&{Uhrr z*kdI+@4UWg2HOYgUGnJR^6c=wsUiZ$vre$=VsMbqEJ_qek)A2RXqlR}Fp}|Z+QPIH z1?IjZiUN@rrEod?Kf|qzMQz+(=e>R&y9!E9D+HYTT25~$`#$kWYeIJJi}3vgCEOp^ zPMaiBKjqgRkwYvlUl(z_j*SUBeWF}fCN5C4v05=-c1}!Z)@2i){D2#`_DtRM?faCH zUXOcL>`O`)MTx)GXzSei)4cBSxniULWj}bLVg)!- zvh@mI*0?)oghh5oiK@A6I5FLp)%4cdXO~iaj9E@FuQ~JT@9EON7p8hjnXb}VtQYNm zVLRVl=`M|gEo;84pOYK;GT!1=Ba6k0n2SalJqeM2=5AB^_jmon)vj~bEn|Av$+Y|J z`&-R3+iq7&?zpyuXGVhP&8NqUvhGS9o~zz3;ywMvQq=78ONK$LBx$l%;tVwh*|hZV zchT$LwXE{ExHd3Vvgnpw>)E*z4cK45U0u53tm5gAMY9rCu6`VJZhG3KQz7|0Y}OtD zXSyWQ601#>CD|2Mm)&`76?aylZ2nVsGyUTWJKsI_GM;fwYkl!gjpQz+Be8phPTah8 zCpRi0uACvP-FZ*>#AmI0vI4G8Fy(#7bzslFM}bZo*k*0t{#z@drAgl{MD^=p7WJP2 zrx+&X2OLu15la)xl}&YJ=-C;$BlcQaY-vH5$K&`<3#Od&TdVG*c<6Dlu5vHWzT1;S zPF`3!JM6V#*X+%ub2%0VE;%`w$Ka6CT!B+e+8jHwLv9*9^AI^%kRpCkId*HZk#mll zgm>d&8KY0HOHu`oo;HcRIPK~}Mh!3Z?kfhiDUYWy>V#!%>f&j5w{WUR;vu0$s?$=s zy-qN&y9G}=c2tCE(|1LV>e#g2Zj*ec@Lis6@w+%4Z55fZV5?+qpthND{!&-X&g3Ma z)$4m#oYL!HTC1h$5PfV*Duahvt4vZviF#9Hm+?c!U)vX3_Ev3Q5ToeXI;VARMT2N~ z-0>d*P8@3`OGDR6aBNwuu_M>cbQSTigU@@K{!f6$vg)b^6I4b*gpl#XbRtX}R~}1J*=5XmVSbS5 z6eR_tbMs8syev;i6Ow3AP6#Vm^KQwniFyllV$;34G(7U&?>fbEHt5`}tvYKNlqEHM z70g8!8!R-~zb{~xLrR)(knkebYbBdC(s-6fo>=cz;=WRH$qTpaTViF4di=Dxb=PoP zL{16lI4nAg|JEx>h6vwVHWL;fV&;vW?6bf8uJ_{KYvn(*OnCS8_JjFBHV=i_Qs-KQ z70l|0ywq~+!lu)cTvr@_Lz3y-Mux)Y`g{T>#joCU_QgR#ma>m`uPpO6 zoNjKq)S1&zy75EMLnQ&ujT~v5l``czCr>H|-iwt#o14Gxh^h|*cZ0OZ37;LlQ=9kg zTJIDnX!&}3u)^CYre%+=hkxDopsm;S`>rBJ>xn!MvOh(Y<(2Z@+T*mL`Do7;qYL-n ztln?_^;Kz*sp3C9pdvIEc~Oqk(-_O_}%aw-&^a`zP|{WmD4%t z!E_(i2OAFOhh}po>cw1ekYe02`<$W4ogP0Omwg&ZC)Ow$+}XVJ{?=4$i^xl-t>TV~ z_%9UtW#}yCSUS&Kz3oZbq|HY;*GNw6eU*}SE!zKua)S@gqQ!??m;ZEgQMrDlhh6Pb znWEYT&y6Y9-Yt}ry8P;S#|&egmzOrTTyZ)#Ma`^rTFfL}H+7eNeHAktQq%-aTSQLm zn14aw;Y7XoMVPfYcUPhy<6{3@N6E##ju+-+^>od=7I7-?D9@d33Q_XA2y4cM>q^^2aS(c^NlH5X2mU*9<`CFO}- z+nY$n`&-kT8NRW-`xNLY*rp!V&2@tB*WEN{^Q4n&e{9^P?m5-qjIaXVX5-c0b+3PS z3RTItwqjGy&Rlt?GYMixr$#4rDKZo_7CaVExF!#rlO9mA1?o&ZdQj z0*}utWRTLozc%>Aqi(O63K9H{dtWH2&b>I@;D`rr{_UuI=jN+H7nYd>1itjDFdAYw!jAq@u@Lf^EO2~O*i2iBYnp5Wg8G`kCotr+oZ}XM=>p*24?V zPB&=EiA?=!U3j#^cjhE{KfkYYXZ&Qk_1$c5ww4m7sQKg{3k}-#wtZ?j+46+9PA)6P z&4Q(Tdr{jZt33gxw*PXrY>#iBrDFW5_FTgnyNx@YBV?VEE3a5e_Fw-}SoIlbBZ;mMAxds7cV89v=gk$q1^oVdfv#8X9nIH+W- zO?N9eP@3IKar+I4zSNE#dPRp*I z6RA96(eNf9U}Z43qt3iTd%augPigVH7xdKsxV@&8f6H#u*FBPIJ53yK-7kG>D0d6Z=~*JH9R4$$D4WVBdB}iG*uSd%QjP+% z5Py=~WLKkAAsxvwaW5PjH_Q$C&#+YPz1~xgFL`q{Y_@e|1v(|@N+h2_YkC`XzW8c3 zg(W40xqj+uwhJ0FOngqyQ&I^}?FcI1m6IbelL)^!3GE zIbAA0J|CTXxYQ8SS$6J(%h|cO26>4J=l4} zFWGwqx4+m_ku#i4=UfcZ)A%kv-5_dzsVk<`gNbqb+nrUfIsP-u36YzW$dQ<{q3Tfk zrCHu4FOyVX-;()oWtD-gH);kB`f!bVO3{Nw*Ke$hn{q6Hsgut?Hfv&Q=9WdD)#M)T zbQKAl-m~k{e}?!;+60SL=fg{qT~qkz2FiD#wc1@8!zB zM)&P_q#%|$cipKe!QJeu4&Qhvc{WnY`mC2kPnFoz%(v~8ns49S`{%h@>XhiT>rdk@ z&0GHJUav>=E%QlRthQ{MwR_+3q>ld#KF35H7b!h0d~~kaNk%3lD&>_(QcBbD?vRa5 z8}`^NE76s0+qPD$>H>HSWJS)=Su0ZxM`s*Yli9S)p(u8yGxuVhH8<1UL=@E}_##s_ zxJ7cC3R?*s&&pZs%BL#LZ)Dk>; zP3MZvnHGhl-+7y*qt`~oEO+)#dlMDkXLFIE?Ludf=jFdQC)Z8dDBQ5Aw>0|b3!fR* zR}|ZnVkP_LimGKyd$-K5%_2e}!swjnwAh>JGKNlStX5h~7p=~Ts9lpy4LK??XVT_Y zXJM;TW>)8py$dUxwOVk-FToif77O1JD|$L-kIq^TA4xx_Q#vQks7#N%w7F%m`8^e# zhYlM{=jgqd{`_zthmX?HX`MArYCNa4mZeTPC^5%a=cSuE?-|xDIxqb?gACsBEITcd zqw3C3bGZG+UoU&NrT)`J-iUe#OKrP+Jc7&6$R|>;r^zIu$Ia?gY0H6y39D2&VxISH zK709`%)^fV3<(nb2ka%1>^X|L#EO*`pK7|a*`$7cMdU2|^LrFsr#Lt5RM~y%$)xw% zlf3t=^VIt^BDjk=UIe?`vT+eu`p}9^ti|KdrNe*jgjr7$|5B6ia;i}3Z2rb;O9NET z%urCd7QR&QKf|X7lXM#Rvcvv7JjZ$Q-vLAUhB|{Ibpp>sET>#M*S?d}@xmn8u7!1x zum7F3QfAT9mwj=Gq4mV()o0Tmu6uYqs;OWGr<90sOKOv0n1Jf-ufj(TzW8JL`c?Io z!m_1Jih{vUnJXgdGH14^*>&w)^84&Li9W@SM=}pP{wRLrKOoU>kz~=Q_{(YG)*Tyv zPQf*n`=24LkI}%WtDjSB{!>YT$?-u3GP6Bzw9GoFb|m#su9Mj1UorB|Pp_=dcz5pW z?Sv9r5rI9$=~wjROBoJS*e)(M)4dn_n)9LO4Zq~00b+b6Yqk}TRSlI%HZoIkKBpX0oEq>%rTh}JV#5re3(s_=7WYd|Al4oxy8T+OX3OPK#! zyxMV1r0B)I2`Bq31)lgx|M~Sri9;uh^*_UkQ?Dbk|1Gv&KkMsfHsud|iXHzMvg{dZ zm^+I34RmeiDbGZ0aqoX~d69wBqmTD`6*ywLt@d22lX@ppxqg|X8oGj@Z^@? z5tVD4X3BcPSpwVUUk-dBGAlyOg=N!03%S{PGxbVN<}hB`u*b=&=8}Gdk|M8Npm}Ti zQ^^XaDm;gTl|~xNS-6f=3vKXev2gg)ff6KFh)Ha17CibrJ&@JV%5(byv!+~ zFEb}(SE`ss>Zi&`LvG*Kmn!6PRt0QQJYH|Qx~}lAp-=lEiGG75o5SZM`d`0XJD0ym zsCl7^wW!md&DSsFDDeE@bf3Y!HTLo0S^qxQ&8SK4C~i~!zSa&;;8L^4SpOKc+TVgfWO61#`z1g;IpF`F)w|w^N>{Jgq)u8 z+POhbq;!5fnajF!R=q>LkNsx8#3OdR(BVy0cD)tyQ>uRPy3Whk{9ulWc-*9m{~1>E znsGgxVR1|POZ%6@zYU(rI6uG`cV)d@wdhn=%(ngoUj$$02#fO6rR+K`?WE9jTsHrg zW5*+TfqyIhD1SVrk?&#|L8x%j?8+yf4e;tHvTm@ zQpn#?CtcULkMqZ`cv*g?pv+AzFO$}UWSPt~N^FyG30@@W;F>7Tn>AZ4<|NZhJ)WkY zD%soCr1?e*wh2ARIL@YblP;?(wSXb6k6x+ zf3rF2kb%LPg&b>kuSjL`JtdiDE!dD@Wx7ypn`%n;?<)p}99~B<-dM~a^y$L%XsffC zRnwe9yiT?>+zM!tc;ghX^6QF*bPgwvQUYa*z|tfC8JJ=WCOjp6NV4$4%grl{i#PF4 zd>#CvsNm1KP!|Q?OBQ!ZUIs5YGtuDm9EsNDf=4Wy1&|D@b z!klS7Cr!zFv83i#j_5h5h$f78^`Bakleqq-#Uu zrG+z`PO&Z0a#B!K(0Cxstg+(5#LRzz6FE)4Dl?wkGPlEXjZlu8KyEoy|t) z=4xB`y6C)gO3sK(J*jjhsl@xm^UfAFr$nC3turM$pLxzTaye+^nIs~S)Y|euXv3Us z_684+eOM{iC)sP&C@_;hwl4NmDc58-`)kwO(-}(_$qTF&SS>dFNcPdC7dJ|8%q-E0 zk`|kOeCbD1->x@q`x_T-e39~XpDxd=Wk;8O1j!m^)|ItAv(4|g{;Nuid0DXclPAuV zkGA?PKY8#{B^$r}Z`XSHV;UHRMeB)Wev6M33kta2$qLE$S~)j38Wi5z8`!imu>NDFPM!^mtwfjB((^4-Y9&D3(O$LYnGzZQ zGjyyEdMN+NtDiM^=|4^Pq$iu_@H8)WytLEg{e(B#ll^}39ong@{KT5;$>n{{8`gPy zfCP}_Xvx&lG*)fzW3u0VSS#iH0nVTgrAFmXPpNP8{E{_Oe6K}^+vej{XC6q&Kkhhd zwdTY7xCdhv{Os-qp8i6f17*U4BTsx1-9pMPFKc%MI7HVzJBH-7i&DUvWG7 z)=pqgPTb{(+{b9k45$k9k)OdR>wPQ!_MyE?|L)O7WfV56g&TFq2iHyqkHO0`jz$V`>$-S>p!zvPs8Gs_LUOJ{S&=q*FJx+ zch=t{+BetVaYA8eR2g|DdbG;B88n!hU43&*U`KA;nMCfkE4JeEn9t4R!PKFBCB!oR zpQ}z;z4p}#`B&HSFa9h|Jt{BjSl_fWm3Oou~6g535$Sx?@u(YJO5Q?VZQsQyb` zv6CJM@GUjIq@!wJ7G27){IaIW{Btw>^R008sqMdsPdWGV+@+m9@8`VL1~V6R9E&sh z&#(^5%wOc5#dF^LE-X?@%TqUVvdMKbo|}F-ZCQZ3m`CRuf%gG7vsdK4Wj?>ZsBKSg z%DbxVEMM)VCSE<(Fx%nPTeG>pzbZzTz2kO%CH+I&@9ckuL%Y`$ZVZq8Ubt86Vrn(} z{k`I8VjFG+r0XWXlM&H*?R0Sc&)=nsA}n|R_~>(vukB-9b8xhk+!IxHCyz3%)}QI? z7w*)Hnb(6+kHY6KcRZI+Qpm{KGCQnnQS|P!>8%T5_omOe!Z-J{jZF4OhaDxn{?~W^ z@a?*7ajCUBy1;3}Uja-{N3?dDuep$*r@!^j#YtxruI}Vu$o1d*=fVW$@Z>xPgOsa` z*Z2Op9;JAY-T%XUe{pTI{pFKH*8x44snYLo?w~6-To}2CS^m>tc&Hx zO{01v-uOlrRz1$Qd{yEcdM4{;c9d*(Om0l>v)$~z(Pc@Z{~1znw&WHT9u!o0v1;|( zQjtkT_invg`{r8D`d4;cvrg@}(lhDMTGcn#t}WDHSFv>zx%WEjUrpJH)#}kX52jQ+ zu2QjnA^NlOKZ8aS-5q zFUQ|5($NwN-QCdFcy#L<7oo@L(xQ?6YyM6w=G*rElc-X*`u2V6o*c-P-gDU^`Sz86 z9@Dq|v$(ca^y9Hsfr9HRIt+z!91qLdm%m$S)>vP#;%(TxvvV>&JMAw0{xhVlDeptt zdyNXd_oj=}@2q8zJ|x!uXg`aN?A}+OkL_p4Q7AA`%&?8tc^BFd-M;>Ok?xed)y0c` z+C<0Cdn%g8&baEM%Pn_tCCR4E>D{ZDd82n&2S{1$-}_yA*X!F)gY=HPym(wHFg;hk z@Q-5JJ+t~0j7a{^khv1Afw^NI$DEttJS{Ia6`ff9Ztg0xuNpo9-sj{#%}WblTV1i$ zCa^s+fQ;VQrUR%S+7UN8<#EmE8f+sIJ;aI z+{^X-?{>L=ZMf6xo*A*Xw$5(bwbp?_LXGFNImgNgZGs67rX7wvVyqK+Pn>SKWf-xD zPtql3_17@F*MH$IFuL_%e8I4v~c7KBh}Mi%y5-6cC9lOvUaYQ z=#zNGE~t=n&bi)IsY^mv8??9v+{0Sn$Y&)MuY0!T+auBK!QU%aWan+%%N(9$T6q0Q$A5;58P*H61pmynXpJc> z63x4tBue5uY+GDxUe6+nooU@xMz^*osB*e|tZHLlGpC?kr)5%(TcAwLWfCdbI8 zBn8pLwJC?rwJbdExL8q2HQOukqbl1-#IbLb~HHmH;XtiJax61F^lg} z$*W-XCl;5EI*T|dC|_DQTcnubV(j%z#*Y|(eHVKda3s0ojvb3YlQs!cwuL?HSD=&r zR{}X0)tyeatLt3Zv~Y#(inG%g^^;hnxkRT$$!4Z#-`y{;zU<43Hk~c@GUfVDGnxJ~ zs2|DNE-okg<7ncAHC9*q{j`5f~oZP!|pg~LueiB4R%bm>N+15=#E zT&{+TD=*#gaN5+R`?q>7yZFqzDb_%|=`icw&^4+pJBu9|GT1KVTO7GuWN5Kb=tqkS zTjb?qTj%P%={e*q(2~P-ZtC1C^Mh2csCKVdEXFMs8F}d4)rBSvr>(xVe2D3}b$7yC z0X>19u8XsBQq;^^=O`VWW2NPmY4F7SV3(kbiYU)QMwXZp7aywL`}@Kx>(2i4NkT4S zqC7L4rs{aME2v*RFKCb!d3k9%=Ze<38a}z)Iy+UOdi*+TWj-1-oNCq5a`{=Lpz}27 zsjKr`S&8Xc6FcUW1U=Hb6>?I|oM}PLOwM!-_jTVdICU{))oQDpT&G;S>))%8Nh~aP z%#~GULSv~Cz%F1Q z8fIPb)-5x?V(Z?mAFnS=S30$3V`13&U9)@=9IkzhT$e=_w|jPgIvpj!Du!u21wN7;2JGR15|YHdQ8?o5dc(I(+53;KVmLS~3C+5U^q zE;>4Uj>H$t8e_qZ3{DHHPK8-Fzt{fUaCWBt2O$v&znShcC+a1#yuS61%f_;WVO6Fx ze|zPowZyQ^%nhXmWtO?~}GIsU8n^_|{_D_joAWnO5LJjD8+VO7@SgFMD9 zN~XT%nqNA%%zu4OuV$jy$Mr|0jz-Pib|l+0JMV}M-=h;@W%s5x~0qWC;iTI+nty4b${3st@i;} zH*W7&xoR#GxzRQ+VC8fR^kd81X;Z9yGbfup-LF(zLxe=)yM%*Q(Y38NT@!HOVxmO}ag8!on@W>-V2z431&D{6~Gwl=Go~51&8D z9rL>G;e%j{`>b+FB+`ZZd_jOqGQ&Nls`KHKIyP7}e^-)HGO@gS!2@$J<4M!Q zwMP}zwcN&1I&JISrKS|7uwU4` zaL&iI>57k|rkl92=RHwpie6nM*c72GSk|Dk=}l>VOM%Ud?cFCQZv(bf+s!8lb)=cueNmYhd^PMT&qU@AWow$a57dNZJhi^N(^7=(Wu5ebeupR0x>DM2yH!-xFd-TsHP|tJ!!uRi< zDoH;OI(U(%Gr?abtk>}(ub986VvMEN7wvXUu7leDu7`sb(4G;Uc3d#QtHV%PP)F8W z`q~7s35L!Qs$36GIqXn-a+Ueax!*rI&N3A9dN7}r?9rP};RwRu5yPQlTs z99VC>)& zko-|OcoCbbNr7{c%Atm)3E&+yOpqNlKPS3RcALq4c6L`@Qn<;2n(IHNp4E^y{ij;& z#eTNFGv-p`=lDm2BxJ?f6xFz#XK(cX`y}?TPS))&IVIfx87}CwC@~!V60~NelSKVb zXC5`93+!59Y|DK3yKY@M!|O9mUi7QR!Y-zZZT79E)-mPwpYQeWaa+%Lf_)3?zokr{ zj+FlrYWTO1z2}~m(1R@YNeBGJ)pTCWnmn~c9Cp^zNzw1g?VX<;R@$%9Yx9;rF(kxo>%;MGhi#|()Ej*{m{bjxy)X`cu~ z!?LS;k56j9y-_$(-0oAa%WLb&ZERn%_ySkR$}Kc>Xp$*%l2Z`TbK91?(6%Ka{8=vl z;}@+?yW2jU5`4>$pQ^T5-~Xah?F8S$m8pwut0(BmZ!Bm?Vp#E^m8*uZQaaHC}3@5+i>4Jq7eD<`fomkHUtUvbSYvo&WIZWDLg=McGd zzjOePv~%IssO-!8u4dkR{;D@|r?FAh{rx8y4o=m$q+q>fnf<}a1{u~X{% z`^fv#8a);tRI@bxJk@>4g^UeJUj2n%f|qelR#rMxb2r;R`eX2~Wh=LsO9!s+zLw^; z;l#CHwXssKA07Mjl(l==%4y}1cMG3w-X$6_!?-YeaoXJ%Y`i!ANQ&tiMPAylXS3c+ z!_U{|T9sbd^8W36xz!6Z@87;>8}4*@|Mopq>spuB=U04<<@Wn`@8hdoVsroQeSEb< z*ZOz$@l`LP%D;W@4>b!ZsW`K58A@5I&o8&W$R>MyU-c_CE0IGbOEHFwGK z%^O0pWL`yPI$p70nix65fopnGrif!-ws>np>Yf+NkESU1o?B_$^K;`F%kyFSWr9n7 zDCeYv$5p&z@w<^*UAucO-t5uY-5t06!rl#>W*cwMc3XX=)JeMQ z$BHY5{dG4?tk8(af4u8>_@fse*6zMtt(?C3Kf~s%)eWz{UEH|({{6l3#ogcD?)KNq z*ecJ|yF4^H`}5tRwp;5z{mXH_Q_KFMck%9%f8M%V?5TY7I7qC>`8_K)Gxv@E3^^W=GwfXL(u8Nur}bSj}gqQOe252#Q^F8I*6j zT_yr5IeWsjSctObrWb7JS|Bn|rEqGgCuEkB^IdIs$=`sMu)L7Hp7ee0#1=$CkplquwV{>wo-vH?_&2XQsd`n^%qJUv21R-*m!R;i zOk-j5eVt98_8D$XeOi;8#Uk+d-?HV~LTpcXwtmw{VNX8Jx1s*7Z2ebLEg$eY#uNU< zZ=#pKYMB-AXI919Kvh?@X!jd?mVY_2?ehIUA$MPEJUA?{<8Jb=HQTyg)jj*d;k&0M z{)wdIkp{iXq3e@`^X0{VvIU$yqUax)cx4r73Y|gJG9o@{t127ld^B_?hxa~ z8Bd~OUa!Bh&?M=Rsn6}ZsjrK4(%vyt>MZqLxP9`oWj?~%c_#P2Mt1BG+@c&W^*3Dl zuBq?(D$}>@33*3cMGUH+PKygaX0~R}`kq{eCYdq=Cl9rE8(6*;TV>s}_3I5=9O^#V z_?z0in*rYy)x>WsoFLmTV|DO9LrLj3okvev|M@@q`*vY6qs9S!IacS6bhkG*&dxe+ z`kz5`p@7h5YwopG-<49^6MpN7mGA9}X!~{B_D|dlLj%)Aue-Os7BrY3b+G69^IZE7 zqdeK!H*?SZetTh|LW2i?>@8{6KdiFu`Es+Ty3Q3h*m}5jpQu9ps_%2p=bhTBASGeS zFSO{-ulU;8HdDgpCZ9f=UR$UBa-&f6?*9zi7b$iyo%*v|&}%YyS@I^~JHN$V{#vLu z#a?Zmc8F)7=d_F8Tu+GY`|$F5GF`mq%8;J8Z$JFSAW8kE_jM z!N%lij6$A8%lx`5+YBo;+*~YXP7BjlNfVMxU0hykXSY1caMGfV6#UNzayzDp(_cZ#vxkuNgMyB8^Nbn+Fhrk!i@KL;=+HpIC% zIyA?n=qA@M{Oq(M-ZtA(yw*1OidWac<8mwK7`W^>E*7$A>t}oE3BNDs=QAw5-tqIt z*MQyOH|$SUoD<*|&SWlPnc*mTz;2)PA=WpqF5lLYd!lmaw}=t*#>edu_V4=k9hr6C z>)dPm;(YbV#tIRS7X~n-J%8Eos{36NRx}waNSG(OhG|=ES!oR3!l!6^ zeq-MJRYIB0pE4h9b(tzMGgm(8#^z_Q3y+#IfnC82F)q`I%e_u#)?YSD6 zo&J8`QpOgp1FEk#gxrZ(l##G@P3xL%%kO-z9B%4wguQ^rEPr7R#qH?MI$>pP2om!ek zx9pA{RDCk(>b1L9-)~H5-u$e1<@|%rDsHkjB9GRsR*}4KpuTr+$PFot8zG#*3N2?( zwu#REb4?+qeC7P=!l;v>xjFs?^-h}t8oTGX9Z!i%E)tSyWL&rQ?W;v?GJz7N;&<-p zHJy(=|MrmgI9$8G_#oqqh=LOr zPw;VA{+_V-hw_~~4Ab4Zg*Pay>2~s5w`yDCkB^K-XHM_<7v`tc9kr=2 zJhWR~G&E{a%R#}0TY}TY45w);pG&|F%1-?k8zwHXo0uJ3@d|0qy$HQw;YPr167A=u@%k<~lTepdVdL{28F7+<1 zzwl$_mi4b}BQTF%i|@=j0kywJFIzxzavJ~eZBriF`V zED~tWopycq(c+9%du|@>O6gd7gz?4aGXW-ij9*%^0cf2Qmxyz&Og=0!KZL0YH!)~?PjS4GIRKuL#o$A_AP#}Xhk{m z-ia$FF4JFhwsv1ko`XeVUfw(Dz18ZWrLXd(P8BiFmGghLQ2xsLM|zDFj^-@6w|bYm z&MJAcmO)8(3GclX;sVn5i>tnAG|zPAuIpz>i}4dNS+T&3=k|mpF0A3Z1P}MTVY`w( zO@X^MHaX*zM>6I4*}IWWb^%--r97$l?c$}|?agO*3dDaPf=PRx_ z{}L6EnEB;rseAIuw^R9xgc57JBpGjfJiJE!yL)`n!}&5i*LZI3z811M>(1E+EsvB0 z8x!lybc(w>7w&En?&vsnZTkE5R~>Cmn{snMcQR5ua^b`|l}Xq3UHbZ7;KJj~e0e{QM8g{$Nq1TVB37u*oXEje!rlIAR`bWBvAtay3Exla zfa+SX?;BYxUL~xN)72Cim^k%^0z@*!HAr(BEQxaHfa_MMyt`;PK7ys3D2jsN%J^^^M5v|KK#NqZf>%ofGTbi!SF z_M~|{6-F+}=7}2<86?iGRu#5ZR8mh~UUc%v`J?wVJUVZ@ytCAC$_$0Qjy%E4t&=;P z`)9ubi!auA#L;>$Rp4lsX;{aaUY0ji6OtNLEZ^kfNroqzUJAX~(rA?0RdZ&`jc0L{ zsyy2`x&&%3-^f{@z;U!&chRo-JNGg{nwD;b3fx<+X5VPJef;P@$0<8^Ok}#Iq1IXO zh&^lbonIzv*2bRQGv8F?0{7OXXKUg%^+-EP$6pnzntYAp%#4uU{N-y@&YC%tX=H5a zIPIwOMtjl9{kOGbIQ_amnO6in;EMb{qkLVX(#?a#I?`^xf4(az2>-1&_222G^_yPC zzu6TQ&g{J@(k46RKLcCMu9rO0pI$F9$UnVq!omG|yPVnn41mz{2(|RR3cc~C{xhUr z+Gt>MYGa2xlXu_F;)61ovFyJemdL+vy->eT-0|NJ;<*k-YELd$+>qJycJ+eH?YygW zg#B8!`MSC;afmojrX;-{vnafJ(7|tEkVakePfeQ>N|KC0T`gB;21KvMZLaWKE>dM&H*= zL8*byj!xBi7`(j8RY|kyP<{MV_qjIz8T^>ST`$*f3wb4~CXrC#ksn=Vc2s1K3^Q+%`6A0uxt-Tr0X3dAzA>uJ>$)Q$A+-rGnq)d)|z{>}8hCd}QBK+4jBi z)qCEof4MYWYWvP#WqhuBr80X~%q;2UnmaiE~|B7Wqi#Jv;8_3tVq{5 z+Vr8+Ayru>>tk@iS2e38jU2a+9lbQ={yR}VnPm==_jfw~TQKje5kt6lU|QRJciGdZ zIcs{WhEVrG_mKXtEN%iCAI!E|a|A7)-j(|>*dqU)ccHWMWQhvy)-$Sc;RaJH zV-AHrE#?fLIs&;NB8+B}d1m;!CTf)!B|bCpYFP2B>i!j722tzld-_#WY#pwLef!GA zsbu`-+9TZsiW=^TtM(rJvDvRv z8SFZ~Gt9n~np(MU?aQrBa%nyv53KcGC&Bxl!9V0%-(jI6MS(AkGd4a|6$?1pocUPa zPORhBhL19@*f;Jug=h~k{JHY_lT1@(?Fv_kq~cHKXLc}Dhs<28*}>f^bH=&rgs)&> z)v5MWo--%TFl^TeOk$7pNn#Rq)Y*ANkIC4RPhbv%{>(oCb2%f9zWLx*m~rmtl(jP@ zf82X7EigmOreeoyorveDEQdTU^`!U+EEaKmy&~h+ie(eG7oEDcX}L&z*w?8R$Ao7} zF0hOY?`;BY3*L0~X85Ot-7@p`xHf8QXv@$mQ7SX1T+TLl9N(le z>G=vZ7iOJ`nR6vK%Km|{Fnd4U9jab3&ZG~Zuhq6>r6&oz}y_-gdxR`L9ox0kKN>kyEVf zR8D)=IdU*gn8qBQl&itURWsRgrsrZ;7KbSbY&t2ad?q>_X(g&0-c3E*d(biX086iE(tKJ5jJo??gNobbAHHMZw zQH_y?b5qu7t3BJ)vq&)^%qRJ=q6PzlnNEk~yE`o#v;$6lW6PG- z!we6OQ*2jM*~Ei9B&N>cKB5YIJ9-q9J>LL01ael}R>p#1WPpF$= z@1#+xbSTjA{f5U;FLRaqzFxZJF8d;pv&ACy{Ifga_OlCO{^cGl{<)oXBydIcs9Hr< zNM7kNRGV_?Wx>Y%-C_c#10JvJQ9HEsvYNXavgan_ntXFla^PQF% z@kwnCWi|z`+5cX={>!AprOx_}Oq!B<(v;BAW*imx2a4WBt25+<36HP(J(045bkF6QENzV=^L5;A9I23%Muq1JM7U%N;5eIrVi!_`jU9wP7oNvMavk+xSGj$G*+h@kG_}2}N=aooh<5v^-v1QWQLL?D2yT zlVTAk2G_Faxc8!G7p?l7E~Yt2X}SQrRi9^r<>MlOE3pES#~*(1Ik8}wcXF;b=T+aC zYZLbW-1K#g_J0Pmw0%3C*d|`HY5v&$;rI$m{)kU}&L@P~>z3kafd4WPoLOiQaA{G) z4dXngi2|Z=FWmWzH%JH0i)hgOTB6($(c`D{$7GhuFAp^zz72W2OC7zMQVKS3a|+7p zC5o?+7HFETGy9tOw1j0oHDAB_I%L+Kef{nD8}B^)*8E(+2N$#~eTsM~RG!xw#-oge-s9`6r*mA}nC!JfhD z@PtqN+w3ze`4yhnG_MGF6^uDvcQ`n%jC-O%+UnD*a%BI-=hS=HCSI{`SKH=vE-GYZ z8|a9u3G<%c*zSLo(`4aKlaEo0yt;h0^>4Tmpedo3v*tti^VdI&e>uM9TlmMiRH;kC z_S0$5NMsmj)Omp;pEYkoTBC=N??gVEt4f{|%`DRmUx_8&e|kkerS8H%fqw#@_%=MT zPZ5MWO<ir=dFF~7 ziazbaAE#u++)_ESWbxPFj87Ym?Aa@~a^`XAuGw0eh7xLQic$@ie$T!>p?2aEnf4Wy z{5Sa)K9P02V$=MFU*VPf(F-dkURL8QxH;#J$RESA%Fn(O7$&ZsK*WFyN5@8?{|voT z%~ED;d^$~wN7ZGylj`M#$@QYW5B&}-vnX5<_}Ho9>Vst$)je0GuqdC(eq#D5EzdEC zb5$xQ!_I&m+wS?C>CLwOl$IBB_R9VVYAbi$yqo#-+{;yr>7{e8l|MOiXW7=d*U}t*(TM!WQ8|J}6s;Fpz&XEtvvu3S^wJm2)RqWJ@BF{k_kWjZbQ8{R~6?q|HQNw|)A zV~W}z_M{WOKlqMLnEgSvo2tsXG=mk^wEeY{Q0l+Kw_ssV+V4&0j;b>TEnb)GBsje( zW8W9I#ES<$#u{t6hD0)CKE4`cFjZ@cR7z=#)>AB_Fx_pH&4QhYuQndeOfuVB{ax8i zDDH!!)nTQZQ$qJGvZ)RJ?Y~5}afI<-330#j5+H zotkHHuT6Z}p?Im+>(5zjnsKeSBk@)AHD}wK6Ao{A zwx+jx`O57yB)a6kvT9U65ZG1xjp^n28{Et76ZGc%Z2)mCyc&&mPN}*M>Mh26XPwn6 z-@EdI<{8wX1b=4tFiV*%?L{jl+r64#{hwhfW;b2nfXWqhmI7V_ncLwGm-D2-M8E;z zhRVqdXuWx7mcZ1%e-+C05}WN3Q$Co8CQm-LVE@gMb=6G|S8?he+j>dD{3+N)v5L)g zu_bN1KT8PPv$&pEJfI{#v)**q2(+s+#oZ|X4IxWA99>#W1vt^B;Nv^M^3Z@+53*nl@SMW{s9GQ^F?zrAu_O)`H_VxP`Omfo@T`*fF`B~R~%J^SKd+99UUbN>{Bae01e-m#Bg-8TK5fW=4MLW>ly z7=VU+OT+S(l|5xVt-eC~-(l-gV|xw02*rqk#uDa*v7N68f_(d%*bgtlKp(aBeJ|D3~LOu-i<5BtQJt)<=toNsZ}xxpMC%=INcbzRH( z7msE~?A@JrJ6UIgp=<2f{MwE)MG{;0sW&uLef)f_mR(#yf|ud#!wFv=pJa&KJZo=F z^pAiE9+vY9zLsBW=oX2)r~5#5>*B;biOO4jeG&|2*8*3t?OPwuBH_Z8e)s79Lwt(4 z(r0&1$jRk1Gp#Hyc$|(U83Y!8>hDSr$;!Q2gG{aDLnB%T@ec`fGpRe*I|Gu{x>szOTd^ z7hl|aGT@M$Kn{<5OC_=>++LqkQwCAJGM#HaUHeEI6OYR9I%U(3w!lqYZE zg4B*wO$*Xmy-~=sXwL5E5f{bRT}ke^6{sH>=q^(Cvvlf=cQ4!pHhhwL8!)Xyl;a4; zvkTVJm_wB}HZwaZTmIOZvZyT2W+G3d?}UVI0o(0HMkgAM6j%Od;PBLyzGc#VV11TC z)6wGMX-4t;%X_0PG%0iRP6_g0`t*BtQ;$mY$(a{d{+7iy;VRB^kVl2*;g+1h^T)g8 zbl!cvC$aU~l%$odbJCrPeU0^NUmSbTe7IiAa>0xfa{n1tXla~D`Ch^JWar6K$=k|* zX{0@3IJB$n{6o$|Y)3@H=Y2S(F*hwGJN%_yL&Du&e9J?`yM>dt#%y#Hk^7P7z{zs= zPmzR@Sl=lu>m~G7JpEnSnDup9Zk?8n&r%1|+|;Y~)luDH-`=@tD9tNu*z$Ah&ntm8 zI}WTmz2)YvqaqP)$;N4$&J;ea&9aFpx@8(+bLC7#XV0y|&HIw$uH6nYWEM1ykUHJ` z^Y-1D?yrw8>b`qx(YfpLTobc??{R+Tes8^3*SWV}|C(sc+57m2(i^#Jc3#?^mv`-7 zo`fasrG4I?^b*e`&CxxU>RESqzROyP+(_+cky>BPUc_{p{#hh3H@)aw z_4e(nSpPG;QrEdt7-gKK`ll_==l%VAy&2cGe2bXm*TS3o%f?{FX;z*F#frDr*wW7} zz4-CQUO$VCQvyyKOlHe7(Rgxty3U-h@x`y4`Z;x1SJaD&C~>$x|M)1-(2@1uniiEt z>5woLzcUNkH5??b`KcQ)CLPuBj%bLXk z7JHfWD1MpzxV4X8Y!*JcW+vC0C)baauAguvQmVVKXw%l?(&DStSN{HSBUpX2Kl@3k zX=U!_bep(NNUa#=#*-YcmP2L^_-J0;Htv%UWs=x2CKBzTcc%(An_iwx% zwT!}zv-kSWQ973W=snAv7eNd&`~NfSus!%Un1O-o;ri1T1-{)e+i90^jc@Xw+L9Hk zYb|cSahdIw^R>qcVj%|KhqBE_Cpvefb#?=hUVqA-_S(Ew%jd*&{iT0u10|0hK7L_AL~~KvV{o!kAA71|6$fzoqMM5-F9s;`|h^=%00VOX@+aPJtldqQYUR9dgq>f{A$s+ zPV=kBHoR-hXxz!p5O?Ew#17$nWOdFZ)HyS2_#KXxwx- zcKPo8J2?d;7q+@7Zn*x+dJ6lm0=N4=9)IX{Wj?LMI8W&A@iQwP3Uc%)9a|s5bmrXq zyjBqbrn6sH%(K1{#&q`hB>72ie$V{AvhD@`nPe+A!HHUqi!LdyxYNtcdPZNbx^Ss$ zv%`YVg$BmER~%DuDb?6vS8E`wZPd+pS%L5TJ#c3SOe{^P$~k}H)^(@Lh7pWgOL)y5 zLJ3i`hg)UDeONc8mc*L>#!C22HgbuW%q({d%W@iVu12+X_es9B5y@Tr1)HXO%+-sW z%X4_yo}W7|F43&;niey&waLP1c3wc^@*kH(LT06$e|g-zcIRI)lQ%InHRsNiDw<`s z%t?CecR!?P-67-omS-5PwF7)+XUuTjy7P=|@vn^5Ps{#2HRiaSdL-f0jfKlDeQJk{|+&NiB8@|1hFEYkzqb8GDGO@Fuj#hUM5 z?5pgOYxFu3kG|;*lwS3rBum{nKR+Z(`p1n~8(81&Sm12eP&UnN)!F$0Hiud)Z!}N) z;9$v+uG3iXi}UeWsrk19!?C(JuSBX?<_~u?wBw3J-OE-j;tA zOA(t`@cbWdY@$g6TYj85i`o(1)X!m?wi<_)ZF_&lOwnTZ2jeQ8!b!>5X0wZ*eGWL+ z;o6sdt>uv9>+Myig<@XblRhZ9r0v~1H;Ycyw@#I;x85F{sC8k{=CUu@wVIc!E#|(s ze)Pok-32MxkM~M_&*NEJYv=o-w_5u6Roncfzkg`3@h+UUg*&psX#vBT*08vj&1PB0 zu4LERAL`nC@1NbuACLE@B_39eseHLQ{A(7zA)93yi?^)YVW*+7XxfA3t4F$f z#a1L5PUF(>5nCi_>VHBk{WZgj@GF;Z%)o3$QH8* zIHuahwyi&tM_`83qN8j7GkjA&f6`q-(Cyg%SNROQuPipcuHK^?*)MkW!J=~}{rpiE zb%p0VnfK6zkJ#hS05Ae`7_)WJ^s&-zsNLlMrG(;!7q>dS!y4# zv#z=y`7d<$o`0Qpn%Df&Ib*{6u2yiF!TIhWn$P$ z3JaHn4d0URwU;88Rr{`9-)#Br(NR7542R;6$BrnpS>0OBv|jEXug59opfXti}j+} z?piYq#fDRYZ`Z%vUo@LVN#jOc65Cgioe9Zl>kB1sd(G7C%+|Wc_&LzYXyYCEqLWUx zi{3<6|H|h$)nak(qHO=my{=k}VhUa76?|{&ZuMh=%873r~R z-4V~8oqk>_vnyF0o3dtan1Z=dVq;SH=Dx3$&t(5?*HApZB5IS$G#Tj~mp1x6f49+H zoN;NMIs5|PrI8}|aKj~TO*|HaQD*~0|=ljkN zb(=h)UGVp45Mfla8~PB%iwfKxh4?vop8vnrSVilwb3`=XT(%2W`8Hj_Z{C+GTuD z&n@4me3$W@N!K3#XPEp$(Y873eDSYEv9|3Nz6rbg{f=+nlIXDi2E)?{dJPpDtN+vr zteMbQQMfhVZNM?vT#AbX)}QTKf8qDU6<>Lsr?6{?^Pgaz=KpkWnyNJCqiavP zZz^c4>J}9^!hQLgd%#I0o)T4I#$JK5OF#iJ;iE*Ji=m>EVFyRpLWv_R_fB+uzjJR- zgJr5fM#s*i-x9YRZgGAJa7eRj?R=BGn42O0)%H!k_ZC!sVt6`{$7839#J2WZJ-XdX zznib>lkwPC?fCx)L#O})6C*PNJ2N{6I~xltGb1M>6ElOL5R0&)lA)2KQ{Y4aW#h!c z#!0Lq3PB4u9=vE^;*eC-^uak{@}h?yRRT6$ViPqDE>1r5$YqLaK}l(I%i>SqEiQ}< zZ1zn58GcM<>z^idQ`G3)-pnYo)=!gOMy2&mi?TkHtlKY>`Ly4Cn#bgs7dg2DmY;ok zE^$hB<9)exzl{Ifi}m<-nYq6=!|>Q~&suGF&qIrH@4bvSx3XDO|91^voXDbzly=?K zvmRG<#=Fjxig%MT-uq@nUCE>u8$Is4mwb5rc3|fGpND5WJ>mYJfun5dzbq?xO`HqUuVUfGaVjL{~6A(%>TFi*{wD8W#5Wde%_ZEMDbIS;yOHqH(&+_inF@L?6zZM{j4tDJ3w4o}zH$aQZ^{nTqdm)tc@ z_N!(@mEN51J(=T6sqem3Wmi1Aw(%4`xO?wbv-_n-mr6pXeX}=D%aavfYcnz9)2Yrg zFIrkZ9bWj_H0sRukEgChUy-uB__WXS+_MbV*Pa)?x<@h@-xu55__eI`rO(PmeorG7 za!cMg+_9{WS1vNPVwIvwV0r6R(G5D`Tkl5MwcYZw%(!nk^TQYGozcD7cG+g@Zl!Tqg>h#Ap0k?dhv&(kuG7aT)iD+SFMnq)6Lml8P9QF4c2nslM)AaW$nUc!r z*cWTs&sAH$cD}3>nSMRn*rns=o~YZITLrw$Y;JAQ%~#4c$xOahlrAY*t*JQKZJK5L zR4F6wp!$O^rT^^9+`jtRrp*~UR-5#kJRwpZe5@pLb8m6V)!D1QU#Z$FmT5XWnB(N> zn^7);hfeDVPERehle;y^;!Ea|Np>X>C$-f zW!br_?yIZ(*{A0ME3Px|vyJ^a;lh@l>aV^*FV&x>^#@DsIr%xLaR2ArB^Mw6jQx7a zvx$F}?EYtKlrPQm|8ak2`xP1cuKx_J{F5Bd-fZK~)Bd{pX-TYd)GfAk2i#v8eZOL5 zw>x&3=;sZKei?twzjAHHE~k@=Or(r6%_iC9WIndiIph*^(=_eX-Y;urnVeZ;6r^nJ z&Lv>iujNzWcB1IR(#9{DlhU5{F1C~}bzfwYCix^`#wo+co+ee{=Y*p!Y@dDT%%0js z`+|F3@@r>Q?eRKLn6vwQ+Jg95XJ$R)>bbbJ*K^@qxky$2mD2hAYivUoX9TaACAaTe zrSjJhNmi?{#hR+q=KDpK>bKq+S%Z4YT>T ze$&2y%cZkcY;id~?dQB#Kkc2naC3X0o=ac;N_ru1;;8cH)SGLM zr@C_0ALX2G5hqxibj4oXcV644+KO-MPJdWyyLH$8SqIXd?u%P>af`^MJ!d}DJjqnG z(A~X0UhApiX{SPoQ190gTN@TGp0Tv=l9pF#`q?|Tb2AN>pX#-n%AL6K=QeZm+k5M8 zJ-9fb;j_nzodvg}0_8Po=4!vVxMh;F$o0a0*=fI|q#ah8R0TcRwD3;cpWUlGHb)vH z?Od*1ZU3Z7csHx-T+ZanRa?$ai+{>1mU=F{O;*n5?&-LD=S)B4pG~JK$XQjPL38ZajYb+CGhSLB*t%Ok!}#Z`wJ(3k)3@2{N9y*9)Tk77pKeP#pPwr)&AF*EJ?-}Oe{wFD z7S4Y5ah1o%ZLj9M%2j;sxY%S9Z|V2)M$u0)Ml}l;?QDuwIPvjhY4oyFKh<=tefytk zF1lR$=HtHY9Dn!c+IZ@|_Pj&9d-)7OYc3aq_grCk%(=zRXW7X^}OS!kt+UIp?zIT^p=ZsU$-q()IZqIXX zeeKZi^3zRM;KggTeeBc2BK|Xc53>qC`F^QqUFju*n-AgMk20H}yD;OhzPIYfJGQHS zYI%OytTvf#Uc^1`UCU1WbnHJBm{oEjRnSN6Zp_a7yMCRY=0wSKf13B@S+;gwZQj;T z$JTxcT##wBF6ylEv-g{~ENkmt{AcOsUOxXRh7pq6Z~tdl8UJJUQ^&tcw^;0L`Ok1` z>!+Yz+hDi&Nr!e^d&hp{Kf~UNxgHK#p>j<@!A;| zY8DG+e~Bm!dR^!gcKvqzkE-y?TPp05KIyE~nU?$PX4X%^$xky(LN2Dx{L<00O=s7+ zcl%#QdA(S>*wNzhY>$vjsTqxNb2vUM`5Ept-);N(KhOHb?#?Ne-yQfeD*n`lmr=$i z)mC1L`5G=QEqAu2chSpu4cFzFf`1mM8SCs^Q~2g>?bc5}{HH`4FY9$(cDv7g`qe}G zVt#sA3dN=fyg2pZ`pFqQ|BkMoyyf^*Y0tUI7rso{ceS_ZWdG01EfHUy3cRQiXk)+r z>ha7Svp4+P78LE*YICJX_EQsH%qpphtdw1TJZjq`>9zF_JC4m+ zv07)p1yk&tzpH*$#meQ%splS1-F|BNo1m9QKC74inYYQ6DZX;^gWB6yrR1mliwoyq zbeUKnclMp=r&~51{VJYKn~U?mthIm2ti-Ek@wLh-b?@Y|y;m3P-Vh?Mvr^~&!Kezk zV!y~`?e3Strw5(?_s{e{L#N3O^``JsY#k|ln~vwMcKhjNt7(_Lw5|5p?iZf~Z^_-d zyzsJJ$i*-1mrOX5`r_xL%#@p1vVQWH?bFOIr3=2O@=84|^>niQr)zT;zxb8JQQ|*o z7Kd7-<^9CFU+?Yz@NdGbuzs~E6Fer#s>SCWv(-v%_7iw1{K8et*>0=iq(3ZEKk-=Q zO_iJWOUrDx=V_JG8}zSTHJi9BbC%722JJN!tDG$}cD8-`_kGp=k31VQt8ALRe=a_n z$#z?Ix3=5mrI!}PT9!;n+9fw7)h%vqf7+I_O7T;+%ys#m@#LpjLe$NoSwHmxm%rTP zDp_;?sV3XI_r6;{6|-F|VY|5HY37%TkDV#v(*Isvwu`KvViGysGESnT(zsl=y4vFU z$wCRXxpteM_pX{R8(qSF_tO54Jh#NAa$YkLcI;`cu2<52s!`(qBUboXkfGc=a6pY+OmU~V^)pVe1nRTTEitzYkvKW&#iy>;`!x8^I}C+gkMITJ-hu# zYP^o~^31@blCY~if=2nJoTjJ$GtAUUcjTP*P4a0y@6^Sfi+z@RUY0HCRZz}#3*pX} zzSh3P)u!tGl#&@~mm2cjTX+0tFuQd*`ags5Ppew)$VtxJ$JcC&w#fZEcmHSoIj;(D zevTQee9D-l|0gYX-i^vAO0vFrC| z>*PK;DY2MubwoPup#JbKO~zI9H!tYT>Pm4b1w_a3%Z?+xow*^#@2`FVkMmo}ClxoJ*p$`|_XRZ|Rbk_3Cz0|1YugWD@`)(f_}On$7UZMr^U!S1B!1Mx3zbj#~VS(q7}SXrOzG3h_Uv)t9i zf)kk%BEqJAX1^?!p_IA*QQ?usH%ncD&fQ^HdY zH!kt%TzeYT{>0bx)NwTzU;f-e9myJ-37NT)QYJ^6>}z*inc%hKv~<$xI~lPaCt|Ap zY&;Ww*25$Cex7~(G+Dj!DKDk`qNaE!8JgW&xn+mSluRizt0&b-MP_%G_L-i%-LP6F zI`z-(_TMW*D`(sY4Bj|Bars08j%7#obnUOr3Spb{?M7MX+ncA;?k}{Py7WZSg$2*F z&m4c%b!A(#UB_ILiF)q$w*0bbF|%1`?YwVVYN*z!7~Z5O4u9|2+Vs6*(>xQ|@R#YR z(6hG(!us}W?3?z>Wh3YQhZ_zsd)oC+*(Eb^&8o9GQ_QceEX|&`);K@t@=L~=QyZNA z?O(pYS^eaH2Albw7q1no%nDn<{pHO# z`igC(hg@Gi2@5bxJM^^S_LCd>-qrcsz55+zGOFEP^zGxCDLMPh*;D`YeA2pExp88& zeD01)!5KLdi{jJ&w5PglddV&Fspxp`>t{#xb>Ajl+gM{i@o?=`{SW_?Pn!IyKXECu zNb~g9hOU+QfqP&3N7VUP$xO&NZ*}r>TVDL)h4;Vje__f}uaS|n;iY)@`Qsa|$*a$t z?tZCq&GpWW>!0TDYL1XDG5wS`dBLI0E+!rqHgV{}a8t~&_~m{5)TK-*lU-Idhg?rZoO*jRu5fGCipNBL@UZd&!u`1RKwM|oa7yu@;z)Ay;Y*EeVXXZZFr?Xro5%P*6KULGp3yBA*% zKD(^(^IAoo%!N-R1i#MOl9rq*q^a^d+xOZ@>Fn=LE)RD*uHSs~+oi0>7Z>%P%X(_G zcH@B?0_>Y-&E-Ek-8;itHPq<*{%JohM%ZPXUDIP$@hDt&+y3>tb47bgg6366t?vuJ zckFKUju5R0M-H=|JkvdC@Aqxd`iGVsOpdtP;TzOoxPS7K8=rGypXBIo`n7DWyhp9! zzv@M)J^Tk3X}P`MFw07>d&yk=kR7M>Q%+u&56zI`xukz~S?@Ief8A*}_J6%F>!+8m zU+;2{lAFcnDz0nnwwNY=^z^oUUR`MyP4yR<^+a@BIjZ)xyHs}WzFS>M3IeZ#ol64u zt`6Th{oao5{|urTXP4=pJZts(n{(TmW$TM|%8ILBox5fAXL03B(L<{kch}xy+`ad2 z&3={4z{5MGtSmaqg^qt*KlRH>MGKFPiJjqv@9MdF7o~>3oX=&of41uqZ|>D<-YT`a zTkh~}U7Q)QAX8G{&C?_A<$u-q`aWAY&*#atxRig<^*^pnl#{Yqzt*|s)5DAVD?(Ii zF6z8rcXoPunfj-di#iTS`AS+geU8tU+q(VPt?uJ1w^@EUt+)42meXpf1=$+CIl50~ zJL~q`w-nYpm)N^XR>4=Mf7#R>GNBc>->nr7xVgm2$a(JCiJ}XP)HZv1%t&2xWB1#e zYh{BZyefB}Nb#AvExj;j_utUvi+W{4mj^TF0NS|Z`T2j59=qVT{NjInNgQ6aZX}e>AQzf zVtqe&)ol3$0w3RxfA)trvnaOcDz|poo<})r9g<2!=P9Q>OWZsE>AU4ty^^s>HPIS( z%(-)zmd2Qr{%2?lzZ1$Hxx4;&s{8!2b@`uHe2sYg;{A60&9j!wi+IGpST?nZal+Py z9~(c~#ZSDtL0~SE_0Efnr|$Zj^)oS?nd5@W=0CSAW-q_GVxAeN(gv-wmljUCWn$&c zDL7R&&d#@eg>+`|&utQ(>z|&F+?!K>`f#e2`q`<<7ccal_a&t1$n+_Hd8qQMTaW(9#j2b)x%A?eUB~%Vr@n37!F91m*jKD~Nk-SN zHEXNycdQ6YJ0`RJ?AzVfCVARi^qgIme(EQ8Uvr7U@2uqi4D6rJOz&IGQ}*G__mD(| zF7M-ej=A#4>!*eEiM!tm`)uj_Y)9^X?dq2Wv)$8Adr3}M#Xn2p_xh@$UyT+Quj|H{ zosZhH?R9^tb$hefyxPy*IVpF)2fyUon7#NEw}zO`9qGgRj87-t{F*WA=%mm~5+=G+ z%0n%3m`e(5j&0fTB&7HI%!QtOTD$(`6mI==_wk`go@-ZkpNsl)?PZ`xV`-NlD|zYr9+Z)=s-0 z>vD0fXxb!B!M&2v-|}xRz53_=bF0RjkH>Y+{&=%@_1Sej&Y4{Ds_f;muj}5v_Yz2K9d!T%XP{bzVl^)voI z!^=zmXF}e^OXHBIs9jMnsumFFEjYno|b>}K0aE$XMx$WUay8b ze#-iC_72`G{XC1C7j6_$X>;##Jb2+o|3w>5?KSyl8n>CM_-k*;Jk`2Qf0~JUnPKYR z*&HT27x}N6Bvu?NSN&P3e(w2MananwU0qjZJ~6njV{~`_ z#4hQSrT&}d8I;S<{vy3>jo-P4{~0vv@5#Bh`RZ%jEl6A)CnxgZ^wP=F-GWX1hhKb_ zI;J`)>~V_ty5yK+J9~?zo|&G>o^jo9Ai0}P;IyB6;_aAY+t}AdYESdJ6-9OTPIDvK z$Q9#-e#+0pS&70gqr##Z zEk0N8{kr5#N$7h3L^=Dj&VnyF`2k6mi%(p>Vx+D2dDFHc zt?%X6rkBi^AusP?_V%CD#Wl}^UaVEFjh$Wh%f~xE_4t)*pCWrFhU|{M>fdz2Fm~e1 zu=nq`T63gkip*JjCRKh*^r?bK_1gPpeayTU@?U@A{;*>4$-bRFotMjQYuTpW*;soc zC2a4cf4dw+AM0$-c=9Y>ZReHEX{TRKwch>Gq2$ctl25@Gi zk<)eD{gvtk|7c#*I5R1wvUaN4^d%d6D-#2c-u|@K*r1@_Y?E}@E}acp<*_?`kM~Rc z+&R^B{-OKdF7Zq(=~)ugGWSjP8E!Sr`)9(IPRrTo#@Qqt^PjSSZ-hYH7T*Ds9X z|D)q@Qcw5nJ=@YX!m_?Ie%bD}{kQAOaf4NFc9i-5zBaMje)c6M-RrksFHgF)By7Sv z{lagTR-bdS)>_Q*{z&}3nI&h{pM6-Lp{a6NYuiT08;{r4Yu8?x;IQ-5okd?}{b!i` z@zR#L@|=%b-*oN2uvRWt*p+jEPQvR=_j7jt*`%Udq#jMF@wOHOvjXs`dzP`Q>* zwj}sWTlmBU=H8p{r`BuN-t+x>l3P3H@#Yhsa(2hRUB|rqrt8Ll=w8tyM)TTsZ{M_9 z;_}twsd@*PKKy5x-Th{D#>Mvfb=g&J-^1SYx@j^*wrdA#KH3-lPw~f3yV}+N?#H(N zXQ=x2>BXg;xiNW?O&3*r*Iz%e+3APJ-i)JWz3gXIzHB@!XIb@k%WIalh-y98J@ZX2 zFRoM!J7?bUeyLhF)4mnanrhFh3--GIaX!hNGJD(Itk09z+`d_Pe6Jg~n}Ng|lP3i$ zCZ{e=I<$O8yvhy6y+1yziIX^aJN@2{{rgX-_}T5-T0iS>{_4H|8A`KD4YPOI z-Mzp41ZTj%#Zhm4+`R8bSC_wCeIc7|yK}h3&J%O@>gh%>=#41bqC!7&_D|f%y*JNpag}rG-LiTq$DRzw*uQ&c zc|7u%X`uCLXF}Qib+@JlsraTHK7081$yv9)Dd!f)w1xy#o0%_5WN}tZ_uZDiZT;%L z`{DUlk8Rdky-V!$t4}re(~&sNh`UH zdD-o2QY*ezJZ}5`-2Lp)c|Hff-7Q)Zr|~3O?{M90{bO?rBL#m>e9hXXou7PmcVXVI z(_ypD6zFfyI~}(6v8S+rVfL3#^;&=LdG2|>?92SUVH4N?*|yg;?Mv>YU#oexmwkD^ zHZFRPMefJtyY>EEyDM@%FZ+H;>6#~H7LQY|u8x=A)$>7c;v;@$f0f?J8+U^X<2K0> z*DEh3#4#Jc-^_Q`*~smpZ<~>R^3R$%k9Hm{?)uUMBA<(%)1DJ&LU^t1&CbO{kFi(tP0h68YRB{;r+uM`M~Ft#kYs zuJB{^gqqM3c3My5MJ1jjtlQ&S<@g}`5UX;Z(z4%~A(87yP!jc%y<{tkR@=t5i%H&r|LnMuJ7{ZR`Nfx|} zwwtV_nWnpeYtIEw0sGk8r}YolEWG%1YV}3VMN1<36n=^d#NN2UrIlOwHR@kTl9|P> zi~ocpj!JvoJ)s}{BD`95@%pLt9oM!hOkDiyVOeEjoOssF%YQXhCV4h{yy=?YyvBN= z|26rjWruw(v8^@E*^>I6`Sq_?wemV!gN#z|=c`O^-4nPWEI;z$_mIk-(#~1Gj!z16 z-O*`WAFy}7{321;8y}d~tI3~M+J5(m(d_~=^RJig-9Gd<|ANP2@v<9cmyBDF?u?W% z_-)sAuztZ=rL|LTZUBt~?RQ@H*=pb4s=AWUwe^8}S)=2x<$l?EEntpYk=Feic8xq1 zGWkd9Pe)0LnKf)s*L2C*cj{tjT6?(E4#`z9Z}WbYbsP~cPulUwRrZNlPMN9thbuhM z=N)B|wCg$kGc0+#a;8eZq*{XcQSF%gsu%wmIM?bLh3bkz5UaHqGRk z^8DfUbS_udi(hlCpHJ$G34gOMlxP2kUuVNUB}=v4|N2H++w)46v}kSYf&8~+_0#4Y z?+9YN^YHMg`9}jcKknFXzG<49$AV)SJIdqpr4G0Y?^E%(b#zD09>3ECe<#{^tve%< z_2ls%w#B{I-LGm~Jo_=udgt4ZYsHoMI2WJTJNxPW{6h;8)%sF+0!$}oXkMwVeq9|9 z9`@^8%-88=+kaN%EEnuJlD)As%dYu9gQ$vi@7jxxd!t`%zjoFsb zY1020@=G)Hrx<2Ei@wixy1Kt&(XAQt!cIr-=}f-4Vf)=EKhDMPjy2hv?OXjj+buRE zYVB>i?BjA59v|Pg#lRMgO2z3_3b{bGNX3OYLN+>)=WxWd+5!! z*xC1f&6uH(Idgu5=*7ZcJN`5L_$mIQH-n#9VK>uodJ z^`MYv0rTCn+qSe#$e3la`|KKS-Y4&3DyRRf*|?`&^p?@PuNSV{^*m@hd~UT~*v;E%&e?IH~?$xH#51+2Qtl>P(r~cd58MFU0=>EO3d&8Drz0E4jkZ!NnCdWl@lWP`F z{#pI^_0x+tPjE=*g)WLs?$iB!csi%<@v7ezA-7g+$@nt&?j)O>mfZdCzK7X=_}KB~ z@*2L-as#MnKE332xYVBq z*?^zMOw*aSBWriu zUVrtWznqn2Xq#GW*Y?~y+xKKxzcO2#$Z_>%^wJx7KQ4>(COzEMCs8}wX5Dnj>?@D| zEZZ*brno#HZ&i8WZLgS&N9VQPgi7ytcV*&4K5iDDrJ+Tq%XRme#D^~O}x>v_CW~nKCtDQ2(qBcu0F>S-n?WMWVrMI#x zbFXKvo5P>gw@O)c$HQ%#YGp50-v~YQX77&ci>>v)1?EN`DKstf=8uh0J-%vJO~@RJ zzge5s{%zZIxV-npYCRn*VVA5~4{luZ78c#RPCKRicGhX$bHARvoW5&g>c+3LzNBYv ztuj9J<+^uLVSeE1)_u3DU(RqjqAz^c@7CswpXaYGOPC(|%=YSwvrOT$+wPfOezb1B zXvvS&%a3{g7*2|9p50AeNa$kHxY0~dw z+qZ00zLv3OmS1)aOWiJJr@-dV$(ts(3*TDD{7AH>{%j2U5$%Q_tp)M|Ab|rlPCNKJ z!WlnuJ+MPHgYV6S#D4jW#%~9aBiyimB2J-4_kxcj0oy!8%2Mm1%m%o;;z3 zt8v*vUN9`lhzj|Xv2$PLf^T)90`{7obKE}eTb}i6r>JqmrtNY$^npDrY zW-$Hz(r-a?V{(<&ack~#2ncJlIn;73KR$h5v*|XiW#krL|EMF{G-MU{(U&k-SreMKIl`HaQvL8!3T~VzYk#)JvGWX%U z_*(CTZBsXu+E%>zoo&*|eCztXKd;?5gMU)pciwC;>7 z`*n2XLGC>wHKw|c`!$X3-QGQ2D$F<7=ltvkYqzII|MrzsZZplBbKCA#$AeiX-uBEb z3pP{KzgV+<>-Qa@hn6q88l890Z~f}bDBFMyId3OeSCxD+-?TI^-(tsn>3^cTMXJ}% zD!h{)YLY3W<}6lNJ*&?qWJ%evzh?KooKW(ZI@|2fZ~y%-s#lwC{af0%%*@Gr!u{&& zQOA2_H=nt`e)UbS9gTT=zu0a~*}f!F|F!s^m*K3P;!UcOhS4*(-ai}W;<)X}+uM#y zdlvtDYjClW>E63sf0{jRT_9^e?&Z%j17yf(J@Yq`A_yneB z^DS-~NE+16^G)5Z-}_?wx;<}oU}FHF)cknXS8E65Y%ooAu@`m3(`AGP&Yw#@%9 ztIKMW#iO;(UlxBW{H6Sb|4mZ!+9*}Vl(KuWAyHRVuSQpv$=Bu_`?deyubEv-TJ|2h zD!o-|h0I=U&%3^hXUJJ+7bvZ}<9j{->+1!&XPy4QA zt8m{;W?4__V?Kq$tP|wlG8cYa#DDhZ?Z7^p9kWy4AD^|J)OSF#!dqg^E1Ycj95}D)^KI6Vp z*xxH_xNdB-KYaak$JUSPhqjbXmyJ&FyT7I)*ev7a>N8f8zc##E`M9-tNm1g|etE7Y zbLq88tNClwC*2o%Xf;)IlgH_Hj?;C)+dr*nNS)w$>hz(x&g>=Iy!78J|GY6q+jL!d z!(TJ|U1yK)%#V~+61}l>=k}t9mzLeydAMeB{_ilY7w_lstggN67du6%p=fjI_o`K5 z#Z8vcZ>*VvS0p@;OMJ>(m*^fZoNK-!AXlWP9~I@AhNgK1p4Yn0{^16YCxQ z=VqMnh>4ai&5m0-_2e0zskPx-RUVx_J6Ue;p=E~8E1n*%Y>xl*%i=_Q<8i60yC&EF zTeSSX--7#M+ovwG{E+*gGWXSzM3wBxBB6Op>i5QYv>Kc@oX&lF*FVR^m}O0KHp;LT z&3bBjDtpRx&2_;s%Xaz>CT_+y^<0R1WDxFJtL%Jf`DE9#pU$#>y&K5>$L+kTO_owVu) zcct1jZJD*F{ke2zn(k~B5!;wr&;75oCgASOj`yc~)0BFnWmq@e(9QdG@UeUB?YQ4M zx=|i?gC2&4)c$9vKk9yVxt{&&@FV&wf;=o%?$tYbcY5smwV~5x3V-MS2$^|QI$PRI zx^nkRl|FN!l{}o2Q~ziSO7ULmx}CSGD$ILT=FP(!UGp9v`*&;GN&}`-yUWY&O+2*X zU_t0@ANjEOu#4-CozK7dE2sTx>PNBVEP5XTKU~@F@$P4S?#<~^JiC_7Typk9*zL`0 zU!0WDSbKSP`t86u!jZCT)nlie?eP8*ulu%kkJiJG%Dti6-iW-qwOQGHwHWVw)4y|V z+Li?VUG%6X|3~PfVxhNp!Yr;#d_8CJI<+_1fvJYyr6!+UlIC2lS-aoe@YuE&AMMUv zi=UegyZ+WviN?IW|6F4PHmwY;TgCtTN*MFmorT}(LIn?c_T+thzgNsQQ^Vkq z<}9^ng9p(v*{%V`}PdNOQl=}}~R~4r|i`885 zm-=rWf6;#-|1$rgdH)$yXZFQ9>4h!GpEQsC)Q#wpn7eDgOwpPYaU**Dg)M=5w*Bg^ zD!aN(^Gxn(uN?+y4|I=p_sRt|cPC`WDAtBwKc1Q$CCTExEj-moMaX)+Xz0T*K}&0Q z{c@>O$K}NTJ;{_><1*`?o~^fcZd}UV`NHW(ZYS&ya#dDRb22S+-mYi9{ZN*W)q(xh zLBF*bc|M&vb$iJ0bC0x4R(YJ{o;u-z|^+tmU1b(%Y=J&*3mS!ME?$HIH?na~3V~*sFVM`?`&ulf_a6pWiwW z6SnaQKS$7$;}3K9UG)37;o{@y_?YXzr_HfmlDG4ndA6J>mz(*Mi0`vX9~~&GxR|#4 zbFxg$8Q1+*QZ}>h{_)6ZpUo1VziH8Aq1emXucz;S^>M9|r0Thht9!*Yl(v+d-Iw!f z>HSq7cKmklEfh1{GVg)MA8ohL{2!gFSGUEiKKyyjw2FDJVjWIb-Kh%b*|4YUn2o>L z+4h^Bix1uQJgole%A~xTlkHz0skrnyrE`K9@7awFdsn;XxXd~be`YiD8TYu^nvb0d z<9@~GYI%gHcHZ0X_-fe%lbW3!*Z%DNqExG-ot9kY{cb*&()X`_6(tnJbIMm)n&-Sa zelzQ|N$neHzSEV`H>13Te%-jP`tBL?$HhBtYA2kZ@%WFeri#OvLdhLd{iN&GOL?hb=+8mr$O?de+~U3F^7KT)yuI&n5{j(z+7v-V1u)1T!swo^78TjqA`-J#IC zx4%~Wbl*0)_VDXa>D_tpQ=JaV>82hN`m8D1eoj$;jbUM4-aAp5p2O#ILvMS(HR-8f zTYh@kcR96f-)6mjQnNMQ@^W*lSY&s-yr z@zk_PcGdD~wc{U_)y5ckxui~32|T^``1Qaix69t`ddGY@_wQ6~r5F1xBc|*5=+8fV zXi=|^y?Lz0G!LX1VuH zF+LT!=-0CQ<=>S(E^Jx(j4O}6NLTD{(Sso3mCYm?vp zXYh(QYrFpa((eq9Z9CpC3le!Mw`PBIjQpXkxl&%!PiWsy{2owy$)zby_DUDiBcmJD zk->{xCMrig%)flw@A9I2PLFKaJB>?neX_M!w=`?N`~5d$!HWwImi9^Ct^KMOa8zy6 z;k;;umm98>Gh|&C%$k+07xZ-czV)>;wI5!39r5b2ju-pw2`u*(^J;sqo*cRF$el|J zY_B%e#J`VOxzS7i-O87dQ)BbaTVB5%)O+=sLG8uUujJEPQr1v{Pqm?E4(>Idh}OvTq@)bf1e0KdwKteNoSyrav{$x2+Y)l>Ry)?%Bqx zOT4G0bH6o_ecXHEMDBhzv8_rEHZJ15;;+AJb9DT5H`6x537hS1Z&*-j_)&eW!V#XT z?-#yZ>=!r@8FT+?{kh4d$*xab7V2qEm>vJ;>gR%0E34;OXVxx1xnr4weYtkn-}k@R z1InXk|6b){=&8Ho!FEW?e1FiT`a@Y7uTDJf+R6_tu-#4*tb5zHKygunNt!wTx zqprXIWH))uUEgaG-*yG7%yf9Q^XB!B+mJwHFRV{+`#<0~_BSD%@_`BBb~ z**W5`JeH)moN!xrqU`ChZ$Erp+#}rYWrQh7E}I@EGvkNu(cdd2R-0ao`1$qq?`?aP zj;u2e{eJIH*x!5Z;OgMgd(vEB@*qSLMQyi^@UKgC)-Dgw2K5AP+{0i}# zu00)~n&75gNYA%b8TZvHly_GiXx3?X{dR3i*VD*TS}M&;cZYqwrnqC*&HoG~%R+n1 zyG3=*YRA75?c1g*9dG)2o%k-4>zpoYYxb@86v+msG{|vcCN3~k6CCY8@4i-z) z%K9AC-ydDJ;>32jV(v8Q^->uRi|5=iH=}?z8jG?8@1y{d!T%)Y)Qt-&kDUw$UJ9 zx$W-!cc0WJY}{q|ICU?pV~U(_K%|8YGx7dd%{tLJEi(DahOI9ahH7`jbA?`A5GuVm?^NtW zueWL&Kk_EOUHUmAx4wRY$2OJni$UU5wvlz)cG$OO-7=Y~KXv}XMYngR$w(J03X*tq z(rZrs&ns0&+#F6G`)&9-LL%_vY4Lme<#UrR9Nju~cHh_5-G57`Ewg4l8V)L?`$b*C z^q79V{TUJ*S==vOugk*QarM==Qt`dYkG4me&il{sB1~#a$&t0Q{(fH`>yl<>ez-dE z_>PMxiH_p$TYWk;2IJr@6VJ@VuJhqW7zZ)y5d{&%a8XwbyjxA!gHq>?GGrEBad zQ_Cat;{R^RK7x*_r76gica75(AmA>853MIOD+2TamAv3wSLtdrE5)8Hk|q+8X8?* zQ{Lqw{Mx*0gO4}==fF($&(_;gqbE<_fAxNpbM_>TuWLF_*-N$hO-!Fy{PaIVoayS) zq!rwcl^$1fUpW@>m@_9?ks)XA7Nuf7mJgGxr+tmPt^MrdW0@Ddv-W83&7PNMqq(GE zfyc*_rdrF7ug#d{xM{V9wD`BvaVqbF)>#wax_ws>Dru8+|>3 z?Xl9${|p7N`o;Ku`i?NQh$*p7JJrrk=W*Y)rAGO&xTlU6|p0z)(wX5XrRbR3{y>i=shG{bs zXF6q@7QU|7xI8yu^4aH-e!I)A8%tcXegAl$eXYObi8Vzna(jP=m~YfeQ9I+@Q+Mjz zrNkB29*I(pTWiq>;p3$3s`o5F;C8cd?<|+GLepsYmAAd=(iLvZ> z)#Axz=hoCtTeI2y-oXuTwolwUb;(BkwY^1g?-J~#ta~SIeUJ+g7e*QzteV)XM~|772O$}c83{P1Rvn>?4B9~pgIk(;QLT5q;v zLT$*|N$(k!BamM!|75D@82j;dtkk(Tc~;9zz53{|-L-qa)=YW#xNmLl z!=TvaY-zKzjJG{*^J#aSbiC=k#O~)Si=1~0`JSzHoql%h@qJe!L{5F*x3;VzT)QRP2|p>TEzZT)41cF`IWcv;i@Zj zmsustEqN@RuU~j~p;~{j)G?vIU-q2}UfsJS^kAy_2`;V+$7cl0I{W&~_X}y;j)vTP zCAPlQcTKqE?MX{og&fZ2CB9zncq`%hx8Nv?%Q~BmZ;6Qd60k~COZ?E((hN~YF7xem zw_T z;=%2@E4v&;A~l2CVr#$3Z4_M0Gsp2}f7F4)(vPR<@2#`Db#!5OwzlEzy&c=@*KN9T zG&M#PWK+b45ZAN<@$31&vozlr_eSFXbtnJ+tF_V2lKp9#+sofB zYh70Ew)L>#ORrTcn@+Di{^47oYT*2clrY^r=Gyg*(%Io%@iL}!*Ho{3 zvgz*9>+<9WR~0e#dgc;)lR3@ta|o6p#I(>2L0JZkMHN7T4=Js7J{n`PR+L{jv*UjfO3_YQDZBxOz`Mf1RvX>tYv;T7K)zddoCse<0 zc=|fJ{v}Kz)=ui>hwJ`ryJ}1?KO7cVUr* zf9KS7{AKj!_25yWHGi&Wnx7lp=^~yUQRf&}nkE_zVZW=w_w#8F`- zE&my|n)IK!Q@?BStBpe0J9d24)!kY->06EOeBs=tzn&sJ9Wyzu-sHQp2sWZ8s4}+ed>+lYa_1x_`cmscwf&ho33jKb98-f z9qC{Tx&Pk&ZOn^1*S9uD!TD|K0L)E}@~k#kJd)d#d4LkVe1Ra5|`sPvu|gW7`d#GoD%an`Pkyz*+1UgzV$H5S#r9@ zsW+Q*e`~q&tWL`b*mmvM1Wx7j9COEq)43{^>g4Ffnz4Kr4Ae>BO*MynjjVZORJU~2e}>YG%*pvDHhTYFp8ot>koUU2GdFHme_9r)uYJQv$xO9oi9!Bu+6i&xHe|yoo`p(L`6K|-;-OC7a!~MyQrr) z&FnvezLe+D>9f^rt6P1N&wV`I_L*(}(=Uaox^;2|>bJ5yZd(dQ^v+&#St;(e<&NGt zHY?L=)3yfgZhikV$ipb&wqf^)#T9km_suNOe5E`6_7i`#M>84z-dP*{eg8#=;}eqh z-|Z!_Hxl+B)Tz5_<)2&1p66cPTJ||ZKflyCN$fAX*X)QjMcZ|4G&ZGNdnOVPb#&?< z{hwDqI+vv>@7FV((Pf%bAa*)o>+aX=y|U%G)o(Uz%~US+ZVe6m{`WtFsJz*n9se2D z#tZCQ=y71hKRuC&i`+hPe9+$8FI2lX!(FA^Rb?G-lEw_Btw-0rtv@x%H!53v`}XRk ziA_p3!%n~Y&rqei+UI6r`t7|Ar=_Pc=skXX_^#K)V+)z%jy?O&aP>92fUB6qql0UY zA6q_k!*NR~Q?25Azcr0JC8r(M-JR<{Y3)p>uQ#*GG-ggZVt(~>ujy5f97p-XZm;&t zD81=f(9Rb-*Kq4sSlqPa%YHy5R>p3TI&TYHh()*UM=>0SQ zUaN8Q?9{ktdv2}DPp{qkebH(uw;2<=e*I^-waGp-{6JK%RaTJCj%lYqm>hogQD(aE z*`F6Vd9sd(p3i;zII3H-f5(-1xynY;JH6ljvQF~c-}j%PHM=L!`rhw+|7R16zP(xY zIb(bFo0qRXMe3egUmx+Gp(^^I*xLMO-`9S>s4G>L`+Gsj;%8UO*KdBeWJ&y*Yl~E* z7q{K*+B)%B*w){FCT(neqPtUC_q*@cxh5|DpFua<aawsyOhzvBCqLO#74S1eu% ziA+|k4d<>mO?)%@fqHpI^tT>os-uN&qb@$VW z^@o~XTZo!->2GekRTns8b3$W&%CvAurT%wL z4HHi;Ju&ORrrwsImz;7-o;NRFe`4P$Z+DxVi*Bz?+6!;4-DOtw@6@Fr*}P4R)BMUj z^TYkscg_8J(Ph=Cc}0Js{xeLi@|bt?X{Ys4*AvTU&J`66-5tBI@X}_z3ClFkd7hYZ zde_9M)6N{_fA?nJ{ntyCI+f1O6rJ?ESWkS-lbK4s(N_2V&M%)>yG8Kmb+P{p%Qo@! z{8;^}x?(%?w|=Qe(~Dl*oATll#s0iFEw2~R+g@>vv-9cpb+4!2b&oU&)O$Pg)4fyQ zUjAOTrEJQ~l!-T`IL^*`d_C(@U9Q%Sw&%jtZ^W&0^L|}Q5n2{9g)Yr;Lc zJ?@lkO4%baZ?#983(v_lHn&%2-*3O`GFM5&_e{*R&8gKTUqddRpEYIT;u{s_{<&u} zCM|kA>vn$b=fp&xbKxbzw`4fjJN`cO+muv1!wxseOPxXDPCJ+|EjCy z*N+RGUa6P6zaZ!JtDC_Go^JhRQ@Ot^lK;Rpg~koDx35~K()+#mW}Qgb>y0yOG$Pg; z=ig5|9oo$Hwd;tL3B7_g$*9Sc`tWRg7G$@NVtyKbnzgT{cUuuG(pR)?Y2t zC~I@Ln|+La`MTbxT{$Tkv%_nziR`-^CY`ZLYj5wSvPZR{vkD%#mru$RyVet*A9ao6 zet30y-zm+{mBmay9%M(ZoE-l3<4rfski}hBTCaI-PRd;#xcF3LWgB~{q?owjdU5Ve z8wKqmlXI#r_GEmTDc+Tkr#V05hvsH88*TBRwRbWloPO-wG^cX4WO7D-@!Hky-rZ;P zwir(}-e9$N`|YTM(y#vQv)0gl@oA+EqqEl|&VszK18)~>a=DPBt{JlKV4(A)ZJTab zJjjpeoD~0H|Kq>MdrMlYkDpX=&(&ISRD6G@?LXIVL6$d8ty(O9ccsmhz&-mWUdYXV zebxV2vSf7Yx8QAx`n6XdXf77pSX$rqpJA?Wlj+^NQ@);vxHvJfGoDdmTlAu9?|;7z zR|z};T9&jeCfg@k%cN_?ip59w=zk0{TBWjJp%LTOjSs85Gd?WR+VtvJm}T|r3(M7P zYihU5UTDF4D^i5X-EHkvmzq%1#j`~p*d2Trc6z$mf`g@qfqNNvFW#{DQ|5_cP z+;MWUz!BN$=37;)cWB)GdwF8c-rboc?OhscBsK)({MK0YGFVGaOU2|>iket|=*klh zSa+}TSGZTW7Ps?G0V}v}^OK<5C(=|Fs_f91yA4c}Gv` z?at_9(?fXzSuG>;&wkxDZ)&%a?c*y?uJ2u6ziE?vNWWm%&6Dl7t8Vku9Q_ub`Em8s z;H{mq-~TgY-R6$}o^tbhu!&bgYMsoLa8{0Rp6YG)W}i8xcW~F6ufb-Dc@=z9?%iK- z?^H$<$1=Bs-#_cvX3kZftd?|L=4PSDs}Dy$&MEZWJx%Q9w#B;^UVRhYH{+4}hAUkr z6 z)b96_%f41B#yU(pKd1Hmx7>GYr5x9Ow%(C^ByLG>?3**|Hc5oc?hiEO7Au?iAoaNH z-E~)Wy2Um}{%6=(d-0+COm9Cz4M#ol*beNa(p0D56 znL2grq)yqwhZ}x8XS78mZ`eBbSt)sdc7>CmbF8O~(sM1=^f2uavoac7<> z*K?IK)AwvHmVbxb!}&L1hteOrwlItD|5}82XSc8aJ!gSVQKsL_MunSMv5Lx9Wj2(2 z{mGi3aLJ@|YvRf7sd{==AwGfkH7=h2<5l|icHG27Pe+aQpSrDn+QRU{bw+!9MNd5adTZh=m$MC4dv``HPfN+%>h)6eoU?j#ZQHs{ zu1Y=YLgu!*o>q4^{1gHRDaEKndfoI=0eKN{M2{LdhPZpZP_}hB)rMyXLO%K zbo;smX){@j%q(wi_g#P2JKafA^59q9{|s7JcQgHU*mr7{Pm|mF2I=Vh_VwR*qT6); zGx)Ob?LPGSc-5kZQ`$~#>AGFCrdzA&noO2o&V+dDH%lfO#dL}#e>t0~mws+d^(L)b z|86<7==RJ!@%_P;r%!tYqRwwSTUeMomFvjD(iKa?_ZPjnch01AlZpq^ocr3j-{Tjq zpK^8T)+n=xRi6Fd8Y|}K+GN(0Mg2Q}!D(H5tkq^k8S!6RwKQ^VzmrJ`>Nyq&t=dPp|#Yz~%C@Ppq=Md|Qv(*Nl%l zb{RLgy8mb3S&`D`T$*;Xe_!`p*;_&%AGV%zSh;uiE04Pll4~b&bH6h?yESu5u9M-_ z+Z9Piavn$U%Ez2|Ewfm8_r3eqOC_fnedO>wzbx`!sGXGAw@o%q@maY$f3I}B_~(?$ zwE1~&=dRIAzW89uw&?YJZ@Tkyo%WlbGV^KKeXnriK0A|7W?jZdjap}J=RLn}>DA+_ zubxYKRNnqwQ>?W5_^FR`w}@~n{AVzq5F{Jos|8+>8nim&W147i zp+^k0-lsH3n>iiZc3A4&s-FB^V)M@`rQFQ>^0ktsi_yAFisdk8=wXqKn;suto02#= z`uL@H_iy$_9Gj8#H6p)YU+nkCp3ffbNG&RRpQQWa8k5A%NRhX9!@gfBlvosTUB~U) z+g~5o>W4I4j!Da}se6CJh(Wd`;@S~!?xelf)?Qe>ckbU3&R%7?)o+$Fvd&#s@%DDq zUa#o>_;bw?N;fZ8e_r@(@^ra<_8ymAE*v*9PTxQML1y>Z+(1k>+v|#rCuN1)z9V6lD<7#Z{8_Ow>cuZyA^_eF7cVI zdvD(QWx^t=`OWiE_d0jT<;524ug%KY@wokGbDgM~L;k5$v-eB>njV^DJ7rQ@ zlulr$bw&8%e6BCK5950GXkXmkT4nZOof|q@?{-i0#qC2or9o(~G^Q4U3Xsi&D#m8c z+67$?|1&5nal|EAJXpH=E3YzWy{Sq6hgn@7tulpSBKw!hZ|=V+zu^8dc~{#ntH1WH zShd+@FH`Na&2P0Me*KwbJV}0*8NLsICO7V`PYd5#ATOP4> z<{|ybbNhc*+Fn(b__|u^KL47#th|a}LM|>1+syGJ`M%GsBc0A#`S&~bKaHDYwyhj8 zhI2t_)x5o~kTs%{Cu-Nd3JcPSSpVV8{;zL7>2GVv&ad~nmM!FR+huv)EzgbPRO>z}v*y5+UB(r`xuDSV+Q{9HGHkxdqMJGYqGn85mK(LneY;|L{J8~T6O2!4AD>fxBWK(1 z*P(LP-6NLlzh>X6?5<>C#By`m>EA2$HfhN;?b{gj#&(WokkdjPzpuaeLu(!vDp^;@ z?2P))aP8Kd?8)KMQ+V?C)Mzg0ov`4Di1@C%b(5A~s}2d%u8fwroOgHIw=k!Str62e zBR}QqdQzINy}ma4X4FpOoo`p?M0q^r-*au3>Bg^D&TqFkZnh!!U!2J-hfTe2W_*1o zYS?dmTyK5l;nd@YUsSKoJSv`TzG~UU!?H1XzpEbYe;aUGEW)$)y7|UW{JFj=J+2dG z9C#gmu)AUD{0Ou7?-kcJoELhR&0(1neS6oE@{*&zyWR)=_KnF|mT<^s$LhGPnTI=V z|9MQ4n-MaV1HV$qNRkQsDs}pA4SXb*{t9j>G?`-W&^Q1Lz zIEsB{SFWB>`q;UUlk4R4mFs_A+Rele7|n>1B8~uOFajp zFWryhCe~!n#Xy(zd#hYOt}8{L^&b07Uy2{wtMudgl6Wa}jS%%nY9JQDNrV=NN{Gpe zlkA_&a%)}cuhu>L`7HkQr-96$rhu2mmaShs3AQx0cl-1m?=DPs-`ShYS@$bGRk=WG z)uMZ=>dj?x)t8jWT)CIY`u5$j9H)D~7cccinX6bVv9(+KNBrm2kJ{dxaeO^p>Ke!5 zu)~Zw+qk3mZK$|-?R572)ag=}T$^T!qO6d0cqDvfOAlAy>_3{xeHKePTpOitd=~rm zb$ObL;^~yRd~RP3KJ1+EIQ91K#4I-ly^fRhx&IlgYEuI3+?9{d-nYf2&q>aD(&-Jo z`>*%f&!21-Q><6SG(BRaCab4@?VJ4UKcTan#Vsc1#oYaqx!5Dw>2$Nj-V-Y&3nv-v z5O6#GukV)b=ZwA1)#atyPd;6oiSz$HBSF*0Bo0qpg zjM}h*@5TA8yAQ2V>N3bbWwl*6a_#ygvrEcuEz6G9U07+{W;{FndUE;4m5kiax$gh0 zn`Av(>11(SW~lk*)A_Y879E?oOeJCa>wi}#Zr56OK47c)rg^qLMd?Sj#WyaOH}80| zV_yEb87hXWCxqK>-}wFd**DAd9)G{GFU#W0vUfqh@8@6m9(dL3V|*WPR<1&;(dOsH z{~7!@wa;?s+OdlJ-NnzDr^NqeRA(&m`5}5(rtg$ySL_sR`!J@i8@c_V@AkfOZc2OI zn7hYttNxasT#qho`ka*OIN>h;%_k>w`>&OA+1=XesjzkN<0l8j-bQS*Kk;zidxaBG zkG@Ro)5&$M-q$mUJ5sm)U8cZMm2Hok?m<>cLFNKhEMBeLr**|xc#X8_->IuBx31p(>|9Lo%ge2qI@I)nDRuc0IW;%McK-g8opS5S?g;L8Z&xTAP4&%|4Bwlh z&6|7S*ea9yRd=Iz??1Lo;KVKIZ5F$?{$2D+OJ!1S(Q3CFW-k3}U#)z*TrxGMuv9l# zhgTpheV0M*>$xo@AOAh`Uvwrsol%=_j?vl`!R++S6KjFeK8!&9t_9#_|> zEmB^i{N6+}XVPMmjMK_0l)nSjd z)hwSGZ7(li6`s%cI*&o)b7O98UTk*YL5p`81uwk*9V%fVDYdqujy}h&V)t$Mj z`70K#{~i#Mrn!33^Y2&WzpR)YFFxnt#{F6oW1}*s{IZyJ?CzJvs$7Nl{^`H?5p-PY z^z|)zx2B8Qv}lbr(uFcj{8X z&HB|*zB9L%9sYg#_`gY7CS^>vS;vZP&Tdu=I;pG|wdbn--ZL5zpY!!UTykr!?QONZ zbmwSt!pdtsJVme8-qQ?oVv3l%{oUHSS1x7WcIIdQXNbPp@%{4SyA zf5`t{)HFAB1IEy=aaSC|?&e5-mZ_bqC2)J)2W zH;htOmmDv*+S4)X_il??)@)0iH8=ZQx2ODPh|N^xR=9uYXxsOjp6!`N+Z@-vm#OJ| zawl2BesAyVy6<2AGnAL~@`GoQPn*bJFLmKRWt1+sCx6wgee0rwqJ2t^*?Jz82Jb9W z*x8$W=&64!X$P~*uklM+y}R}OW@6SQw^!4-P&Sk8Q>=B`ER*3DD9iM)yE^~JwIx~| z@2Bps-naBl=ryxw{m5O59A9b>+4bo?EXA zdmWN!oz8ciU+TJqlAhu5*=2`sM;W+(UUBqv^|v}Z6X|Ccs}7vbzwOTLet^eXp=4S3 z#YfrOYS*?OYqPR(NRe#2`+nP!Vkx(y($jSxx$c^Eao*`?Zp!KA+ZvCmYO8H6esQ(2 zm+zhA+kNJH^EZfR-+%Q}sZ}i{;{8^?%TX_LXTDq0E-mQMDl+xP`fE$hX`IWQAKQCB zh)KL&`uDymInPe5FOJI%HQ&7N-tUW{y~;iwM{DcfM#`^R{Xo}k33Ts6Kp;<|e$npo zl@G65y2a>DeCQ$?I63Xj-o=5FR@~Yb{pDts3&%#Kd#C0*_N`UfvF+=(VE4}z8;kLU5&e}ltzjm7u3Km4d)CV7-krPt+{UX)D`G-jzh~~b#eMs(r^oWftlF&p zxY)Z_w{N<=&*NF2Nm_bpdI^7i*sa_1wl2D!dgEL0s@G1(wUuMrz8$LG8@gWSB_HEQ z-R(2_EPm}?rB~U~yX(Ot!&7&!F41C^$+phR*>_ZZ*VZTAZEGxij{e;EIIH5i?zO~; zuY>RX?w`kfbh~fHhd+-ldp5ql^}Wv2r0bH`#s#W^J7m@#S^vuOI$Bi@US1&wF0wo(Y~`Cx1}}?@|LT zom#&CWO?xPpx*2YVn^K>pIEJo)BbpHZPecES3e$3JEb1+UF~^Qqh~BvH&1k{QTBYc zTc@W>ojCJ!ef3kHIQOJG*YiyGE8BmRx-)Tl?l&pH*YS)8jcx{4zVzwa@!Hs2I$Qhg z`_=mRTP>)zzq>!^((Uk>`sqh*el)wGe`TV_ ziOvbVu@l~&?tS}VR!iRo{d-sTor-oh5|*-<`cvxL&BMR8+9XW);68oz$;IZS9>;96 zj%`2u+T79EqgK=;Gjz=%JBja?%{D3poSOapQU1^HCB19szP+$s&{wg9W7YEYfstYn zlSQAYJn_1}YwDD4G3`Ir`hTl!y5BD8ecQ=<WuBNu^kE^Fd;HKYVCG*zlEHh-0LB1|DQop{Nq~5qkkSvs#DT-pUlZI>36r* z_FL>XBl25%^me>vJYK^)d*7~OPcozK6uj*Hxc_L7S@xY66^RUg^ zo4I!?(qbjgORpzK9do!}&UGezlj-E>8`-zhZ+{Dlu(~@V-z;4AKf_Dc_%fZ8Qit2u zLe)R4*jkzN@p+p0_Wh^dE!rgh)Z*cr|=dlg!%aL=CCd3AVr>e;Ec_0#w@K=`u8v@{&N+NS zbzZR4#!U}q3V*w{MSu3=BXM`XE$RH=Gh6!EZeH;tN%j>%EBruAFl%|Iqm=1ogauY3FZg~zn?lg+$IU$*o8x_!6KRHa+}gqCTi^L5Zf_Hen)CmLyy~6Bym9w`hMl`eZr!VFdUMp^=9`sF zZk_Xu*S>?a?pLl&-7MVjK#Pjolb22njp*w?1l^!KJKv$zrDp2P>)nEf=5j6LRois; z-um>X5i>3v?URt%yZ8HwnV~gzW*vR}w`A>)OVR6er+#01XsbuguRGt$+`oPgtNJP1 zpy<8x?*7t5^|^NstM4>BVg4}4Y>~d@8T0*ClVW|Mp6is(&NKRct#`G;tH(#T6_@{= zZF_b4*`)1PcGusH+MnJ`n^>Wn@+~gI$p7!t8>}rtWUS@uKrfP?$^~v zz18b-k5~7mZQI*%+oM-XXtwBYrzPhkAl1*YB`o@LwCkV#@_3iit$Ma{X~@0vx_iGb z>IThtH{DbmFAqni95Va)EGLO%^8^K19*+7h@VchfulvNffd zLQiKN`t8eJ@wmuHI{#qnT8|w%8O^1_kY!7k+&8oAwdq?`^zv)%l$u*bt^XOKgPWQQ2Un8I1{1$w2)w9{LIeT~8-MYe?)w&}l^=AIP_sb`To;BNb zv%0Kyt0c#+Et3rlWAEYf(^tMWK=`<}w3s*!6p>E7HnXZ_C$^BGLqrdjH!^48>k zxDw$~*gJFE_G@d8YH!{*&9wD!^Te8?GkzN`>8m)*n`|u-8kGNTVM|J)*edI-r~Wg9 z+j~#kqn+YcKW#5}_~PwbSLZR`k1m<9`h2F5A}kz$u; z?s3+=bxW80XK1^b5cv>Htcj%w!ix2;l<3CCT zt*#C9>WcR)d%&7=f%R?eubYeAv^PGCIZ(a&vT5$je_FTB)c$AqJh!hV`;z(5xVf)q z$d^{Wm9uosyYDvn`k{3@PS}^NDU)Alw^~qbH~#9gqi;k1o(pSSjD7XiSQ>ta?*1NR z7?!!Qe);{ z|99o-T#0<<{*?7nvuY*=mwbI?7Dj0KRKS`|`Nl?jvX3Nts<nVZbY(#rrl0D?JI{ohje`LNrA|wexn}tLyKUxaVh2`?mk?WyS%MK}1`m{}B?(f`4&P7)r`EAbKR=t|Z@pa*~-mE9*o^M;8bZzb7+;TRctFBGl#u;6Dhm#^!4aR3bWR3-&S?{$3M{tKX*M`lGLL0>Bhy+g*LNqo&6$~ z{pCM{*NK|D1(yt+L@RSL*FBG&b~RL@;$Dxr^V-%B`>P3yKP{b@*dB0J^_cejcemFn z9bB|vn~Ke}cegiP=~cP7RCtQzs(hKC!}-z$D)LSIcwxgK;-m%5!pFNXVe0aM4{nKwB$6I{%*3xM%V138^pCQypP$ay| zcukI3UTyG?kjR?*!BZ-Vp8mdByC+L*OOnqFGcNITKlwY>#}%XgGjz3`{m-yt>blmg z8@~S}wZ~O+%cN_^nzrvE+z!iJ0~YR`y5&Y~;1k*{{mRspl98CY_t%%DhfG|=?}%^Q zcPhE5Ovi4W(xC}6lJD$YJ6-twvLLrjo;|&r+rRz@o)hp|a&G&!1{a5hjmK~4WU53g z=IQSGobx*~OCX9 zHSDTFZQOd>?b|OVulCf_-CH|FHlgd$w`YG|Us!N&f7CWE^YxoggeE&YiH_X%W%|~M zh0v|-*Cy_0IFt7ze&3g=yEn3ntr0T2EL$5HwWe!h`0}i64!>QaJT7^Cz9sd0^;fIE ze*1&hOm;bPK|qcD`|7H&?_rm#3YO1Fy1IJbv&iU|`O=$n)}^k~jtSebwpbSi3!@%w zJ(}HhU38t&j;=@AUDu7EP;{Mk%xREXgbMALu$|K&aL3xhsApiU9S{=>qd=NLn!-SG zAVWLWrNZn(n31}sGwSZG5G zrHL1=M?JcFbai()loDH~8xyr-Yhl)F2nCUZi(=)XYkhR}8ps4V1u`CN!mjIJYRA@6 zm@RDzWzv%}OJwDXtRJ0q@i2Gi-7T7}d}eL-_n*o$9|~{jIb1WFyIT8FR9b(O^6@mg zTSx4+tTypmv+drIe<2^*CD$yJ?7DTE_us3VcAHbLUHhGr`SnJ;?Ag>0``2CB^+H58 zcVn2@aqjPzb~#-%+sw2=8E5C-%$xXd}cDLSZ)87{JZ?wN<|Hk;ssczkU zwZg5v*-K+m9=Q6hI^wzZ(c>$cxHnC@xkt3$tLe;m-g`^qZrX&OJ0&;XmA0)<%``l? z_SylXvnRGpd%St`)0wwqtDNN`;%DwwYMZXsG)v~Cn%;)Fm-c>nzphI(JmmBAN7uJA z{@%JNV&1JY8`Vn|?B=SRs|f*;yXD(h2Un6!RML%!RvdLu^pMKr;`0S-Czw9Qe`H8Dl#HTo4 zFTEXQbYNlWOF52;Z4Y#6r*xNE8nHgITxZpPchP;D#@VkJzW--fw$I;ZzNV_jmj1h^ zjzr(B=ZaN+ZkQCKW_^8stLXIe#tIdSJGZ9!ZhOlg&K(wZb(zk$I_=JF>emk+o9>|I zsJA`j^E8RV+q?6RZAmpezgSjvmS|t_o=x0Qzb*2)F0DD2a&fLw-ka^4ey@sEIwxmc zpS4_fe|X2YYaOdaPMS?rI4W0o`u=H;;zF4Tn*G-`?;d}|8@O$2(w(r0OCNB@3vRv| zm5?muwA|yWOXRv6Y-^=LCNwVH;Nko&dh7JB*B1FExqa%rnsE2q3++gioKI8B7*j)! z%g(Wm;pY-`&$&INHu-MgvTce>vzK_sZeO#i@VBqiStYTF&JVWlkoS}Lx0&^ER@>2h z>xWXgxA*o-M{SaFVUvm6di%z^k1y*M_2h)^keS}d5>sg!%;{|U=aIoCzR&(foIxHp z!`>ZOeQ%n>rfC`TVoU$rdR%)yclz5ETV@Q}RR+D-b+udVL}`9)Cf~<1%gjp?XM7Hmw#u*G*OaW%lw0L? zU3!68{I@GYFMb}E-mIJ*_2Y4J{pVnJ!DKnDa69X;f1V|a%o{eW*>y3wB>C9sDz2sz zHfc z1Ne4}H?2ytJ9Uzg?b_1?of86nor}9_vnlQDyv@8GIkW#WY}@#AQuEjE@4sJKlkvzm ztz7%n>Q?4Nu`6r0{aPF4Qng7gE&8$Sv_lhTD}`>3Jty+IJ94)1?rYOEzO$z|?VnmD zSts?y=#S}()F0Uwy+2%EH2vXvclE<@UGZ&udG_;GY1T=73HoFDV(E|U3#TE{uKI`L zy8PSrip=M&(zKKM5>x}0zIgJ(^~IARy8A%V`+2J@?WDdG)tJ6mf~GsZZLbKDG`itX zX_(zleq@6TUo`pQdRO&UxSdOWWMB0BaDCzQhwH&kg6e|VdH>;hxBm#OCT4SUue`n~0ih??7v^^8$|dsTAN%no0zn(f|Y*}Qk> zf%o4oyD=PH5@{#>pW&{{Lus~3*(rUN-GXkeO)9k!J<+;Xx9*`6KAl2#8_sd0( z{izLIroq*#;1Uv0`}SddSO3iZESA@g->zxm_|H(9WjXK0ioC?Svw7}93j$Wn&e@i; z?^ol~K8?jK9)$tNb=sq@dP{k4nOe5byXulkYVb&G;NQ*(5A$9JPV+SVSD4DFsT$fGpPF&QQJ_}lu6*^rzu%Tz z%c!zmlG(KE-`Pj^qrb08En~}Eex|`P{BL=k)TvlG@!4DTzTUpQZO@&;BMT!#RKFKJ zs@-y0ub<~9>uH;9kE>=s z(QE%Rtlzg~rb?T7WQUrzjO&i5CFN~mWk!)}%1h^5yZw53Ps`N}0V^-rR3!f`U90AC z$#PMe*cs`(uYWQ>_o{aU0=$d*^|Jrr?gavOCoV0TOUOoQdlc)IEM^ik{ z#B2XHlWH?w#R@r>^{FX<9&hMqq5MBdE5Gb@5J&%pC~lk2SKz1RLT%w^>NBM|-0A+qA*@Ag)kS?+VoTz%$D?%loe&zbCr zGWxrtY+`@c^_c981F9dQ5tnf$4&{BRcB?YRLtS{+&}B=-mI(c&9XV3lQx&FzwhMm zvMlCE?drHIyUs0HA7}C@MoI77^5vVq>EK;x=a%+hxpe8;q$hk4@8$Bf)URa+OxSdD zXL$aU%V#Hq#LmsKzL9pY>`rndr{HCwo8A8z;@|u4S-meb=)3Oro1Sa7eNMifxOT_q zO|pA*{~bTnEf(CnDe!3i(_>D5_$;nW=4oEKe+%1xhSQf{IIW$wE#YYHf%>qeN*pm4}0A#-iPmhab9)%)v1m@_Upgf-6nmi_3FO1i3?u_pIr3pXIk^G zcPkoyy7@dZ@BJDbe)V*gcV^#=<0~x|gEvd6h#Rh{h~L+$Kih3$xafp?j~Wb?B|1Id zTRZO;PwvLh8rD6Nvqk&Do-S_{^O<$$P#1T^rv0t|8Lakc`r2t?YgO`A7OYxj_n%?^qs7lIPnZ9?`jPk*4UcW#FY9To2UCZ+!Ld_O&#LPuWk8A6s@+>wS;0`NQnGqZ1h3C>`6T6cH`@Zfjm^?3?$m z7x-jKe2q`F;Lv$nd_3<~!X$$r-M$ztdt96-}XUdy`_z9glvz7k#PW znA6%B-!ARr-hFz@o2A7^XMMSUq^|pT?Xi3I*Y|%rXL?3E{m=Xv;es*s2^`X;JNGpT zIDHm8&Z--~B2)gMDR?9Nl^_?5$6XtiLigyg{WVy7dGn6TCds@CCGS5u{|WieaHOvL z$B>cAG7V$ZnOTHq$w$AB)EE$?9Rfy z`-B4~USs`zYx>Oyj`VrC(Bu48+*pis#>gh_Mf-l=@4CNhFBMm8O*2&x{<`Aanl;mO zbfhczOSAqJGUlc&?=CJcSo6uD@I2o&+pi`C9-CBh#I4PR->sZ>`{nQZdswqhvn3uo z@aE&+#@emj1xI)MXW(4g<1zcttFrgCQ^k3nn1!sk`tAAQr74kt-VufGS4Q4$nxlJd zYv-(O;GDPoT6NH=2!=bWx9>l7?^NZcP}iH=zRG@-+z`86Vsa#>kjF>eS@(baXQ--u z>ThwPv&cK*x2EZi_hzlGw+n@Mh(bEZ!6JA)X{WI^CwqjjypWLa7I+x-+ zC8ZA(d|VQ+W_nDQ<=(x2YnpEdte$@D%$k5c=3iS?Ze4Lb&Eqe&Qo@L3TlwwHxvTUa zE&r$d#s9;<^T&4ll?#rsn=kb^rat3wOx=9`8!Y8_k|)ZY|NcvgOxt;+ez9lmSXHSIZXPX;-4Dx_^U_) zi4EJLS=Zi=u*rCxy7m30)4iEW2YtFwa_NFX&R0=qbL(Sue5K56)?dvy*>&gax_?=R zMNWhF@%qmR+%f5B7fDLU5)j}zp;M1mgtHisCMemz_R&jIux?A7Fva^4^WMDdVrtIs9h-+3$LPC#* z#Fyv31kDP!d&%88W)bG2C;DscE7OdRz46ww%v@?CEoRR@aLMC0x9!=Ldvog-tK401 z(0YPmeZD)$KB3U%{ix;jg0nLA7wCOkvnU=mszLFaPqK zwk8|jzWt;>T#RRL^(#*Hj9T&NcN44Y&L7%QH@mgqmrVWBi3Z1hS5Esnd+xr|mFb{N zU5GbR2MS&j{60&xqb+mkRpQmWuQfso@ zzu3jc5B05_vfD?|H!sd~(plji24*MC_labkw*_HA!>>{u(? zo^l&p<6m_I)%bfRc`5DM)OtNVZ-4kr-|VQrHoM%~mx9(FKApw?dec?d|JHlXF+AP%cyIl=sULg!xo_N-PR>tVnIzT7(Jwrq#_#Lj zy%}4wcFtT_{XJ_T`4L;zoRBF?A}>FtGB7ma8;Vco2~m_ zimv^+$Ibicw0m|YGs|38RjPE^+%v9iubCBgv^+M}{lkY9IpSySvj0}E`n6@!B~G?l zsjZ12GEUF0&(^xzt1Nw6{CjI}&HXgV^tvs6oNH5$E`2NIUAbw_QnMuMm7=@NZ^t#M zB(Ul1%=^1FfhAIU+xo4M{Hsns()HtreX#i9%9PomGp{A-+~jHZn_D+02ei&5V3pSM z)v4*Pwx`|vc45LAkLPpGMc=#SW60GZT-+*k!lmcI-PrZJeNzJ>4fb-BYHr@Tw|?JN zF*fUZx22yw#kOv)(ck{!ZKvv2+y4w)*G&R<-NQL+|Z7zxza>T8-hc zo3c~;w2Kx-{@NhYbhyk|e#iaKYns$55^MM9X3ezr-1{ZY`kfiL5gvc|i|v1g?T=<8 z-Em&D{l3fhpB_!(Gx{tvv;I1JfKLbjtw3KiNzq*J2ZEUjXOJdfy{s=M% zp6#}_w(9HOdv^Y%9#mW1u~6#v{Yz~^%Ao!Ia@*eR_sW@P@L1oxcK4o4{jR5*s~*cv zUzySuQYbIY_V8h_J4?5c+ri?^g?6uwzTfaZVD>qdtJzXUx9{BexYea~M#lNJd)L1E zU)JA7!s3an<6_ytn~l6?*mlJy>$<95^SJj%Z?FE9u+5Ruk)b!mJ9vHHtX1u-&B>nh zy_oUGC6BNeZ{D4}f9F44%O^O)^Hj=`_qwknlTV~idu@;>w}0`wl}jf5aNEA=>+PsT z5l4a}%x>J~S%q}w3;VWZxeq?B{dA50SH-0r(^O7u2(5m5Y}2*ls}I|zeO-Ha*FTRG z*=c*-m+0%P{vv1nPImwDhrjCHU;glyUH;bZf3s?Nm7Tz+^nO0ezWLLN#-Co`zJPW3 z)stBsw_GhAF-t^jJO6Z{TK|hl1`W4+^*6Ol6Bm5-_r_xf6T@dBYSq_ozF$CcJ?9vLH^lGn_27uN2>Z`)`pe?7r;&_yCO6!rj_=*Uxbf6p zndCf|x3_m^)pqacn$NpmD<5&Hi8712+Bx6$bMkSwd{vWOOB4PsE`IDS(W~T8v?;!S z|BK%%zdJAHiIiWPeQLFIa=&-f704kcCv3N-w%L5tUVD4m{Y{Gl#0xgcpAFdHqRaKD zJ-^cS-+ravzGnTKqviE4q#i$4QXl?3_EYp@X`_D)byMoj*}K#={_VB>qT**?Tl3oW z`P=1Fe%tI>w$r!ZmyCA%<%eG?!kJ@i_V5<06FsyeoL`^oVT^YB#fM)kYV|+@Tn~To z1;^OT_T9S`y2RZId6hfzlJ#|^A0eyUAFcP;FIv1Fv`ii%aBR=*-ltmkVv`#CCpttt zxir_9$#K(_T~6++EE8V7{=^mSZjy8H*lX>%$J4gG=a0V`<>kEgnge7rNaWUyM^=HB zZ(aYh`jXqX^E&w()(iS-mV|@`U*Do<6_$EQj5S?BUkwD}J3HzJ95S{}R{SjLuW>CG$&# zKc8@4b$?kkJ0 z7dd588~44~`t8k{zKI;|GGBLJvo3tM*JIMlfTK!=LGAhnv)!&9*E(ynOmWJh!_&Xl zSG6tK5i^%B$4d3!im0@GzN%l1G@ttHEt%yaxoVomiD%!IOe|EG_B}~IVmnXtzgZlz z<*nEIzPcXP^Oq<;EB z_H-{n?CCz9y8g{y7OkgWFRwNdJXpUvXu~v>lV7ve`F#%Fm#LNY8N8XhRQjaMjuXkb zvEK}qd`g$x{y6G|&Mt@NURtk0+ns}auNe5hQ~0NU(@CH2;=8pzT+2+vJ}I4BU-2`} zcw19riu|)rT<+GAp&`kyR@&St+%s?Dh1{%qqh{@beW%insJ`E|SL2v&(yRXry#E=j z)LG2aineyy*7t*VU6Oomt!C)*&ly z@9sO8m1$aNEOtJ_dfBz*(RyF9#dk!1S~h{@#Hq~%ueSeru_oA)C;oS)a&n;J#l$T& zmiynWn5pb>%~Wf}_HDNeJ09Qb4>`X*>xz-LOnGna+`ey5TVEU#6tXGc+B3A^zpquZ zXx7`Xg6p~RwP*hsu1lR@C=*PM7Sz%0`X062Y2CN-uNTxzdaBlMn!_Siw)64!+`Q-+ z_Fo@|T~%X{*1NYi`=Yv@{p+{C+-9k@Sx%g7`)5D1Pi&A+x7dznr#qI1cbPl)PR@I~ zEoa5M6{Xc;kC$28z8|D<@zGV=^>Sa=S$$lq72aiOS6p-9-kqBz-vUpWJXn}}lL@wY zvDRS5LhTxv&$_Q<96lGlZvFi_IQ6)U{Tb;GD~*`zf;G3-s!vx*TKj6jtdz3+zXzkv zGKEg%ciXt^B*VVDFTy{qJrOAX`pNyyt;*Sa@43V$ZVOv)d;g*M$MqifMHwQ?%H6h@ z|EPPh%;C}5dyBrVKA--f`^N>#59Uur*PO5Z;krlj&%=A`>ZUDAv2dSwM631YyTuB% zkAE+^C-VExpK|w`cb#m$yT9xHacO03_nie{k*fb0eoX(gc>j_6Q-Y)1Zbx!jMQ1hp z6|?JEFa9O6B0lLm?>-ahh&;`j=entan;wbRIMnU| znY%jMCR;XfareFd46)9&U;Y){EDz|9++`bGlPR-f*S|-%4{biFpIxQ;XLa@;WhucY zhVr}gAN%dhNv?|uHOh&5n8g(nQ5(wbSr&UwtT#KG|A}k-t{Lq6;z5QjF=xzOU6pd~ z;qGJirLI0P{JKE>*rt7QOP3X#E_?54axHQ1*9lTzdThT$M;^I9C1A4cLy(81Rd@Vn zc)3>0s8H;NZp5_cx>p*@K2JNj>4w(N{|r+CKeylaTXtM;+e4@G2RAJ!ox}UBOMk*n zkd8gtm&|(^&Q{l*JiR)8&DYPd!atvUBJzOtUmI?_28O=LoxEN6)tbxgOxAlkO^Om^ zyK-!={dtwDxjrId^@iA~a`9@0>C($(dmT>lY=~dF;^g8pKgu6(TD#6?_v($0-EM6E z9KJB?3$M>HF^LO3ivi8&Ok7=JxF$-z_x$ zaC39s=?{N9YqzfUPOEgUUp29GVy|+<$s_Oc)}88^DKI@|gN(zkjNVh1B7R)1KjOY> z%e2DjqAw3^wsO(lxklmX#{9fjw{z1r-Q-(zX!cG2QX}7~(@dv^{N0nO5}IkAudK6r z_x4vGSETftUW+fh_3zj0(D}3H9NzPA{m)wYQeTznhfMcQUw7-O&@rW12e%!&ks7e2 zoLeb1Eobfa{U>a<>KzwSdO9z9PeoJ**X{mhyA87Y4`14p3%%w;+A7$lXLXup-#w-2 zw=$z&&Ax0BUYL7n(YLj+-%swY+B5N}$fhGMJ#U+%{@807R~|U6(ziMK~peE)}gYu?;;yvJc)ck8XV_#1BX!mq)P>&|Yg3Hh}f)m;X3UP*F}G1cl|LXEV2EnOttpcjMYf!)%%4!dqaQC&Ch7Nx9Xt=c)ccQ;pXae zrSRF8C*Qb=w#ag`XWwo)(}Q(d5B7^zo=ooBAK3**d*02M_v&xi+ByC4x2{fiQNN9I z&1dCY-rBD_Ry5y?n=JoO^tnpfxA{v+zsc$6mTRjXZ7yqdx)IB?Qa>N?;4d#EZuG(;%$Nub8(>tpScPq`kHFHs)ZREt;>;AqrYtuV-c8^HZ zm3^7K>)$W^cIm{N)BY`nM<+chJpFlv-&)g&(UMkg)|3Xe99Sk@{ptPtg;O%;Ul-r` zx3hMOig%i&fBCwJAHCPK`N>4w{v*y1sALw0OMZy?XEWmJnyTZ^v`DCq9nMnxy=D`kz<%rZQ32&-v)@eN@-KYkrB9 z!O@AouI*X1aht`Lt)PX)9&ANSAXRH(Sx*_+k5kO7Ca%7u(`?w;6R z`?7ZV$$hWoSFXq1}7=8<+2UPS=ah^7+ruxvg;R{`m5be{3fHId1c{J$lu%uklv{HyvC08kgB_sy^M#`LA{&f9wK6xYXWp3R%m&RmxkoAmM3cK6R!FO{c8pEtHtT$>vB z@5}THpRc}{b@=y_ufMa!+e(X8g#O!T%kV91tzu5pwVJ;7A9LOP> zwY1S!8_fiR(>2BC|1%VqeTzCB@-uJUayvfHKdi=1Yjlm3re!~2|1L%J9Hn>4RLR9| zkuvWLvvVH4UU^ODb4R?Iwe+V?yTLo&<-WaiD!(}0ePYxZ;nr22#V#%z?!7+#Y4PF{ zhr;*nxijPON3K$~A6xfytvjrIA^vp7);GTTJiXhVo-#bO@XDr%tIpm@aku75IMaA6 zdaj>M-Q$4vl&Pg%DxvCWp=%6)K!_3 z3CHeb<`)#+4A$IPaoo!6?eCQVx6O7i=Nr6?o2IiVHFW1arJ0{XLPH+q7oDzqCH36n z=*OMB8-9dzrCyVfoF0BSL47UL#of1so_Or7jqlBPr8r~H;>l6AcV|s-S8h-ZIr$@M zvEC-9cEgr+B6oOaXM6B$a(gv%)f0(|D-!9Ik`8s2G36yIl0EKdxBa^qtzYjoJ-ApV zd#3uY_iLky=gIAIz2>HV&8X1&ws@+dUdyhh9lx?A6vT4MF4?{Nweefj^vEkyUmrh_ zaUx{jH?D<;-hP`kbCzZ3Jk0c zdbWSB)5WKmV&BqE-TTk5P+897+Vg7pZ8K)fpU>JKvH0!lFQ#3~JaxRILht^IGg-g3 zx9HTV>u)|T%T3BU)OJ4q=@WmoUpn))t=;$Vi=>#z$=06PMcXe{%Fpb5ow${I_U(jU zlIrH)tvxP$0pCrr+3|0Ah{K=7YK79reyv^o>giV1EysP5ugnPq@8q7uJ>!~<{(YyZ zJ46FO`?$?IE*0-8TM3$Nxa)JHb-&}KWyqHt*~CsuxF`PSRb)z=rBCm)uit979FO{a zc5dTq|L03Ai}QGEGcsdS%N_T_9>zFpaG-8XAW4YM{L4&Qbs z|Hm~&;e^z%R|~!@xUecm<7V`1L0`VL4BD;VKAie$$TexPp7izG*Z!G&53x-Bvs2G> zEmyahin#dgO;?_a2Az>E-?#O&l*;b%Yk#U=>dI8TP2SGDyI_yDkoe|*pGJ=L5FGm*JKYi&pjWweC-h`~=tLwj2U;F*?oR*PqobrM- zQv>B*MIO((nkbTFEx7u2?$&)Px0=?yzPGjWoJG}2d68Ww*L;8TXJ!7)fc*<*{pigM z%Dr^=>KcRN)9&neAMiQzbpNl5YYIHYb=LglP0BqJ^Xsfhy?NJ}n`Qg0uCB=xN}YJ< zx38Pm;;f(fms3{?C>`mp)~aQ{%eO}7#NBMAj@vhNk86GnUmX27`}dE_m0QHO?>-T# z>~m`BwcNeE3XJ8>{9TI^I_G4kTGw=X?T@(Cwc5n{g8IE|yGvX9*PoQ>o1E`);*#Q> z{Lq>z>D>oDDJW_kIgY_h>C=-e8&6{BGqGqjb@CyYEkpR;`b^ zFu|i`%K7l^+HqH>Wvb3*JG|-Y+Dt*Cr@_@*70>eIaA%u0h|Fy-Q6o{ zb+L2#PXA{p;UI2k*1s0*GzFLTG_9k1a({+JC|B+cQ~RSGZMVGS$;!0-eCK~%)@}Qe zWMA-~AuId1;J)axH@j}{Ti>;OWp?Ubx%F@N#_BSs&NPgPU7^#pY18aA{WYys5^MKP zdY_+qe65<{qSjM~^RwCtmnGdRh&2RyUtdAzDkVj-UW~7Oe>DGY+^dP;8|2!rxALiSWTQ3-t8@*8J@YW=@^Ih}Je6JlZ`JA)Yq|Ig5rqv3Mwtv#!wlO+h zsO+-M?(?NL*G2qn{T-sp!&Av{IQM$)?zO=)ik-Q0`EJI9oS!uPbE5Op+Ld)v8aBVr zx{~|q;{Eqac6ZztD?8s1ef#s09$(=}r*==jIi1;=^{RVPl&1=h{ps%^7xy$5DJrBs z+%A7^+rx7w%03)lf1^e_)MR_n_G5ap^|vkT^Gz#iD30T-le=}yvBvM4+M0$yPJ6u6BtQD-cp|4@0ER0X2!m?8{W*SowU2=k;n9!vfNi+FZ5cxT~=(A zT(tV^-fw~37Pn%qnwjgxz0xV^_*!AiE?F2i$8Hkp#Q3F%>DP|!)Gs%X?^S8-+ih+1 zH|pon`O|);Zu(ht`{Rm~-W2x$7ckA3Iw>CvStX?g; zExPdWrO9S7Gg3SDq91I)FV)0(B!7j1_5 zfmQ79uIWGbGp!B~x@M#6ILRnQhDz`V@K;d}O6e_;D1d17JVrOD-&ihjLR7M%2Ut1J7qhh}VB8+hz1 z5Bz7Clqn@P)n=An{=5v^`BPo^PX&Q?ov*yLZ=H8gGN&d=Yz*4cEj#^M7xD;Af!MOik}@*BR8c==GShyxkxlE{P@jHR}P(8uxakS z8Qom7!b0|RH*QVYu{tmJpPXn%n`(FNBk_&PiWB={-rO&RGR+31WYLE$8>@$W;E-g3Wg~UELZm_i}yIhh^3~H$9x6 zJwxz&$Z-*=r$^V=Cj1jgIhvPtz1}qAQe^((Pk$ooOeStI+{WFs@9U4r_g}A+eAMTg zGV5A!o&Ci%DZMJX%APa#9?Y%_krw#3*hjTj?%CtMcjvz>ndIYSa^n5w)?RK`iT>)d z-8Y^df2q84lg@Ng6-Uv~b02SSKXvca1pc?+tB$r7ok;WftgS3OHF34ihO4j5p7t{3 z7zQlhGV+uul6`0X;I5{5n2GDrKyt9!Y;UseATo#>JzZL;Hu-Fn8btIKuQ|G4~f zOU&+F0pG4I4wkR0zP`UV<5NVObn?3;47_*tpY`O^>R9$$-}|je@7Jg={(c%&Qb%{* z+_ZhNyQgTe(8lw*k8f zUl7aj{;PLi{w|l5crqQZ~b93sp`~A8U2LH zY{uDjK9);;%)1NUtw@>7J~4FWx^27T6IP_;TP~T{GuyuE>*D7#TBF|1-Om{GlD*nf zcgMc{Ya?Wrofc`VnELkbR^GK4%~LzR&uyqPUE(eCdQFa(WXK%%(1&llYbSoo z+0LN(iHB$5%_qE@)q*!&dl_)}Kf~6(wZHVQn=bM2pLac5DL&U#aOc&>&0pfzWu{a* zH5ywVPcHiwlHDb@JqiE5 znXmnQ|N3v%{W~`kefawkXOl~>4o{Y6-Lbz^Srq9m#Hq(#ftRK2KJg~`+M4W|>f1{> z@4Lmyxn>*qi7h#sU#q0@_`=hwekCu)HvPr*p*DN5nBx=#l*JihSckc}e z*`$4UYS^D^?>@E2=eq5>dT+wIE%C3eq{TeBR&aH8MBLTS0gkz8;w!gC9k|$i_qWrx z?_nI1Z0w4~JVQSp&A$-z+H|7x>T|9(FSp&FYBW+iQa2CbVYvpDpnWQv@O<`Zq*OV{s7 z-&-f5+^+HG#?*P?`_ul4%{$kkJ7eo_vwb1G%A452%-^lIoR%C}U|$kO_VN|P#kPxQ zOXftZv*dlhX_CMh!L=Jc^Um4IVQ}{O4wtwyYe8FV4y;uO{ajsJ(y-Zhv&C8YwDaNd z3wv6B$P_M{bct!kou?aDiS?_V&2OIlGj(4UxG`YzX5lfR#PYZQK73fyH<9ZNXg;ps zrOzjUZAmlUKGM__`Jn5+Ht_Z7-MhAZi!MK*(9d$o_peIg=I>utBnrzGC)Y)w`F}#Mn&AQ8@Hvabv>orMJBQwSoh7w^V`=&UW@Hqr@lR1^##;J zx?s`zEueJ!{Hu8g0VbCVJ~ulioses}Tn`K_C+?`C;?4P>1>>-w7HK8s0bcWr;m z9lXXT`NZ2)GgFxs&5}a(EpPs;RJO8-UUcAnUFoyFBQ;a^*lYDZ>$5Rk_(S%5s*2K$ z#n1SoW-h(5>g3TFGrQGM%RXzoxU{Ex>bsrQe?#7;-kX^6z5o02_HwbwkwG3Wde<-* zz1?cI*}d~q*@Vx9cE2LF8unBeoc_G%np}VAyREBkEW65a+prc4TC}ceTUg!dvfTN(oLoox zD(^hq`*z7;ffbGB7J(~8>N9rCm;NU*spcB*Ip(VSwW%xmdw<8z)z(_|XlbZ>TDM!y zk*F_A9C@#Pjt9w@1}{S>zh8U zi_z9p$&}uE_O;TH?X@ZC6ZUT07ptK;^8?d?)M!t;TbwGFtoTlws&46YliB^eY-Y=) z*xnmYkDpj@R*_4`d`Ez#+&f$A)iJ4)b=K|vvt`2D8)u%}pE3VkCNYbJe`&s7u()%L z@`2n9CyR8W4jA4}lk=ZrZQH4kDCd0tu19J4i3SGivJY#brT@KV`@Pce`tEIJpUs@> z@9p(Dvf%2nx{2l6Zgo`a&(>QUu|K~w;nCT*D@=A2;7 zoHzBSPrh3zaeQsWwI8)GUPEAVdct7Ljblqzo77KqAvvd7+!TUz8%CELtO7cdcMQJnNf9JYBX-DDf z)75cHGt~lEqK=y7zWr0Z!sm}!&h1Tq?33bivo7777kK~GlGv1F5Aaac>P?H)TvV^? zunXADBI1C>?Wg`TM0l{-y}PQiBHm_W_J07etdoWRPL7Z?Dp$Q zW@j5r|1)T{8LXAIPra?3`(8A0iPLd4$DC~&ULIPUo_b%B_4c9Zw=xXSuX{eBJhT3% zIscZZh4q$`9+w!sldgMf(Pk64|GQ!F<1Amzu%m@H>mCL*sg;x*KIc6#cKf^K6P#Q& zDTdv@`918YpR4aG>4vpk1}CHLAI{tNiaqrC)JV}!HJHSl-`<=noLygBLh=nxZVy63 zUH69k%d@!U@A1NN<(^C2w?Ttxd%wGTq4t4%b2nv+Hhg3I&#-H2n8d^OpPQELp6X_v z61+RuB=GoZBkR)pd($o)y?JwcQ+L$#vx-~)e%W^`Qg~+Ohc=5%F@BbHrJPrnZPHFw zkDc1L%3y}b;rzPTzh8`cjekA*Zog4~TT5roam{yMFWG69PB?kETe>b}`?goDzcStt zI%H(uGD{ih)wbWlR6~!seqSlVx@p?u>x#(%XGGnW-B5SD*0)LH=}9KD@O!_rjTmk) zFfWjcFSUDhqDSY%-)yCc`@Urto~RAoX0p%h^!;PA&o0=zqh#URwPz}?e*3ll=asNt zC6BXLg}(Hr-koy#z5QEfcdk{_Pp5vH6`%Pja>mmuN>8)ceri6b>3J!o zN12_jJ~U_H#jjG!u70}T9=FeQTExa)-$jmnVYlBbneBOH&C+(Ag;W17Uh0r?Wt)|q z=84_+_J3Uzs?=-z)Gf?D-D_ri*z|u_Kbn0ve;8%AaZCB;Wp~esneX`Xl6eiYM!dFC z@7ryEG(|;JEb~rFYn!h9T2{MdcT&cu+`KJ%6<@ah3S)6y9V=U*bzgV-_iH{Tv2jHl zr;-oz-hXjr1&j4cISGxuZ}Erzb+s;ddHF?fCcA`o%OWWB}uYS0}`PyMi z-nSz=h4kaYA4gerr0Husxz=BvwnXs61I|#RI1k~!DI{aeCL-@ml<%AMm<&piL_ejPUFdHcGFr4u{9_RR77 zcJ!u)_d>m$Np`c2aj?#o-O|5%-=bu4sp>dl#Q*W$SHx`LO8Z4(e^t)Y&AyweRBbt!pL+ZH{kUGs!v75M zN*;So<@?-N_W61KrhBK32aBziF|E!$_Mf3QNzjZfG;bBZ7cbYcL%maXZWOuj>H^b_ z_r%>#kWBSa0V(v{A9z{%LgB)|xAKm-kGF+S>Ol{K(Qf_dC`YdQT9Yznan4bh`1s zxG66aLOb@pWLst%^`9YqZ~neHj~1(3ePqRTGF0&0(m7>o!vx)wH%jf@c02mj?BMWs zdtXP)dECAVG{rjWeBJp|)BaB7{>8bzg~Zw9`%NopeN_8+q< zO3wwZ(TTYHkSF79?Zetz+D$2^1m~}0{@bcj7SwsVZg#$_OQt~D*$w+HzyHNL?fQ|m zc}HgcXLy&pw@T%u``K0Rtr8tz2`J>s-%I|C{;v-d)?R8~?pQUS{oIk8~NZyF+>Wtf_wN0t{A5_nnUw zv+)&8d&FS9ICph+-`>_&x-q9*8#cQwZ|8EmYq3syQuC(noxA1Vt-^i}&(&Uek4x!S zJ0%xA_3rMQDlAfd%B1)|gHUt-yIWs6nY=iAWu{LsH)_5c_p1E5tI%q#%F`dS|AoF( zs!pG#@@}fQ(!8`1&~XT5t;fC2>~fm1+)`aBSnrivShTT-{q9Y_>(@=`Qt38J3G<$N zW=GuSNhzJCIj^g~)!uXccA;0d_{x`st0!418@@K}km$>)UVmw}rIL_dUDk8md-=N- zpJqLAyXvv*o!xswO(vd|X|l^^dwBnJ@ZrU$HZ92!wu$b1d1&JV+1|ZbQtopjTCA>h zY&bn%&g_qt#OYlxHf4SLwtZK9?A636#m`o(d%NSz*+bXft?A}{ar1h$ob30tqNXP{ zovpj(ef)cVK>bnWCn={HD#KTNShL`oYfoc}kj%D-*?sb1^DbZKu9J-J3i)=F#f6n)Uk@ z{d&9o6!;pDa|zErt#OtV)vf-1iA6Cd<(kL$2V0(bF7h~LR=X{`yE|uvm@4-=SFPE3 z<)D?7zH290OklM-e(H8b$$sZ}t<~CDTXHtKOqPGk^wI8C#ibwIQUA`X?|#vr>##09 zc8Ru0itN?x^{v`E7u~1K+8VB2x$?zWaJ{&qm*#Ug50wyADmim325* z)HQtLHorUmt2X<|aJ>8E^jlY1ROETsQNay*;$>Uw&8J((%kaKT4%~NKDpxi<=J9`q z?A(`s&dkf7Up{S-RJ+vSRMm=$*W6B~9nW|j?6>WZbn5%HvK!Bw(_1my*LF*#pUmy{ zvgzjvvy1+{3)v(w$L)^1Y}=e|6D5vz<+JTn?oD0eFL04lWKlBRApLGN&W&R?RwcdjxM9P7T`i8Yx9+&t z>Mrd$7H*q&$Km&Dfk%#Cr#0Jj&J@3zdumZm{+gg0>jktm9#)F)4f|TqF2Am_CiCjk z&cMRY(=FZ?ELu8I<;1Fm)=_t_yq)FJee~X@ywnNDPT$FTZ<6tC-|D>hQq_m`mZx{0 zjTEg-tH}Cz`_Pw75_gn~_F40KOPy?~j@5cuKa1;3K1oheabo)yTiblqdsW!HN54Dne&y=8 z!x_z5Qx>wr-O%Ib%*9*xZkae$b27`$I8kZNq+@Oh`5(SrRx50~CUHIAn(tNZ(_Z13 z_m`UFA1SXtl^m-W_wkdb;BBu}hOX})`PWaZozikx_)K@xnd>LGLUZMGu7;W}*4bA5 z)^XNt!Qk|F-Ql}t8D@)z|H%J&(Ly=)?oI!g)?P_5iK!n1yHj`R=KW{bx3$PsraN`( z``xL>wjABG*ke^!mreAc{|utaT8q56gcYQt<;0h4>*rEht+xie7M80h`TFtOp1Xt_ z?k*`fwU@6(*HfhMsEW22&$b-CkGXT#ZJ8D#v3S8Z)Bg-sky`_^*Me5)NAKIJWO44b zTH1HU9am-^7HRSp3!ZjOcAd%cXP=Dw*Xlj|p8VtT$dO_}Vj=o9I; zGNR??rHSt=!(z*Fx7^#{k<@9Ba#a7;_e*-KESXj-ocg;yam9yT;jpKd`%ZtWoieNA z@x`WnWqrS+@5h@892K!l-#J}g{(}CtsmDc44&1K%yfmP5v+VoS=#WPJqD8;2?&)%i zOm=U$$Gdsy$|n_<-st9ayPsKhmHYbf6W|O?uX}vfN|_ulip_d@|1VdqctOLCc<{9q zjx|q~CFgziervM!tMAKM+B>$r46F`Y_xs7+y>T8vu?dEjg$?^+?6rhEcHIp9?0R^5 z-Jh#Qt1ZKv#LsFa@8S1PWw)|=)>ZiIp55N9s{}mOB^}(Cx3j?7>dME}0;iQlYoqps zi~Z5qru%pL&&;hk&nxDB-D>rCp5K!7PTR8kw{4tY^kmJF1y673=5tMXs^t-y9CkqV zg6$Sg{ zZ;7y2zZ3i0uSX?r{CrBZ#{FrO$2n(iZKb{IvO{JayQ%gux|s3xl55#+YHD|*KlSI< z+)3ZK`Sgcx^=mUOZrXWeTlo9`40%&(o-CbZBkgfS`{RzARYrfFDnGD!kkh|DVeL+@ zoW()^dXlgIdcP#x*IQ#^w_3D+uTy8i$5Sc4_iN?G6)uQ9^8L=`<7!zw%J%|`OQVC& zmhDTuq#HH=bMT>OG1B5EG;SRJ`||Bsm7R~jx_eCuT5?h;a&gAgwy;OiOH=me!Hfx`q!Qdz0Gp3X3l*ovd6!#%6=AdpF5>!TkKbX`=>Z=iv3;PXDSn26v_Sf z>e|%FXU|=BV|cdTIq2Bak5gT5=xfJyH>Pd~{l=L8(@_BDDev}P_UZDA>>d6coPJe& zdEK`)o(fS7vd_Ov3-J6}U#fmJN#!~*TTDf^c?QlhNu7A^vDmhAa=YdxowsQHl)Q1j zzV=4Yz2P6<=S@+sl`N?gU31VPYRPmH7jNEod+N2UYG>Rp>9{L`*xou0sX_dT{ zv(`Db_d2$fPn^R3c8JLNC16Mf5M**u9-XAPBm@b#cAMrP3!Mg+iB<4m~BtV-K%*2nu)JoBzI2Qo8SA|jKm)l z9-HP8^tShA3wUMiFD9SJn^R}zJj`LgALPYx?~Z7plE`73W1zdguY9gN@wOT@z(pgrB*?(IB#~w)QhE?-lZ;%-L8N9!^h=U z4}b31IOX-ba*w_Hxvu?rWVBJQGIG0r`tn-IsIZkbeFz>*B|Y$2dM~*6tH| z#IfeH%lcK`^Z49OX(a8rcx16UZ_~S9JESg(2P?0h@#pRKs6U6kuQ}GIBUkMrM^OtT{Lbv#`hB)F^R@ZsJ&K;)d$y!MY=-We-BrI|UtF$d z|N4oi_)OoIvqkRJy!{q^6MC6;?vDE(*Ep#iIJNew<4ebdAvXdyZ8uYzB^$*M&i(e` z)K^KOs%|mn>$k7{llg8%(dnN>G1*a~VmTgq`rA`ip3_=7!|Z)+_B0dEviEC$e7_WB z@%7g6Jod7O6=5p+>3>#dU0XkE_Lh&6xWhKyIrU@8?%5wj+cb-qHh)dfT(;?1{pm|{ zb+|T)?^U>Re0BVr?`ywbo)eNXYmd8Qq}C$aE1UbSt~#V~q)a({+wJVy;H<2_*Y{=% z&nfsCWT#m=Ir9C@pF#IGEv$Dm{U~*5$?c`PS4SlF>+USPw-9_n$KoK3e-}a5cWZ_w zb_y62E&6@@y8i^8H#gI-&7EaZGuztS+0V5v?QPwb24^{srJ~>0G45Y~{fn_o=3FyaJA<$jqb8bDTUdW(=B=r zBsUxGJl=mdSZ|xpkxI4i<-dYditM(RNbhHIw9yt`DwxTX&1_!yGCwrMWaGh^;j0<1 zHOupVXcg5llM%%3%UoR_oA|fLuJN!lS`YPHZ774%Uqf@b(6*YTT>b z!)Gr&zpC47r-w?)msiaRvVSTrc`Ypz)IKSZJk@Q3_VJ1%Yd)PUSp0C!w2a=Ajfix!1MQdSj${lFP)|{?@O%uyV;}?PGR3{xdA^%``Z=)>Bb@_Xfp%r;29Y zV9vS0)9?Id<>HBvsy(LXHkQ@v3p=r1>)fj3bDC-UVLh?`46{j?I?$38dA@#v?!4a% zw)0Ne^ib=bZrYByr|(a1pL{pS5L7#T_;vO|z$JNCU#ZY+gZ?(#FS!Y~j(Tq{fBG{l z>c`fqy=j}PuAP>9_bX%8P0ekmj+_;|Z@5`6dhJ6u^+!52-ES96KLVaQ=zsRh=40Ew zKeI#rGfeB+veA9dD&y1Dda|~m>$bK_=RT~i*4&ahOKql~nPlO+hf!v$9L}nwxrtft z_FsL~ucS3CwKQ5e`Dp&#pu<9Y7boq0Tm5(bastx~%0*kI*_qt`DEMlv>YUW0RRwF# zP2_q9y;Eu1?Z`FToL6jE_AU6X&*aq9-qcY0d?`=SDBs&BPHVk;`)f~@r1II)>37QZ z?*pAU@Z8|NMfSgV_q)NKsvmmuQ(te}>aww8*@oPW+ayDDWe=U0897@!_x&gST%C_Ci~o2wEBLg{QGdBW64)v8%q}K-Mv1_{zK4j|BJ2;J65XnuYbG5 z>X@QsVDGh!eG-fN^E`|;*KTp_QtMA$Y`*E%+~*nhVq(LS)AxQWU9rSS(x+zO*_WR~ zYo1&)eSiFy={(Id%h#twZ4^AFBN@8wuH#EzEsu-V+_I5dSu!3^Woqn>Umm}$drD|o z(vkJ+<{3+QOXnW^{j#S?_rfES%_&B*RuvbLS^OT^#<}aCYhBoN>ZXEaUhUQ;Tc`h1 z$gkQvb@f60KB;rpY_Eha>I*e&*&M%oU)O1#p!d`7olgDRe${82^u><7hnkampM7=p zXN&StcI7y8%IxcUcd_aP`)<#v2s^On%#rB67+1BmLMqYkG;ZV{`@UBB>=M_>3@fK! zll^z9Orv+othbA&uJW16ZKtyRJ>T_hn*@)|_BKi1&E|2?YPH+_+wNvgc{MB3 zaHqrdoA)mtns%x+G)LrjepP~Ek2OzJ?9RGS)kS@3ljlzQeLq(#sg=Rp`PN>OT{C)) zc4wE}sol1AqFev!tFKw#XGibPT7OIcHb}S>PWtK^JMGyJ^mNJ2fu4~lh|Y*b$x1>*>SmPTUUy+b_zEwpHQ8#%5CNZx6OH>0*p1c zr_24W3*|iM*^&40{eI_2!zJ?-!u~V3a_JtP&AUZVT-}D1t-vtvl0o9PfZW-&rPI!t zJ$@2#A@;_NzzzFsa-&`M^c~1sZkq60qS9-g^69DD__j9jzJKRQMAQ7(>f-!GA2!eb z(c4r1?LWi%UDHdiy*hDz>W}WYYinE{MQ^KIG+Xa=UCGXutR+41=cV7x?z%tw9FJdg z{kOH>FV!EBO5IPxOp`^fKtNQs*pDKfm1Vwwlj=9&t$7cp~$PUgu72 zoXF$1itFK?wYT!*ZaE#Y&X($@1LUj#$xg-QMtwLGnwP-d>8zk68faib`@Lrz0>Vp*Q3*= zbKh?@>)Y&hY2~rQdUm3VU)?eGlq>@k_D}uNd5*@0ow)W$|89^gw5b1gaJ66Y;p-l| zP8|7l%ul^K>CF<=3)5pZ%KHkxHeF>cSQ#zi_jlWxmWx>*)g!mvw!PY@@O8&)x1Lt- z_X(?H^zLV_P3*mSGxFzwBmCiUB9o5Ky4!X0?EBX%xzguU6ei?P_-!|3d-!D5ee3Mf zR(qWbU2?GS=E;zU=cu^yL>PgQ?m)O*YPeQ?%^*^{q-sjlBSi^S7o)*e{ZD)u$_=N7lg zb1!f8eRct|Ve1zk>Lp3HFJ+6aeZ&5FZRm6vgZ~U>A=irp`#x#j4BFx`YqPT4?(1uA zN&L1p`w*BN^mB{Z{{1I5sT-_z=LuZ<9aPS&Iw_@aHtx`0t@BbsmhrjAZeKp#WSD7s zJAdO!ah9BrW%pL!^_2(>(VcgyGU}#vO73sAjh4sxLzN#*k2Ib4cm7n}-&*3(B_+?U z23K3ZeZN;U;*!acp787cu1@^5Y9G^;Y#AZf)7tjVVOndxr3%R@n9J|E^m9tLoJ8u+ z%e_&`RxRn`JDLCPn|9+`eDJ-_R8RBGl6=8Icf|tL&C1vGwjE%QWuLg{&1SX_`=9%p zw)sd@bcb22UwrlV`YMMItp%GJ>yJ%-v3pBKYR_EX{|sAf-Phg8luPwgs%>Els=u@> zXwAhJN1UI1GnUZ;S>#d$&{G(=bo|~eZ6)b{?E|&^>erPsspld z&U#4}x3Bt2UN`esTFGNx`2J?V;q_ME58U4O_~wsmZ3k!eGo%vGbKYd;t3Sf4#U`_rPRBo)iVciGYHkN+OQeZA3s z=n6ydU8w&VTy@^=JiUGTiAyTy*4;THow>|q=2hvL&V@^lWwI%qPJ5tv{khPiJBN+; zIw>o^I?i%BRZ!%T3%`uil^3ct(ld)5d$fgX>{&gXtJKP6iMhdVivPV}ZZ?>MdCR604(4#$zjW_jN^0eN&b5cz7u`Qi8&o%`ePnqVsZ&k!s&|05p z*0{*H;NNenj+-63w)I!&Jh#N^wuQJm>I@C+2>Bahe-ydy%x1Nfp=&V>gvBCM+mrw30j?B5+!eY0*(tNl3 z+l}qF&xy^+esq-W_xs4YQyV9#)^uszpV2LUtZlQ7ecAG!%^ZO@#rLkNjP1+Xx#&NG zfqbtvr(jWyh8<_p%U8=pu8mgf=6${IHc!QuH9i|PcC{Ay&ejtN`LgU=P^ZM2^5f~X z98dL(9=7^wZ@k7J8Gf}oD3j@w`KILSJ3@}xyqDRv_c`x$dH#j(*2sFtx6k4HHmkxf zNNJmLwUpt~6C133f0cjz#Gjij>a*#_v}2GhVCy=KPMx~G@4ZyoHMO-NX4Thjzx$-W z<*#hsb`gK?%~QhG>u?wS&QSO=u6?_>CFx;T#ID}0ecGp|MIAkM@1E#B-7S44m*%E1+&=3*b7iWq z=al5e{?y;=r+?SVep@!g8XizYpf%zHmYuU|ds%Cw($CC6+%kNKs( zv)(dUBHI0!jp1YG{#MPat3kU5!YlZtxGt9|ry0Hr={v z<%26msn@j(`&g&`tX}`~>PNOWXB^`!3tvYalvKyPoT9MR@k1-EpF~KCHXmTDC_UDj53h zN0`%}HM_(2M9q=A5P14)<}Ht_r?Yi(Pfy>6uG+JFd$e}cY>8_sIom_)w##jqc}&&y zaLM|s-!GfpUB0Vdo-0`7(hA;bvUa~btFvz@&%V8Fo@~voZ819j{!%~pOYH9YyC*B& zY~xJdJB#MN-v%?j^uyX0NA@k3pSb2pXNvi&{jc3#u)PS~^y%-Ge>r--wcUr`uFkIr z4CzS=S+`yGwS29D?1aP9Ux(y~q)R#e%G&tDYmc-Q;V^{=YZ&73_t3*@CP z`D~cxx#U`s+!6T~mrW+z^SA8eP2B5l5%E;$*tN;8Zr!yFUGsD2HJzRprE~P(Es=gW zT`)KG!tL*wkLT%JnA5iI;-ebvFePi#8SiUTw`xz+{q4Q>&eQE&S53-e!`3I){R>r^ z8vEkI-GIIBPd(SP*9NRC$(H_`6uNACVTdacI9!fZd~#y<5iqd+QaRw5~*4d zrOx$>lb^)>p5<}uSl%y#Qz08(E&IxL_46IG4@)k1E6(g~l-a7=A+>eql1X7bZ4Vpw zx|{yIvv%*aKd*F)6|WT>&ULmn5}n>4lVzx_c)m?K`AbL{MaF#xtLN(!#@*ZzeNklZcT*Yfgp>r<7q8=tQ%{#nz7oiEhdcLMuX&9-N4E!s3W`FGz3Y!X*TBBMe^>nAnMJn!#kd9kAUEe)--mR-gPVv8=9dh}} z4Cf=IE0*ur(srPhjFu6zLsQ9S0=n*Y*3{n|l?t;fFT1d4=wDc3JN%)t@8U|IPkrB!STOb)K87CLgD ztBiedTAHd~i`=dGkrNLqb|@!p<=wse%c@xo>u+)!Kk8M_m)SnCaIvAYdg0-8@7~tO zrx>&r?B-pzLH5R)KUcP^_RiRK{*}etrobtut5Q1`hP*Pkuw(6`2f|r%`JT>fJZQE` zCUT|=i&escyHA2QhWR`;;}+a|FKk12kV3=u*m8^GyobK7yRqz%{_?2Z^MfZIR_vGG zQNy;aZ0+GXhmd*8ba`(wCOo~%Q5xNOKd><%c;n;LX(jU`n}r!Wz8Rfi-1hx((Hr^H z%+%NyYaSOX%ZZ7KnTL8_6X%*7pzE|&BS|Bu#I|qK2k#;YbJobOJJi7bY*t*)wKRWw z=_MvVWs{9wmrDB{JmC7epjLl|y57>R=E%(bI_DOM1@l?&#es)3w=rUK@x76!K(d zrOh#AVUtu93(>pFw=qpf;h9wHtk=R3!KdCWeSczw0mEzwy%HV$HJozO+;?Tmc~pu- zWcmH-ak~??N-Dp{$6sOFjc~s|UeSge%4b*a`@QDW8hZ}Ea}BXS4QD8%-e%y<`nf~% znhbZg_Sv3d9=7M5%Zx+I_nf{bU#fcQ;AE>a6c0lBz~)M9_SBT z>9??gi^pvGC*i8reUkI1rw6ZLovR?bc-=A1J+Cd^TKs3Y7yGJAq&0rk>m#ZSk(ZZ8 zg`Ht$U!1!-x9n=zqT-N4-l1kOJU1Ov=9k?#F+6^OujU9uROwV5&TH}<^njw4p^7Um2 z)9aWWZyScqY*_YoYJP3LT%Ni9M@ufJ^;b(DmH4ckw(3`~M_6LG;!?KRhZClsaenb& zmGu|a$~!E!yAR9BzK*+W?O>{D5&g1uDW_@Gs~hDKzsfsvgH&cbT7NEo&CeyQW(C6i zQ>5#@>dX)p+j{rv9naadPZYoHm30xl&hL8R>-DHUj{b_8pz9(qc{?d7y9_gPk zsrhq1>eKYJFV|l0EBfiMgyq({ObuHs8dd)A!M`D(mZ zV0zK^POh)bz3;E7)r;Ic_ABdKp`3V0T)5n}u8NqR#g&am3yrInw`A7detb>u1Mj{( z-3Qsd-tT#xH}@@$NsRWo zyrfNT8Vpf;m&ybybbHqZteC6%+dXx4+@H9uJKUeFNVHyRqyOmX#irGYzDZv;hGse~ zsGJynge&lX*w?t=(m7rpQ5STk=U#4|{(bMYy>FW0s^X2Nd{iwAf4OUWd_;s;2b+L~ zdu{FtKL))5@4ZtqFHHTm%lEZn!_)WDYnm@@%nB&`G^4`l^{Tyxe%%+)dZqDNJ@)gm$)rA>SF&2Pm`-2WkL(XKT~a0b8plhO;hs)5~Ct*0(< zy?VjQT#)VFc`b&UtNI#e=?3+jW0kuZxJL89+jl+jM!SSdZv?1>trwQR@^nh#UDiF) zGEz$ouKiGJ*e$a>ce&j~k=c$lvXf4qcmL0D{)D}T*4I`0mpqhjF^|4`{rZsy)~y@D z)~{2#yDxIniyN`!$Ll|wV$W(=lgoH{zx2Fw-_s0_UX88)YVC-*e)Qf4A7%|E{oF{?4Os_B-h*-Q~O@h3}jFRr^JM&cE1i z{7e7LzwXcIoI}jQj(M&3)CYlk2QsXNt=-eEdOBwCUN`aOu9@u^kTr*E-=4dF(;rrz z>u0X}F5@$kEw69x<28;^3lm%OD&#+{b>FCI;}dw=WWoM55_8_XVXWUQ9sNR9bZ+>J zFO%A{&aC>huKV8Esvj#`S2aaBb-kOo{HRofw1;W9g-1^Q2A};V-=_*K+O;*K|Ktku z4QrS4J$LwVBSG{&^S?Jdrm2%6Ti5Juo)nYCkyzrgY=7{f+gXKDi+ih1FLhnGbjfCc zFh7q~{J*OS;w7xM3BERWE> z;l0T#a$?zSXQMB_y~T9emb|%ZSI)RwWHX1=uIuZ6F#HPJ`g-aw#}~e8H5)^p8tV9U zr`VM_+mfvFuD38)d|vgE z*H3E8fu_G6KZ+JC?2>o?J7v50xxI^4uVy~=`mx-{-7k(SIF_wm(DL$>)ZDwbzW!&( z{m=03^fE!-*z6_w{~1bRjaFs7ueA~RP}z2EPNl_v2FBLKYo_LhR~Vo7o}sj2&1`4! zJ^JC1ES)aL zw>TuMd%U?6#9{$~)U*_{_2qsyt`}$sVg{0@sEk`ZR z{%4q8!aBQpkweuPi<4cO%cS1(8imZg+_-z=i?jEy73T_EPd+T)6QH!;F?+Fv`KnWzOtN+M)6AW>dgFDix)FZ1TR*snY88K zM$3c)OK0{!dEa4GoVw6=)=AH!c3dZZ#E{Itk8R%}FeBLV(ek}(Vo%RM7Tu+AMDO6cN7*0x*?!sXe7)+W)%``+ zrkwg(CVk&uAn5G__VpFV1m0Ohh4|V0#DhW){0KX^J^AAy0cdBRq8AA zj;~L24TAbatSasvEPZ!ZJm-Dg{D^q(V27=G4dKzd8`EFf%FcP58twMW%jCtvx!HBO z`}nMsHf_<{S|Ztaa!TH2z3wSj?TR`UIv8mmY`V8tFV7@*Tf)ikd4I1cid`*VZJ+e! zta;b{HZ_L_EcrRX^CE7)c%h@0;>#EMRP2_?#n7^t)%P!@$8j$7V04@mroH&lOufoR z);I5G=DA!}(!6_LfUjIl>gAr`HK%l}&K9lS_;O!+RbSy6o^$g~@tr-l)9<2GS;qRB z?K`e1R7LUn?zZ~cE6n!scxlL+?bfO97aKXQed%5Oc!!t6SG~ApTjy;L?RYhzqUqZ9 zXSdHc-JGHHTJ_7?XQIoLkI37r?pAPgaq?`|t9gCNRAI09ZpU)p_bWSGbynt-TI_n7 z(ev4beRl8GzCZ5`j()y!e!Xer+qzA&mz)k|7j2&VS@zg{2Mg!xiCDV{-2A%7qCEjlZ`k9W z$NHRM(Nvb~w`MzcU1Ns6kjRR2EQc4q7oK`0_x977t9AFh(m2z3Zbq=Ve||^O&sXW! zXRZ0RKeGMa-s}%X%z5*yts~lIU7HuN$$0AulWSi-AKh5l%Ak1Yp7uHWmkVaKZ~MJ! z*Sf~N3%+(Po%Q1Ro|xF4a%ESo-DOuTcJ7ReUE$YmQhwFziGSR-;{uxOQ{0cdYxZf~ zcj0PF^@78S*;}?cv$wjs>0Ev99CJj*)=mHQ>-9;+X$$yf*JYnye@*QL?>*l%?ad*l z8!xg-UOz8jeE6_HgzS;tUd{ZdPAse&*iF9HozmOGBW2^GI-bPg{?A&B@E*>EHM9mR#jX+^^UFa*N7i?zg+iF=P!P6d#%Z% z8Lv2;q>ny6kiDzw_=`(yItv-rCW~JRZ{@gR{3&m3>yxEZv+F%<{_fT}5Lh~A_oK&$ ze@BZPv|6_6{R~s~4Z-XC^?n>*{-1%VR5kBco=Iawn=rfnrG?Y31|6Gc>wG`pTwjWE zsPj^B_ou)7e?FZ5;n4g0OTQg?+o>$?r@cJ$g_4VO@EW&?U0Y$RtIjd-8=tH!e;@8-DYE{m-|ltXRyBRYd$4YB=gD2B=r|Z zmKD;gN{qjrh@`$Ei%4?IF|Mc~;*{4jpOg@DK-MaPT`85gl zHO5bkU+XYllKA|ep*8d=t8c^ZPyEl12z)DAagR^g^tE(&ZEU=qSnz}9oF(6;L@k?= zw)H;)li2dQ^o7TnZ~SL?a(UH<%9MIJzMrRb7fm{S>hR{9))DcaKTo`Hu*~3n$87(d z;){cxR*Bmc)jaum^7G{9>gW9D%(omUF1taC+1LG7aJi&;^#rla&lMMKe8ux)T8+1? zquSAQYP(n1V5-@d^>?s4!S&@8i@2rdv4xPn+tO2C^lF|QGZP7$yFPj5=gH4)jNYd1 z;Jl`KKPI#3+LFVop69MhJO9|8C+x*v-l(doZ!;R7d0$()I)23qqm$W8FAP^k_)S*3 z9lugD_02Z+aQ`jlM!K28Usca)omG|$J;Lsszu1?@MX8J_eCL0L8)C~3u&!bISRgF@ zW75$q+qTJn>XWy(zgkg{U-gl3(n7u~Prgo<%Vj8c{Z)}KR<_pb)3d*deBAR}G+&qZ z?f4ks66e*_`!=F7!OE+}%KY|{fA8!0pM9ITW~JO5)spiUdrj0Q=k8zm?S4{Fs$z@b z!s*)*J6jZV4D&9W`^U9CYE>A4oDj&&fk-v7vgtd z%e`OsjCVE%Hbj?ZvAcVV`?GK`M;hPCXg%!^6d1LrceX#f!_h6w^+F#XaC@!&bZlW$ z&kaSkW50d*95r-RChRQfOrB8k)ka70&l#)Ute2nKul<}k=xUmcD=Zx9`%U z?traK{~pL*T=;#jY(lVD$A<@7>Mkw2dEkchgvI^&%c2{6W<{@h_4T@;7Hh!_gQVSG z^>i7WCq_sexRzfc&{?wJ+ONfKwUR~a*9UVKKD+DXeOou@+{M^g;-^H~1hSW0J!{Ri zLi@JMo5}7UdyJHCZ|PjC^;^yR`IaQJ>3mVSo9!;Wo!wnwm2I_GEu$<;YteyEuMN_E z1}UxFdola9j#Ial@A1p~EDvZnpSsW(YW2~mVZ&NgudAF_`y=?GOBm!Wa)Ou|-utDU ze{7i{G^Kmdx5rEDZ$4?8bu&Ld_v_3sX|c=E`h z51w5oespW?eO8UPeKVB5_Z?T9SEf$7j~jIX%vTXVU6nt4Q5Bd?-sA+sRY zi<5iO7zD0xAK&$#;p;(B*VDJM_q?lre@nG=x0Y?k+n=hNZ#J!5WA&e*tS#0^-Om2T z+lTv0f2YSyk27OT*~XXAp>T=s^}%j!_P4Q~{VSdJ+q}5R8dVE$m|YcQNxn!;+Y=RlBR^iM$LHxFIyrTII~8YoVWC{W=iZow-dUu#fNY z1677+ziKD8?bz_HgF)g^@15*rSGRFHCSR^dOv&D|TSxP{i~!ftO6l9LZ!va@j-HYE)&oOXo>eOkEP@!@pdtySu;98;Iv zc*A@>qFqRJRg_}t(%=aSKMqMsy?L9FKb9s5KD3u`+5KIPkE(`fq2sWnVZ z>Rwfm)Cwtv7Yn@%^1giEk=LZXfNxoGl&!VagFRc{!6SJWqOdEi*Nm+xMH;<_H@rez@< zIZJoAzm|KvB1*J$_ExhsM>b`6X&tY8bM?A_*qtS}Zf%ZxEH;I4ZN@s)UB~m3r)~FK zw&kIqMY4e1hSKYO-}%@4J7N7fJjQRHw&qqd<;tq#T2~8A>Lq@#8dkcd*3Ep&+0wg3 z>fOTW(=xAn8Xc~A(SI%>)LQ?Ilg|ayBs1PziygC*&TW}h+OAhVv%9t-PJHoNf!-wz zB7xJZm<~PI#l&~=oeRh3vNbpVq(9iKn-i4km;3VAZs9vR9BT_~>29{1bKRpX56sngh^p8zxXA! z&%~rIZfm-~B%p_TYb;CJl-qp0x1R*RmAw$Yp?)dHg0i(=6m8VR_wRiCCuZVCX3vSA z`8-z5cV1F$$LG-WHde5|`i0%2{$8m$*Ed~$XZ%BUX0vCxY^6Xq-%U5u^qJ}V`@dKV zGQ{4x9DO#tTj;^_YaF6C<*g=L%U`>izxcF|gL;R=_4k{<_HErUHN|_qKhLhFp2(C@Ug+RrPc-v0|t)+k$_!JoP+pjs*T`T?Os+OxStUmOh65hyI3 zb#2RkhGv&v6QZ9z=;_RD_nkKBQ}Q2epO+c>Z1Ep`E{rI; z!st~sSN(&vfvNn7ZJ`@3oOWy96rDa-`dHLix6fvWHe?oMsJaSTFLAQUJ?^@sHgRjg zwFh^1h6^@au?qES&DQRlXYcX*s6@)G-tUYhKg?Oz?E1Frk>IPFR!ffB{>`8NpF#bS z-Dhc@?XHVz6RkQ|R^(pa-Jiw~vBRPG^Xs_EwwVV`ESTxod42cFYr@j({?GQ#J<@pN z!Q40ZfBZUrPjKz7VBg3Wk85taFZB?V{Pz0nxu;8Aoi7Oa&b~Ek<)4@d;l|I_Uh}GH ztKGKPBr@i~VWt@xP67*BS#M|it%`Db-@!-((ag*gM@9l~La=a>QAC?z578EM{|sD|YNn zK4Hqpb1KMO>hza{8SW}ax4S8xPww!Pmbtf{?XT`8))QMJuWe@8GHvGr_RXi)Iy{bk zl2+92+bmdX&ia{F-WJSB)grs3P1j9yKD64MmGQ8eVS2x`R;rfv zw79Oh{Jy(GXD9j|J@C+cLoe%FzOOQhTb!*Lu0CwMKcnYa|5aJ@lFOlj$4d34RS0Ih zy8Cw8d(+3^N0avK;hmh>GwJKJn7-g@YbS22m0DlDr5STS@|URwZIVs?&mhzt^`dm` zy)&kF&m{M3_UYNZv-Y>&zO|DpR*0rvs!HD@vN!7JqKj(Li`o0$E!>u!S~e@;?vIU| zS?~F63|t1+MjHYa-%@1Br&KgH&fwR~>6UF2`ug|A*bUtU#}q`u`%d1cpgCUc*S6>E+j zn8l)WTv?nUL!d{sf2Gv@g=LlVT_^m!l99Np@wNO-#RaSL`pxENZeGi`p}Th1sSQu6 z6kgq{a>%J#+HgbtqI^Ve`qs{+zqw!9PxyOibAy%j&r>xeTl|==-{@dl6ZSOp>iroL zN{l9R9OP-!TXdJ-qIMapaLsnc+NZJ8-6n3i`J9XE&}XeR=Fi$!3Wz$e+-wi|nR4E+ zfIpE_z)_{MXYZa*)ki~`60@WBYj7n`aL$uECsW9IdBGy{o6lv11D=FOzMW#5;BwY^ zUC+0#9kZ5dOuM>QK~Ta`d!qk>eLeOKy2{*Zs(Su8f486T_xuz4;-CC?v@Mty@1GMl zdFi48v3*AmMKOv7Gey3?#NX$Yym9wiQDdIB0wL?Z*qssVW0hLCD?a^}MiRg0i{-Pm z&*`{uZj|5or~O^M;_t>Kmm0R+yO?@6sntKcVS@ zL2UG^c^^b{kH%V9?=(EKeBKro@vv{FT&8)=H9dUIcu~>H@Z0C=6@Sk^QTP0l{ElmX zxi_C#-gi@HuMVTjwzV%yb#H1U%AK^I@b}pK?2F3>tgo6j#jCoPGG^9G|Y@tXbAq zt3I>5Oitn{-DiC#+Ml7D!OQ1D?Bfn58}1gt{Zk_XOd~f|c)h#mpY_^6ezw~D)NW58)9F^f8^|@cp zDZ3VwuZ~;CV06^ML&95A`2MmJmZ>E=p|RKYu8VNnv9)nu>3j=gW^U#h%Qexj%nI3e zmTGQHS$F8JY{bE%Pn~1z_x@+F_vzu)pRoFu!4$R^B^s~aGsZSXSgU1UTR$VbcLTSf z<>xl#t&dh*{&YX>WKqJF9WN}GZOC52n6Gat_v**S398eVTOHZKu;J`fm(ZMO=_9+F z3LH;=x$al`@b8=n4Q{~;V`_aON+eBqo*&$8;8xOgC(LwOPg`@KdCsIKcKbf{%Q*L>-}UZ?t! zL+V!2uXLGE@1(V>i`G8)rnDnJ)zme+>dYzO&A-F?9j34C{cbn=CG*-9S*5vtPr`3> z9bIk4*|W=o^|+~M3e)Xldi#EKiFo<;HyvtTwe|S}t=kR7{~3Hw{}8)d;Ckwa=s}0f zr#6CS0{a8@pW&XHV0-*4r}Ve(_wWDl-@Q=A@JprKFLCu7|Cjc{zxFt91Roo#*^>e44(|nWd}G zbw-`?h}k{+y5XS(VoUFp9VpOQ8Yh=!%s4&M>p*9}rLU{*7A@V9yRVYFA7-fY#_e3$ zw`iBz%thN@rT?2A?G+`yDC)J&_3(qtTrbw{+Ba`P#+*5_{Xb{#i4kFGdQok=dwKYo zf5$WVg!VGuPSe@GcjC>rg4!>SwrsekA2XvfS*m-@#<0AV`z9z0+)@l)wiH9UPb(U2y>Rx}s=xDj?FyTltY5pXxA88xZxQJ~ z_3lq&-2)6fyQQ~Q9j`a*KNzWVu_q=!=5%|c)J7#QgWFekxEjXFZSUw~j9Ghpwl?#w zSSRPQBbDnG%(Oa_t>zScsXgkua0Tl4bf@>f z?)t2A5KNj?9ACq?lSjohUzYLeE6L)e6SgKB*S3gVyPVXOxANxFI|WY|GrzMRo17hU zF*|TaOvloziPp6qFZRT)by=pp;_BTBsZXaGB^bi?>@I)1;sE!K=JgXJzr5$@Xu2l0 z@5iU91um+mPW`;USwkhgMR^Xp=e|Gny?-SR9ChGXurpro-UY5%p`q_5&)3jw<(gXZ z?d5})&kl1cDJ@-a?e;Nu@gs582L-to^_E+1zf<`8jyvD`nbm!0+4xU6$`>6h9W z)ujA5`El}N^<(}$^Cbrp_r$K9+Rk7Hov>_KynN}u=Wr(;2$(*_!Pnkz#)>XoUaf^) zJ7#RSR4)6f`pI&gL}#`zuDeyo<07oGA1@8bT-KA4(CaGB!Mxo)!>Og~jrt4Uzmm7E z2Y{-Gw*01sM7cjshBmSH|BVAbghJ)jyQ+>0@^WvTUoeG>xsxHlcY z9VQ^PCSs3j`P=oYc@7lr+qYq|u;ArbImM*VrOET|zBp%@Y?yd!_L9HPv?p;M&YO00 zd!J(Cl(V_7mtV8|%p%t6S314ydC^{@{|qAeez)%?7j0;payV~u+4Jo7Q!%SQF+|M{ z=ks}^tdQ`5wfg0$?=Sx|=*_oia4oXd{$((M?M0PF(+AmvH8a=8e&$`&#+asVyG^3w zVy{$P^qZT~a@^Bp*-d+-UTQ{jpLO5$E*c< zQlAb5__RCi_%)-eVLaZQ#s&zt+^<+JZI;&U!*zuG$Q{^NQ# zK|!VTNbS$s9~hqKTUef-rnIV+d-BEQaj_34%)Yt%v%9~UT+o{0Fv;b$eGi1a6`nfX zmpIZkFH6|^q4m*KQDI&4WBw_pb+5z3A~i zA@4-^3ey+6e*K%g`(a5$er$I9mxfK(WNcp5>;9O3x=!^BtAhHB!%0SUk%#<*3MS_9 z+Gm0olUwGfJXGhj@Mv6|0-`;U1u;1jncYsJs&L?yPUp1nJmj8aP=})4V>{dYEf6E! zp7rkUglOwKzW?C^kqh15gH_#BOy&0fel%5Nlakb}>%o5mj!xWNW`Af)(?zW+zXbt% zJuiIg;%E#_yegZg^~b@%_jatpC*{=Z*8>C!-21-H^*yp6{7jfynXb}qv0C15bIx4v zep~;gJE;nHx!#e%mh^r4x1!SuOZUy*^eQMiJ?`SPOy&X+UF$!`__wqz&9K_J{rtDY z=x4$1!Jp4>5q(e>o3-fck&tOOdAHv0iH?1GAaL@+)iPyLt0j{=uQ$Y$yk1+{!TG^v z-om=niT@e4C3kGO8EY2#@XLuc3v(4-R-JokJCDbgvF58!(b5@9rew8QU6p-$;ir_w zdFBY;2MKfLpS$H-H2Zv1zCo1m^0QIPySL~baFt$~?Ns8k^l-!;!DY8qxs#e1A}<}~ zma8f-&}QfmS!+7y_O%%zn|faEyqqj-#m2X2W3bhWssqcNyjS;^$4?7UwcNT-e|OPT ztInWM_qDTsmrOO+D-%0*ZspxDfi*7i-PRGCQ~fGIE64Cv88H&tln|QYlmAzs!51`ogWtwqIVNa%a}2sI{{m z=4}r2x?H0zHgEUxaE1kL%_X1be+_&-)nRQ~N{CT(m8Ld#YUQLe3~zL0rTL4_%y)WlKJ->~C>(Znx2lV~wlozFaxUL)8A8yeTc8M+BAh zd)EfKp0BKoa8KN@)VBM!Z0$21-DKPD)5({^xn^%(zu5PF+MhWG+_=-l<~;TD-hD;s zrf1=`BQH#QVy`Tppr~20_1wMwDb*A99Nn_|VR*z2hs%6fxAR?p-&3ph^m2P7vhP>I zloyK@`kX$Uw%S}a>q-ev(FToMFOME=(p~JdCpW0{*CB&t(|7JZcB${f^sG78Wy&pW zchz4qIJESsz_M9iUUqgZx^QWg#Ols|RrSJq%lCN|9s5yq>R>c~{E~m?BCJ9WH!Suw zNmk}a5!m4%aojz_iN#N;uI2Xg--dlNUzmp9wLYV~tU)BMUuefcy^UML_qd%%G3l&v)sUSF+sV(rVd`9e<)G-SPBv+B_j7E{;g+pFizwKsk_VM_SL zbzXmt`ZlvY_&#^4{`RHHg%Q3Q8_&ueF>d_&u!2=qdr5%I;tfH^dxZ6cx18O5?_{tR+<8Q?Pqz^#KOP zQe!U5mw!8*RxEfTk+yB;>NApEoh!@dCciq>;kWUE`?}97B-Dc2nO4u0)?c+Z@?PJ> zU6rryL`Sasc0{8x;efUsPj%4|6^2V|i*FVL9tp7ArTY4^(#ub;MH{NRtNPeuqRoTry0iNZ&f^h(;;1RD z)_e8*g+)SnC$`Vtv-4)fCv*GFlLRgIWvQ zj<3%Ca>P8W^v0g(H7jo>v@D5Obh~Wb&yR?XiP0eg)2?2#ixV#RHF=r3{mOUuKO-b3 zXkMwi@9RtXb${G5p2TY?wj3)wAh}v3?e3~y8!jE5axFainzBwoqL+@$irfqSPYNG; zT_~$taHVGH>iQ3XHypxVZvMCG-JHYWH|AfeQ~xr*vnPaU@|onGJMz=O&3xhQ{UaF z)%fbM36^a-p;ba}muk8_0Nsi4jP&)9bs`Xc-@b?sR@3vDfH~lgBc`TDVb6vOfvu72CR{GCo zOyg|ubX$?UuH$*yqnTE&?-uDQ@HPE@J}tFxmhZySqpx>_M@*Qb>nNwOZI@emtjvms zb@NT8J7l@=X4dNU9*n;5{Y=L8^Fg22K67G!dF>t#WSDwZ=eSK;v%2Nf z3#Pam%+cn7d~yQC@S@WPy+)v`Kr*Ja)+iCySC8YcT(s#o{fG@*674KGCq z%KDnkI`6?T(>(2JwCSO{uFGc|dTjX&s!Nm|cU7MM<>1bGK|6A$DbKX~iN|hhpP81( znwat8M)fq5K8UJJSTnnbe%RErK982ISv@z4VfQiR4MkHHy=D_|V4reIJaD!2`xTv2 zd5`LBO_SQSx%Bb=#S#)L7^jG9KfQe`EJBv;y28pe_wI}Pn+dy3h&8F(_r;ilL+#cN zZH9dl@3(6+XoeR19X|Ye{tqWz2o`del@78 zG1sgr-otBcE3ezM^$uaTor@+-UAoSzxo6d}t=H3R z%yp6`+~w3Pe7x$)QPVF+U#&>BK6FseIAR5>B)f2?$6a;?$<-I!i<#QQJ}DWVFuI=o zpTVEH-3hOiEcX^?t*_`h$zUn=c~{h$Lecjj?vlanl@%Rg3qq%+gjQAN3q3is0aVDp z>X67fwS9ZIt(C7`LCdDaF;itfvhf~#Z>v>V6||07?~O*sv;HL3s&i|Z8cajG);jIE z>%l*Jy@%Dkix(DL-u0#0OJGHoV7^oCTYbaC1zXLZR;|!c{?Hg5s9#yMH>tDYG>7KY zWA+hDFSIfjh`({_+w%MR{MB!*DvvB%!Csrpu$ps+`ckVFX2k?4CZi+5iq%I`UNcyoB_wb$3yl^yQN&dHBFkic~#uh013R3Vc- z3D(okR^Bi^*z~7El{rCUZ_HmVMYcEHmAg;Ro!+m6=%d)$=7u@6{n@p00>i$SrseaP zMVpKw^p3{fdK&H?al&Phu1cn9#ADe79Zy@CmxX@+c>iLHi^t4sUVlz!9Jt|U`KrCw-u_nB=4KP)gxR64KhyTy;90O*mZi41OF-m>46og`inxc< z{ik4GX*7_luyC#ZQsr5EZ*u>QzlZgj_XR&!h|K1bE482Y$N%Ymp=V4JgwG^yl(g3Y z^%;;l4}L-gpiYXz#Z6!uB#Y9|K;d9^V-(nWH-q{(${Qu@!95+g`sil=TM#3ai{0)Y zff($XefN)V(^`eSzGt-c4sMTHaO6nyB+=z@dhhjKuURG6cSEb;inf_R9pANF)_ko~ zVJ~h397~$FZ^E3(2@JBg7JSK6KI|`WH*(tvX%QZ=`99_msT(+K6|>l8pPDGHWe}UC zu|D>>=;|q#yY9|1%BWcu_(_P-kJW578_&DAwr+>5-sQ0m=RBAhQy5)Xepy|h)-`Q^ z*ZtR%{VlhLt;zodWls=2DOv9HthPep!!s2{<=-+m)n?BFsgF-`6}9Ga|CX!U`+Z*J+jjf{5e zldtHX*<}CiOrh9p?PaHJ>}HBi(On{|A9+`O^TEyq`tw%yg=`j?)EjU-YVn?6%^l19 zCRVRs;~MQECBE8U=d?)KP40F2v4?hD$@0@xG`tvRm1it<;Hf+J`{J{zH+D^AjEeV4 z-d`-;e&1P&_wyCmlUq(WPFpJRa&OfU%SD%CoKJgxN!*;}snwCNxHgML#cbOOrw%i* zUoNKe#bWb#vK~J<@*yNvaQ^bF_A}p9xR|CI?%6rhsQN+H%fh*(E8aP^haSCjH)U_~ zjLVG<7bN#=O_wWrWSe+m;`NQ$TkO^@+3xCR7IIcx+&FUgC5A^EE7mP5)H^b-?b@vS zeiJ4aWu460mfgDRtgE)~hc!`E@8-rZHA?YbK39L$eO@Tj)|nFnPUgN?vPO66Gj9Xt z4O>cbY)>2R=YR8LikJYyy4%}pk^|f{)*jQ-h+C^YYii~+hO~CB-%I5#T$MecKmVP%1x3brj zSliZZ`?WdvzQcl}UL|)YCS;-D=S?zm+iGm zN?NhSWL2BiqvVsGcgk13pEPIVKABA$!VX`5X}@_I-_(K!8kc<~P8^bC(Gy@Zym(8X zQMhCNLQqOiURK2$`rYp{$IAt*;){>0Gw@!M8~R>wlO(Uwy>jo+<}I0TjVw;hu|9oV zkg4?5sZH8d+0jRK8YoEZeyz1*B_nTO*tb{Dm;0ajm7*&8C416-!{CI2J8Yk)dcS?? zaVJdJOQ+aMFeI`{e#)%@&$1($c-T)t(cRQp1)FKYLe?761Q9b6Z_ zs{OP%hv-(J@6)y3pVBbv*w8dHCh=>_SzTWfrq9P7x(mfVI)AlR-BCv5D#O~>68miu z7ThR4b82tn*L~;Yos3jna%OM4VmwPrKKuA47T^1EpO&Bbv~>I2o38}}o^^%2n)7RS zL?qL$u5IRP{&EDCh-7b%*D2o7>y)}{+LRA@Uj=)t{Fd&0FSJZgeWLuHqlY$!r+&S@ zHa6+uf|%gw$5rPzUDi&&c&zx}q>oEH<`ra5J9|9gJRA2Xg(-DvD8w-!kcdm9;nUsBpRa zWZUoSOX_xi2mj>1lEyGw@K^WJ30utNE_1~-gl}5) z*o5&-|CN8vUlEE%Iw$b1W!w6V_DlZwzqA*YSi!13?sw>!B+f;+I-ux;tm}U^AUG`JzsQaUBGN;96zuwG$K3KnY zOQB2toXBTctL!-j3E53sI2 zz%81=s={=R`|iF;?=N_s<8M=JV=rHPwm%|;?^DV?!yaSv>5Sf!E*%d0ye2m8M0jK3uD8YywN`yL zYFp=&&mJFIo!TgP<#OhlFSB=PyR!BzTfg-2C64J1MY2rWzdVcJniU)sJ2&&ve}*-R zCD&f(*IZfiYmT_y*J$fQIp(zs{C1zbyvAh-(+>`%%1++OR2TCt%-mai<}Go$(#cg? zW*+@=?LpR@6t1srChuN_9u%0at^K_2%z}yY1o{eO)qa2cXZ|IjH;reWud0^xPS0b< z_AXBJc%7;BQ`FW**5<~Iv?fuui`({WP)pymK+TmoZtkuZderrQ?im2JHuwff!MhqE6n zkZ|8G(Bm&&-u}L8W|-TG#e2io8^mq;qAZ)=_g(Z-LujI=-wXXEBFs&1Hh#O>!nRsW zpELG%_N&7NGWqM*+zk}b4Vt*-s@{SNix|{xwj5sf`^>+G;=7_#tKto}nC(w}cr~~s zq2e6h0g0V!OEvpq8Pr)<>z`8 znAb~omQHXyV7_(xwSO0V-Nby;-Y>cNHe8@}j_ZXzYZdQndPFXf75Zw_wNR*A+u~NG zcWktuU+!j^`x$!OlN$J|xp&`0kzA%%BeE7?~piQgUcZoA*zNt?Kpxy_2N zZ`;w5VCr~OV14~puM=5&c#kW4Mo!f}bp4XrX`hS@>q7U`E?{Ii@J9WGb6i9Q=d@;b zpNiKETuLSx_nh}_X5=u_I&!w;+B&6;y|cIbeJlA~eMWy<=G3oI=kq`AUo5c1R!r^_ zM~BiJ1ICuCNk-j@hc>*;-nU^^!kiCpw+CK6JL8bUwM(zQoMV<0FxegU^&a0|)y2FT z79ujQR#zT-Fey5GANz8v`7!?#7G2=|oV4SXj&$j{#kW^<-*B%B{rX`;u*X8{t!Inx z_H7I<7T10EVT-_(H!LYHE^WN`qr-Nx?!Df4UGt#Z?BAyBcoy?PyPG?@dY5<8Q3V}V z>Ce}dI~Z$tx8J#ZPwuHS&lc6Y&*KVtUAbR|^Hra`l)QXphQ4gllPLq zTA5W6Twbg8{=yy3jmzUyXKeOd&1iU;N7bicdhhBd@0$Y!nu>1noo;^ha0kaUCL!;u z*KL@k*%oj`8Kx9{^>k$BQ1~*9v0-E9m7=tgmf6!T{fdtJ&+sJ=(uXrsR(}efZW4QN z`5TyF0qu=-NSQ(Vd5~@x4vv6H4vMxpDhwC5f%|Y}%Ir^2q`C_-e?v{l%eegmBIog@ z`k#Q4vgfkIH&>N@Mun92?%B4!{D4K!cZXB&{yw_)J|ny$>(F(nMpvht(B)ivcCPN9 zaO%poRr!&I`hfu|+|S+OVvf76V${`M_o6j_+3D6BQ(oN95Mv1uFZ$YjV+9{;yV2LE zZ98WOuU=MqxB8e53(KMnvAfS3oHjI{dSyn)WaXv@ii@r9oCs>(6<)gP@TDN(JU3t(2E{;00f{?+>zZ`uP?8W-_> zOTAi=`}yz8DJ|=D0v5iX{vzsE^KYI@K@s1lZb(`5;zw!oTA4FOc_xZZJHH+*&3m|I zoA%mwR;#}si#glO`*GFD($dP7mwuwTT$$fL{7Tsr(wR9?{YpdF3~m?R(s_R$>oT6b z%GTSS=dG|SFk*^W6Gx)Cn`eP+j_9J8qYFZt(kHu>7#pun6kTklwrIBb^G%Wt)2^2M z4aqybCa0x)6ZhsEx&8IR)l6kZWwBeYN8CC6T1aTZO9gFTvWe8hY zd?q0DkjwkKTQ$Eg*vne(T_GqSy1e0Tbk*vmD?aNS+?KOZK0@QdrBK!PrM5g8cP}!g z>&L!de9QV?NYVzsIlY%`jkUaPu`Re`;q78#w_u7TH^a5k)psY}Xm$;n#}{?B(`WIu z3p0=Pq?muLxO>g)HiPIdK`|ZXO|$mQy_?@*wUKwH*bd#kI}d}7n6BElFF)_m0l&X? zUk(Od;5{jBmen4+RLjY6t=#Lm^Xy~(GsxdODY<%`0^hCe>y%|I*6@hU^nIakw1QV_ zSAO2^*3y+lPo9cqrL(_hT-LEtnSE+@d5y`D>=4%#u6f!oyRBF=cIrm9ty^<=^WpsY zZ~ik(f4yI5`w7EDhO65)rzW0B5REe76;a%*5!l|dnI0U zr+dC+Z}#35+xLc}E8^JP&x|um*0L@uJS@4bicoe6G9W@F8}La_+3Cf?YCRTs;|dZUytX1^K|Nj z8yg##pLd45u}RLxk_K}?xt_OyC!N%J?wSJV%@}7w(<6!Vy!^k;P%+p2iUw` z8*4c22YMuSu?OC{?!Uj_mdu&3(0%u&%0^x44d8g*Z*%IE_<>rnzex{xE@mkvA9}T& zv*bi9@3Xx3y9HfKm>Dac`#xXCb67!R)(`PZwZ(tx(^U>MyJ@l{=BVD9c+)#oK6Br#x_SMKYVVbp_xf>bUOJ?t8LTy`Iuh}Lozrpt z-rJnZjNEu0=WTx8dv;&_=6~_){x}#tx@9tR-MV9Iy=Fy*#B?2=o6yy}JSA`5>z!YA zaPl!0?l4~Yr%!oSl-!NlrDC(o-yDkI=*VYeKCj;xcV$9x*Gk!MrD?fSMFO_H`*3+x z@wHHG_U%b8ua{p+jNBkNvHZ*0YY7dDKJrIx+?T(lu6NmyRJktRq{k*f_YDdUT->zC z(^K7O_WNyfV+^?zR>{h|{j#eoFw<)4`nYEw14SApOO&7ctG~qa7stweplRI3OGE4h||IN{BEcNT5c5d&Y5+SA=BKp>Uj`X}a#&w~zxZaIjt8mTssJ(M` z^fDd0cEZ%D>dRZ>rLroS_pLr(o)x3O&!iI*=2c#)rY2>;_-gaIyE7UV$^>qIIP1Fm zo+Kf2!Swrw{pZ|T7`mdG`;E^WZN?qEXUe%=2lcWph{@~O)GN?cb?^OuhRw55s~+6& zxK~x0vg^p%sN%BHy;WJ_FMj{(;Gdb2u-eq6IV^m6>3;^h`IZf?ze89&9#7KW#mB)N zam*+zD}edR(w%Fs=Fjw99oMthpK*SM%`Jm%1nPb} zdww#yQhFp6pH2xo>^fvb{p2ZLhlIraQ8hbIYc`3!J`B zqUTG5oZsFZ@2|LW+%9@j?z<%@E@35)`NrKl_7=z{`NnMAezx?sTOrSu6^y=CpP0S7 zr#@TPvgFXM=d#-WrY`+vp`LTxbJypvRcqJn)ww|So`>0L- zn()#^rn%`kpMLHw^LiO5dv!6ZL-duqchqKZ>saSrzdm#MIq73OUphLwN_I`#>2}R+ z=I-8G_an=Gon5;3Yhm5yskVWqN+;g;xX2KxGv)5qkPjiQn>}VvliRlL&SAU98X+>b zyA0Q8FzMQS(*}h48kKH?5?`P$cCuJHM5T5tv0eh~swbt{w)1NlWN!R>mIJjPCrOd@H zN2}T!TS{j!dV`A8$$L&p9pGBsW%X|RHS;e?FW2;b@tONI?9|StXz3L@@5Sv+_i9i! zY&~-FwPf-^aiNCupdyv&G~eygug~&d{AZZ%Z^qF*amyRYb?c6;7d2WODz3EQd4$r! z%$w57cfG4sP_bBg=tg?*>-oq3+<9=&p~=Tk>b?9`&3$1t>uT23^nuBHHTP<+LE*ZZ zccH&GKizcy_I&O6*7L3BYeS*wd{r$^BHVY5N#W^6A9&ghTDM^X1CL15 z%g=`&tTS!Rkd}9_Ig_tHGp5q^PCTO@@4R(~O=Aw-2#~s=G-F+V^bysys?+z*e!XnL z*NwgVnm1m1p=YU}6ZP)V$KQE+hj!{_uD|svAa=Idh6lso4cx#X9kt%#ReR>zEeiV#yTpD5+E&S&CJmG8GoJ!K= z7Tym^)OJ0)@P221~uUT2>h* zgsYIO_pj!W;pq9+)AsFl>>#LTcdf=Otai^288D3b5mWt}^J8b|x6O|>tp51?!1F`T z4?UfKcs}!d@%iE%uM8(Xvb&qQJ(>^@CSR-4r>5QJUP8aW^3p-0A z-cI%V^JreX`JAbS3&gLN*XEhWaAes=y~vnqUv@P&o3s3-YxAG2xhj~2pr(9v(Hs|f@xyb>WuXzMq&b@vAlJR8`3&vwVj{Xb_J^Dzd zf8EC5C{@-5l?VmjwHC*nmxxM>u8k~xSMsst*s0{EeY=croM8{V;nz5~*tJY|!BoRS zn~uK^Hr3wJdtLJOrnbT^gU#vla|;;)T-imOHlP2s#K$0x?Xh6Wny#r2vtO>*r7P6h zTD11@TMh|-P2n$`f9FgPGS+45n^v*sj|0=5UMcel@7HWJaXa?VIM#G^*PFv>Z?FBf zs@(fvg6^!;+Sqi9{|uliFs*Wp(!WxHNuuwh_snZsWvg|LHSNu|clTCvyxPtBP+R8h znlGp2*ZpxQk2u7i^ikHuTPBn*d*OnMGHhLk7w-F>!l>}-@zT}HWse*GlyTHxUDvTO zQH0~0-aG4KVP4_s2O9*g1;5P^?+6b~j>t2Z(qf&vrh+**ZL51|mCPZoE4$h6syDMr zO24v7a$?h79o2O;+HLI3U^+)xdKV}?t(6l*barWTPbY)A) z+5@?>zkTj9lH$I#9JxWBFzxPSND~^|+(wz8K;mGw<3+Z;1uu)^Nqh1K#RLPtyY`u& zWp&0Ad!6p??}RX$ocBLw6*`bUS?AfSZP#ARd6ucL_6GBQ>t7YT{oA)Cv_nu~n>P`71ZScr&!v&!!XQRW? zN@rgEC@a2idb;1lSy_(L88y<~ejV-OSh_G|i}2~l#-9SFAjz=rMopY$4 z|6s=pIOM{f^;jGmq&DZuznD5`7DII z(I-dsK}f&DG0U4X99iC3@B8toWmCR}<)fvquI^H;S?ZOfp6r&oZ&t=J-jof&0kUPs z`~LNqXSL4Smn;*~%-Wq69wU9LVprvc(^)rjcUe2{TqogXcBX8td(_dpZ`!{x`8~R{ z^>xMjSR1>Ye=4H3$j*1V^!Neq{a^1Ho#Fx+P5xRXEz*F@)F&N=&D6K@NJeOvzLu>_ za+@RZg86ypb@i0uU8h}_J}?zL@OgSlRpr-~WjXh^yv<$#TGV{l{GfwDf1RSlJiYh) z_eG7?^ai?Dt&dCCoBF~HRMKlNWmt76Xzqo04-IzKo5^oibMS`g#0l;GcKvEwg2ny# z2p5;mxhei<4!&5pWM@I|?du*{*Et?tOMAERsi@kFU7l6j*Y5A?3Ev=iDtceLdhj0e zd8`L^yYAOLxq_qH*R)olX_sG4(EY&goI&C;8P`^C-=}Tpd%SZYm-)rrGYV{s%>7OC z!kxV?%jM1YntEbKXsejm*UGA!JAI^kbs1OLt_xOtsgbts>$$FmH`1Qr*1zvB**H7k zf$8-*flmZ^i&#sdTkcA~92(?ZsB z$9v4yHC%LPXV}MY4J^XU8|E+MtxVKVa|Ug(EGS~xaFBc3uU%_T#Tb>cZ4f_N>2iMp z?~JG0r-$yyyr)^9Z}4(q<<&GR*43i9(NnAB?pgmb+L6v;y~^t?gQnv4>X+ws#UA2~ z-1ISYvURpyj#1P172o^j<&-Y4n|dg3Yp;)Mi^5gw@Od9+PqCHZ)(*P8-}(-V)L!sJ z*stdwO;@*{daV38BUWzmzCFwG7wX;=wQJwsP}=+A+?j?*3=E>~uP!;Pc8q+aJ~I{+Mnc(l9TXx8vl`bWT&g>&*Wd z=2xhA39AG&Tc=O`2i`*iov(PP#MTR1@&@X#K<7sw(-&wQ7hY*~(AFE6Hg!%0lU%S$ z*^YxhQKXdaNYz~iErV0%l%8ew4=QIZ_n)D?b*f7Eu82HC#T8%vGu-Dp&D;I+N~B5d zo89+zpZmTwJIcHA^m~0%PnOt=M>nq*Hum0Cn)omwI?&|jsS{ggX0CqE!PM$46}xZK zVs_u7wtpU-3*RkT-IC|rW)ffB9Wnb}<-X7Ayk#bD?#=Mv?FdfxzL&qKWuEi$zh*b) zHR3M!r5I=IefoFK#$E0Q)&+%!?Joavbo1P!(+aMdKWIu^uaH%d+dfn7BCV86i&J14q zW`8|O-9>e8v1r%lZRH4>wQ_=#dF}2Al9CsKcgLwRr6qmp@wqgotSQ9M_2|Vk*Y{Cp zqFBXZ!?yZuZ(^SL-DBIwb^C5+Hw&9Ble-veHRIS#&5XyfVzRSe`W$gFnz6>FOz}|P zj--{^&wk~sOI>h|_tNeu8SCdh-*I`v-1~c%R-M_;#n<{Yf6uN$S*@rIlU4Qjeywp) zZ#{Hj-FAp1nvZd&SxtB&Urc} zGH|`!U4G1z_4>_|;T6*#{&5Ykyky4ZwcB#{Bi>3C22)q2b$336s9#%fLOP>i>v=<` z#vqfGp^VqB?Lu91cCkT4Xz6LUR{pRxcQRKeF4(&~vCi|s-||Q1>?=2h?J4>EDanvy zx5CTS%Zk=sJr%$m^z_2v%ZGo;xZd4hn|wsdVD-L|GwQUlc z-=;$swHCaMez$(zf(IS58DdQyex5#4_p*k`!m>Ftnwykz7)vg7Ye3j>2_*_dUiiOd3jIN zjRXFZuWMO#1+X!_FFY`90aMpqduxwTi{=VzZda((>5>7Z4p1(cQHR z&x&70+j>J;hh%T_qwPuN@A=O(NHHI~dh6YH!4(R&MbGxGdMbWyBahb37d(Y$_-cxd zaur_=Umu~67j^Wp^fjB$S_|F1lT8IThn3ttV_>}W$f3qJn<5o6GM1j_)k{v*o3x&_ zeD$yUUh^((o#pa4bg_(Elgy;6>w2noE3ICh#;LJ*Z`!xzQFgWQ5xo9dyI3P{M8-}N zwtKXVd%fTF!cLQ8V%j!uOy@Y;#Hc>F_HN_XUe6h`Li4Nl{(cs%R*@yhmA&@lHLa+X zObTw(WAoXnj^;S83=q4c^)oKESCq?jUDnUlROpE`xPdD!?J}`MCh`36t4_8KrXJI? za%9++ay{nl54--dBX7;?jTPG?gEt-I^w{XS?QQJm$Dl2N1};S9Uasx1UE9Q-QgDZXlMD_ zwK?BUvrbCt-jc3z=^bzip8%=xzDqsu3`_y1JSFutC7P5$ue`Pb6F&itEJA368> z)B2*d_F?rV^Utb(_WW~+JVs{G>HiGrUuPIi-?ILz%#1Djjep~X;fqgC%h;~o>J`3@ zCv4_Zmr&LHw|5ou#wXQ#{+NHMPR%fY%iplixS%c))Dtq~Id$_BxZ`Bl@~*SoQObP@ zXvza~-599T2GW2sZDQb^cM?_bsP1mC%EOX7?NvY~L1$Fv^dPoLB?oNJe+22wB}{n# z;|HsW(%&m513P)$*Z=!rwd$>)Y$UPq`kg=7_hEkMJ>OYi!wgS$B4=R9B8W%Vc*O!^k)Gvsy0h zo${aIo5KaaL(OZxUl1@T&wtO(K5d53p4IWyZBlW)`}?=>%JoLBSF>ih<#O_${>wKK za}G@3zUKVJMMu=@P8;7ZT5{;?a_LPC)%nZRG>oqAxm%e!(MaC+X6d0gzl}%UG8Txf zef8&v)<@k_Q)G3kocV-WG^Rb@TyD$reP!VN)C2E(@&%t}JD$!mu)TO?!jhMY8(zFQ zlG7IL_34$##p~kN^4_>=P1T-1v3ils~z|5s)iKId9y(Fnt}AX?NSpjv5J^Hp7T<6^%mX0{^(ub z6(uyH40CUO+uhW1eS+jp{nc+*Scu$hjl3GU?tt5lEnZU}_oU^uEf%lloA&6z0pBRq zsH0!rxN2I2KFV0vcj>hN!>&ylEyC{)-d`i6ej#t}-kSdm_vTwBxRjdQ%C=Q|*LBe` zdFASt6^_jcM7GYtz%CO7_3zh&A1H`@X5R-E!8`d&ACsn9X}XLwMb% zlGlQo4EvZk<|R4DMF#S|WjOR!SbZhuj!m;BukMTEIn`xi6617a&-#@yr)DfqT^0N5 z;&Tnx>Zz%Qn`>^bt3L+oD~Vk1kd=~N{#Nqf&oiJcw-r{%J*J0F4g#qMUrl{2r84bY z>;130x~AXfx-w1l-T8I(s2f{1%$)8aUAKJ8kBDfeWQD*GsU@p7Uy~8icg@}&=aklo^8FRm>RL*TJ)R8mz*Us59+k$EV`Lv zW73j&GOKU)8TQGoHx@oq4Yk_!TI__@tH_hFRj)QOW^8-(wd-AepTZ1|v^Q02*M0sx zmD||uw59g?*f7OuD>rhT`MmQ#!@|a;B{Fss3|`hBtNYX@vn$o+PXRHD=lEv*co`~{ zxmZ%7(1!bj#_pKMOTCT1Us3zlL#3`@zB zMYKQ6_L{UHbOwJF0>kjwME)`*=@*vCu29U-hNpidD+Kn&#`*8^>~Z zDa_8jDp%P!HRJ-*zS?K+9%>#;=Y0Fi>8qaLvX1gqag|++)seDy?>^t-baAD7=dxY9 z4J+mrOl?o9`lfdHgm}s7=(X$j|GxYjx``=B|L)52=;e7QBUvZ5&bEAgJI2XCYQdw9 z@cqA*rkKXDJ)XE^%_-10op9@J0WkGm-xJXj~AX@tNrV*{EUzdeN`^dToiIZ*W~(F`&s_aCjVTr zLF>|yD~ny8HFwsf^Ytfb=louKYKN%krsMB~xr5!;hW=+*=sRI|!;32ax%I)%O=v;a}}S|N2jbm@ysM zjO$>|%=+MG@mGFAWG2=Jq(7|>ehSeCu>mSu`q$;?_0zxRE1aL7e!_m`C;nG8&A;Yr z{9As0gNs?wzvbulul&6JRn6;P^Ns#3Kd~RGpouwO|5eTEU-Pa0EkCn=6`Z?j}oS$1DV$E$Io`K{rByb9FSmg7iBO3uxDOhwb<~-PJj<|DB7TlKk7S8Lw z!)-nuj&Mir(Tf+3p7B5OyV&!0*W-*0x!0}w^A_nR%Ki+$exT$fL&!Vn^Oe=QvZt<9 zFZ%jgD`SIav)8t$(@`^1de-gRc2)f5JT-$!9P3u}I%<7;zr;RPur;~nO#GU)=6ltf zJ!d@J{k8pigvTz`-`bY1wRxBt)+{zmd%&zD(#)V6bK}0@S*cLJJ`+)Ufy;rDl1`o5>0t*`ye zQyIS9_wnl7`~2Y!sa-GC_Wp|fbL_&Z6CPTQx6bTZFR(+yKsNl`Ji{4Y#~af_#aGEb zOA6exA@%Rg=^UY@jN2raEZO*8-}%y9@x#mdw!}wv#k#d+glAu8ZQb2;s^i}F{?Po` zKQ8RLCmh0FHz}N$a_Gh-z9T0uDW2fTq&7y+c57X@;pIKHQ&#UA55E?CC#6->*`(N*18@M*JmugrjaZu-L)`g z;`hcWT&kV|1&UjCm5a`nT@bKqi)rYty+V4TV%q-Jua);*$m8%}+4ksS$y&D0?VBd& zzBu^w;u%lwtirghizmy6Dr zu{LAXd!c*#DrVVSxU9XA>0L~;+bo0dXwI+=Usl`tf6$)2*x;(?((A&Cbsnrc=iWA5 zwQv8!R->m5v&@z&m&PW|l4~=*!xL~cwsVg6$D(D5b1Q#DC%>}4TkZB>=iSc+-?Apw ztktqQb}u@7_d~z4JEY$`E}!w`z!i?zYv$pXUL}6qb|_La%INa8o3ma!6>sRxwg{5o z(Y&$iLdc#?OBMQ)Cdgg6n5efaYt_c67K>O1?QI<~H}dvHxYTtETxKzmD%EMv7mow9!Qo}XbY^IW21+UHL z7M(h9x{Z6a!-@yzKJMp?b(c~+tf4H?yiX94oV33S=a1V^>x2jTejk6bEmf} zTG@k4?{0Z-_%(`Q(U;mqVT%KIvwS)IQrxpK%zxRdo-n@;n@(J9?Autl=TVmXoENvbv=#`jSjm22${oBtBqyfX$AeEMb|lPUj+=cdC+WD$sU*(L2Yp#^64c!pBx;Iort}~R2_43*9SyoTQGS-%}mx;SMRCXEO zUA{u8A;V&Ehmxkjr|vhYmW3-b8CjEE7CKucS(NIoWX+Dede=!niNEqR-{;wTpSCSl zV&2*!c)GN3&ZP4}uU36Iw_5Mm+7)G&a`#Hu%(k4W!sx*uJ#R~4WE?{TXXp!!um2g! zZ#)pYaF6dt$Bf|Aj5l!$PDmUN3wfIAbmnbz_PvfgmepO1uiX#atBKOFJ}*A&eQalA z`qrsj9E7e3rR z_~H8V2NkvRKUCOB*EjpmZ~M=n&uf2hedB{4wfET%zxh#npLbuJRE7Pc-*!?z?AU+J zXFmAh`XBbT^ZH-qq<#qdTmSgaAYT4VyLS1<`<;KvA7zOM2%kwxmXuw7Z1dyDk85Pt zTKo5=L)bsA)nwb5&X+pgw5b|H@I1OI6ahJ|lW##G#CF z_^{aS(`5;}jqc76JfB%K_o?-P^68JaY~JIV7xSWc=CR*y(Xthp{}_2570Z2?&hf)e zEcssiX7QWf=B&@yzWi43&CaNDi}@KM8x0>WZx$<8Zd3X@KVznQoYaq%ZyDd}-s~?~ zUUB-)@*?G(ns<64YUJ70dQ}^0`)p5(-m*P&cI{H@iK6?Z%BQ^7yfb5?7W1w8djF5q zKC*-4xy6u2x#11m;SFNk%N9LPJz(LoY;&xdjKqOmahF>cD|XmsZ7utqowiP5bwoqp zY9rZik!SXLaje>!b*B89L@FTqv+8s-?sg%FX>!S?BFBnBO393^Koc*m80-(E30|v<-H#t zWuMlM&QIF5ZiDITz{&NYL7G`%?coAkW&(+;PL^k0UM8^R;;O5M!mqCGh+^?&&^mT_ z-)Y6N-V`a(nC$nDWG`k{Z2A~$72o!+Cn0G8TR_bE>G>H}+_OX$hUh$ddrW(M_ww1& z+-+yP#KLlGy`I?_-E!+*)bjdTaPTXG`0eKTOGGZrmd&!d?;>~nr`I>*g+k%WZy$d5 zpP}=EjXe9|dgcQkuK#iWvHip4=MT4^J{J`k=n!gN^CWA9DPl z{KkIZ!|(mCY)t<%gneXTau1oNp7!_kp9Br>QwnPHm-~dcinUD*I2z*;_$fm3Lne=!uPR^cNW`C+r8H&>}edZX{nk-R+Xm-~W6qU;+B zimyhQI4>&yI#cv^-naMj=GtgR@`g9=EL=k4X2ZR8#OgDze+4?($#HE z+4YTsPh)MQY5L^wPX}iSc4y5yl4Ga&!}l{j_s4JKPdenZ{DVPXV^FE-t2z!+xuJXLZ9PtJZ1}@+a<~W7Vdn{ zYS6#F+4oer@-}1LTfq;zf^YxPYLj^s`0AEy*6Kg3(>6SO9{e-^$iL{1dI_40Hpip| zCx1Ez+Q5XgrRX7e1`Trp4zhd@ZSoFta}z_xZLmsf!RAkh**go*L#{ha{w{~i>6x44 z{&D$W^JRupbXEP_M@Jky9yy7AtX=%)+G45w#g_X%u6lp_kN=Mv{trLor2jLl_;CIC z!{z4>r%!Kw@S}GA$Mwzs*bjaHskr^ez4<{!#^(>WVO0}<^TYLR_vFjejJUq2{yY9- zoBD#JVy3uzo9*4Y1?K+NIbVBfGWWGPd8ZiP?wirpkfvW*pRTisEBfVby``$#O5aMR zO)zJ4y1f5P!f%hPu;$gXYyLB&iSA1^DYdux?HI@Y^x7)@7@w18DwAGRKRwH~JI1=& z+~22I%dhqHDha8ti)U`$EG4os=1=$Pat_r`>t^1`T7UoHmy^~0rxq+M`sLkXYRsy! z^~Jk6S?0@P`#tyZx|u?E zXU+e|zs$!?|F(mxOp$ww$0Md|+A>pTO=GBB zs}&+!wVhXA@zA=%*fv?=?sC5wO4pp5ExdkhEo^A$T)-M}queO+mV8d=qzkK$ZTQM(1-np-rH-Ej~S2&Js z`js&Urm~k_%?OP9DBAKlMDIZKmWyXrusA2L`DdQ|=Wq7AitGR4nT6&)`>LhAWqU^Q z;rfpXw}d<2vt9T;<(<#jbfdd7*0`R}{3v*Kv8=zS?TmHzI3lyp71}Qb7}60=RtQDRb1Y~eP?-5T2l08>pPX_)b~98ed@dIgX(#o z=AN9f=J}HSX;GKoTE<;;SE@*u_U4S}w<+)S52k`@VBS4eav#KFl2R|f|NfsrA~EPw zN3d^I$&sUh8JVFxp+}BSn!MwE@O@Rw9=ES?XPBAAY3^E6usJ41D;hRm6>E+5Eom zVwVqqw)~igS3F|qXL`tz|1?a5H!KIdfMZ&W*OYAY@N0rBE^klFpRucPajbVqaP)TN zZQ5<$fjZ4=raonn_ow!-A%5ClSP~Xhb%L@xn zyy#NjSnMpi*u_e{K5}BD+55boFE4+7=rJQ<5ASLJ7a>p6#P&Mu~MHpu(x~_J%+V@@m67R+IRa$aWcgTg#idZ-2ZF%LX zx7QqQiR3?Dwc}LonX0MnR@$#YOG(u@I-{QWpGl57S>pSse~n{QYV^yjyZ5da2!w|2 zYxnv3`bYouI>l0n)o}-Bz2CU{h;p{>x2Zq68=_l9cW>+sI_#xeU3GNl6}yH1f?oSr z1!;e?+yA)!!;kET-)iJP=Ks@`tCRk-hoAXyJntWq55M=Zx8MA5`>;Q6jroTfyYoLx z|1*f)llt?Y;pqM!+kRGLKlqXVpd#}@ePdJC65lZGz2b?w=6VN`pW3ed{bToXgR9>_ zC(!*>f0QiBu;jDEV{`VW;Mp6*331Q~7tAdzkQo>7>|aZ;q=>oI#w&!XfA*C`^W7q_YXSf ztS`P7dBuCykCZ9zysb}vY+n_=Q{>`@#D&F{|1N7rz16)r<=a$#-Wus2Nk^7%7TfZ! z(C)%}+vWDRG?(9s-fWyMSKRuZZCmwe>j|qy(T<vhytij6u=+M2J7HLN>YO>AUs~6Sj z9N4|iYVNCDS4tMF$qTk-xBBckO>E=zEsIxio2}f&cWdpk=|vmbT`i>?Yqesp>@JO~ zjTZWqxaaa~uFOKG&X}@Hw!caVGw;2)F7@)6?FR2;MK6){IpgK!<%dDX5_p~c_43+Y?U!=uEDRreYn71?CTN+wJ~{ii zzrC8exYtyr#;{Q1%4NxprduU;Xs?%^vPNr~NtMp#y>6+g^H=`(&!Ah|^1@~6%Wog< zAN=rppLBimfe$q%AAZ}v{7@s$e7GKzqisxn{;-n*wJK`o^ZqgY`J;9|Z;kv%Ir;L# z_0xaM=l##{XzR3}Ss|TuzmFGoF}>1{n?CFFN9vwa=e)iXLx^q4sX?5*I%`=(Q?hZpYLBDG2Y^}H(~Yp+5=Y_if*}V zp7c>5MVE8y)qCq-Cu-abT%CP=?eZ!0N{`=+ma0`8(%C7*|qG_%DoRYr=6N3pz(FV?6aZnQ}tGrp1S>BQ!=oT^TZ+F-=ioa>*c?OPfy8|!Rp%KCB=*G%!;nry>@{(_P zUqfqmU9Yh9WiSb~&AQATuJ5tUwj}G`{``swu~Xk&&E3W;#nF8^#PpX>(q)_7ZJ)nr zoLj^wdg9Ic7m#@r$t|xg)cgJVy#G7+RD&~`C)f@A-DUSiCM{%knsOz!d%+!Lg;mOH zwpPBrCiUr5LDhrBA-r~rjn;SEeR_KDGMgDwzur7y`s&qQQ*Jg{kB3{$Z{{!NJsFo0 zwl{3kuKx_uzYMvY@)o{V?8{9_<+_x$QP5RbG&FW*?7f-=lOV?y^v%mL4QVr|7MC_O z>CRhDOPAx}o%?p4&0@Y}YrS0d7-O1Oxa8me3={S-x@R`O|8W0L?ajQ4`ayS> zR$Shxd1uNyuhNQa-CHT=RI4ZLJ?Zykd3dioTcP%y@9oZZL3d}iebl_i^v&zL?PFoi zhqI0Lp5S}3yeQ;)W#ET^gT?dT8cn>OnRjuu&-OIcmmluMysTO-{Z^nz%|^C=RE2bNIg9Zzxyz}~Q`|#Qc&PzACW))`V?+IIV zcMId2>?1l`+xe~LpRQB?bicEh(S!4u!Hu5z)4=~<4$EcV13J@S*lMnn1)enN4_|G7A~{TUSo3@J ziQ__dRF7=V#Tq zHRVBR(FKtYJ-6d_?S5n&AtAXU>wCLt%&BWl4f&NF7A27vv}LucUL0%RdVF#0_UX2* zkN@Q(4y(S`7^S6SYFeu=H^DWAkKMui{pFbzSx-${Z(f_LTfc})^!4hfrmUb<3>!DR zE4Z^+qq;gTrTJjl#$7XBtuf!HFnO8h z*3i-mmPLJY|8g*^>Ou|x1awudXkpIgFNxqVynLB`nEPqi&@q1 zqV(Dx(22boivyPR01KGT-?=^6&Oi62*7U0HW#`DWc) zDIbKsYu=g3^|7(&5`Ulo*AmY4P$5iw3mO(qZJp( zmAT$;#*9^v`wXU>{4&c)Y>nxBv&f{S%eZcooxfC{uEXqmY1Y@->(_9l9eT)6_TsIU za9X3o+w*VF>}o8$xR?j+2sKmTqsA4r#+?)Wa)ZGOv*+sMIQDHnUfrGfKrn&Ra~AiW zLI(H7f+q7%tGU=#n}N@Bw{u0SXlN*pfTR?I<4FhC zfNgtM|7XyL9s*sVGrz1GvS3=TN9X4A+c6Fzf{sT8)_ndq$IEZ^g4vSqG*|52*S11C zATsZu&f2nj=eiWEgG;PfUhhf&R^-Ge>DOBL)o|0qos7Hu=Vq+*O?=v6p1b|Etn5th zgs80-|AEdn50UiHi1^~3@NlNUYxb=Vck$%GPd7XG>-~|9thX{azP=0&ROO!Vl;K{* z^aYMi`48^Ji^{& z^Df+x&&)d$z3|(d_nFoCnRVy4JgQwT{8m`w^})$3&wo39vAcA4X5N|YX}U|_+9|1S zeXDzOdPeQ?BVMdVe`ncvc1IOSWn zg!rWz7w(MDHbOULqgQ@d8T?`Sfu-jU&F2EahB}cSCO=Gmh_F>vs~=ks@h$j4z~&Fj z4=wdS)E_rt%EL7kQ?_VCKS1AFe{>_ux{1m6uin29(iWnk@Ib%%_U*&ZRx!1v z&B&k}LDK34OsfxYb5^lsxlY<1eY9li3XM+(OC3$`>MuQgwZUn@U$d#l`!f3* znDvDBujlt(w{dD}QP^mU^A$AC-H{h`pp$G=x9a zt6b_yKI z8TmbI8;V_L*sNH4_rqnur-D)(Yme3%esU=5o^*9a)~hqtAMRiL&!9IiXTw7tt$>0aiMEVhLncivZ!utRtBRDcZ=8Ly zXD?59czdh!GS~APzkay?6qIkbH~*6d<@4N!>(3v4^CR=$a!^~q^uz6^55L!#eYk%3 z-H%*ww!eM=)atL<18UVVAO&ikAz*4!{dbhEWzTh-S;jt0D9;Y`1rCt3!ZalV}6%k$`({O(m>pNR(a z21vZFDeio6091xg;og%R(4olAp?W?hf7XuOe7W^;-~(B-LIpqvvaC5I6}x-gukV+) znX-yL>ZNK*T+3uvA1KF`MvRX=- zMeW71?h%s2n_XXK3-&4y_y90qs#6GMs+i zVZFAkLvZ%;g)7!`GA^*mja~P?Aci+7?_=RbZM)N#I%*0cv|jJ(YePk57-wi~LqxYYGntop?pu{^qH_uf;&CT_QRXGHySnGkeo z+iv516IWMXZni3p_t@-wJ5ygS@>Hro2}|+r>rqE?X8Ue#JHGzpZL1Hrpa0{nO!auy z6U2G>-O z2%}_=o|=EeX*rG^Q`lvgR;uc6<R(`$W zjcdZL>s29}FNHT-Z?*mOZ^IQ`-i`T1D=i92npvV3-S^u!S?j{`o_p3+Zrq;J+1CC2 zd1oop)Yc8Qb=z6fqQ$;!>UUyZeQWQ2U)T5`g{qVJd&Jt7UO&rSo2F*sb@*+M#KGOU z^9-At1q@r4-F{v1cHM*xBBEw{Cas@)=!$F_zoOl&DIcy(e66}~&7lvWtBx1@ulsc@ zF)HZbe!G7gr%hdx!MemT=x?g74C9o`wf=Ln%noEQe7!b5W8)^J;G$jGFIhPrgcP5B z^YDm^kl9x8(CyKGPEYFMVR$_E>(?fMSAUt-R=EUixa+iMb=<@|ZpY^Ry8Yft#(?>= zs@;+=iyp4m$)9^<-I{g0dsgK+#XkFa?S92I&T6OgYHKW1bxl?7o9KRRuv~TdDq~WK zxs><1FX<%Z1eZHQ@O z_~Wi}NBD)R+{BaTZpdp(eVKXf^G)Y4hod~^O)D(AH(p@+I%$5!w)@xCOr5lHW=JH* zb%uaXPVG{sES|72$u=#v32e496kV8~WE#c)_8phYuD!qR$2z@Oa@9E{#9!+{RO6H@ z8={|<6|T_QbZp7?9WyO1n!RZh`Esq_spgeoQ-=Mv=k@<=59R(^7O(&H(vI8WB6KpD@$fzuIXIw&i9_ozV?Avoc&%o-})%! z%JfdeGeemqanYqP9aucHj_u6~?KFeS6Z~o4-DG%+xA0uif z)y#bi3xuv+R@hd0%;>J}*NB_#(V=_yfwx+t&)hhKJq+Q}nfm_a*$2!nJ>R~~yg$v* z>u8zH94{Sj1$Otc*CIx{gZJ!m5jHQJq^?YStyM1;rk<;DIhYZ74NWuUh8PRZF!lUNr=?=9)H zkZ%2Tbk$z&;KT&g=~@e{WJ}kxzuqsn@baUx&a%(G*G&k^y`mSfuxe|blZiW9jM%-M zUv~9%-s74wP4wO5pEB+yTWmM{_R=+bf3szSpujyQ_IdGaa~N6_O`cc!_iR{vah~Pf z2`2?zS*IS&Ox3k`mMFToM0DC}eXp<0tRK!fa-A2vwPu0ALZ=zawi`7)QZDD!f9WaZ zx`#6>&Sci>O97t_v~%58WnZQF=vHThp3>vQx;yK6z|x=mM3 zz3tolDQn}tikaOFr?n49KTe%mn-Cg&BJf`H<&EXhU5AXPJXpK=exOHlh_!C_^ZyJd zmTGzhO@R;^Q(ieP`F8{YpT9j`JNwY`&mMN|cQ${YmVV+{eI#_dN7nqi`!Cx~39YaE zI}-|LtefzKL#?r>;>x1?8@P*qLw9W~x!YCuy!eIM%fF}p3cS&;Y>m8{{vNt&_g^MD z;{b2j^{)cg^TnoiRWfP5__25YHHnZti$pHR%{4R(iINI+7A-VRoMkEBCDN~T*Ne{Yi_nB?8D|kz&C*z)N8w%n*(58$krYD&& zo&W6fRpoN&v%G(k7ML9Hvx;Xa%*|lXiJon+Yt@d1Nv3NJs$VkwdR(luDfiyp&zF}! zt2Ht+nHHJ8@=EK~>j5HF`!1X5*A#~FWq!M&xAw$AnN#;(S-+Iqp$prBnqL|6cbG~_mFjXYNHu=7eNl;Ki7eB?o!o1>uCI@bt)IKE zezPcB5SN&(;0=p37psGBEApD9`()QEt-U?98hk_u1LwhF_Dfqst&-mzJvM>2VcPA} ztL~^W?vmxQ`hDhZ+1rYj*)=i$+~vfWCPke6%^bJ!!cx`lq=FwGKIAO_8@>HMgZmRu zsT6oS{ciq$hC74wb|B+Z>5D#VY+7_VZLZDiGr3jv%nz^ZneyiPymfjHvMUuFHZ$ie z;G5bN9;cgO7F~3qbBSx{oNc>zyiYmyZ+*pGHs9rbo2TDq-7(qtX7;Ra*99g7&pZaYk>Q-Q8tPFW#4TNJKLq4&>Xd`P{%vW2JLNVTt*3A?K!^y}H`| z6!9~y=v)U-GjCIu1iC2$b5gqT;a3n*tMOnE2kd1nq~CjUG;y4i|dKlsgoqY zsP6Ld{i|18k6yJLkqMul-}bLZdxuxXi}>|hco%((eYx;`$7;oDvxyDN_jx~T+tfDa z(jI|eE>W$QZ!aIb;dc4J%PH&^YfOF~^V532mOHLu%D3z|j!oLz%1uR&ZROMY#kR|9 zLW=3C!-f&>za&e_BuI)kFHhsS5@nQiU24mv4VN`eD{N(aSM{>DRdd>=G}F+?Q$D+9 zFARzay_*p6`{mSF)77Cz`z<*$L`=9{XLA>K9lqEkk-{j*C9!Vno?X3_Z8I-9?Rxp? z{WbH7r4hDr`;E>ezY*h#*PHlq)$1Lvn)DX%CM|pQqmk!%!nV!tj9+~X@z5O60G~MR*Z(dE9xUOymbjY9JKxpfc53B>qftkg zdLt*i-*m2qw=z*wbff9M`&nkc93mQ%rabs`eBY#o{Rft2c zZlUHqI$?=TGnG#0K3MB}c}WSw^OUi&c|&y!xi)Oz)rNAMiZjuZR7lY#A2cdXShi9*BvLdgPW~4n9g{%I_o`e z`W|<=58Wa=k309o9E`bEUVeT5a$)~D3%K0Artmu*4cnw&*Q&VP;o%{pyLWG&J^WpS zdDiAxYj$tfaX6EqogAJ&Z`FebRdbp+qNA;27K?9S>Nu+u86U>r{V>o>gg2Y@u2+xA z&26<;zaCACd%x_c^oiKC>u&>J=UmMGc9%cv>Q5&}V~3>mR%dNrcN}TFBYp9g<ekzO7JbEVc^#y>XEe$D{Po7O?>%?a*t~6Hg(s)1xx7&- zBKmyH$GaU$BBD1m{xf8CO1bke^b{>m0N-eEVP%NMyp z0fsqNUjA3)EB3tFx<7xl$SR{lf~Dtn#r}=h9>MIOux;1&*oVt2mLAx1cv1hp z)`V`&3w=>t@&3hewo6^0B0sYwWP`37WA_b%n@z%9yNh?9Uten-?!jSN1wPp5<+G!b z3m$dux-_e&K|J}QPho@IRIe}I_hTw*i+}WGdsIK&ovO9*>aRlw7z_flm!IcvDhyLq zc)hTH}4chd`oJa!YXw0OxEf<{a%l^v+9dpy!4~i$S^Vd zzSG5XijAQv4a+W0Tg_e>@cEDWy1SeGW1UMDn6|BPSoT`xqsC;dl_$Nf-dn%<2#5Bj zDPi|ai!a}c7Fcp?$pf+XZ<`$|JY|1Gbgp@B%33Cscf`uzR_RWKsMU%4oZjqOccXS= zn77kYewsY##=EJvS${dD|8_Q77y4zL@97p1R_@qYbr&VGm>n)yY}>c-mfo$c z2g1G8Yl=keZh<8x0HpK zE^A&AbKJke%rm~AB*)t7tq=!a1DmM%`;#kvGt1>WtXo@9GBuGyEkK0da@U;|H&w1o z62Jc95mUU$Vb{IC`u1Nl*ri>%eXr?T3Gv-sJa@z0*M5AAJpE(J^ybhSo8LdLtS~*a z@KWYx$#aVhRTP%#v**s6z+3os%~`j$UC&=K8fdWRO+EY!eDXoMW3%~WkHF)OGw$iG zE!02y>-`ZA@r`_wHtxA!>Atj?XU=Q)JsYm1z?L~kmuQ)>2yR(kD^{=Ep~|rJqL_|S zqukNE$16^q^m_BdwvS1Ii+AhE#cM>@HdxM7(8^o=D#iYwSKr1>mp@wH_7r>bt>AZs z*763cjSr@lF{hW_KR;jGA??P?N2}&L-rC2gQWY`o(iaCL=Z4hYaeLsabMdXd%WPp+uge$bZtT?6+q)=jfBJ&gPtPo# zx^3@e{~taZE=J~AR9hN+pBlm)u;AtLz&i|EW`F8$%*^PB&Gp8b>Naa$xbhyiJuekCrU+k^s-3y?z`3bzD{fe@$LjRuNm|Ak<+KcG=A2X=F z)=WcL^18Zd`lMqA`*lNKzq-Gh{iIi@s_M?u^B3wKT4J_0=FQPcp>XyZJ( zYx(&ZNBA6OSy}8^2mM!9~rh*|yU&lflY6=Ki#)E}|R;5fNrr^gG!XI#!*VU9a={`n8lUzdpvDb1&|T2y$I_ z>~`MslI7DarzvptPBHqvX~DNI)AL$4B>jjJ{q*!mIPaTfE7s;mHtkL{x$Ld;y>5bZ zxEIHlueV?FUTsOcJ8{jgQ+>9fGnOh|-q^G^ZkN1E-KH-B=RB2tpR<>*w@k`BR8~;^ zeX68^`bFv4FEU@$uW~ue`XDc=-f6kE!PZyekN?h@z-q>KXveP^Q~VfLZ=UOZit{J$ z^|djo?hXgE|1;EF)9Vh~8~W(3*!Aowd!LBtR;}K88+6!0vWWN^?R&;rb7wom#@)Dm zQ6ywa{%+~l_x&|E^jh+lJKI*>soVXLfwQrgZ40=wbHHz&+w927o+P1&FTvLsvNNu3 z4WGK+YyOExT&fM{)gsSc&0TxZ^2{a2=nd?3| zdC;rvsaFc#@@2){+_mz?cGtL4{WWPvC*S3Z zIvbIr)au&o6_q~w>RyhQ6Q+pRI^MVcIpgSA*~YLvOZ5b%?>2svWn8tpz&*rsrp~Sh zyVfZQ9%A?|n)7TuU+*(!YvwHRo|`2Jd$LM0C#qeMi2c59=F0hUH|}nUDp@YkdbPt% z(es?0^S$7^{7yF?$Er^==jPvF*16!~y^n`qNi8hG&TE5<+A#>L<_U~D@&+w}q-gR|m zn)xb2F$aA+(K>_3T8*a1fp=%@5@tPk&SQf)y9?*UrMkOiet9i;9Ms$%vbt)o&cUK4 z{-T{bZr{JhxzIE!bhVS#?6s0BQk|S^TlW-KO>bn|n|Alo)5je%cRO;i-e>vRC0c72Xqm@3 z>TI5_cVNN8yRt=d6XG;7n`cXN&;F4#={bi|TW|i%;y#A&;sKd^W4~hc=6m@s4()DP*4O&$x5F*{ z)O)k!esu9%Kk?GuDZRMGZJoRL?UhC>lDnPWE<3Pi_8RA?<LwT>ydRYn0`ua z6ABPgZIZgyWA;q^r0z1W@PhaHB+{Zeyj|TG*eM}F&% zpWwrHCjDSW%CFLy){{LBm~|g2v6^$Fy6{Hs@pzj8 zD=4<~OWDGF_x(n5+8tE(MJ4vdeNLJrx_8yA?@})f)J^B!xBY9;R@NE5Mzr$%4kr~s z-bPJ1L64Ybz?af3-{AnbmjQ>+quElU|?PxY;C1Or%<9jY5Fa z>gceS$34zE1r+Rwcx~?#vpdSdIj`z!WyGnrtl-^U_m`+#>{+?X{L99Q%w*K z1arCEUsf&YZ>DspmoYT?}=3chNu+uYHhxNxFRyVN(On#+v6>AY|D zUW<5iq;u)gU3M;7eMY&pakFa{Pq^~pMeP@tq}5Cpj$6I%+ww(;u}SQL?z+$&4<($X z9VE{?FrQKojOjb|uSbP(mt2?PY`?YaU*4~`{?Aadrfv0sJBQ{p6tjFOynS_=mVk+- zuj`FnyoZdq7FnGRpSL%0y^bo&i4yJpmF+HSTb?GYub&gLxh-n%z36A3=d~+$!*B(1aCrOu>0P0soj`?}+`M)ra# z_KX#q81!D4c=fcZa$S=sOSs#bDWOHr>?yCZsTcsopK7wvdez!t44e7Z?n zMf=j-U2+r8Hm%*T`At2}gZxmp>_C?3DbextzLwbA%-3uj7jx}??q-!0c3HEuR`}+( z4-54Ly~4hw*BlQLJNs#eS-kf&&TAj$y;ah<@3%2jLF|B| z@EOm)b0%$U`{KR#bc|$A!d(Lk8M)oR1ZNsYa36jj-n;$YE+$nQmOqznUa(5Z zQ*(#O-TF7KozuRCzkZevy1VjVnSfx@1>Wkne-3TTO`pN{)Fy-Hj<;$!fAiP-9nT_v zm95n8T_ zF1`ANzx@7zr4im*nxVU@jyPO9a%D|0Z}GjLi7Pq&tX}USzT^2;wVx}_O0>RODmU9S zZsWbACs$VUR$txBq;&MzY>~~E7^K4EEn=+PRzGnvei`icZf3FGU)9)6x~(owjXb}$ zikTYh=?=Me=CIJaWk=lRExg1Xaj~^GTeIfzDeGRbgud3qFHHg3B^m!2mOX6sKBeeu z`tq`{sO!R|A%@|?a$bIq_xjgNdD{Eo>C~oea{E31&e@pl&r`rq^HFo}6L#zOZjJ|h zq|SXYT&x)o_{7 z;$@BC(X9&@Hs<9VdbR2ilgG6!2j4H@e%*Vf>*V(8^7DT4XMQZ zuYUX7*!%Hlgyr(v0lT&OsR}N7rXtW3B3c?3>Bx(_OVo&UenKwaHlx zq35G^ygQ<#sl6fa-%DX0@x~oTBDIy4Rz&^E((86vm>9FV;0pCZRuIm+~+GX#(y&s{G)9A$F>O86Gx3ITog#hCVIcv~{ zIt_D?fQ>Ku4*PH|VayWXi8~OS#^I-Ud+NQ~>X)~6IXH%f{gO4lzW$MY?2m?vuhc$q zRHke2=r~>3uJy(0OZ)8;hc9fdI>tOt^pa9sh}jGEPZl4zGF*SJoU~X-sz3hkhkIU( zHYXpsx~*WZI_ucV%CjQN#K>o=_x}}* z`@}V*^QgfK1uf}$*4o*ur=NCM?AXBW`_;JS^!H~m%=uToeK1d4?Dca^M9IE{L+{lL&l336nwMX*6yUg9I%$BpK_w7vY+a_fB z+v4$0_i$1?Cx$8aIWV6WQ;@Z!uFF0j&uiIR> zu*oR+wqkjkOj7%UuYO;c5!TWx{q617<_hoHT9LDN!@lzh zy<%RTte5xx-&A6@stYu5TB-NfhX;g=U9j{+3apEz)?y8Kc^MTCu|7%S<>$t9(z1Qu#_QN)I9tMN4hoZ z*7=3=gM#8&w65%az51ne&@SFP511BCGGDSuCT+L$i>kv>@g1(KgI?b(mQZS*!Oo~{ zWn5a=ySsPQLW6XxUC&w6T6N{t9oOresQcjwFKA_f@zp+&2dkQrKE}s?Yv|)%5Vn~& zLMXaQ^Vn_eGi_Se6hyMlwAW56evo}yL`R5;bw^xn)r2*?hn=$S+s*&w>~Lq&!Jg`x zv$NYiof6UAX1%Ux=ep!BhSc2FFH?{0e&Tw*D%7_z`tsxbi&5_ zH&;JCdiiYA3o%vpiikCbS&dvLL?4Wry*%QE+iTWeYR-p2tr=~{o4=X^KTTWvpW(-p z##GI`Tg(>5{~5eTr*j7FbdK;A#j6WcIYi$>Dy6%e8 zSogQ=uNJ53*6IgU#Vhd6jw|Ug>sifeGt_;H(+fz6&}$SYNEWzWx_<*ZBZ$ zc1NC&Q50Nq8TE`KcST0G%uPY}X8T+?_N#o#%Azfd`7DZ@K`faW(a*K4jx5m5%{VnT zB2{}$7uSxN&f+^Bge?fx2?`G@)eUQYk^OH~@Ww>f2j@N-mmIyoy?Oie_HRX}AB6Yv zJ_XOItTT30_|4S%xPC^IK20Ow`{^&bwT^$=GBtIoPu(yIEUB?N zc&#r@(p*YlVa%@wyS5kHiWa^0T{iUhW4*M4Z9lH2?Ao>GP|0$xZLKE1f7BYO9hh3h zptXl#-^4ebkw+PMzWwrIOwShg>pFV(*|NN46`D@h*2%dV&T5gnzG!ucY{~W`&SD#j zf>+;@xmv6pB*H$&az!)W)oE<28KXb#J`&{XQ)Rj~F6P?oSXI@GrxK!f?nalcnK*Ol zmM6_N&bE(ha^9T`5S~A$*jz1ibp@YP`pUCX#f)>;KU}f#>5Rnem5;xk|M+*##96x@F}z(}^~msW*MWnXQ|>i=)@r!4dfB(vJHn%; z>-hzSEi0(|AeGTI$)GZ9d--7>x2-NwEn$!L&DgvktQ)%g*~aYWzw5&nf z)oX8meGoT0bE0LFLeH%&U|H$V7ZL?Y*&x1Mj=d7Y)sJ->b`C)jJ5WWGf2tgif*lTAL#8V4z#D&;vS zvCzp&I5$;Ei-E5xL!&xB=6JZ`&XUgfl8)4*J*DM)wYJ}REwDi=rkk5<*YQ%#2q72V zsrO`}T;?!+SzfEOP+^wfi_g_gS2ksJiM5}4==9Ejt?OIz6nQ6xOWR75123#wv;26fdLfp^%81KZn|d(7oy7n%9W^4lyi*Qh?DB6#UM9 z>$w>Ex;K2?KKYxcc^60}WEeENamz1JVst&ia6IEJ~rO8Q&swx zu7y*g4&S*Op7WVo_iTW~YjNpwDoYta7xe__y*aj!(TfLs5ZA07`y+E}%eP**5StdZ zO7+sMcmK{DkP6+sw(9rlZKgt(HpXraiHqHx_B@((kBhTOSF)kdDo3ZQm)W-M{pD4- zbmhV6>%Ffpdz{pynZ0|Nxxd4iDqoGYA!n;{a z%57fSvn!`%2<>7zn0HTPZR)Y)Tbme@ZMBcZWSfWoXJEgqz@(CS`S1~`B3aq^BRkm> zaz)!--wIxR%eQ3P`_;>gZXP>u(6Q~+vc;L&5gL42nn!bkMLFk9=$o@4!t1zowyn{F z55J!O_;=2;k*z0)v+MW9h}C`*wE4M(oSp@nxp<-O$bJ zXLv)dlZ(96aN(n! zjhf0YJ&X0_z0#ib+OpB03+42foEu{DcwW^jcRZWczD+*Ub=lqD2Gf|7qz^cJKK*cQ zogm-ZrN!sIa;-bVaMx%{am#CNt!bXI_bu+f6m}`GWaal;TNt_0KSFh7HrvaH+!qdE z^N;I<9yj`~S7pw&%klN$z^FS9q_Q_XulIP6Da@i?sp=5nakc8o2JMI=Cyoa!ls-0X z^PXhGwgoZlqOs-O&pSO29^bgN{E2CZ^EQbEJMRDc>n%L_#--JJ%POvT8!qKurTxXj zHN;k~c<%G7rU4DA3k>?_eC}X)!eCOeWXd)NtA7*xt`Cg=*3wFF)fW7LTfh7 z%fDonwEf1E{MFNMX-Atn_2lbZs5-8@-*#)v?X};7Ei6||2^D{pvS(sRoWiPg-)FD7 z==4q}Tv_Rc>FQV4mg+M+Qwhnt?eDa+Vf8_+Ctkt))n7W8mhhft-L&$x??;a1oojO{ zHES0zEV0N=TgyAQ%K2z*#B`C0)00o^`+n|fZCauE;?R@XrOWp{-l@`Z=+&Nli=4HN z4+1>rnx7M1_JQ4VVZ?ba=O2j%0n#jLH7Q1MPrt4TYW)!B_2f>f3-hjJKNtUJm@vrJ z5wcD)tGholdTpN)leH#qYAb(j{mDb8&Hgi7)gN7VH#pYar8@L5Xvf9w{&wa51E*Ej zWPemUsj6~mL`hs{pL^&8Yr)#M$nZ66wW{H%D(3IEyeM?bVCFtsT$>+f{mZbit3lGS zXkYB!rKybiKQVXUKY2)Co=BWnLNApxcuHDOnImK-@O4{ zpIR<>M`+g12R3_-+>%q)+sf`9#@Z6awAbchb%<&1bJh>{eedM+x60r0=gp`zE(mt6 zkaFJltUXw|zba|f;gDO&!u%qV37OlYz8*OdEp*gMYX{rrYvv!NxKu^w^4`3+>`#NB zv!3nE2Cu2AZ5(aQYis_dc?;c>{d=|6wD>Jc)~~|<41S}XzCqjR6KYDa5Ox*p=MAX~1=78>GU6*uZ@#oVLntOKYCza3h zcXcZ^JHz&O|AAGlzL(TRt7Ol&&gYh|sts^xWW68SVjS;%{zuT1xps4nAEqAy$=QiT zsD}IhHPPAHKFH23*e!Ts-u&OP{q=|c@U`rn)vRUo>z|By&#U))HeNY2MKybtLQ2fN z#xjMMw;rrAonoZ5Vqf2()dmc#uU;oRl}h?LXz(bro|G@&vYk2Zs&m6$_UO&N4^@xw za98d9H~-9br8{%J_7uFE;~2BB^^DLPUR%9T&%CW}tl{xBUS$aZCb9EpHkS3Sjap?Q z@$#CbgxG}KlW}vi9?v?W6_~BRPfKCtbFHOu$9_GQx+5F7lVt|6dl-ldEZv9m)>c! zW5VXWdtk8e*6yW`jpuxwac)(EZ4CEjsU!Q^r|w>NO7`p5m&Oeq+UK&e74IBZ(cXMz zL%U6)_Iu7?u9Z<80JZoSSdYc}gw!>WK67J4RE zG+mpnoVlMEY}zP&TJ78GHHGE9J{kfSZWLo>Zy*lPAxG{w}`~Hfb z4hJ&sPPUHy+HBd{)xB%!&baTd?Ke--3gC_OYg+f3#cis@=C!8Feb(LJx|A`4mz9~X zswDZVwghA4fs&VZKm2EyyRUw;o?F_1C5;)^-p4BWu|2HYn6=*N%8dxl)Ke??+GDdp z+wqxhi$&-4UEXt@r>^;elDL!9TlLJ?i^t!8d}u%M_)k+2jjLTgpTZPRy;E=s3cj?F zQ|Fp#q3`X|n~FD=S9`6wAD&%4bK)~E%Q#=%o#!5#?b*2Q_GOXBf}u$tTe9t!*iT@| z-7;<4l)d>g;;(R=Uh_P%Jg;2Hf#*7d^+(MjpJiT2z0co^yjCh&y=Iq{`H0a$dv{lQ*L8|X zui14XYr%m{V!OJ1@9~Cp^zaB~zNvjUtJvo)``Xsli2AP^h`VxWZN>x>R@tn>Ow*D# zGF(Wunzr-%4AWU!U*68!o8-a!bZc|dFE^|71y|!s-W&AIVhF6VaXzwJaDiC;tn`&? zv)3D!f0@d-jH&R_59RJ`2gam3H(RfU9$}fdHnaJ@hxm2rnWB@yr)}CBznr*n$)?jb zlUH)+GHUEj&KEfo_E3w>k4157wvN)e63$ZN(Cm$OEcpX2hzd>K-S+r}MfZf&%fr^r ze5R>V^r0!~x@3Zdh*Z}-`{%z>SdDaFy{I%R*4o;;iZR?a>+x=ZjwS03y8l*CjNKbRsh{2RIcSaUz8mMN+_s#O z+xX-nx5~|2{f@ULdl`au&sF_?*;oH|>G@U{jos@O9P81$#kXnS>uHf;=tu=TR`=Y2jN7xvfM zx$g0r4F;cOwqBdPcf)Vj2npWi?AsTnEoj-YxvS}k(CItnMen`!{+7=VxY2UCabM5wdT-C*zGnBru9$oXd%5uu& zJw7`Q?Bn(=ZHWJK>nLy4v#;lt9tbe&@=&*XBO!uKKlbne;1dpwq&t}bbPa8cZCJ!Aamm!DhkZT9)l zdO3RS-p@gsUlqjczMAu%bHm+ljaKi~{Wc0s;C=wQ>dy3OOGwy}Yrkt(+2 zIz4)AsL-;#X)Aa#w5!g~S$V+Jtm^@L?e>4=Us6|kt&e1uD2RO(bZ9P<@$X#*Q?DCy zUozCWTvC0kQcd>N`s?S{lzdM0ei7&(#(i$*=Bk!gi+*MAvgY@AH9>9Dq@T=rb3V!@ zX(-*@B>Z~*@jnb4CdaBK2F=aRjsKX-x+UX3L)LDu&;J>GsNXGcJiewUgMI$H<*V6d zuishk8NwAH-8Zi#AvcHZ5u~IO3tXGo4K3*)=L)OMx0n)iGj*Qlm9}Y&Tsk*yJ(_Yf zPw0(sBX4fhX%5A^OtC&!qu!J=9sXj%>ayhB!yPyHn4W}IUR`~E#uCe=pn`6XI#Y9W z^zlExY91OGMZS75XSQnE+>T3!?o~bSd*dju094Q|C3H=VV*{f_$&~pkViz_SiyBA1 zo*R*p%&5b>ROcC&>CC{M71@iI|Ga;(D|m7#e@fQ^-=pOYeg==(R1;P(y^}s6bDr`w(c2)pjQy?*(c z4Ns;g<+WYh^xE*?zoW}ux{H}q3QH7hT&(K9u^?=fmXcUW{kzc9VP^x^T&q1<@W_uN zK1ehz_a&Qx?I|n1x}IPTI{8Gr`7{u z8}3Q*Zclv}eeCtq{|qkNx`~I+E&p`C^UwB2F$aQ}DtpY7)t}B$d8p1Q_Tch2Favx< zalzyk%=3#O3!R{+pTRf+COIhD=BO}S+y<5`Q)YjHBGp}x`5QXjlb3P(2Sm=}P4z$d zr&C1lhJ{zWow4fH_TAGiyf%7!`&zWK&Y>GQuLZqtS{^79nZj^Xhb=FXGBcYT2{)q?Im??cUw)k>aw@t@?ZcZ)9v`T+MUGzD=>AKOcN+ zaTJkQp1$Y4mrvEEuX8K5r%f+;{hz^Qa2%R^;*4O?W!G!mXB~4F2zlzh-tub8tEkfr zBA3=Y^_^9nK11wiX>4|FoA_;C(b=-16Rs|CeR$QeZliw1&BBuG?x^1rY?=6$ZhdU^ zsXFyzS&@l|hr(kOR>)shV{_AxLT8*uNx4lJYw{fv_JLWTGTc7ovzB1=@ z821~W_V!N}{~7cSWKRoCG@gCk=X!;|l*^1N_N_a1NQE>tm0S@I?dWtk>cw~8*XVB8 z$q?39+mi-8R=e4IZ*LFhkknr2eRX>3mrYWO-KOplllc6~>CC>6guvCuZl6AS{E(>Q zjI3Y3T+e1DaT_OU&%Jy-c6G60i*q-_rS@fP*2f5zxSqISY~U3MQrvmi#hj>zbmem-+A^;-E;Gezj1RPSSQ_^zvJPh5304* z#<6U#7X)6v$MjcqVXD-%wR`T*dG^h|c=nCI=kk-kTkh?@1LdA_Sb6BId35s@R?(7u zetdakC5EjbNAJ(y2n$luhG7pv@K-2!~z}}(ayeJ=A;t) z>h`9Nymtqyp1*MG-4O17M_42*L8;`WukRP`eU1L{nY9mfw5GnuuPr?CO3nRDZ=U`;eSvuYONjskU5vTYA*Z`JU~( zz6v6o#_5&=I@( z;Jj_Z4znJ<9XSVYKC=`oe0Of+1><-B87}Sn{oZgv7uWWyNxKm z&t=PfY~0HdwdaPvdiqt-J8~<^ll`qZesj&Zd|qh2-@DA`i3UcwX)pF({i{~!o$^g< z-$w4GQ=W_d{>ZMibm>=(WB=ya)SP;CYv;_oDLdNw9$)Bha$K03CbmBA2H(Pac1n8< z?K|)CzWNsY@C;~YrKe}uHQ(b~qdDzf#4`=uhG?zr@BcA6ysO^0qj%lQ(nsf?Z3sQ( z8|yoB&2OK@Y3>U9Go)%Zab>)cJpQ-&|1Aa{W<~}k24)5Z1_2>Yl}QvJ24vubAmE|G#K|&&lZDBFMZkfjiGyW=Cu;-3e=3t? z7c@912so-t@`U(R0TwV&_k*ogY4Tv1fKw$BsuoQKiL1H|*-ljU zCU2E#k*P?E5vHv(Rhi_OvMEw!)3sUCGIck-G@Cd(_0mn-NuDb6BezU`;q&*s$)=Mz z)1tAPzw(*Nq?0MzPO9v?aWTwO=bvZVCH*Jc59%~Us;ubdnRZfVzK8v!o4J#2>u$T9 zy6tu@80l`iowMz9?zWq`n{H>Ss7&$Lw!NIPUlX8YR{Q=8)V?L+bP>lXFd^* zcrqCjeF~E~RVF#GOmb8~3*Jedk7nymiq7418e%(`jD$F#G+~nHk568vK_cPjSSt3M z2- z3KfJ<>^yHb-OQbKJ7rUJ%B0&WlRR@bMXQ2LyQwmXi)UIiA}-MV?WwXYGG&srEy(*& zzk?kQXP?yFhBskM^HiO5MQ_vT)J->4ww(m)J(;p8I(5_S+-=c0+dz)NXFJF}-fdx? zx|BXjcNGdlb{+~B>;|Yv>ZIFm zxBbr963GiP87hdZAa~pCEb*JF+q_e@dFxE_Rt35IqzcF-o+^_fb*Dx1IrVbfSSMkI zT`$O}!`3<5yi=z|>r6YXJLzQ3rkg60PNz=uRN3a40!o4RL27W@p4)dGw}R8@EH6Hu zlE$szcJ5a0HK3H^tuyI%&a{&{lTPYxyREb7bndihm2D?;@(yuxGUL;}?cvl(-Z`5* zQzo6%-E=c|n|CfK%1*0-65&lk5$CD8%{?8r*HWic-f42)@ew_-!;JObHtAIBH_zNj zH+83Z>TWuzx+yYe6NmvSMy5roOgmk(?Y8RnmoW9{=AQ3^`+2*Udg+TeOycu`2PK%syyBu%O-OhD-sk1FwcT!~Pw%aP(Zsvf3 zB3gCY?UYHUQ@5SY-G|$7kjmS+J5p0O-Bz9EnKSKX&a~4xlcIA$X+AnE zx^??5k6fJ%(Q_eA#X_DG-S?ki&HVRUx4l-oe17}C)1BwyRi@>e?DkZdT%WS}s?H|< z3A2=(vFOC*XjE}Cp|1&(jooNr|E6vY;v+d-T+dp$Ry5Z$HqX-Q@pZG~-+lv`p7OeO{mz*wefjm)4&CY4*ndch3C>s-ULC+ds2&)j;+j6t0L@nRZiW(rukd zw{<}|_O{BTo4L~>RVJNO-F7qQ%?jbgQ|9ap*V!D)yZuy(y&z|U6TEr@8M2+{DX7rD znLEilXWGe}Z8udQ32~aY&a~4xq355YSqJtLNF$VCZHqhgtFBi{kDX~*hU#FbMu^}Q zy-CYcK@K>bI_;*;#_-&2w^KLWRsj|IpmHC{B8Yl)vMr2PcT;5Qq{v)Q1+z(Y+wGi5 zo;ll2s!WSanf7}AU!JfwbS=nc%Fa6&i{c)H;?zw?KfTZ7h1KQAy5Q_A@iU6syj3Pe zr-H)mw(ho*D%+xUw|S~=@>ZR8Q{!2|yT09U#aI}Jt>$ctPTdxrGYORKRknG8T0fxD z=d|vo=t7m|^M9msXFq!jig`#C4I-I7L)r~Y-M2x-{<2%L*nMy^Y1{d?+hiX5nf}G5 zAg}Gr->uwh_Ouyo^UMX;vtaTjsL?X*wC<+U;qz@*3$F<;##wO$m_3}j(mQ8br0S-V zDxgM-C%D)@nY$@6bz0Pva}7NGw{y4M)SU#16P0bZQ#LWGHbjG~Gf$OCw^Qc-;KULp z5VvlBy3ul;l5I`3Q`wYG&;Ja+J^!@)XJCu{&v3iI<4)Uuh95$8UYF|c@wCj)ZL^=b z<*nrU{|wvywp~9uJ9pcg>TR?0)$Z?{w@qE`!(G?KTyB$^6~umLT1{|&aBI%CO&rpb zj!bLtdwYXr-|eu&(NgUery`;+_^l98U27qnyM29b>zUl+TW=iPb~pdVcl|YaKAUdm zy`13pz{~AS^$+>#4?_7GR*SzhsII#qoi@Sja_+WUFn?Um-FDk|%kA84vvbX*&2Fy! zEvIsU-*cO1?pXoO1G5-j_S-Q3XQ*L|U(3#B*3h!$H*>DjYjEKYEv0h0YX38Ai&mNB zox1IG^0M3Y{~2B#Uz4eS@8$1=i(M(V=B!w*y5-l^H4FQmOwLcatz9Jec1LQ;BvA3M z0|~gvYyUHp-A)DN=9{gZxATAhjeIDZ`uncEPlrK*bkNjksng~~ZJlKCWRmI|>BJw3rs&6~L z(`eh>z3LzB{<&h6@eYx6bDZtEJ{np|g^zDYHA#d>h@4{mEs@>H32TV>Me zoK2o8(>!x0Sf{^{*JOX?_;+^BVg|bhVuIWM%wB4rsCGN2O*$yQCFk3ewcACWZo8Q~ z?PksMXpRGD^CWzx~Np0_;B>hnJR>epnM`Muk^n{v(mMd$2#omm~Y|IN#G%O$*P-#%aan$Jv8-}dI0 z8PDHaZGyEaycs9^f8CtB?egpT>nH!rzioAY`_pal?>E2Bo%Z+b{#B~mycH~*Q?_-g zF7ZyCG;2xQNtI1qDhqF@LfpE^9ACqK(|xbbqyO$@Ley@$|h(Z zMRk&=3aIVusS4`JMe;r?5&ZN6lr20}CIza@V+HxsQ{{x8$~?OT3=9k$vv21fw#?b) zsXFO2I08T|ewAt7AdyYps@ra-PD6A@;b}bQ_HQ^FR0lwvhZzx(sV5w4wl*$I#N7tn z%DrUM?c8bJshduxfGQwRcQa^3U)4WwS-A>&W zoigb(sOK=vTX$2m>bBdeoqqpJxN+;foxANg?xz3Eob8YKo(JRAehbv}-xR3>Dnda0 zUe!sSI+ISOZ1PS4Rm%6@PP>z{?Pl(_(=IKibI;9EU38KSH4Z^d|7kZ>r=8Z>b~<;{ zO&w52G&&VjBi_`VbS5mBSz^IirLv4CRhQY*&VAj%#B**ovU`$oH-2)rMdyNgZs4E; z)vuVba~oXxd*@C%sXEO&cavx8wCG$=`{8uzrjt3FyyI=ey_bJRwho;QE&IK5r-2IK z)JY&KR3=60O!Cy7b~8)b+&L@{T?=yb;V$|?UAV^#=8QLWk=3KK7uJ9R*;{uLq)!zI zsP$MRGU=vn$M%MsmeS~2KrVzi>5lQV(Xw3<4Unr zAhzHn^CTm4Hbtgv^40}4;XHLV-Ok-~Qe|4S>Za)2O}7dUPse31Vev`Pm7AgnD4XhC zKketfOZk6xoj3jDsWSQei%Fh3_iDFH@~pjfGxy~@n`KTq3|<+_yxk_8@?PdQM+DU) zn_N?8y;lGI_vz&S3`?hbs!ZB(z1mZC_F274o~q(Eb$mY9T|2vPlJ8o^nukkx@(h?S z9YIO=x!Z6L_DnS=;B-)$xS}`dbndoDUC?O9O_fQ}pi#F?r*pPN=1e-DyHQx}0oQbp zGE_$+iL`}9gL>+dPUlVobzO9}-OkzMsXFas$~2a_8+9*u>TbJ+Q*Z9J+jz=+(QS;5 z;>Bsb^L@N$0QlTH2yzPe9CRr_}2`5y}Ja%)uvjCer zphZ3`>wwB#NRjWUn|E7I_{y7Y&Y<*&N!whE{Ki%i)T zojWrrhV6}wKx{m&W*OchKXb?zi8Iv)=|T@+X~CfdzgpsI)t&I>}pS(#_m$ zrFWQW?_LKNx|kjZi`d`0394Pejb@ceo}k9kwwo!Sk>``D+wOK=Q#XC`4p);H)IFVa z?Cqu-(`Q5{Ogo+Qadm3v>AYlxwQ7O6Q!Y&gn~yETkkY{aBMiEN42(=Htjx?T%#5HO z9RmX+gP?$-VS$1{Lc<3K$H0KZ35AUZFHT&r@!|hl3>=KijEwdIKacFKJXbvDx#jJ7 z-xn|c&#>kBemNcS&BnhhKTH2jTt6ws?8TAC-~W8Kwe@{#R}5-r?Em@m-{1cXfB!SQ z`_HidKSS+*hWGFPGyL6K|NZ{^@B9AM)`L{l|7ZC3pP{Yz_s$=>Ir0bp{`<7;Kf}M; z_x1ZhvVXtc|M#C^|L^kq&;GrwzrB0kpZ^TM{uymmw)uSC=JWXzl`@sxr&u_jZ(bDk z^XJJaOP;J&-tTR^_&!J0>A$ZXWMu6bTi$r-~aZU_}5mOz@wpcr!T)2|Ie^H_rtL~H`Q0lmd7fhuA2W_ zbieYfK@m??b$I2%Ps{dw+xnm3-hYOT`8%Gi+iw4#q5eO^^cVk*|7UpgpCRA={`cSe z?}L=ozukWi?0;}0^V{_Q42z%E+kXf7?mme4&+z@<^DXZG8TQ}#&mi{uT=ws%{|vp) zKY#uVlKoS6|6l!o2K{gQ|9$_vf4^RN(C=#(^LISk9R)V?Kf^yzn1T)Z{{270{=e^k zm;VK6T#hho*}DC=|1(Vgem(2{{r?Pm|1;E!{qD=OfByRVt}lP{@Bb2A|8GCoJ%9f* z-2cyT|9kO&2K#sa8D`IW|DWNH_e1UU{|ul1Gbo>%|Ga+gy?g%|=2u_02P^$E`~8=% z_vhW;bN@>Hzy0^?|1+Hb{rmgg{|x)r@2>vsx33!P=e>Kqw?EAP`=8-=?SF>r{~7AP z+kgIY`CRqgKhN`jeXsxbpJDgbKfi13|1&(ldvE{UZy@LIe^vkc@jr0t`S|Y-NaWvt zhWPq7wX#;=Wb^y`z3=;f|NYN!`#;0}`u_~~U*Gxu`QN|4@9W>c*lw3R;XlLc{|xWn z?)mqh;b4*d`}wcILG<_Z{?B#!zs>*7|95*2*ask!LHO>sUm(}--v908(T=y-{~78Z z|NcH79Krt?{sggY5NT{|Si;B19KplJG=qmXK{N6D{&%*2_rLznVE>=N_O68+Sc#FJ z;jCpAk%mq)czAmB$0{qcY0^ZqmJZ`xLU9~{LX>#x85 zzWIlU@4uf#UgY|#`2-@FWmvxOJJdqTky)`<`F~%?Yv28!0hEmA-(Sjq{N~^P4ByL3if34? zzVdnR6*u<-HQ^V<4ldZPA~*lY`x}4k)9=TWJKv8l`+fi0<*0*q^EE$lCDpP{^ggG4 zr~N;J`G1D>{~2oQpYE6V&+trUiDX{kugD*ZJ}Uouw(0LKJ@K;p&wqm)_@BY;M4|)=c`p?gvqaUgExFFv%p#JvJ&ywCdr1btX&V-u`FU z$Ww2&f6sr0e)0bd@%Jldyq~Ln@&12?zxn?ej(MbK*tS-m+xoux-hYPstN$~^U;bVF z_hx;n{kuQq`||Jq_|H(k`}to;E;0Li{qw#53_tIF|NNifdD`^tKg<8@sIUFcVEyLb zp8pK!Yu+BJcUrqqj{LT1hX_twU$h=DPG&$F!{Js?~^zgpb-Kf{i*2e`Mc|MUA@;l5qJ8Km!j(|g^( z*Ij$u!|+>i=_-7+(vZ`ai?>{|wt9p$D?$&+h*Wzy1F+fa-w%4E5{Z{`t?ae}DD;-@jJheER9} zzo?w(2Mh^`CHwmK-LgEr|1&rtfBXHPVg0xIpYOl_t-t^CKf}EG?I5#Y`2AmKHr=uP zgYKQWMcm6`X32lO`~7?U`}^Nk{b1eml0Q5CgH<_~!N>e1YFR0s9VV6qZ@=hD_Eg=E zExayUdOa2i-FbR&SH}C@Ni*jeyyGfa_Mc%=_1^ys$$S2J>hw?l`u@{@hSwhsCI9S? zRFV36r~dV7aA5{>3NrnEcJ7S)PeHrXe(VjsboBG-ZMT&+|7UnNJ9m4HXx_a0MqZ%I z#re8!qDlE*iI4evo=uOfyPqBZ`%c+x8(f2YzkmJn-}xZJzwdt!Dhf9L zXPEpz^xON_{~3Po+q<^@{{G+FLAmhf-@o7Yzqtcaxj+9Oh;rTcc@~J?|NQ&@`QVgl zfBoBu{|xK*|7ZCA_w$d57k+`uagZ7quD=hiM(#)a{?Bl7_J4-D{|tXYb@uQ741d41 ze}CZnru+WZ_5Z&AJ%9E;!{_(E%In2TF-@kSJe}?Ga z??E;8q5FH^|9*ad?I%bP9)I@>-^Kk$!4BO1{nqt=_cZ@A_|(?!?K7zV&+zfre}=z- z@BcHD@mIfppUeNB;eGurP&$m?S6v8l>GSXN^DF-|OnmMS;{9g;S3+QGLHzk&Z@>TY zpP~MK{J+Z}{`-IR_wVn0|Mzcw{`>EL{(S#leE&bg?g!C*@9%#4`JbWwtKR+Ao%{dY zumAe@Kg0aJFVF9J_P%`I{{Ia3Z-3hT_6x{}`L$2&z90Vc{y)R%=iqet@B4p-TOa}? zyJs(m1mU~)zk}|IhGE>Cz)5 z<=vp1{pnon>HiFOkAHWvk^R2^-;dwl7W`+h*|^=f-u|G^KCp2=zyD{r|MUG_aNO?$ zg~;Fczl-m_xBm`lOw}vz&j;1-`%-pqHEaL-{`cQ6(eEwS<=?O07yq9DRIl9MfB*Y` zhW_8b-~VU$4Ng?wUH&ut{w=!*Tv`76&rlC)K7ixqyV5?%_|O0TGrZ0J7ymE*-}`#~ z?ESmH|0`el9@Gv21rNwbaAV{jSo{0`47=xoYoPDTzwdu{f7hEmfB!|l{``D?{rarW zm0$idfD?ZI>wjPKZ-bl`J=K#wOnE8st+H(91e9Ax;4q{^86_&o!=FOvTm~T^Hha?gIA3Ik1*&9GB7eTu`x2Suz?l{ zF@V~<0)h&P28Ia*4Idm67diwsUJNLlFmdC<1qVNZTfI!6R_}iX<(A*qwyw>Nx}GuN z$Hql(@BG~P)_yyv!SVI?_x}vwa0fZ_JGdDOV%h)QU;lSe`Tdjs8UBI&^Pl12@84kQ z{dNBte!f4l!iCxOh8XuU-~SAM-+`KM&$oj-c^}jgtiPB3pJB-px%2-Sj6b?TesyMl9*1RJ&-A~o0VgFK!vC>-4F3`TlhfAq(7x=qmbGr|4aOpqy3+TTDa(H@ymGH+omv2M@o#y{GobX8bbsfj&_ArM zZT}he%m4lJgty+m9+cX^1-$(&z54H`^%URNKeq(6dbWXdwgC8TjziNXZT@% zA6zYg8fy3Jf4|>vclzGu2anqSGko8%{awy<%QN5<`k&$VyT6~Fp9kli{|x(|zXru6 z2%m*iYoKEB{?9wn-_1P#70(1)0+RjD@NfTr26M5aAkM!34B!8NRP6u!pJDyi{|x2t zK)D^uY6WZwQmHBtM||M}1GWBR`L{~5mj1~ucq z@B9Ak`Cm{Dl>g80{r>&u``^F+{bS#MhWG!%|LyZ_nfCtg^ZyxcgUZbx6Fxk%RGn=WH2%C$yUn2wxt+f>E2&0>Gg zPO_QwmG#?yhWGjPmS=tzY>D=(`_FLnKf^sx={hZ`d?rpK#E&!G=I)2S$6)p<@}de(9Uae?bXHr^n(-b^ZPRe}C%q{Ff5GG9S6$A`2N|$UC}#*RStCgXNhYdfUH$yMOl6 z^q=LjduJZXE4tr*%kcd1_<0Vo9_Qv z|3i%9{vU3Zbe{dk_5L&b`&Uvvce3}Vp07{8X4Q$a-h6x&ypr$se}>Q2`G*qo@7&bb z=3Td5#$~sitxk2E-4&sn)};~=;`dwrGX#BN>*oG`e>;J8W_fve*&q9WgJ6SuE`F2$ z&rnqRpW#pbs{ahn@Be48>)yL}zb4yEm5GI4SKhDx{_J*mUClhPI}_JA`u%M!e5z%T~=rX9!yuY>oKSTV%{|wLnGu*9hZ~xCAvwiRTkM6e{1NQxA z_+YPJ`zh@50hecMzV0i~dHcCE|KwkvF>o^YIH&1{2$GCC( ze}-+2E7}5!-+yMiEcQp{Kf`N6-GX<&P4>H0n4a7tzU3eP{=eV9zJGuJFR1>K(|td2 z+sr=nHt*1VF zX2n#$Oxa*Bb9$>CxNd|HTlU?~uKYJ|MQM;o@FU;SZMUp-4y;YCyIsU_jA^#5MO(`x zPnF4UD}F2UGsvl*I|`~LEVqB2bN=#w2CMn|um5MbdvE`LhPkV1!DaBjoc|2ZT>mo^ z|7Uot{fE){Z#Bq%eSUCIf8Y1${?1MA_VtHF|9Jmrm{+s@Kf}B7-#^c#g9jKE?gtf( z=l}eR|6co_;mv=B`_M8z|MzrI8LInxw(9riRsWJ_9C%+}_n)C1WVHMz+o}fD{|v@y zcm6X>41ess52VljKf|M}pG)hf|7QRd>h)RSjo#nhy#H4(;l2Mq!@ocK>-X1Rxp4(# zz<-8+@r-Tn-cPRo&v4dG?BBln&wu|F&-{M>-_`#NpZEW(zx|)#_}|j{eDH_?M8|)I zpO5Ds*$*lgbD;&^v--Qg|2#MT&rp6Z{O;5J{}~=<|M}1G7NkCZ|KIhFe*YQn-><)U z-+uYqzw!SW&U}=*2lCH+v;Pc#o*RFCckXI9sFAzf{^#G{KN5Um^+7s8)zBZcPyI*o z!QuA}lsNPM?f(ArNX6a#{~7Mp|7Yl|{m)Pz|NGAR`~Mkg&x1Mu_kX9P) z=Ruvh;~VSmKiyaVZtr{0NK@|mxBvb#+&vvw5_|4>oel5){pHeQkICXW$2qC;piDtzrJp_Z#>B`}rFbdNZcy?698u ztESjArKCPPPU2R`nKRe^70>)|e~xzT@9zH$_r5Hx@Bdf+p8@2P*yDFui>ka6`Tzd= zBRH-86Ys41_g~lF|Nal$I(-i={{J)Ne*e#~+y4FM{|xfV2kW;N{$~IU!2JF!l-Ob& z|NcM2{b}l7Kkokj!m7ff9(tifX z2w7zlLw7#IqUH12=lA)j@SN7$t5Pm^Usd_-C-*%K5}x}fi>q!{y|O@Y8Doxw=kwc7 z`Vt;YU{R@D;k=jO)42tp(PaS!MkZ!9HYR4+5?@9JLBoI#0t$)_2?q@v0}~4x3nwnz zc(LIjq@B&kz-TY<(Ru%WhPw-G-2XG&dg7!1&se8^>%IRB+rR$(_chM!`hSM-{r?&E z&--%!$+@Th{&o5M{l5Ri-+xK|zc&gUe|x{IZo~Qi4E|o_{~5yf>YlGZwq5`IuQ2=n z4F9H=&;QRb^?K&^{|v7`o&V3!_3J;w{C)W#A1AAV`feM)?ELGyrrP?MlEi<8n%ZBo zpyuL^zo*?lSMOQ0-v6iKzWS2(dH2Ptd!<+Z{eBwM)&Y-Ceky-__wS1H_Un@Te?R{i zJ3r1}>OaF*`Ct3@-MTEl|5@L=O_iH}{`qzDKf~MlFYBLv&-l;q{N4GdkMkej@87Ah z|L^vf_4W5Tm;e6HaP@xh`|oD!fB$(@8h`(zrv2LM^|#-CXZp{uvuyf*hL79p-d7)= zfB!#&g`T$j-(R_fziU)(+5Kmjy-;KSe}>!-;8BAecK;c6zfb+Xw6GTBwPjz6-@gt1 z&tUtf|GfTxhI_eZzW=ihGyiwBZ%g&IoxI>ffXLwRuC;#)fLHzztA#MM@>9~|0{m=0I z!J4=K8NT%8nfzxs^~tyV)au2j!Y{6z_3w95)%Kd}=lAWde|osHe(D6bs(&UD*6X9T z3qSwQVEkwIe}-o-uWu>3eeHLx=Gw0R3^MlTxBq7lpTha(hm!Nx{mQI2duy)FuM&N? z;v*=Seyprtvj64QU%UR9+AaL`ccas+ceY7pXzvHXbl*^c5 z-+sURMZd-V->>(|-~4xSZv4zW|319?&+w;TBy`_9_4;{B3#RO^`MrIA^`Cp@{~7j3 zTL1gI|Kh*@3^j?u;o-mj+!8DQo)xt>e_tx!o!Y;m9DB|0x1`B$-2d~H+4BDkFV^e) zioeo3|LeEE^=h^GKX=yhdd2@|NcRi>{cr#E`uLk~KU{kMd)}7Q*KhtP?%#ei>y!I` zhWB;R$^RJ^IPb4~eZOh*_Wul~8hh5>``57k{NIlZXMcl`)>c~xLN)EH>tAa+gZ$3=_~AYe7jvx+^ZNCFSd4GqU-h4%djF9J z)}V0OdvD!;h9CaLe}p!T}lPf$B+{fB+G|NOhVyX@`l?RmJU@4x^3 zSsAp{YpPbr+QU5QxD~#=z5NO=9)s{%f?e+H{{IZ|(u=R%UAcH?sO|L)Kg8^h&AM+} z`k%qJ{>O*=KYu;Z{vETf`p-|9Ke7D(>VNRw|Fdt;_xE@0+n!%2uYc6|_wV1$_y03Y zaB$?=_^1ASb^L;h^*ILpal1F??|*bR|J#2C?|0nG=W8EsnXmm*@V?>N-;a0KwoU(_ z9{l&mz24J*mzVu#m|rRP?p9n`eYN55ZJojY8EXI9dVT%XpZBqLe*Axih2mGgpTB?a zKZ8MF^`B57)BO{+Ieq{6B=bMR=KkY*GFHU@XXq8>{?G6+&b6^a)8UFr$ng5?*5!>ev znpaioW@rBW&+yqp|Ni^R@WAxYrS9jd(o=5_g^s9 zpN#!v`=8;@-hF%jtX};qixH7-n{9*{QK8OIhXt8|H*DszfeE< zJX8IHreeQOohA8Q*&AQ|XSmZJTlVcNW3OG*?SBT`tgg=Ywf~-cX?pN?{=3yn*Y$4W zECLN&?|JYx`gcWD*uSsO-u`EJ`RL}Q?{E6;-~MMfdh_z_{|u|ry!X{_o4BQNf4BD6 z`u_}X+t$_{TA&STkfHU`XTQH}c&=A^=kMq(-?!EOXHZ(Wd;5oHXa1hw9QU8$+kb|M z=_;|;|1%Ug&QSQz@H4;aaB{uH^z8Q=19En*v0r0-U4Q-D!`rVv{xkbO!>?D*r7iaV z-9P*CLq^`V`oD!w{+91q<9~ns@4t)g$IJhA-M7#Fqr$WNzo*P!IlMmd*!Q2>r+f9c zpL@06cMA=-zyAG@#jNztufL~OzyFx!Z~cA$ zhM#Kp?QeC1TTd-+iPis3+TFYVzWPwSDQow}f7|c>JpQ>~HRSS{y83;KeI)-g>`p$h zYj*8Fv7Kr5*I)mc6~AV;*U!DHtHp0UYuvK;w!duszu=av`tC*l8RR6d-)ZT*zyIg2 zCG&q6gUXZh{~11nRLlN-T>blU`TDth`TrSyd=geK{`OujA{N z&Hf1&!8B<7^#2S{z47m%>ehe%&k%R_e0|j0l5=HWHD%2HGyIg;H7WkuSx_bejWz4u ze}5bl9P#?^wZHGX8~^jPeLbiHn!H{+|(-YhG?^&h& z%sKt@AKU^Bfo%tkdiqw)|MT=mWk~*hPjm6j^$!!CoxeWs`~E+sGtdA1?tlM3!^<_i z`|oUfZMVm2_T~Q!ciKy<|GCRQ$=&???|+7mwI}~GBwnw}-+g=i&xeZjzd!F?zWc!f z=lj*?WJ=$E|5sH1U>|5gJM_hIrO9rd31e*T}~8EDo6G`)KM-@88o|p#J{jfuH+-w9Eere|CER-zS^z|M&~; zK|H>SzCFSp4s8{ZBjlFUME-%eS4XzmqKc?){5u;C@y&v1W#ee3z3Kkwh)_n!eW1h*^e_TS&%-=D)U5@r(A zKxFFoe+HRtCMO)PdfKRLRi$^6gXO)C9+r~Iz`=h6SPy8U0hFKEbG z@BM#JbB^D$gKbpL;b>i-PSCOXT1xOM-1!|m#r_xb-Bw0BswKmYsi`;~Rk z{~2yI{(k@0S90g~{|u(Oum3arQh)xR;dlAdy5(6_w4 ztqe3QQhv#I>+cKNzke_F3$Oo|6kgl^@^0?Ge?j|S{CT)=Um5#@U-x%E{<`+ut^IYi zd(zZo>O$K8GnlOLFQ4~%@A~sK^XI4M|7R%3wYM`|KLIq+SYKLy{r7#bZ~qx~|8a>i zm*4-isd)c{`rki){b!iGEm;5OHDmAJzp`#Gy1xH&1E_m_dxp2we})6s{;pZtbjYiE z>mPx>x$h4wXR^Jx`(gcCUcuk{PwstkcTL^#-vJSV+uT{dI{u#jCt{ubRqgs7RrAbO z%m3bg(&GD{q5jOp{|pt;s&8h*-?;nt#Hv$!ciuT%_HM!U{|pc9ZT~aOHP^2_{!sRK z5i1%)a;O)T7*M=l(Oy zuMPhc!n@_?{ZG@)US9jpAgeT=!`A-{Kg#dj zsoH<%z4E-fpeFhKf8RmPi}cl>Z`=L3Uk(~L{Lk=w?|+7)@9Y0F9MAjD@afFHKcM0- z>h*tyQ|{-Vtla;fq21y?!?x=G43BRAXZZX2Kg0g7OYiUd_MhRk-G7Gtx!?cZ|Nd{b zAIQ6#_wJX!3?5zo&+zBy{r?Q7bvAuo7GL%J{eOn&?f)769$tTWy8nNMKY8)>e}mut zXZU;n&87qY{xf`;3DW+1@_&Yy=(+FnK%D7sWB)U3?*%dczKeUm{b%ZQZ@ZcC`Jjan zf}j7z+I@c4`=8-?!os<2EOX4#9gn#`-hQ}oxAdJF`MLg2zg~T8Uz&Awb=cadtq4l! z>aIG7z}tGbRJqLce-OcSx~oh6BCAK$jl|2jSpWY1otf)*-~4#4{_p(Q{|ukce*zDL z*&e={{{6tesHf*A{bzWz>_5Z4$p`=LzxVm~@5rCee!txf^3U&0T>lxi|9=1bKZEf5 ziQqYur{eWn|1;e9&#kuuS1UL;c-X{qOhIoV+Vn_rCrQ z%bede@6Vt6&+z@#?z;VV|1+H5zsvgde%-sV{~7H2>+k=#8^34Ggdgv9i(bFq|L=bF z-w$=RPyRE^{JURPbN|1!zyIEQ`>*(W{eOm^XRRW(+g^XacK`Wz{~6N$Gem>jcOa4!~e}+HJzyI9k`^f*F;hV-)o#!pW z_Kz&~Kc9YiZ|yDnBmWux{r(fY|ML9B`_->UcmHSjcOA6C_*{ZEeZ z{kGb_Pw)2G{|xPS|NZ>?{_n2%e@6SN|1(_u`u*p>`~Mltua*Cn_WD_0d%x89@3(m+ z|7NV#imLw;+h6gYVf#(R%Gde-8E!q^czeInh3RD%3}1NPyn5dLKf|wYr%Zl?PF=JA z{(gV8-&Z#8{}c(bf6n{YdGBtXthaf!@cMs-J>35p!tOn*2M>V#XV8;BUVbz2cl~vH z_kY(mfBO4Q|M~t8JN`5L{<=>6e%5l(l8c-1+rPj3dcXe5H}UVkr%2EL&+z5s{r7+4 zlH)(0|M&iT9jHYRdw=_@F8%uR{~6x={{AyI{>NwW{C!LPuGasV_5H8i%lo|XpXcA( zU%zX=o%sIx?{D}2-TzPGpLO@o`u_~(e?fCXnKSA^gTrUyzuUjQxeeL`gfZTr#$r`Rd^{~4a<*wy`$myf#% z8XJrJ&+yZZ|60+z-}SF|71tHt{raEb)WYzuzkdJwJ2Un)eX&)XmSeSgir`)?9HzPF#V{`McK z>;D<9)&70`-cJvt?p?;pZ}+0=eqAly{h#5Bp3Q%TAEnR#Gdy`W|KCecL+kJNw~}K2 z8TMP(zrC(6|9yB>eu@Y;CYlW3;zI;>-aqVp|3Aay`2P(5uKum5{Bu8U zdHw3M`|D(WSN(hr3WKwc*+imZjzIz)d|Dhne zuKm^h`nh>^@&6gl|MmL5# zdi$RtF{9T0-@#e$|1&(9`=8-w=2Pk5{|t}p4%&XdYrFr?r?2+aPfzcE|1ZV3{QbNC z4EH~N{Lk=908}FNFP{Ie_Wt&p@2hsz-u=&TNzK3ZXC>eF`um|K^XC8kboR{LfBzY# zTUW-{UzW{&zyJBCf4}ejXSmn@{69m<@jEZ;>VN-P{H*-_?=SxuuIJ`144(h@feC}{ zKdFV>^*eS=E|dDt@cqm7+|2(B5}te4i(gp(_f_!uKLx^|V0!la#Qy&bPhEC@|2yCD zm-W;C49niHllpP(Kf{l{u%G`Ku1`Dv_&>w%=Mr-MAN5ve|Le;7`JdtDB2bfYr*VAw z=ErmXGyJyO{h#6a{3r1s1NlSe-)H`rJ>AaxKSS4S(15!1-`MY$_Wzj$S_klF_J`~5 zpHF;x|NXD`{~6|_&;9dTdk4tf|Nj0fb^g!r@9gCD&o|xQtu{aXKSP>$^SAp?)_=br zRqy}t_x_T_{~6wfM*lq@|NKA0%`>n5Go-(MfAjn4x&IkHe=V>7BjkLqa#GdL_&tPBk z{y)RdwQKj^>0B57pJB~%`Tq?1`Sgc$KZEW4^}m0M@2%Pz(*2*|94HXpft&Qm1vf|(hCwqX5H_fo2Nm#7AzY9)&?1e0 zU;TDgPOaPj?$v*WKh;wI8Ge2def+8I)lc8o|9<|p|IhIA)BJblk)XA~+wTAVb11C* z+YhFz`**zjd@TOW{?h*p^Rlh~GhFY#|DPc}+y-R!>)RTaABKf(`p;1J*Jk$npmYBj zPNx57_*cAt?e5*_s((JOYLEZ%?Y?&X?@vjUoS*+5vqk?a|2;qa=N<9m`@8F|zTf_Ia&=UA-Tl8mh1Y;a;A{Rf zeEZe^_5GJW`{v~@EdTzWq3(70{r6Q%&Vv>w>)-#+@UUjye}>!J|NUop5?ycipWz;8 zk=xh1>+419tLtxVxB2^f_4mJ^UYQYi0mSLW^TB2RpYrtI`#*dEAfA0UB-v6Ir|M}W~a!>!fp8pp#8Sw+u z4tew+v;zB7b?$$Lr|q`?8TKEIt$+VJzWUwwm@EGo;z}!K$=1J)2zmdXq4n>7hF`)v z?*I6*`{ia(aMstQ@B7b?>b~n`-dODzMTXq0nLou{_>yU z^3S?(&;sB6|89e4d|zk0-v9U2{(oJ?_u5m-<^HY)&nPQ_=OR;;{~r31_x{_vtapDu z>wjGraeV*Z{|v7k>;65Bz4-Uvnb7bx;r|&nA9=t2Uvcj51<%WWq!#c0yXS5G>xaAN z|Ni2ywf{%0`+tV#TKo3@1FsBz{pCMH$^QK}?f>1c-~a7DgVoZ%{~7wP{QP(QI;ep9 z{o4Ch{qNW9_Wv2))|~&(@a4Sr)&C5CGv5DaxNBek=p%ZifEMS3Tg=rDv@^Hg z+2>hzUv}Z#`nmrZK*Q+!?T>$!`_J%ux+r*2;@|n(pLb{fs51S}@FU{=6P>(!`zk>J zbA4Oj@BXxh_ukH7rN6(-BpW*XA z+xM&O?f*0MM<4&saQ^uFe}OH_YyUG;UXrhR|IhvFPjk`w+8Sx7FGAf47Q_|9*1){`ZUWL5}|C7yqvP_lN%s_dh?s z{h#4i=l6TFu2!_Y$6ek0X>MP2{(a-0t*7U!{%1G}>a;%Z{kQJ-%lLl;YMcKIk8|t) zGw3SYeXB4p|IZM2I`)45qPnOLSDe9X2EMBP{%v;u{hiKT?|;hwXSlT4{y)RUg#QfB ze}V_=jQ%s^|6bKvp0U*b_rGPU|1&(}|MQ=r{u^WUe}*$RuRr>2|2p>ee})!+8j zJ^jycKVXy8B<*K|7zOhL>M2 zGkx%%;o}0(S_^OS`E{V(kbn2je*e2D{y)Q$SAnthXWs9>{*N!ey1qI3?SF>)vizmG{|s-pgUZvsjqmHL6P#;*|7ZA9zyIfd2IKm9?~mX9&)_>Bw9MhN z?f2hWw&(vd95`kF=eF|wKmPOnGyG?``k!H*{`^h#{~7*l{?G8KMt;px(C(h=CC~mm z-~IYO!&ImBufKl(``hT;^1A!~8UDmpAOBu?M*TlS*0%8X|EAyG|8{=GhC> z8T)3m-2XmH{@34s^-F7i+y<|%UAG!!(~Zjg_J4n6fByuYas-vS;r|(YUcCR$Q2#pq zAG>t^e};dT{(YL6diBoN+y5Ef?f3s>b@o5QyFL5v@4WS&;fHwskKomxf1CIJXZW4^ z^YzK#-!<=#{QkWu{`+rOH|0Nreb(>YU)SCL&v4ZpWap{a{|vp~zVH8d_4`x3-|v40 ztiD&gE-p2G{qJ4-|5Sbd_5Evc`u9I?=Gy;fxV%yIeXa2IKgSLKGi>|n`=4Rv++DKQ zKj-k(*RPFzw{POYzyHql|1|>-=ufNfG+F!p_v!rq46~+DC!nH-GyN&_w6=y0`ZK8NT-(u0O{ApW*YZv+Z5Go0jkV`~K;@8F%WYO?m>V zbS8f>|M8z;x9R<_oA{r7w>bh@UiWJ0_nWWw{Ac)A>Uw$3{UiIoe}4vA&hnq(%k};L z8GeJCBfRtV@0tDj&tSJZNAEwwi`!-MZ%xkrT>qb8*NyxXmir;E<9|EEz3=~+D88xw z-^<+R{Kfwn{+`YM&roNx>$~q9^Jn#wuSos<&+zkQ@Lu!(3=cP~`_EwicKz~4-~V-m z@BaCxn*Tq8%${rm5_hq0SKl`Z^id(H3e_xt}Do<2YI$@cg6pW4U4Ma$dNkN4}-T#NrR?0;Vu z5WRPgY52#r;{O?b?VI{m`#;0q)SvP8uTQ`G&u}W={%Ov!AO9Iv*QNP=|8-mcPto&t zv0^_nD)#Aa{?G7TzZX<3f311ISO5JNXo*$vtp5z(nrHuK__XhP+wS{+e#bq(`t$F9 z2J=h(`~NfS=DPp4`#;0}Z-4(Yth=#Q{P=%{G_{<2`|jR-|DWN<(To2XYW~h%aG|Cf7chZM@9Nq z-u;{V&s+az=)1@!UsPqXxcb|tyw~qPFUddspW*MJ^4Y&nF6}S>&+un{ue|+FY1!ZR zf5-d1-~aie{^2)2)$jlK=W(@u|Ks2HYu^9)7w`T3KSSB;eb+xf*ZR*;`f2KahC4sA z_g(|_p|=YE{Lf$u+S~G1{P}Y`-R<@BKfM5rXY6IE*Z$A&?Z&_S{|r*UcGqVfyleaS z*Z%ig(%=4zE1h-r_kV_8h5i2-#J2v+U+wlj_V<&!OaDIm&v4fGKf|w_!@u4i*;o3X z;nz8a>+y#d-QWLx>;Cf}&ZxhypQGygpW#M({oQ@vZ0{9+6yEq^_sjK#`|d9_uG@O| zKSMldJ@xndANk|ItC!kV{%4p~`0Q8xWzYitycho&>aJD1K7aGxr$zr69z=piz5X+R zOC#_&*s=Nl86Y(ksOUh&@Y)DE-UikMQt}(53B1&NZz#C13)qlOQ^7Z!WeY@=UUnm3h4`tSu{Br`gD*tNlpMC!L+xyP{8TcR8yY8$1 zzG&{f{|w+dZ`q++rfve-4F4|I{{Ho~*Zx1lZ^_Ny|1+HX`Jdsm z{eOm2jrIQ)F0X&BD*vD1*W~Im{~7M@yKnQK;os~34By26>@@~0q)b~G{^sw^Rh9F$ z)`2>F`{yUl`OonEWj?4Wx$c2Y`G1Bq$MXLSbIf;a|Ibh}dsbcj%ht2{|FWBsozMMe zxF7@C4`2yOp(!Wpe+dTH*DselHvPoxFW>Y3GrZZVvij?%=KFsqu5xuQ{~4~n`1bGW zm;V|5-JC7^pJ7ga-}hf}o}dXE%lq^HGsMijSG|A#*^r~}|1-Q>B355BzjghN?EC*2 z&b~YP@BZ>Pck8ESrhor?{rQ9E{~6Xt^Z&hLFaIxS{{A(fiNXI2@2@=H{%7y~`OELU zi$4-t6@O2D@#p)uoZWu?XRuF;3bxZ>r}1XZRagzy9Ct$A9;K@?Q1!_nLFB-@ZTkpW)9^`}+DzYr$Rf z{@4E*KI_)+-u=4%bBp+b0{NW1a-5e}e=QVk43O4hPW8xHr90Jkld?ruU)PMAfwQ%Y zQ{8e_oSk4$;25szpVP_XRwe&nrSAmBgY5YaR^?8$-L!t2OGtdH14N&Kj$8GA2G*dQ zM&>3iORd?d{y8h(PL18Pa+}LCMO*$4pT?X z=D**+&jvC5|E|rSa^XKi<$>ht{|t$3eGfR~{xg_4Z8&x!%x%N54}bNq&foicljy`8 zfjtbZZDw`-uO2ifv`)+mDAT|8x0eN5PsiT=$eZv>@7MijxEJ^C>cjsG>}=cLe6`!# z>3iot!*qq;{~3<+Ki>VHVSf9|UxodDLC( z8SdC^`)dFBcJ|+UbwA1v=l3tJtFO5C?)%fX zSMGniUHE0zwfp}W&L8+;|DQpr6f_<2ciGF#`%CMpCSDIe};=<`_=B-e*e2! zZ{>dmf0_HBog?z~zh4UdXZW;e@8>@(>(AG{)&G6>Q2Bp`ma}{*Zh9{N8M2n#<|E^rwfDcKh) zx{HHFegBt`V=ovxG+wRBz1+*b)g!OjL_TZ6U73VHcT=ytc0s|#vzC}U&f?$dk=H#% zKC9ubSYw++-}F-pwmWyUeE-+gbC*w4?yBN0o`Bj_%q5Q<-v&vqdR*$0*HQX_rMZ#8 z%OZilmg%hczrTM^&icJ~z6@xn?d$#j4EC@6{xkfI0Zn_Z|IhFyc>nX0^&f-l?|VM@ zcmI9m-@j}Ae6Ia=7ZlllZ?e|k{`>v!e}>NQUvGm~CLI3t``^vVbJPDb9A^9tYKK4B zU-vi|G@%*0`P{!ri);Tg{C$*tsr+Z;y6dMUwEi>PyLk3L!}?QI`}Xf!>-_Z3H~;?( z_iOh2XW0Mn=-uzz%g=q^Iluq(e$W)u{ePeQ%Xekp{9XTjIcQV1_|1PSCjV#ny_`$MJOe@^ZH&yfG0VfXj^kDy}s z`G1B#slWd-Y=8SVZTH{C8h-u1-S_rJt#bX(0O}KQPkpiaC20KxC}5yf7lesSf>c8I z;93jb+xmMRBnn=AdT-@*ebue^?|{Z---GrUCr|#pySn#T?7xW3NykA=8I%5h{}~>e zyi%8Y{vl$0@PCF=zLNg`8J<4cv3&3MT-*H@PyVZa{pZ{FcZ)ryH~-1%vj5NUF#}ws zely&^ao?L)&q1YXb*fa2)~Rdp@9!_4tea$}{ps(%{|q}H9(XL%(!L)$PWbPG{@>{8 zng1F7P5#gDXGgv4{nYli{~6rO@Be35n)U6UZ{*K?G0*m-+u3< zr}@76&v4Xl{_p<`?O(t2f;X1`W6z%XZui#rPxjujzaR2;|I?N4^8YjB#XtJEw{A;w z-M{|~phE{H$NgtmekcFj`TZaNGf38*d;Gin(+|7N-~W9Lt>6DXcx(K%y`XW84{xe# z|6V-r4%(jkZ~y6^?~UuPmn}OF+OYd`-tWIt<(~g%c#tapFL&bmpK0lpY98YM8CJR4 z`<_+@#SEwlS3mgcT^Kb5{|Ict+|9o6j-LHGM!7*%O8vCDNZ3A*MEq4p||fHA5D4t{FA@x-Me=oLw=xPzumic7k>v0`#lGB#ooPpcX03B zyY{;qM))&yPnN2d_ULH($2BJo@*a55M;-)JpG#O%+_-i46p0=t+crH{6E9zSL^HV z|C++T|38C7YrH|{@~gl9P6Y+xpW5kv{xkId+HJOW@9e$*8P-3)`k&#qjs1C<_xF$2 zo4Fd+*MBP(&n_yE`xo;333%OkR`|X8KmQrN{(1VU?)#SSZ~imnMsEB2wsJY>c#!S? z_6cA6bzk>)o&4+n41a#_&)=Kg<%+uXkY8P?S8|0}mPuQrZh-G7FTDgLV;{`=4H-X=NkKf~O|y!C$` z)%|C<5x;-4E9m5qqO^VQ(~n#JXZTiI{-5EzZqn`8?|$G(xvlj-i#9P=f1eMX9s1?Z z{_Q_Q_4)U2)1S|NzYVpxqkeXT!H zyl?;YMg8Ta5C1dVKQ;68zdz60U+@33W;SSB)FtWl*+2H3|LQXTKf_&1+x4&a{{Hhx z|A+1MpMTH3tpE4$U)1OOb-ymHe7OJidC;uXzwGS%?@HNI|1-SSJpP~I^zHBWyFdSD z_&e+Gy}$kY-~ag?6aDWtcnaYA>DA!Hc=dZf8UNjQzFxfWKZDRa>HiEL{uaIeu+!?+ zALI4=PqLo8cJ^lQ-!oh0*S}w{9`@I0kKMli45iQK{%80V|DWOg^LMs?4k}Fl{$lTe z{|wK6T)+PNxl8cdz1u1?#W+{Qo>Y-M!t!A*h$~eKmM0_xbB<^`PSrz!9tU{(aoFvv1%3eEwI!BgRcDeU1I??d*Sdh5v5O z%8GXQ(_aeO2mhZT^WMCkT`w#gwwcR)iM-#%^Y=f#S*+Cm4F9TL^sT?Yb$_;r7{}_9 z+kPnM{qbHC|NYj@^5fMyUz_CD|BJEjd%x-MxBm<)tU=jk)$V<}_l3NV|B(h7wbkp` z&;Os{)vNpGYxJLg?i2;>0N(wr{+uFcWB-4Ks`|tw^SA$5VtBv)ujr5ZKkp+x*Zz36 z|8W+PW`e)wX|MvR!e}1n*z=nwRr~PNh?)>?m;f{Cg`G0@cf!3nEy|?w0 z$e;Vq))sueq4@U5>;DXu)h?^r7j0YB>-DwkqeNuvpATNEkH3HSwtA86%l$W|@45a? z_09Lg&&<=`)mOi*oxE&!;hReZ`{K?&Xn&H4W!Q0gs`P(`AJKCA{)n#M23~tQt^S{X z^Vd1M_uc>XZqEHV-)rkXtqA>Fx9>m0{*9@5=W7W4--PlXCH$)rgc@HLjK*iDgXIC=H21{45vQZ{bzV}H*WuL z&`jZt=kNYSzW&c}eQW)n2Uh!kgBE~(yOqDy=3Emh7-P`_o_c+ zKYDS@#KYRcS1GU;ykq_&cpFmq```7;-^J}J`FL=-{{6kS@Ag*x{(ih)M%F6x^!Md) zd##>+uK0Lx`T7|7&%fpO7d<(?zrOD8%jx>}_J2HheSO^ix-T!A-|j#6`q!sj@^4;B zEEW{k75TS!-`=vI`QLBn?t&adR*P|h^Y7n~W5z%-@3(=E7rUOj?RL%W-0j!neCFJ# zsdxYOeh*|Q^mp5__y2rl%s)K2^L71yhKCxtT9I}C8LChJ-T$AVB=76T_ojIl-~T;5 zGyM3c{i2`mw`GBI;G6#pj{eo4zL~ju_3QcnWI=O8bGGOHXZWZcywCp0e+IF8v0o-V zUjFy%xmW-0Z~y${?Z@W-3@K~B_*5RV{ATqLJU$O!aq*|TH8)u{?&q}kc6PxUlwz^nZrhpE;mZAgU|%{U6JG z&?y=&^4IVGXW;QG7yr-jUQh1x{Q9l@{*UC>KK#D>8hCluvt3)w-{;>u@nY|;>Hise z*ZfQAVCbJ*{IAUG>wkv*rv7u^{b%@Czx5x;+($Eh@7uTP>)Yu2%IBNGb2ZaDU*G?J zcJBRG^*WZDwtXxAzV7V(Umnq*Dd6_U+y67XvcCUEP93yK(sg@UQStd*^*6nbfmVn# z^?{eSy*+wo|L2O*YqiTCt*w~9|Br`w{rn%b6`S8rH92aZ`}@t)?$>{ROACkWum7_} z^nLQas{F%u_RlT;&#;IK^Y5bi>i-Oz1^+WVW{vu@BN=pf)}^|r;wgrwX5ABL zNzXo(xHrY$FX+Z+CF`9PhDA1sW#5mbPT%qGXk_tTqq?VoeD7widf53Fw87&)L%z@L z_a!mq;F>+R{=*Y{dmT_~{f*zU{|uj9>hAq#u-yLr$B+BF&wl#1o9ReA|9^(b4|kfc zUwS?2-hYOfcdVb!znS}=VgIjKkVk%82d#x--3JQ6GuCrJ8z$$0S6Xjh`k&#=&)xUl zMQ>R*|L->EN7uF_n7sYZus1g5`G1B^k9+ky)B={TZGRth|3AZbLGTXWzrTJ}&Ak6o z{@Snq41c!V&jp>AcKpHnzm;*|QMf-#|1;#T{T=1p`uAOxdF+3Nx(@OC`~SS&Tn<{4 zx%K^j2LDh0865wD+SmUX!1J;@%=i00fBHOj*Abs`|DXC6&GmQxGh9pm&+z`=45xp^ z{~3PoxgUS_&-woh_kO)Sea>4t{r+n#vlmXXm=sgPAb3-5)sDLD7p1S4y%YnTd1dqYHRwE%d6jSf zfe#j$hah1h)%Ei#zwY@AI%m&rUnQu^b^L47>+QS6|9I#}*X^&5U7r|t=G)!-Kgv}v zgfEY@emUpmRkMG$YWnQ==vzxietVV^zB?y=T50k5{|x{3ZtArYP0iN-{{HgGeP4Cn z|Cv_*pW(UnuiLu`&6X{%1I1%*S0!kl^4Vv*|1)e^UJ!;6XWdsqMc&+vC={ln??{~4ZG<^N~+x=#yaSg$o`PA2ia`2O!_ zLHy_M>i>AW4g1gVJ0IL*zHsR}=#ZmC&?x1;dr#{BGjtn<8r8ea(%tv(sqBA-9n+Ut zD{qo~KE>~DK(OA9SwbHA;O6k&F^K9-xBm?P!VW)w|M272 zx8S|DPv?Wqbo!gF_kR1o-OJ6N+uo1=vr4o+e*OOUH>VYXdXWDae8u1NO-n|>LbPjS9McH%E%89q<@7~-F zS~$^My?a;PT-l|ho)$r@yBX6UP>ff<-gXYz#Mc)6hFJP<>zl+uTMV@TB~;T$M5gYx7q(}ul>((PWAUco%H%^&$fZ%v+n*6 ztNQQ%Dt2D~&+uy-IO#kC%?AB`oBZheCvepOS}6Q|XH~8mC>`mQecJb*;rffZ@;bG0 z^Y8nA-m>upokCcZ`JbWt{I>o78P}@9cTpO49JB)*}wnp+V}pS zXyV=a3u{0dGatDB{d{Om{omh{_y1>jHnsXcgW~)B|8kh0|DAMu{oi%}K3%V^e?GDP zgX{eN44*H&2e&<(x7WYf^`GH))I9KNr+*Lk|MSoOek*tR`+cC5YoKMx5B`d)znKvZ zT4(yX{&|hb`~M6dtJX{B2yDFnE5ziV_{r4=H0yu+*f`ofe(Yu;wEj=S4!2tVo>O7b zcYlAHyMAN!_0^#s`$22YAXD@p$6JF4OpIvKV;z!uK7Cy!Xi<}K`PxzU$xnFTt(n_fMDa z`u?9`<@)sXZ{FJf{vvMu7PLDk`u)G){+9m?KeMI56N_0F>+b)4zxVx(9r^p}-?z`M z|5cg(Zu!ln{~7ALDt4d#=J%hW{?%ux{|vF9NtNyTpTE@R-;b)T+y8rN%zuWTd|%#w zuYY&<`~4qtK>G~-GZ^;&0d@NK-wjKg`Fpl)?%!?i-v4J8!nYWHuQ_bTmRbyv{^oO_V0b`lRxjj;{X0n`M*yy&R##C2HwVg{rx{J@cJNa zgNJYbGwdt>&)|7C_V1SE@BcH*yZfX5_0j(fzrjlvA5_lG|7N}a_qX@^o`19d&#>vw z*I)1VzMd2}yRqy)gQCi_dtX$Zg6il?)9atE+xY%J!@pUeX|BJuKR_qgetvQPKf~Mj z;#)gUgVuw9W_+F2*UvOP|KpK(|9^(PMQ?BYzE$7+&hY8OZJF<{skg6tmzE{uzp+_2}s2Gv&N~U)|q5{~14TRnGbMtLvwK|IZLzPipyDUtac@wR}&b&5R?U zt-yavy^Y%&?i6+W)wrrW?>18T`DQaXqi&CS_^wd%KSOIT2@@il>YuO6+5dare+E1A zsQ(P#&y{|E5>i_CpW*QDpWz3;)&G4NU;lji%HQ`c-{1UqYufGaTc6DVh1cbO+tz&k z&+s#8O8&K)YZEX3XZZZ?@4oXDKYPC4|MXWMbXrRG{r#Wb+JOc)&%UhyWe(8Vt)DMe zt^fUed-wPM46n6s{kFd_y*+l$uKx^f@BcH@?pyfsmE4tmp|&sg*T>KQ`1{+PD&y6k z_5L%&`@OgRk~Po%+}pRa^#A_;J=yeo{n|73{~5l`D+jHFI{f<9!^+>McK`dSy&tyz zs#d-Ecm3Yy-@k4CeD*tJ^#6N`=zoU%@Atp|Q@?*b_x^u|du#4~fBR%^ZCUEC$Nw3$ ze{TKHz_sDs{=b>;zkezNC5Y`-aUhrLb6&SAteyV~w9{`_QFZ+F>hGWT$=_N$xBlNv zP;Ys&{I4(H`~LlTea-&M;NuPV$p`8Ba|SKmeD|MWv7E>B!;_>~j?bIDKI6j6BJVli7BXZ`89bH&at3@n9>hUl z(8vdb2P!PV#UzLeDO$lZ!S6$Mgxa=*``W+Wzdrj>`@iz9yYH=ZDc*Q04ODs5y|ccb z^!>f>@B1s(U$d{?T?N|g1*%l;<=@|X_5A(y)jU2M4G#0ENu+kwWeGhwEG(Pf{UbW* zSi~_GUK#LQweOwzy=9@k<)F2-H)?8MgEr^>{w2@*pP??>^!{ff`=xJwcK-U$FkM%_ zex)3E;;L8w-0nT~-_8FsT>gE%d4HT$&AaLU8OrX4?|=U!%<}%r-M{O<{`acf{jaR9xc=RR=l}jQ zY>2=6_rRWf_x}t}cn`(?NjV9ghwZ%lXFq7B{%_As&^q0k{|unE+EWM6L8{E+u~ zf93n$_&-D4@0!p58GeH%e&auVIs5nb-&srJH-ArC`K;lX%q%KzWsr2y-G)z#TQJsbZe1GHA>vpxR{knyu! zFaKxwC|0|#?|03?)}>T40q<=tSold_;a!9o~-D?6h*cBcfN1ATl3EVm&EhGX;$b9aSattDL(PAN zf8j6df4r~XUvsy9(tn1Z8|(kAHv$>^SHAvT+~4>a{~5~vGwA(i_p#Q4<6rk5&Hc}C`*Qw2`SO1uf9ik#TOSwvJ{@#y^RwRTpZ_y# z{B2+V{K@4%@%R2SRDNU!ovIvu>pw%s`5)Zd{xdw=`uT4`{(pwkv7ob~{(uhN{?D-W z_HhuR65;nlSL1@+(PB}4qn$Um9z7i6 zxab)7jL3{L&5!;qxWE2CL*C!8IK%hPzPnjG?n6TF>sNp1s_9x8<0SlDwBvNT^eLBl zWnVv|^zi(~9i?Q-6KUNaxGravma{P(r3 z_4T#iFM;-AC!OA}@$NrE{quWgzJKEd4S7FHDPI5l&;F@>$AA6#^)mDR=c_e!HM5oD zcfU`Yd;dSfggQ^qKJB0X>VN+%n;-uBKf|+cph>0f*y{a%p4{;-{?8!0ZQuLf*5|xy zet?!1|1{66uiXFH=Rd>WzC`_fdp6d`zYDa_{m%ee0r{U{PVf8gOYef$6yCc3`tQ2) zulIkSQ~RHxW_#Sd{|sO5eghAW%oOtay7%1u0NX?1&uafO9OpiswEst7>8W3F$+hu! zkPcMiDCV6C8PT3EHRE*Q1SdDWbl;mQO}iat9XKp~B?vOoy=l+&SG?P0o-=~SyjQpW zsPpSs6rLft*)70L!ntz>WVHN;>BocvueFZP%w@c?+a&(?_wQ=i@4nT5`a;L@D z2RrQ_|MC9}S^pXS9ku>fGyOk}wcYg8P-w*!&XV~@SKSNfet^FS5ueFu;Uq3(o zP4+*-PwDNT(Xa{0>7eyuYxC{(zkmiq-?v}+&#?XU{(p6^pT_-X2)*_1Kf}+`@AqA1 z761Ku{rx}t?>`OsEbjkjpkn(TlvD4mS%2q0L;as`Md#|5Pe1Fw} zi^ZV%%KF&<4CkkTPQ|xdcyIrYDL+pCXPE03Gd=S^LtB1P@U|1yUeRlYMgRs8+Z|~RLeqMCt-+zYkfcN+RIX&O_ z@B2c~Qu%lN>+3;Bi?9FB@ZqOEc%?#L{QUn6?{D1Juh-PPuY3REwROk-GeniN|NdV0 z4m7>BIr~3DQp(=o{|xV!PkaASH#~axU$>og@1NZA|MyQ*{y)Qk>7eV}=JnTu4(G3b zoCpfGX`rUplc$%y)t9sF`&h+)&FhAH4N29d9 z|GZd#`_*I6`Ky&yufP9ikpKOk;m)o5?^kaJpNjP1D=3%!XV3(<;?eh>%ucEP&(Qh# z{(pvF`#&H3{0%xx|M&IzxBozk2S4^K-~V=Q9C+vE{r?PgzdV0`Kf3<|o;m_Zy{|vY8{AVZ!wYuWg z?M?pAaC6GLzkjPiD-ZmC@4x!@&TFf>znp8|fB6S$bNze0|35>;`p5qny7K=s9Q<0l z@AJRNO-H+7&XP7g48(-x!&l-pmQ^(l|KI>(^voZb5{MyADd5xfB(;*JoWcq@O1Ql1~Qgjecyle`+tTn zuImrU{=2p4yZz7apL1V6=l{2&Y45(M-~SnQSKX`ET@CKiw`>3HRkfBxnD9xem1Ect^p^``>o|XV|`1{`B4Y%_`MD z|1fuG(EcZ+|yv^t1eX{rlT@O}|gMem)ztnyPs@s7|^2 zyLR4xhG}R2Gw5F1`~Bl<+xK@@f;J{w6~C|9`>E=@`kV9n_I&(Mzx(gq{Ppt>tlj<3 z6xq5l~!%>DzKBb@i2A$0eDhVuL0UV--9&Hue=e_f^g%jfntcmHSj z4C=MoJb%A$f8KwFe=g<6w|)Qi^(W`V`u_|K;m~b+`{Vw{{~5lO zUjG1EK!SA^+a9z}@}Jyl`+e-6uIoW-f#34m|1(%j|6cEJ|DWOSrsTi>@+WTGxBkxl z{|r{#_dkAo|DWNr`1I=k3^7yw{b#6s_@5#E!v*=nf8Q+o&+tzw_uqd8_iz6h?EQc2 zzy5xofA;s=k3PTE0rwr2?#q4Tus{Ca-|N5sGo0V_pP|1l*gNff|M#El-~Vm-{(IkF z^_XamP4mCiH{AUDJgWZm{o4KaKRf^XX?Jt=e+JO9r-Ndk%Qt4fe_efl(|+&XKlkVS zXE?`tk4k zowv*`@Bi~*;-9qle{vSq?{{&_3;)mXr8fFML;k0)`SV{?6wZ79U<4y><# z|DWO0Q}?I$;{P+ed_L9o!CH;2W8?i7*7^2#U+w$$ukNM&XIS_4{`Y^o(d)w}{5VGX|B0O6&i!}y<4Yi4f9~>K_m&GZ zKk}LvoY{`@f$R|fcMDViz5R3c`P1LOw`a{R{?G7TH0SSwm-X}C=!Sj&G~aad_sarr z{xj77)c>2k7<9M9kIy{Yd%myVe{=2MzaPu$pWB~`_1^w_|7Vu(uYVohT=!l+{|jhS zAb6tdVqWdv$@}mB+H-9Gb9Z`XqkVA?)y^M8ilGE+c{Pwc(l|7YO-T>lqzGC*vh^ZWk{ z_8Q>h?BjP-?*DmT=Rd>#fA9Cde*bfxQtI^8+1tOrpPg6#pF!ofWjy=(HNX4g9_;=8 zx&L_m?^74A*8cncHym6j|9eyQXxl}$>f7Ivvkv}ekbl1nbGeuIrr!Syf7Z62zkm4g z>)Y_PUWfPFKmYpvU&ZEyzkis$?|*-W6BMlfe&3p2e+Yaa_TRKpkO*Y3?kju!ukGL! zd{2%4Gd%sz@X!7~gZ-bp$#1{EU%vkP^s~Qn{6Su*5Btw>{`=RLKLf;-k6mn*|DtsI zKf|By!tehXPD_>l-o8EVpWWZue82Pm8Royc51NgO|IhGu`t$YIYv0FA`f`VR`%g}F zv+oPl_22(z*fwSNe+FIq+RWtA-!azv>+{Wa|7ZB)zx?<9>i7HayqmxOkIL`g|31gZ z{bz`dzYjk3_4@sHOYQ$Nyx#YH`L5#s4BgLd|H)^~J$F(1)2{U&(r549_iy#R{h!TV z|7SS$~qAN_qF6 zVd1*%+gJC0?)WWj|93UxzyA!mpn(0)aJ+#dIUlrG{`vRMLQnVqXLtg-X5l}>^SAq7 zzl(qO=j*@v`)^-^=GFefmool*efjerzoWH!zuy0)M$hR}_qYEH*AG?QkAAv8|1fBy z&HSpJ=9T6@@Bj4HZ@qv2ZQcF%ufN{EYyY|K{io-`VU{{vQ6b_4)L$_<#D$ z{~4Zc{XF??K4`{9ADzv}mY)?~lK$%Ke_#hwS_Qd;jlm^$#b3#*De|A5`D}ChqI2t3mqEHMHRE zA0QV)huzMC*vJ?($pPX2#D0Ft@2gMcjrZ5zU;fWX|L)KGyL?xw*T0bypa1rbJV@V> zW-#@BYxMSuFXdP7SadZFJiDxCSNHeh^P|5%#jihKbv_?-+W)bTpTF-}`ekoV_`Uh> z^A~}UKi?d$|IPoOVK!B}GZS~OD1ZN-L9zJ8e}?J{=WqXK`0jokv}^G5_5Tb%YNo#f zIs3RiXsP>~-0AzN-J!XDHTU-$(An61b@u1~GcbqN?mqjU;ivhZ`|sX@7K9($`JZ9w z5B~Z88BjVjkX?=MxV>bKvZ>n^_ivkwAo5(16de!u_yv-`dO44;`#{AXx6 zcK<)a*NVOW8EpTWe*MpI()2<6{X3wHefZz~Z=iK#0juwSlP&$v@VETlmm2r~3_s7o z4|aG`-*8L(Z@KKk{XhNx{%3Hz{{24lim3hfe|!VoNwIJDe}?+MqKAKj#+)|fLzcrr zMx#I^WV8Iv-@DB~hpK?&{olR2v-kUt>gk`?)&H%%|MRcj?-Tj|8Ls()YrX#r_w9cs zoU*U~(7m?)o8Ethd*;0V8RqxM|7UpqHKPu6s%165{r9`8vX@tuFEf{4x@0H+e};c4 ze|i7ezdKw0H>dgM-t&g`@&6fqt*rf4r1uk)+D`21`Tgv=(|?A4KR53J9|FESuJ%8} zvo!O!{~6X_{mVA1`uz7lhd{UHSbeyCy8b`IJMUkA#rOR?u&(y``>(GJe^}RjotM7< zKZB|L{NsOq{i~{U39bLVZ%X`s29349@Be4ut$P0#)cT)qyS{(-`&;Md|7UnB^zYDr zhNbIl-@pI%_t5V2CvTmfRlU7m3)Odo%*WzWre@h9s|NZa#Q`X(L z4~Nzt_y6~++y0&P{oUvPGl+ni-PabwO>B@9)3QyCOdSZ}Id040rfX{Ac((ckh3OpZ9ltfBx+5e}>AO!0&Eo%6?FZe_^Pl1C(RKAopm_rl_aXjlEx&hh z^?q~dz2)yGmrV!lbTT>rpW()`ulp;Oy?pJ6X(bo|DDhVS-g#o~XQVdy{qBf0)wt?A!? zTfhBzCw}t$e}--U0^YB$USIn=9(1tAmUz&iCB>U_X8mV4`Z@mc@5Hm~zkjS=`~Ba3 z+fD!8_y2lZKkYxmo6sAe80ZX3-~ao~e};4a!uL2_|7V+Eg#&U|Kq*oX>i6Xt?j;t*meTi&nnKe=U?i;bpjloowicfbA~^boMW*VX_2`?_rI&yV%`{{(M<4!itS|9$J~ z`!lrNGB`b zR>?w&yW23 zpP_EPTz&n&t93RvOaI;nbv^z`UfOs2Kf}Fs;rqY;FfE<(HLd<<_e1mN_lx6`W~pEO zcd-6<_CG`M+RO3$^Y5x&#?aBzIxh>*FCBG{qJ8?-LKnGw*MLG|NYGUb95`{Jb)Yj89tdSe63#o z{?F%{`~MmK)&Bbg+BCPass5jJ>yA`5Mm`@Ju^zUb@ww-RUW|Gdw7vgSX-oyX4q8E*WLdjFr{>&=+# z{|xW^e%E)syAL{i;P;Bk)xibt|1m~tC*{6O`0$<^=o-amJ*fA8B2dE;9*a}R@J;zr*o`+emP{xjS!-*WLk!?oaf z=ZpCGH~wdssC=#Z*JJ`V`&0gE?fY-9 zytav711+)Ky#E|%y~oe9p5^t~>%ptnj@=8-{k?g3HfB!{{8uzz~y*ZTec^0SZsXZW%8`tJV>=X>Af?%nI(^!q*clQpTGSLI(GHl@85S9SN>;s_~P|{hDY`H^Zzq^TATLI?Bl1sZ}O&oiCp^g z=kNavZ_k(SUt9<7Dnz`0zh`rBY5kjv7>8ND1&tGe?lzPEOLR90RCdP8?2miDUvB>&t&vrhNJLq5taF=k@F7%ik#f z&+sJg?!W&GA2-re^}`#*zxJ=gn9b#;%q_I&%#5EZRc z@b=^LdC#nWuD>z;=NILrcjNz+=f8jcImtd7%aN2(M{>fKg4PC9r$de~ds8p?eSekC z@55jJGu*O>y#G%WXeLuebk}7JvTF@bc>P+W!pmPTu@}>R5a1 ztJKQ+FQ6%%4}L75ir~+e>i-Pip8nI9zW&<79CRGP^8XA!Elc*!ztvDvd;ROLyx;#s zw(I<7sD1y@`ai>J>H7Bb*DXOuDT8)AZLRU{9tN#oyC-47b@#|~-zds=$Kc=PS z?f-LI>-&F(Uo+J~`)RvCyA99RJI(&j@S!$7A9RQA2fh0rmWMz8mM{OG;oIrY*XLY& zUVon3Y+r57ufGrWw*F_>cl5b^@7_QE8UFtG`k&#`JiPc+uWbG^eAW56V(Ysr`)A&(|H)AM`^!qB+CRI)|9t%PHT^#Wi|Bub zUze``{T%%F_4;p^)AG+BrOy4&@ZAy=38%l_&b@p3?yWuc4<20mJ8${*jhegXe|jQc z|Ks7G^7_vo{@VL{+^_#TQ|{T${|xQ%#s3+8u9N%EVDnG+w|(8y{KqE6{~6x<#LxTB zFcq}gs{h#4(RsFL4+w=c|4-30ce?HfL``>fB z|1&&Ft@_WPIcxuX?YrNrKYc&>+BVzvKf^D#)ZMp#UcF}h`$u8?w*L&*53hg!{r&@x zd!K^_hHhW2zyD{q-|G+j0pI^K>@z!k{ok(q{|wJH3+w+psjL52{{G+o#{1j$zu5i$ z`>~aicg25iT>%~v_1OF#G_gCsyB}0A|7Vc?`nP|c`Igk5vup32?fd+n;nKwnkZ58nS5a{bB7W&atz@t5v@Ongl?ml|xeRls} zrk(od!-D@a?0C`w3PO#7!tFK>xZ7W1(oSzGQPKZ#<61kr^H=?yLaod$%>6fnKi#bt(rb?Lu)A^z_dKXM#c}pTMv?xsEdKvD0k8S)C;$Ke diff --git a/docs/installation.md b/docs/installation.md deleted file mode 100644 index 5078e7cd..00000000 --- a/docs/installation.md +++ /dev/null @@ -1,118 +0,0 @@ -# Installation - -# Local - -After installation see [service.md](/docs/service.md) to configure multi-scrobbler to run automatically in the background. - -## Nodejs - -Clone this repository somewhere and then install from the working directory - -```shell -git clone https://github.com/FoxxMD/multi-scrobbler.git . -cd multi-scrobbler -nvm use # optional, to set correct Node version -npm install -npm build -npm start -``` - -### Usage Examples - -* The web UI is served on port `9078`. This can be modified using the `PORT` environmental variable. - -#### Using [file-based](/docs/configuration.md#file-based-configuration) configuration - -```shell -npm start -``` - -#### Using [env-based](/docs/configuration.md#env-based-configuration) configuration - -```shell -SPOTIFY_CLIENT_ID=yourId SPOTIFY_CLIENT_SECRET=yourSecret MALOJA_URL="http://domain.tld" node src/index.js -``` - -## Flatpak - -You must have [Flatpak](https://flatpak.org/) installed on your system. - -```shell -flatpak install flathub io.github.foxxmd.multiscrobbler -``` - -### Usage Examples - -#### Using [file-based](/docs/configuration.md#file-based-configuration) configuration - -The config directory for multi-scrobbler as a flatpak can be found under `/home/YourUser/.var/app/io.github.foxxmd.multiscrobbler/config` - -```shell -flatpak run io.github.multiscrobbler -``` - -#### Using [env-based](/docs/configuration.md#env-based-configuration) configuration - -There are a few [options for running flatpak applications with temporary or permanent environmental variables.](https://ardasevinc.dev/launch-flatpak-apps-with-custom-args-and-environment-variables) - -```shell -flatpak run --env=SPOTIFY_CLIENT_ID=yourId --envSPOTIFY_CLIENT_SECRET=yourSecret --env=MALOJA_URL="http://domain.tld" io.github.foxxmd.multiscrobbler -``` - -# Docker - -Cross-platform images are built for x86 (Intel/AMD) and ARM64 (IE Raspberry Pi) - -[Dockerhub](https://hub.docker.com/r/foxxmd/multi-scrobbler) -``` -docker.io/foxxmd/multi-scrobbler:latest -``` - -[Github Packages](https://github.com/FoxxMD/multi-scrobbler/pkgs/container/multi-scrobbler) -``` -ghcr.io/foxxmd/multi-scrobbler:latest -``` - -Or use the provided [docker-compose.yml](/docker-compose.yml) after modifying it to fit your configuration. - -Recommended configuration steps for docker or docker-compose usage: - -* If you must **bind a host directory into the container for storing configurations and credentials:** - * [Using `-v` method for docker](https://docs.docker.com/storage/bind-mounts/#start-a-container-with-a-bind-mount): `-v /path/on/host/config:/config` - * [Using docker-compose](https://docs.docker.com/compose/compose-file/compose-file-v3/#short-syntax-3): `- /path/on/host/config:/config` -* (Optionally) map the web UI port in the container **9078** to the host - * With [docker](https://docs.docker.com/engine/reference/commandline/run/#publish): `-p 9078:9078` (first port is the port on the host to use) - * With [docker-compose](https://docs.docker.com/compose/compose-file/compose-file-v3/#short-syntax-1): `- "9078:9078"` -* (Optionally) set the [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for the container using the environmental variable `TZ` ([docker](https://docs.docker.com/engine/reference/commandline/run/#env)) ([docker-compose](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment)) - -### Linux Host - -If you are - -* using [rootless containers with Podman](https://developers.redhat.com/blog/2020/09/25/rootless-containers-with-podman-the-basics#why_podman_) -* running docker on MacOS or Windows - -this **DOES NOT** apply to you. - -If you are running Docker on a **Linux Host** you must specify `user:group` permissions of the user who owns the **configuration directory** on the host to avoid [docker file permission problems.](https://ikriv.com/blog/?p=4698) These can be specified using the [environmental variables **PUID** and **PGID**.](https://docs.linuxserver.io/general/understanding-puid-and-pgid) - -To get the UID and GID for the current user run these commands from a terminal: - -* `id -u` -- prints UID -* `id -g` -- prints GID - -## Docker Usage Examples - -### Using [env-based](/docs/configuration.md#env-based-configuration) configuration - -```bash -docker run -e "SPOTIFY_CLIENT_ID=yourId" -e "SPOTIFY_CLIENT_SECRET=yourSecret" -e "MALOJA_URL=http://domain.tld" -e "MALOJA_API_KEY=1234" -e "PUID=1000" -e "PGID=1000" -p 9078:9078 -v /path/on/host/config:/config foxxmd/multi-scrobbler -``` - -### Using [file-based](/docs/configuration.md#file-based-configuration) configuration - -```bash -docker run -e "PUID=1000" -e "PGID=1000" -p 9078:9078 -v /path/on/host/config:/config foxxmd/multi-scrobbler -``` - -See the [docker-compose.yml](/docker-compose.yml) file for how to use with docker-compose. diff --git a/docs/kitchensink.md b/docs/kitchensink.md deleted file mode 100644 index 12d81fb1..00000000 --- a/docs/kitchensink.md +++ /dev/null @@ -1,288 +0,0 @@ -# Example Config using all Possible Features - -Scenario: - -* You want to scrobble plays for yourself (Foxx), Fred, and Mary -* Each person has their own Maloja server -* Each person has their own Spotify account -* You have your own Airsonic (subsonic) server you to scrobble from -* You have your own Youtube Music account you want to scrobble from -* Mary has her own Last.fm account she also wants to scrobble to -* Fred has his own Spotify application and provides you with just his access and refresh token because he doesn't trust you (wtf Fred) -* Fred has a Plex server and wants to scrobble everything he plays -* Mary uses Fred's Plex server but only wants to scrobble her plays from the `podcast` library -* The three of you have a shared library on Plex called `party` that you only play when you are hanging out. You want plays from that library to be scrobbled to everyone's servers. -* Fred also has his own Jellyfin server and wants to scrobble everything he plays - -### All-in-one Config - -Using just one config file located at `CONFIG_DIR/config.json`: - -```json5 -{ - "sourceDefaults": { - "maxPollRetries": 0, // optional, default # of automatic polling restarts on error. can be overridden by property in individual config - "maxRequestRetries": 1, // optional, default # of http request retries a source can make before error is thrown. can be overridden by property in individual config - "retryMultiplier": 1.5, // optional, default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying). can be overridden by property in individual config - }, - "clientDefaults": { - "maxRequestRetries": 1, // optional, default # of http request retries a client can make before error is thrown. can be overridden by property in individual config - "retryMultiplier": 1.5, // optional, default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying). can be overridden by property in individual config - }, - "sources": [ - { - "type": "spotify", - "name": "foxxSpot", - "clients": ["foxxMaloja"], - "data": { - "clientId": "foxxSpotifyAppId", - "clientSecret": "foxxSpotifyAppSecret", - "maxRequestRetries": 2, // override default max retries because spotify can...spotty - } - }, - { - "type": "spotify", - "name": "marySpot", - "clients": ["maryMaloja"], - "data": { - "clientId": "foxxSpotifyAppId", // only need one application, it can be used by all users of this multi-scrobbler instance - "clientSecret": "foxxSpotifyAppSecret", - } - }, - { - "type": "spotify", - "name": "fredSpot", - "clients": ["fredMaloja"], - "data": { - "accessToken": "fredsToken", - "refreshToken": "fredsRefreshToken", - "interval": 120, // he also wants a slower check interval because his application already has heavy api usage - } - }, - { - "type": "plex", - "name": "fredPlex", - "clients": ["fredMaloja"], - "data": { - "user": ["fred@email.com"] - } - }, - { - "type": "plex", - "name": "maryPlex", - "clients": ["maryMaloja"], - "data": { - "user": ["mary@email.com"], // still need to specify mary as user so not all users who play from 'podcasts' get scrobbled - "libraries": ["podcasts"] - } - }, - { - "type": "plex", - "name": "partyPlex", - // omitting clients (or making it empty) will make this Source scrobble to all Clients - "data": { - "libraries": ["party"], - } - }, - { - "type": "jellyfin", - "name": "FredJelly", - // omitting clients (or making it empty) will make this Source scrobble to all Clients - "data": { - "user": ["fred@email.com"] - } - }, - { - "type": "subsonic", - "name": "foxxAirsonic", - "clients": ["foxxMaloja"], - "data": { - "user": "foxx", - "password": "foxxPassword", - "url": "https://airsonic.foxx.example" - } - }, - { - "type": "ytmusic", - "name": "foxxYoutube", - "clients": ["foxxMaloja"], - "data": { - "cookie": "__Secure-3PAPISID=3AxsXpy0MKGu75Qb/AkISXGqOnSDn1jEKn; DEVICE_INFO=ChxOekU0Tmpjek5EWTBPRGd3TlRBMk16QXpNdz09EJbS8Z0GGJbS8Z0G; ...", - "authUser": 1 - } - }, - ], - "clients": [ - { - "type": "maloja", - "name": "foxxMaloja", - "data": { - "url": "https://maloja.foxx.example", - "apiKey": "foxxApiKey" - } - }, - { - "type": "maloja", - "name": "fredMaloja", - "data": { - "url": "https://maloja.fred.example", - "apiKey": "fredApiKey" - } - }, - { - "type": "maloja", - "name": "maryMaloja", - "data": { - "url": "https://maloja.mary.example", - "apiKey": "maryApiKey" - } - }, - { - "type": "lastfm", - "name": "maryLFM", - "data": { - "apiKey": "maryApiKey", - "secret": "marySecret", - "redirectUri": "http://localhost:9078/lastfm/callback" - } - } - ] -} - -``` - -### Separate JSON files - -In `CONFIG_DIR/spotify.json`: - -```json5 -[ - { - // may omit 'type' property since app knows this is file is for spotify configs - "name": "foxxSpot", - "clients": ["foxxMaloja"], - "data": { - "clientId": "foxxSpotifyAppId", - "clientSecret": "foxxSpotifyAppSecret" - } - }, - { - "name": "marySpot", - "clients": ["maryMaloja"], - "data": { - "clientId": "foxxSpotifyAppId", - "clientSecret": "foxxSpotifyAppSecret" - } - }, - { - "name": "fredSpot", - "clients": ["fredMaloja"], - "data": { - "accessToken": "fredsToken", - "refreshToken": "fredsRefreshToken", - "interval": 120 - } - }, -] -``` - -In `CONFIG_DIR/plex.json` - -```json5 -[ - { - "name": "fredPlex", - "clients": ["fredMaloja"], - "data": { - "user": ["fred@email.com"] - } - }, - { - "name": "maryPlex", - "clients": ["maryMaloja"], - "data": { - "user": ["mary@email.com"], - "libraries": ["podcasts"] - } - }, - { - "name": "partyPlex", - "data": { - "libraries": ["party"] - } - } -] -``` - -In `CONFIG_DIR/jellyfin.json` - -```json5 -[ - { - "name": "FredJelly", - "data": { - "user": ["fred@email.com"] - } - } -] -``` - -In `CONFIG_DIR/ytmusic.json` - -```json5 -[ - { - "type": "ytmusic", - "name": "foxxYoutube", - "clients": ["foxxMaloja"], - "data": { - "cookie": "__Secure-3PAPISID=3AxsXpy0MKGu75Qb/AkISXGqOnSDn1jEKn; DEVICE_INFO=ChxOekU0Tmpjek5EWTBPRGd3TlRBMk16QXpNdz09EJbS8Z0GGJbS8Z0G; ...", - "authUser": 1 - } - } -] -``` - -In `CONFIG_DIR/maloja.json`: - -```json5 -[ - { - "name": "foxxMaloja", - "data": { - "url": "https://maloja.foxx.example", - "apiKey": "foxxApiKey" - } - }, - { - "name": "fredMaloja", - "data": { - "url": "https://maloja.fred.example", - "apiKey": "fredApiKey" - } - }, - { - "name": "maryMaloja", - "data": { - "url": "https://maloja.mary.example", - "apiKey": "maryApiKey" - } - } -] -``` - -In `CONFIG_DIR/lastfm.json`: - -```json5 -[ - { - "name": "maryLFM", - "data": { - "apiKey": "maryApiKey", - "secret": "marySecret", - "redirectUri": "http://localhost:9078/lastfm/callback" - } - } -] -``` - diff --git a/docs/plex.md b/docs/plex.md deleted file mode 100644 index 51973421..00000000 --- a/docs/plex.md +++ /dev/null @@ -1,68 +0,0 @@ -Tracks played on [Plex](https://plex.tv/) can be scrobbled either by: - * A [Tautulli](https://tautulli.com/) notification agent with a webhook. - * Using Plex [Webhooks](https://support.plex.tv/articles/115002267687-webhooks) (restricted to Plex Pass users) - -# Using Tautulli - -## Create a new Notification Agent - -* Navigate to the **Notification Agents** page in **Settings** -* Click **Add a new notification agent** -* Select **Webhook** - -## Configure the Agent - -The below sections correspond with the tabs available in the notification agent configuration popup. - -### Configuration -* Webhook URL -- `http://localhost:9078/tautulli` (substitute your domain if different than the default) -* Webhook Method -- POST - -### Triggers - -Select **Watched** - -### Conditions - -Refer to [Tautulli's documentation](https://github.com/Tautulli/Tautulli-Wiki/wiki/Custom-Notification-Conditions) if you need help here. It may be a good idea to restrict notifications to only one library (if you have a Music library, for instance) - -**This app will only scrobble an item if `media_type` is a "track", which is the default for all music.** - -### Data - -Expand the **Watched** dropdown and add the following code block to the **JSON Data** text field: - -``` -{ -"artist_name": "{artist_name}", -"track_name": "{track_name}", -"track_artist": "{track_artist}", -"album_name": "{album_name}", -"media_type": "{media_type}", -"title": "{title}", -"duration": "{duration_sec}", -"username": "{username}", -"server": "{server_name}", -"version": "{server_version}", -"library": "{library_name}", -"player": "{player}", -"device": "{device}", -"platform": "{platform}", -"action": "{action}", -"machine_id": "{machine_id}", -"session_key": "{session_key}" -} -``` - -**Click the Save button to finish.** - -Your agent is now configured and ready to scrobble. - -# Using Plex Webhooks - -* Navigate to your **Account/Settings** and find the **Webhooks** page -* Click **Add Webhook** -* URL -- `http://localhost:9078/plex` (substitute your domain if different than the default) -* **Save Changes** - -Plex is now configured to scrobble. diff --git a/docs/service.md b/docs/service.md deleted file mode 100644 index ca185d7a..00000000 --- a/docs/service.md +++ /dev/null @@ -1,68 +0,0 @@ -If you have multi-scrobbler installed [locally](/docs/installation.md#local) you can enable it to run as a background service when you login. - -Before running as a service you should run it at least once in the foreground to ensure it can start up correctly! - -# [Systemd](https://systemd.io/) - -Systemd is system and service manager that is used by [most popular linux distros](https://en.wikipedia.org/wiki/Systemd#Adoption) including [Ubuntu](https://wiki.ubuntu.com/SystemdForUpstartUsers), [Fedora](https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/), Pop!_OS, [Debian](https://wiki.debian.org/systemd), and [Arch](https://wiki.archlinux.org/title/systemd). - -This setup will create a [user service](https://wiki.archlinux.org/title/systemd/User) that runs on login. - -## Create A Unit File - -Create a new service file for multi-scrobbler under your HOME config: - -```console -mkdir -p ~/.config/systemd/user -touch ~/.config/systemd/user/multi-scrobbler.service -``` - -In a text editor add contents below to the file you created, `multi-scrobbler.service`: - -```ini -[Unit] -Description=multi-scrobbler -After=network.target - -[Service] -Type=simple -ExecStart=flatpak run io.github.multiscrobbler -Restart=no - -[Install] -WantedBy=default.target -``` - -The above assumes you [installed multi-scrobbler using flatpak](/docs/installation.md#flatpak) - -### Node.js Installs - -If you are running multi-scrobbler directly with [nodejs from a clone repository directory](/docs/installation.md#nodejs) you should modify the `[Service]`: - -```ini -[Service] -Type=simple -WorkingDirectory=/path/to/multi-scrobbler/directory -ExecStart=node src/index.js -Restart=no -``` - -## Start the Service - -Save the file then run: - -```console -systemctl daemon-reload -systemctl --user enable multi-scrobbler.service -systemctl --user start multi-scrobbler.service -``` - -This will - -* scan for new services and pickup our multi-scrobbler user service -* enable the service to run at login automatically -* start the service now - -# Other Service Methods - -Open a PR if you would like to document setting up multi-scrobbler for other service managers! diff --git a/docsite/docs/FAQ.md b/docsite/docs/FAQ.md index d8f354a5..d0a281a7 100644 --- a/docsite/docs/FAQ.md +++ b/docsite/docs/FAQ.md @@ -12,7 +12,7 @@ ## Plex/Tautulli/Jellyfin don't connect -These three [sources](/README.md#source) are **ingress-based** which means that multi-scrobbler waits for the Plex/Tautulli/Jellyfin server to contact multi-scrobbler, as opposed to multi-scrobbler contacting the server. +These three [sources](/#source) are **ingress-based** which means that multi-scrobbler waits for the Plex/Tautulli/Jellyfin server to contact multi-scrobbler, as opposed to multi-scrobbler contacting the server. multi-scrobbler will log information about any server that connects to it for these three services. In the logs it looks something like this: @@ -44,7 +44,7 @@ Check the output for any additional information. #### Check Host name and URL -The URLs examples in the [configuration](/docs/configuration.md) documentation assume you are running Plex/Tautulli/Jellyfin on the same server as multi-scrobbler. If these are not the same machine then you need to determine the IP address or domain name that multi-scrobbler is reachable at and use that instead of `localhost` when configuring these sources. **This is likely the same host name that you would use to access the web interface for multi-scrobbler.** +The URLs examples in the [configuration](configuration/configuration.md) documentation assume you are running Plex/Tautulli/Jellyfin on the same server as multi-scrobbler. If these are not the same machine then you need to determine the IP address or domain name that multi-scrobbler is reachable at and use that instead of `localhost` when configuring these sources. **This is likely the same host name that you would use to access the web interface for multi-scrobbler.** EX `http://localhost:9078/plex` -> `http://192.168.0.140:9078/plex` @@ -71,7 +71,7 @@ Administration -> Dashboard -> Advanced -> Logs ## Jellyfin has warnings about undefined or missing data Make sure you have -* [Configured the webhook plugin correctly](/docs/configuration.md#jellyfin) +* [Configured the webhook plugin correctly](configuration/configuration.md#jellyfin) * Checked the **Send All Properties(ignores template)** option in the webhook settings and **Saved** multi-scrobbler is known to work on Jellyfin `10.8.9` with Webhook version `11.0.0.0`. diff --git a/docsite/docs/configuration/configuration.md b/docsite/docs/configuration/configuration.md index 51dcb6f7..7b1367db 100644 --- a/docsite/docs/configuration/configuration.md +++ b/docsite/docs/configuration/configuration.md @@ -34,11 +34,11 @@ title: Overview # Overview -[**Sources** and **Clients**](/README.md#how-does-multi-scrobbler-ms-work) are configured using environmental (ENV) variables and/or json files. +[**Sources** and **Clients**](/#how-does-multi-scrobbler-ms-work) are configured using environmental (ENV) variables and/or json files. **MS will parse configuration from both configuration types.** You can mix and match configurations but it is generally better to stick to one or the other. -TIP: Check the [**FAQ**](/docs/FAQ.md) if you have any issues after configuration! +TIP: Check the [**FAQ**](../FAQ.md) if you have any issues after configuration! ## ENV-Based Configuration @@ -50,18 +50,18 @@ This is done by passing environmental variables and so does not require any file Use ENV-based configuration if: * You are the only person for whom MS is scrobbling for -* You have a very simple setup for MS such as one scrobble [Client](/README.md#client) and one [Source](/README.md#source) IE Plex -> Maloja +* You have a very simple setup for MS such as one scrobble [Client](/#client) and one [Source](/#source) IE Plex -> Maloja ## File-Based Configuration MS will parse configuration files located in the directory specified by the `CONFIG_DIR` environmental variable. This variable defaults to: * Local installation -> `PROJECT_DIR/config` -* Docker -> `/config` (in the container) -- see the [install docs](/docs/installation.md#docker) for how to configure this correctly +* Docker -> `/config` (in the container) -- see the [install docs](../installation/installation.md#docker) for how to configure this correctly Use File-based configuration if: -* You have many [Sources](/README.md#source) +* You have many [Sources](/#source) * You have many of each type of **Source** you want to scrobble from IE 2x Plex accounts, 3x Spotify accounts, 1x Funkwhale... * You have more than one scrobble **Client** you want to scrobble to IE multiple Maloja servers @@ -73,10 +73,10 @@ File-based configurations located in the `CONFIG_DIR` directory can be parsed fr * an **all-in-one** config file named `config.json` that contains information for all Sources and Clients and/or * many **specific** files named based on the client/source to configure IE `plex.json` `spotify.json` -There are **example configurations** for all Source/Client types and AIO config located in the [/config](/config) directory of this project. These can be used as-is by renaming them to `.json`. +There are **example configurations** for all Source/Client types and AIO config located in the [/config](https://github.com/FoxxMD/multi-scrobbler/tree/master/config) directory of this project. These can be used as-is by renaming them to `.json`. For docker installations these examples are copied to your configuration directory on first-time use. -There is also a [**kitchensink example**](/docs/kitchensink.md) that provides examples of using all sources/clients in a complex configuration. +There is also a [**kitchensink example**](kitchensink.md) that provides examples of using all sources/clients in a complex configuration. ### All-in-One File Configuration @@ -92,8 +92,7 @@ Example directory structure:
Config Example -```json5 -// in config.json +```json5 title="config.json" { //... "sources": [ @@ -126,7 +125,7 @@ Example directory structure: `config.json` can also be used to set default behavior for all sources/clients using `sourceDefaults` and `clientDefaults` properties. -See [config.json.example](/config/config.json.example) for an annotated example or check out [the kitchen sink example](kitchensink.md). +See [config.json.example](../../../config/config.json.example) for an annotated example or check out [the kitchen sink example](kitchensink.md). ### Specific File Configuration @@ -167,7 +166,7 @@ Example directory structure:
-See the [/config](/config) directory of this project for examples of each type of config file or reference specific files below. +See the [/config](https://github.com/FoxxMD/multi-scrobbler/tree/master/config) directory of this project for examples of each type of config file or reference specific files below. # Source Configurations @@ -186,7 +185,7 @@ Client ID/Secret. Make sure to also whitelist your redirect URI in the applicati ### File-Based -See [`spotify.json.example`](/config/spotify.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSpotifySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`spotify.json.example`](../../../config/spotify.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSpotifySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Plex](https://plex.tv) @@ -200,7 +199,7 @@ Check the [instructions](plex.md) on how to setup a [webhooks](https://support.p ### File-Based -See [`plex.json.example`](/config/plex.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FPlexSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`plex.json.example`](../../../config/plex.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FPlexSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Tautulli](https://tautulli.com) @@ -214,7 +213,7 @@ Check the [instructions](plex.md) on how to setup a notification agent. ### File-Based -See [`tautulli.json.example`](/config/tautulli.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FTautulliSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`tautulli.json.example`](../../../config/tautulli.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FTautulliSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Subsonic](http://www.subsonic.org/) @@ -237,7 +236,7 @@ Can use this source for any application that implements the [Subsonic API](http: ### File-Based -See [`subsonic.json.example`](/config/subsonic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSubSonicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`subsonic.json.example`](../../../config/subsonic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSubSonicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Jellyfin](https://jellyfin.org/) @@ -265,7 +264,7 @@ Must be using Jellyfin 10.7 or greater ### File-Based -See [`jellyfin.json.example`](/config/jellyfin.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FJellySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`jellyfin.json.example`](../../../config/jellyfin.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FJellySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Last.fm (Source)](https://www.last.fm) @@ -277,7 +276,7 @@ No support for ENV based for Last.fm as a client (only source) ### File-Based -See [`lastfm.json.example`](/config/lastfm.json.example), change `configureAs` to `source`. Or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`lastfm.json.example`](../../../config/lastfm.json.example), change `configureAs` to `source`. Or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Listenbrainz (Source)](https://listenbrainz.org) @@ -289,7 +288,7 @@ On your [profile page](https://listenbrainz.org/profile/) find your **User Token ### File-Based -See [`listenbrainz.json.example`](/config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`listenbrainz.json.example`](../../../config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) **Change `configureAs` to `source`** @@ -321,7 +320,7 @@ After starting multi-scrobbler with credentials in-place open the dashboard (`ht ### File-Based -See [`deezer.json.example`](/config/deezer.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FDeezerSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`deezer.json.example`](../../../config/deezer.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FDeezerSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Youtube Music](https://music.youtube.com) @@ -347,7 +346,7 @@ NOTES: ### File-Based -See [`ytmusic.json.example`](/config/ytmusic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FYTMusicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`ytmusic.json.example`](../../../config/ytmusic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FYTMusicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [MPRIS](https://specifications.freedesktop.org/mpris-spec/latest/) @@ -359,7 +358,7 @@ If you run Linux and have a notification tray that shows what media you are list multi-scrobbler can listen to this interface and scrobble tracks played by **any media player** that communicates to the operating system with MPRIS. -**NOTE:** multi-scrobbler needs to be running as a [**Local Installation**](/docs/installation.md#local) in order to use MPRIS. This cannot be used from docker. +**NOTE:** multi-scrobbler needs to be running as a [**Local Installation**](../installation/installation.md#local) in order to use MPRIS. This cannot be used from docker. ### ENV-Based @@ -371,7 +370,7 @@ multi-scrobbler can listen to this interface and scrobble tracks played by **any ### File-Based -See [`mpris.json.example`](/config/mpris.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMPRISSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`mpris.json.example`](../../../config/mpris.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMPRISSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Mopidy](https://mopidy.com/) @@ -381,7 +380,7 @@ multi-scrobbler can scrobble tracks played from any Mopidy backend source, regar ### File-Based -See [`mopidy.json.example`](/config/mopidy.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMopidySourceConfig/%23%2Fdefinitions%2FMopidyData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`mopidy.json.example`](../../../config/mopidy.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMopidySourceConfig/%23%2Fdefinitions%2FMopidyData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) Configuration Options: @@ -538,7 +537,7 @@ MS transforms this to: `http://mydomain.com:80/jriverReverse/MCWS/v1/` ### File-Based -See [`jriver.json.example`](/config/jriver.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FJRiverSourceConfig/%23%2Fdefinitions%2FJRiverData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`jriver.json.example`](../../../config/jriver.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FJRiverSourceConfig/%23%2Fdefinitions%2FJRiverData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Kodi](https://kodi.tv/) @@ -606,7 +605,7 @@ MS transforms this to: `http://mydomain.com:80/kodiReverse/jsonrpc` ### File-Based -See [`kodi.json.example`](/config/kodi.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FKodiSourceConfig/%23%2Fdefinitions%2FKodiData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`kodi.json.example`](../../../config/kodi.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FKodiSourceConfig/%23%2Fdefinitions%2FKodiData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) # Client Configurations @@ -621,7 +620,7 @@ See [`kodi.json.example`](/config/kodi.json.example) or [explore the schema with ### File-Based -See [`maloja.json.example`](/config/maloja.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FMalojaClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) +See [`maloja.json.example`](../../../config/maloja.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FMalojaClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) ## [Last.fm](https://www.last.fm) @@ -644,7 +643,7 @@ or replace `localhost:9078` with your own base URL ### File-Based -See [`lastfm.json.example`](/config/lastfm.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) +See [`lastfm.json.example`](../../../config/lastfm.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) ## [Listenbrainz](https://listenbrainz.org) @@ -663,7 +662,7 @@ On your [profile page](https://listenbrainz.org/profile/) find your **User Token ### File-Based -See [`listenbrainz.json.example`](/config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) +See [`listenbrainz.json.example`](../../../config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) # Monitoring diff --git a/docsite/docs/installation/installation.md b/docsite/docs/installation/installation.md index b3274442..4d39057a 100644 --- a/docsite/docs/installation/installation.md +++ b/docsite/docs/installation/installation.md @@ -7,7 +7,7 @@ title: 'Overview' # Local -After installation see [service.md](/docs/service.md) to configure multi-scrobbler to run automatically in the background. +After installation see [service.md](service.md) to configure multi-scrobbler to run automatically in the background. ## Nodejs @@ -26,13 +26,13 @@ npm start * The web UI is served on port `9078`. This can be modified using the `PORT` environmental variable. -#### Using [file-based](/docs/configuration.md#file-based-configuration) configuration +#### Using [file-based](../configuration/configuration.md#file-based-configuration) configuration ```shell npm start ``` -#### Using [env-based](/docs/configuration.md#env-based-configuration) configuration +#### Using [env-based](../configuration/configuration.md#env-based-configuration) configuration ```shell SPOTIFY_CLIENT_ID=yourId SPOTIFY_CLIENT_SECRET=yourSecret MALOJA_URL="http://domain.tld" node src/index.js @@ -48,7 +48,7 @@ flatpak install flathub io.github.foxxmd.multiscrobbler ### Usage Examples -#### Using [file-based](/docs/configuration.md#file-based-configuration) configuration +#### Using [file-based](../configuration/configuration.md#file-based-configuration) configuration The config directory for multi-scrobbler as a flatpak can be found under `/home/YourUser/.var/app/io.github.foxxmd.multiscrobbler/config` @@ -56,7 +56,7 @@ The config directory for multi-scrobbler as a flatpak can be found under `/home/ flatpak run io.github.multiscrobbler ``` -#### Using [env-based](/docs/configuration.md#env-based-configuration) configuration +#### Using [env-based](../configuration/configuration.md#env-based-configuration) configuration There are a few [options for running flatpak applications with temporary or permanent environmental variables.](https://ardasevinc.dev/launch-flatpak-apps-with-custom-args-and-environment-variables) @@ -78,7 +78,7 @@ docker.io/foxxmd/multi-scrobbler:latest ghcr.io/foxxmd/multi-scrobbler:latest ``` -Or use the provided [docker-compose.yml](/docker-compose.yml) after modifying it to fit your configuration. +Or use the provided [docker-compose.yml](../../../docker-compose.yml) after modifying it to fit your configuration. Recommended configuration steps for docker or docker-compose usage: @@ -108,16 +108,16 @@ To get the UID and GID for the current user run these commands from a terminal: ## Docker Usage Examples -### Using [env-based](/docs/configuration.md#env-based-configuration) configuration +### Using [env-based](../configuration/configuration.md#env-based-configuration) configuration ```bash docker run -e "SPOTIFY_CLIENT_ID=yourId" -e "SPOTIFY_CLIENT_SECRET=yourSecret" -e "MALOJA_URL=http://domain.tld" -e "MALOJA_API_KEY=1234" -e "PUID=1000" -e "PGID=1000" -p 9078:9078 -v /path/on/host/config:/config foxxmd/multi-scrobbler ``` -### Using [file-based](/docs/configuration.md#file-based-configuration) configuration +### Using [file-based](../configuration/configuration.md#file-based-configuration) configuration ```bash docker run -e "PUID=1000" -e "PGID=1000" -p 9078:9078 -v /path/on/host/config:/config foxxmd/multi-scrobbler ``` -See the [docker-compose.yml](/docker-compose.yml) file for how to use with docker-compose. +See the [docker-compose.yml](../../../docker-compose.yml) file for how to use with docker-compose. diff --git a/docsite/docs/installation/service.md b/docsite/docs/installation/service.md index 97a28116..9a2abc4f 100644 --- a/docsite/docs/installation/service.md +++ b/docsite/docs/installation/service.md @@ -3,7 +3,7 @@ sidebar_position: 2 title: 'As a Service' --- -If you have multi-scrobbler installed [locally](/docs/installation.md#local) you can enable it to run as a background service when you login. +If you have multi-scrobbler installed [locally](installation.md#local) you can enable it to run as a background service when you login. Before running as a service you should run it at least once in the foreground to ensure it can start up correctly! @@ -38,11 +38,11 @@ Restart=no WantedBy=default.target ``` -The above assumes you [installed multi-scrobbler using flatpak](/docs/installation.md#flatpak) +The above assumes you [installed multi-scrobbler using flatpak](installation.md#flatpak) ### Node.js Installs -If you are running multi-scrobbler directly with [nodejs from a clone repository directory](/docs/installation.md#nodejs) you should modify the `[Service]`: +If you are running multi-scrobbler directly with [nodejs from a clone repository directory](installation.md#nodejs) you should modify the `[Service]`: ```ini [Service] diff --git a/docsite/docusaurus.config.js b/docsite/docusaurus.config.js index 5e61904e..0b4095cc 100644 --- a/docsite/docusaurus.config.js +++ b/docsite/docusaurus.config.js @@ -60,7 +60,14 @@ const config = { ], ], themes: ["docusaurus-json-schema-plugin"], - plugins: [require.resolve("@cmfcmf/docusaurus-search-local")], + plugins: [ + [ + require.resolve("@cmfcmf/docusaurus-search-local"), + { + indexBlog: false, + }, + ], + ], themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ diff --git a/docsite/sidebars.js b/docsite/sidebars.js index b233bcdc..5f319145 100644 --- a/docsite/sidebars.js +++ b/docsite/sidebars.js @@ -19,7 +19,7 @@ const sidebars = { { type: "link", label: "Config Playground", - href: "/pages/playground" + href: "/playground" } ], diff --git a/docsite/src/pages/index.mdx b/docsite/src/pages/index.mdx index 2be09e18..c998a4cc 100644 --- a/docsite/src/pages/index.mdx +++ b/docsite/src/pages/index.mdx @@ -13,28 +13,28 @@ title: Multi-Scrobbler A javascript app to scrobble music you listened to, to [Maloja](https://github.com/krateng/maloja), [Last.fm](https://www.last.fm), and [ListenBrainz](https://listenbrainz.org) * Supports scrobbling from many **Sources** - * [Spotify](/docs/configuration.md#spotify) - * [Plex](/docs/configuration.md#plex) or [Tautulli](/docs/configuration.md#tautulli) - * [Subsonic-compatible APIs](/docs/configuration.md#subsonic) (like [Airsonic](https://airsonic.github.io/)) - * [Jellyfin](/docs/configuration.md#jellyfin) - * [Youtube Music](/docs/configuration.md#youtube-music) - * [Last.fm](/docs/configuration.md#lastfm-source) - * [ListenBrainz](/docs/configuration.md#listenbrainz--source-) - * [Deezer](/docs/configuration.md#deezer) - * [MPRIS (Linux Desktop)](/docs/configuration.md#mpris) - * [Mopidy](/docs/configuration.md#mopidy) - * [JRiver](/docs/configuration.md#jriver) - * [Kodi](/docs/configuration.md#kodi) + * [Spotify](docs/configuration#spotify) + * [Plex](docs/configuration#plex) or [Tautulli](docs/configuration#tautulli) + * [Subsonic-compatible APIs](docs/configuration#subsonic) (like [Airsonic](https://airsonic.github.io/)) + * [Jellyfin](docs/configuration#jellyfin) + * [Youtube Music](docs/configuration#youtube-music) + * [Last.fm](docs/configuration#lastfm-source) + * [ListenBrainz](docs/configuration#listenbrainz--source-) + * [Deezer](docs/configuration#deezer) + * [MPRIS (Linux Desktop)](docs/configuration#mpris) + * [Mopidy](docs/configuration#mopidy) + * [JRiver](docs/configuration#jriver) + * [Kodi](docs/configuration#kodi) * Supports scrobbling to many **Clients** - * [Maloja](/docs/configuration.md#maloja) - * [Last.fm](/docs/configuration.md#lastfm) - * [ListenBrainz](/docs/configuration.md#listenbrainz) -* Monitor status of Sources and Clients using [webhooks (Gotify or Ntfy)](/docs/configuration.md#webhook-configurations) or [healthcheck endpoint](/docs/configuration.md#health-endpoint) + * [Maloja](docs/configuration#maloja) + * [Last.fm](docs/configuration#lastfm) + * [ListenBrainz](docs/configuration#listenbrainz) +* Monitor status of Sources and Clients using [webhooks (Gotify or Ntfy)](docs/configuration#webhook-configurations) or [healthcheck endpoint](docs/configuration#health-endpoint) * Supports configuring for single or multiple users (scrobbling for your friends and family!) * Web server interface for stats, basic control, and detailed logs * Smart handling of credentials (persistent, authorization through app) * Easy configuration through ENVs or JSON -* Install using [Docker images for x86/ARM](/docs/installation.md#docker), [flatpak](/docs/installation.md#flatpak), or [locally with NodeJS](/docs/installation.md#nodejs) +* Install using [Docker images for x86/ARM](docs/installation#docker), [flatpak](docs/installation#flatpak), or [locally with NodeJS](docs/installation#nodejs) **Why should I use this over a browser extension and/or mobile app scrobbler?** @@ -45,7 +45,7 @@ A javascript app to scrobble music you listened to, to [Maloja](https://github.c **But I already scrobble my music to Last.fm/ListenBrainz, is multi-scrobbler for me?** -Yes! You can use [Last.fm as a **Source**](/docs/configuration.md#lastfm--source-) or [Listenbrainz as a **Source**](/docs/configuration.md#listenbrainz--source-) to forward scrobbles from your profile to any other Client! That way you can keep your current scrobble setup as-is but still get the benefit of capturing your data to a self-hosted location. +Yes! You can use [Last.fm as a **Source**](docs/configuration#lastfm--source-) or [Listenbrainz as a **Source**](docs/configuration#listenbrainz--source-) to forward scrobbles from your profile to any other Client! That way you can keep your current scrobble setup as-is but still get the benefit of capturing your data to a self-hosted location. @@ -74,11 +74,11 @@ Client configurations consist of: ## Installation -[See the **Installation** documentation](/docs/installation.md) +[See the **Installation** documentation](docs/installation) ## Configuration -[See the **Configuration** documentation](/docs/configuration.md) +[See the **Configuration** documentation](docs/configuration) ## Usage @@ -93,7 +93,7 @@ On first startup you may need to authorize Spotify and/or Last.fm by visiting th ## Help/FAQ -Having issues with connections or configuration? Check the [FAQ](/docs/FAQ.md) before creating an issue! +Having issues with connections or configuration? Check the [FAQ](docs/FAQ) before creating an issue! ## License -- 2.51.2 From 5dc54849cc8ba064c1b5c18c90be2e0eb294b212 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 15:51:20 -0400 Subject: [PATCH 08/17] chore(github): Add action for build/deploy docusaurus docsite --- .github/workflows/docsDeploy.yml | 42 ++++++++++++++++++++++++++++++++ docsite/docusaurus.config.js | 10 +++++--- 2 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/docsDeploy.yml diff --git a/.github/workflows/docsDeploy.yml b/.github/workflows/docsDeploy.yml new file mode 100644 index 00000000..8561921b --- /dev/null +++ b/.github/workflows/docsDeploy.yml @@ -0,0 +1,42 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: + - docsite + # Review gh actions docs if you want to further define triggers, paths, etc + # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on + +jobs: + deploy: + name: Deploy to GitHub Pages + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + cache: npm + + - name: Move into docsite dir + run: cd docsite + - name: Install dependencies + run: npm ci + - name: Build website + run: npm build + + # Popular action to deploy to GitHub Pages: + # Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + # Build output to publish to the `gh-pages` branch: + publish_dir: ./docsite/build + # The following lines assign commit authorship to the official + # GH-Actions bot for deploys to `gh-pages` branch: + # https://github.com/actions/checkout/issues/13#issuecomment-724415212 + # The GH actions bot is used by default if you didn't specify the two fields. + # You can swap them out with your own user credentials. + user_name: github-actions[bot] + user_email: 41898282+github-actions[bot]@users.noreply.github.com diff --git a/docsite/docusaurus.config.js b/docsite/docusaurus.config.js index 0b4095cc..dcebacae 100644 --- a/docsite/docusaurus.config.js +++ b/docsite/docusaurus.config.js @@ -11,15 +11,17 @@ const config = { favicon: 'img/favicon.ico', // Set the production url of your site here - url: 'https://your-docusaurus-test-site.com', + url: 'https://foxxmd.github.io', // Set the // pathname under which your site is served // For GitHub pages deployment, it is often '//' - baseUrl: '/', + baseUrl: '/multi-scrobbler', // GitHub pages deployment config. // If you aren't using GitHub pages, you don't need these. - organizationName: 'facebook', // Usually your GitHub org/user name. - projectName: 'docusaurus', // Usually your repo name. + organizationName: 'foxxmd', // Usually your GitHub org/user name. + projectName: 'multi-scrobbler', // Usually your repo name. + + trailingSlash: false, onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'warn', -- 2.51.2 From a7c340188fbf47db35c093a34f4a431071f2f4c9 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 15:52:42 -0400 Subject: [PATCH 09/17] Fix run step typo --- .github/workflows/docsDeploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docsDeploy.yml b/.github/workflows/docsDeploy.yml index 8561921b..81ba3784 100644 --- a/.github/workflows/docsDeploy.yml +++ b/.github/workflows/docsDeploy.yml @@ -23,7 +23,7 @@ jobs: - name: Install dependencies run: npm ci - name: Build website - run: npm build + run: npm run build # Popular action to deploy to GitHub Pages: # Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus -- 2.51.2 From 0409c526ee925bd9900776da2b5a33240ec27cce Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 15:54:25 -0400 Subject: [PATCH 10/17] Assume we are still in docsite dir? --- .github/workflows/docsDeploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docsDeploy.yml b/.github/workflows/docsDeploy.yml index 81ba3784..7eebd9be 100644 --- a/.github/workflows/docsDeploy.yml +++ b/.github/workflows/docsDeploy.yml @@ -32,7 +32,7 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} # Build output to publish to the `gh-pages` branch: - publish_dir: ./docsite/build + publish_dir: ./build # The following lines assign commit authorship to the official # GH-Actions bot for deploys to `gh-pages` branch: # https://github.com/actions/checkout/issues/13#issuecomment-724415212 -- 2.51.2 From 1de934e30a44cb1db977a86c9b0419a7a5d14ac0 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 15:57:26 -0400 Subject: [PATCH 11/17] Use working directory --- .github/workflows/docsDeploy.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docsDeploy.yml b/.github/workflows/docsDeploy.yml index 7eebd9be..b210f252 100644 --- a/.github/workflows/docsDeploy.yml +++ b/.github/workflows/docsDeploy.yml @@ -19,11 +19,14 @@ jobs: cache: npm - name: Move into docsite dir + working-directory: ./docsite run: cd docsite - name: Install dependencies run: npm ci + working-directory: ./docsite - name: Build website run: npm run build + working-directory: ./docsite # Popular action to deploy to GitHub Pages: # Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus @@ -32,7 +35,7 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} # Build output to publish to the `gh-pages` branch: - publish_dir: ./build + publish_dir: ./docsite/build # The following lines assign commit authorship to the official # GH-Actions bot for deploys to `gh-pages` branch: # https://github.com/actions/checkout/issues/13#issuecomment-724415212 -- 2.51.2 From 2ddeca7d29c9d504fd4dca0470235f126128c095 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 15:58:12 -0400 Subject: [PATCH 12/17] Use working directory without cd command --- .github/workflows/docsDeploy.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/docsDeploy.yml b/.github/workflows/docsDeploy.yml index b210f252..961b8f79 100644 --- a/.github/workflows/docsDeploy.yml +++ b/.github/workflows/docsDeploy.yml @@ -18,9 +18,6 @@ jobs: node-version: 18 cache: npm - - name: Move into docsite dir - working-directory: ./docsite - run: cd docsite - name: Install dependencies run: npm ci working-directory: ./docsite -- 2.51.2 From 756ff0e0c1203af773ee4a13d02382eb966bda6a Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 16:12:31 -0400 Subject: [PATCH 13/17] chore(github): Update trigger branch for docs deploy to master --- .github/workflows/docsDeploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docsDeploy.yml b/.github/workflows/docsDeploy.yml index 961b8f79..9afb7834 100644 --- a/.github/workflows/docsDeploy.yml +++ b/.github/workflows/docsDeploy.yml @@ -3,7 +3,7 @@ name: Deploy to GitHub Pages on: push: branches: - - docsite + - master # Review gh actions docs if you want to further define triggers, paths, etc # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on -- 2.51.2 From 0b101b758ec65a0be86b05c7b93bc590c4eb3c43 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 16:13:16 -0400 Subject: [PATCH 14/17] feat(tautulli): Support empty user to enable source with all users #84 --- src/sources/ScrobbleSources.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sources/ScrobbleSources.ts b/src/sources/ScrobbleSources.ts index 1bab9642..4d419d43 100644 --- a/src/sources/ScrobbleSources.ts +++ b/src/sources/ScrobbleSources.ts @@ -159,8 +159,11 @@ export default class ScrobbleSources { case 'tautulli': const t = { // support this for now - user: process.env.TAUTULLI_USER || process.env.PLEX_USER + user: process.env.TAUTULLI_USER }; + if(t.user === undefined) { + t.user = process.env.PLEX_USER; + } if (!Object.values(t).every(x => x === undefined)) { configs.push({ type: 'tautulli', -- 2.51.2 From 7849d6098ab5892497c4dd6ae46c7513be491aa6 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 16:29:55 -0400 Subject: [PATCH 15/17] docs: Fix docker heading --- docsite/docs/installation/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docsite/docs/installation/installation.md b/docsite/docs/installation/installation.md index 4d39057a..2478a8bf 100644 --- a/docsite/docs/installation/installation.md +++ b/docsite/docs/installation/installation.md @@ -64,7 +64,7 @@ There are a few [options for running flatpak applications with temporary or perm flatpak run --env=SPOTIFY_CLIENT_ID=yourId --envSPOTIFY_CLIENT_SECRET=yourSecret --env=MALOJA_URL="http://domain.tld" io.github.foxxmd.multiscrobbler ``` -# Docker +## Docker Cross-platform images are built for x86 (Intel/AMD) and ARM64 (IE Raspberry Pi) -- 2.51.2 From dc523763953d2aeca8d7dd3dd7c34bc5ea8f20cb Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Mon, 17 Jul 2023 15:39:24 -0400 Subject: [PATCH 16/17] docs: Use external links for config examples Docusaurus treats the files as assets and forces them to download when relative links. Instead, use external links to github so the user can stay in browser --- config/README.md | 4 +- docsite/docs/configuration/configuration.md | 48 ++++++++++----------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/config/README.md b/config/README.md index cf84683b..283a0afd 100644 --- a/config/README.md +++ b/config/README.md @@ -8,5 +8,5 @@ These are **NOT** exhaustive examples. You should consult the **configuration** Documentation at -* [internal docs](/docs/configuration.md) -* External Link: https://github.com/FoxxMD/multi-scrobbler/blob/master/docs/configuration.md +* [internal docs](../docsite/docs/configuration/configuration.md) +* External Link: https://github.com/FoxxMD/multi-scrobbler/blob/master/docsite/docs/configuration/configuration.md diff --git a/docsite/docs/configuration/configuration.md b/docsite/docs/configuration/configuration.md index 7b1367db..a4825b0f 100644 --- a/docsite/docs/configuration/configuration.md +++ b/docsite/docs/configuration/configuration.md @@ -125,7 +125,7 @@ Example directory structure: `config.json` can also be used to set default behavior for all sources/clients using `sourceDefaults` and `clientDefaults` properties. -See [config.json.example](../../../config/config.json.example) for an annotated example or check out [the kitchen sink example](kitchensink.md). +See [config.json.example](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/config.json.example) for an annotated example or check out [the kitchen sink example](kitchensink.md). ### Specific File Configuration @@ -166,7 +166,7 @@ Example directory structure: -See the [/config](https://github.com/FoxxMD/multi-scrobbler/tree/master/config) directory of this project for examples of each type of config file or reference specific files below. +See the [/config](https://github.com/FoxxMD/multi-scrobbler/blob/master/config) directory of this project for examples of each type of config file or reference specific files below. # Source Configurations @@ -185,7 +185,7 @@ Client ID/Secret. Make sure to also whitelist your redirect URI in the applicati ### File-Based -See [`spotify.json.example`](../../../config/spotify.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSpotifySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`spotify.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/spotify.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSpotifySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Plex](https://plex.tv) @@ -199,7 +199,7 @@ Check the [instructions](plex.md) on how to setup a [webhooks](https://support.p ### File-Based -See [`plex.json.example`](../../../config/plex.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FPlexSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`plex.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/plex.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FPlexSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Tautulli](https://tautulli.com) @@ -213,7 +213,7 @@ Check the [instructions](plex.md) on how to setup a notification agent. ### File-Based -See [`tautulli.json.example`](../../../config/tautulli.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FTautulliSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`tautulli.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/tautulli.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FTautulliSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Subsonic](http://www.subsonic.org/) @@ -236,7 +236,7 @@ Can use this source for any application that implements the [Subsonic API](http: ### File-Based -See [`subsonic.json.example`](../../../config/subsonic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSubSonicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`subsonic.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/subsonic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FSubSonicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Jellyfin](https://jellyfin.org/) @@ -264,7 +264,7 @@ Must be using Jellyfin 10.7 or greater ### File-Based -See [`jellyfin.json.example`](../../../config/jellyfin.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FJellySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`jellyfin.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/jellyfin.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FJellySourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Last.fm (Source)](https://www.last.fm) @@ -276,7 +276,7 @@ No support for ENV based for Last.fm as a client (only source) ### File-Based -See [`lastfm.json.example`](../../../config/lastfm.json.example), change `configureAs` to `source`. Or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`lastfm.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/lastfm.json.example), change `configureAs` to `source`. Or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Listenbrainz (Source)](https://listenbrainz.org) @@ -288,7 +288,7 @@ On your [profile page](https://listenbrainz.org/profile/) find your **User Token ### File-Based -See [`listenbrainz.json.example`](../../../config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`listenbrainz.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) **Change `configureAs` to `source`** @@ -320,7 +320,7 @@ After starting multi-scrobbler with credentials in-place open the dashboard (`ht ### File-Based -See [`deezer.json.example`](../../../config/deezer.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FDeezerSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`deezer.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/deezer.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FDeezerSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Youtube Music](https://music.youtube.com) @@ -346,7 +346,7 @@ NOTES: ### File-Based -See [`ytmusic.json.example`](../../../config/ytmusic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FYTMusicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`ytmusic.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/ytmusic.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FYTMusicSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [MPRIS](https://specifications.freedesktop.org/mpris-spec/latest/) @@ -370,7 +370,7 @@ multi-scrobbler can listen to this interface and scrobble tracks played by **any ### File-Based -See [`mpris.json.example`](../../../config/mpris.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMPRISSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`mpris.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/mpris.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMPRISSourceConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Mopidy](https://mopidy.com/) @@ -380,7 +380,7 @@ multi-scrobbler can scrobble tracks played from any Mopidy backend source, regar ### File-Based -See [`mopidy.json.example`](../../../config/mopidy.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMopidySourceConfig/%23%2Fdefinitions%2FMopidyData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`mopidy.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/mopidy.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FMopidySourceConfig/%23%2Fdefinitions%2FMopidyData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) Configuration Options: @@ -537,7 +537,7 @@ MS transforms this to: `http://mydomain.com:80/jriverReverse/MCWS/v1/` ### File-Based -See [`jriver.json.example`](../../../config/jriver.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FJRiverSourceConfig/%23%2Fdefinitions%2FJRiverData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`jriver.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/jriver.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FJRiverSourceConfig/%23%2Fdefinitions%2FJRiverData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) ## [Kodi](https://kodi.tv/) @@ -605,7 +605,7 @@ MS transforms this to: `http://mydomain.com:80/kodiReverse/jsonrpc` ### File-Based -See [`kodi.json.example`](../../../config/kodi.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FKodiSourceConfig/%23%2Fdefinitions%2FKodiData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) +See [`kodi.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/kodi.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FKodiSourceConfig/%23%2Fdefinitions%2FKodiData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fsource.json) # Client Configurations @@ -620,7 +620,7 @@ See [`kodi.json.example`](../../../config/kodi.json.example) or [explore the sch ### File-Based -See [`maloja.json.example`](../../../config/maloja.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FMalojaClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) +See [`maloja.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/maloja.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FMalojaClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) ## [Last.fm](https://www.last.fm) @@ -643,7 +643,7 @@ or replace `localhost:9078` with your own base URL ### File-Based -See [`lastfm.json.example`](../../../config/lastfm.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) +See [`lastfm.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/lastfm.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23/%23%2Fdefinitions%2FLastfmClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) ## [Listenbrainz](https://listenbrainz.org) @@ -662,7 +662,7 @@ On your [profile page](https://listenbrainz.org/profile/) find your **User Token ### File-Based -See [`listenbrainz.json.example`](../../../config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) +See [`listenbrainz.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/listenbrainz.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FListenBrainzClientConfig?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Fclient.json) # Monitoring @@ -679,13 +679,13 @@ Webhooks will **push** a notification to your configured servers on these events Webhooks are configured in the main [config.json](#all-in-one-file-configuration) file under the `webhook` top-level property. Multiple webhooks may be configured for each webhook type. EX: -```json +```json5 { "sources": [ - ... + //... ], "clients": [ - ... + //... ], "webhooks": [ { @@ -697,14 +697,14 @@ Webhooks are configured in the main [config.json](#all-in-one-file-configuration { "name": "SecondGotifyServer", "type": "gotify", - ... + //... }, { "name": "NtfyServerOne", "type": "ntfy", - ... + //... }, - ... + //... ] } ``` -- 2.51.2 From fbea08ddedfb15c55c613c65cf8eb3fe29c7d667 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Mon, 17 Jul 2023 15:40:44 -0400 Subject: [PATCH 17/17] chore: Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5984fca3..c503de38 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "multi-scrobbler", - "version": "0.4.6", + "version": "0.4.8", "description": "scrobble plays from multiple sources to multiple clients", "main": "src/index.js", "scripts": { -- 2.51.2

huQt=1<85tZLm>33K zy9QKn zPEi8OIDljvE*#Wga$sO^WM9Mqu37FJfA@=-iNT5Qz>EE+?~`~P7#xl~e82tK(vmVE z1}26@JpX$i{=e?okS)l;AW`+hUvp{q)E_2Hdkh6w7dd_`M*?Ribvxoih?&RJ(Ol=J@c{dCZ7HA{F=6=(U+;7j*Xn9X?= z!=Bw@-5$Gp4nxC1`y-zfSsok{W{~FKsZ(bXcy48O()X@TbDj)sc1aA!c7OhF$dDt#Q+tG=r@D7`jzA7a!CK{eTk|$q z8hkit+Fx;fPqcoYU6b%(xj=^8nBUu8w%vdIncwS^;K4pw + + + + + + + \ No newline at end of file diff --git a/docsite/static/img/status-ui.jpg b/docsite/static/img/status-ui.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a6581f6a3606d1fee8dc4800a5d23c7a5fa087c GIT binary patch literal 196020 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%0Dcl=44c8Y`Zq{P06iM~@GuBlz) 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 E01P!tt^fc4 literal 0 HcmV?d00001 diff --git a/docsite/static/source.json b/docsite/static/source.json new file mode 100644 index 00000000..7bf320eb --- /dev/null +++ b/docsite/static/source.json @@ -0,0 +1,1568 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "anyOf": [ + { + "$ref": "#/definitions/SpotifySourceConfig" + }, + { + "$ref": "#/definitions/PlexSourceConfig" + }, + { + "$ref": "#/definitions/TautulliSourceConfig" + }, + { + "$ref": "#/definitions/DeezerSourceConfig" + }, + { + "$ref": "#/definitions/SubSonicSourceConfig" + }, + { + "$ref": "#/definitions/JellySourceConfig" + }, + { + "$ref": "#/definitions/LastfmSourceConfig" + }, + { + "$ref": "#/definitions/YTMusicSourceConfig" + }, + { + "$ref": "#/definitions/MPRISSourceConfig" + }, + { + "$ref": "#/definitions/MopidySourceConfig" + }, + { + "$ref": "#/definitions/ListenBrainzSourceConfig" + }, + { + "$ref": "#/definitions/JRiverSourceConfig" + }, + { + "$ref": "#/definitions/KodiSourceConfig" + } + ], + "definitions": { + "DeezerData": { + "properties": { + "clientId": { + "description": "deezer client id", + "examples": [ + "a89cba1569901a0671d5a9875fed4be1" + ], + "title": "clientId", + "type": "string" + }, + "clientSecret": { + "description": "deezer client secret", + "examples": [ + "ec42e09d5ae0ee0f0816ca151008412a" + ], + "title": "clientSecret", + "type": "string" + }, + "interval": { + "default": 60, + "description": "optional, how long to wait before calling spotify for new tracks (in seconds)", + "examples": [ + 60 + ], + "title": "interval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "redirectUri": { + "default": "http://localhost:9078/deezer/callback", + "description": "deezer redirect URI -- required only if not the default shown here. URI must end in \"callback\"", + "examples": [ + "http://localhost:9078/deezer/callback" + ], + "title": "redirectUri", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + } + }, + "required": [ + "clientId", + "clientSecret", + "redirectUri" + ], + "title": "DeezerData", + "type": "object" + }, + "DeezerSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/DeezerData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "DeezerSourceConfig", + "type": "object" + }, + "JRiverData": { + "properties": { + "interval": { + "default": 30, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 30 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 60, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 60 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "password": { + "description": "If you have enabled authentication, the password you set", + "title": "password", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "url": { + "default": "http://localhost:52199/MCWS/v1/", + "description": "URL of the JRiver HTTP server to connect to\n\nmulti-scrobbler connects to the Web Service Interface endpoint that ultimately looks like this => `http://yourDomain:52199/MCWS/v1/`\n\nThe URL you provide here will have all parts not explicitly defined filled in for you so if these are not the default you must define them.\n\nParts => [default value]\n\n* Protocol => `http://`\n* Hostname => `localhost`\n* Port => `52199`\n* Path => `/MCWS/v1/`", + "examples": [ + "http://localhost:52199/MCWS/v1/" + ], + "title": "url", + "type": "string" + }, + "username": { + "description": "If you have enabled authentication, the username you set", + "title": "username", + "type": "string" + } + }, + "required": [ + "url" + ], + "title": "JRiverData", + "type": "object" + }, + "JRiverSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/JRiverData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "JRiverSourceConfig", + "type": "object" + }, + "JellyData": { + "properties": { + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "description": "Additional options for jellyfin logging and tuning", + "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Jellyfin event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Jellyfin sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ], + "title": "logFilterFailure" + }, + "logPayload": { + "default": false, + "description": "Log raw Jellyfin webhook payload to debug", + "examples": [ + false + ], + "title": "logPayload", + "type": "boolean" + } + }, + "title": "options", + "type": "object" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "servers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of servers to scrobble tracks from\n\nIf none are provided tracks from all servers will be scrobbled", + "examples": [ + [ + "MyServerName1" + ] + ], + "title": "servers" + }, + "users": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of users to scrobble tracks from\n\nIf none are provided tracks from all users will be scrobbled", + "examples": [ + [ + "MyUser1", + "MyUser2" + ] + ], + "title": "users" + } + }, + "title": "JellyData", + "type": "object" + }, + "JellySourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/JellyData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "JellySourceConfig", + "type": "object" + }, + "KodiData": { + "properties": { + "interval": { + "default": 30, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 30 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 60, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 60 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "password": { + "description": "The password set for Remote Control via Web Sever", + "title": "password", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "url": { + "default": "http://localhost:8080/jsonrpc", + "description": "URL of the Kodi HTTP server to connect to\n\nmulti-scrobbler connects to the Web Service Interface endpoint that ultimately looks like this => `http://yourDomain:8080/jsonrpc`\n\nThe URL you provide here will have all parts not explicitly defined filled in for you so if these are not the default you must define them.\n\nParts => [default value]\n\n* Protocol => `http://`\n* Hostname => `localhost`\n* Port => `8080`\n* Path => `/jsonrpc`", + "examples": [ + "http://localhost:8080/jsonrpc" + ], + "title": "url", + "type": "string" + }, + "username": { + "description": "The username set for Remote Control via Web Sever", + "title": "username", + "type": "string" + } + }, + "required": [ + "password", + "url", + "username" + ], + "title": "KodiData", + "type": "object" + }, + "KodiSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/KodiData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "KodiSourceConfig", + "type": "object" + }, + "LastFmSourceData": { + "properties": { + "apiKey": { + "description": "API Key generated from Last.fm account", + "examples": [ + "787c921a2a2ab42320831aba0c8f2fc2" + ], + "title": "apiKey", + "type": "string" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "redirectUri": { + "default": "http://localhost:9078/lastfm/callback", + "description": "Optional URI to use for callback. Specify this if callback should be different than the default. MUST have \"lastfm/callback\" in the URL somewhere.", + "examples": [ + "http://localhost:9078/lastfm/callback" + ], + "title": "redirectUri", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "secret": { + "description": "Secret generated from Last.fm account", + "examples": [ + "ec42e09d5ae0ee0f0816ca151008412a" + ], + "title": "secret", + "type": "string" + }, + "session": { + "description": "Optional session id returned from a completed auth flow", + "title": "session", + "type": "string" + } + }, + "required": [ + "apiKey", + "secret" + ], + "title": "LastFmSourceData", + "type": "object" + }, + "LastfmSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "configureAs": { + "default": "source", + "description": "When used in `lastfm.config` this tells multi-scrobbler whether to use this data to configure a source or client.", + "enum": [ + "source" + ], + "examples": [ + "source" + ], + "title": "configureAs", + "type": "string" + }, + "data": { + "$ref": "#/definitions/LastFmSourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "LastfmSourceConfig", + "type": "object" + }, + "ListenBrainzSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "configureAs": { + "default": "source", + "description": "When used in `listenbrainz.config` this tells multi-scrobbler whether to use this data to configure a source or client.", + "enum": [ + "source" + ], + "examples": [ + "source" + ], + "title": "configureAs", + "type": "string" + }, + "data": { + "$ref": "#/definitions/ListenBrainzSourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "ListenBrainzSourceConfig", + "type": "object" + }, + "ListenBrainzSourceData": { + "properties": { + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "token": { + "description": "User token for the user to scrobble for", + "examples": [ + "6794186bf-1157-4de6-80e5-uvb411f3ea2b" + ], + "title": "token", + "type": "string" + }, + "url": { + "default": "https://api.listenbrainz.org/", + "description": "URL for the ListenBrainz server, if not using the default", + "examples": [ + "https://api.listenbrainz.org/" + ], + "title": "url", + "type": "string" + }, + "username": { + "description": "Username of the user to scrobble for", + "title": "username", + "type": "string" + } + }, + "required": [ + "token", + "username" + ], + "title": "ListenBrainzSourceData", + "type": "object" + }, + "MPRISData": { + "properties": { + "blacklist": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "DO NOT scrobble from any players that START WITH these values, case-insensitive", + "examples": [ + [ + "spotify", + "vlc" + ] + ], + "title": "blacklist" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "whitelist": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "ONLY from any players that START WITH these values, case-insensitive\n\nIf whitelist is present then blacklist is ignored", + "examples": [ + [ + "spotify", + "vlc" + ] + ], + "title": "whitelist" + } + }, + "title": "MPRISData", + "type": "object" + }, + "MPRISSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/MPRISData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "MPRISSourceConfig", + "type": "object" + }, + "MopidyData": { + "properties": { + "albumBlacklist": { + "default": [ + "Soundcloud" + ], + "description": "Remove album data that matches any case-insensitive string from this list when scrobbling,\n\nFor certain sources (Soundcloud) Mopidy does not have all track info (Album) and will instead use \"Soundcloud\" as the Album name. You can prevent multi-scrobbler from using this bad Album data by adding the fake name to this list. Multi-scrobbler will still scrobble the track, just without the bad data.", + "examples": [ + [ + "Soundcloud", + "Mixcloud" + ] + ], + "items": { + "type": "string" + }, + "title": "albumBlacklist", + "type": "array" + }, + "interval": { + "default": 10, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 10 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 30, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 30 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "uriBlacklist": { + "description": "Do not scrobble tracks whose URI STARTS WITH any of these strings, case-insensitive\n\nEX: Don't scrobble tracks from soundcloud by adding 'soundcloud' to this list.\n\nList is ignored if uriWhitelist is used.", + "items": { + "type": "string" + }, + "title": "uriBlacklist", + "type": "array" + }, + "uriWhitelist": { + "description": "Only scrobble tracks whose URI STARTS WITH any of these strings, case-insensitive\n\nEX: Only scrobble tracks from soundcloud by adding 'soundcloud' to this list.", + "items": { + "type": "string" + }, + "title": "uriWhitelist", + "type": "array" + }, + "url": { + "default": "ws://localhost:6680/mopidy/ws/", + "description": "URL of the Mopidy HTTP server to connect to\n\nYou MUST have Mopidy-HTTP extension enabled: https://mopidy.com/ext/http\n\nmulti-scrobbler connects to the WebSocket endpoint that ultimately looks like this => `ws://localhost:6680/mopidy/ws/`\n\nThe URL you provide here will have all parts not explicitly defined filled in for you so if these are not the default you must define them.\n\nParts => [default value]\n\n* Protocol => `ws://`\n* Hostname => `localhost`\n* Port => `6680`\n* Path => `/mopidy/ws/`", + "examples": [ + "ws://localhost:6680/mopidy/ws/" + ], + "title": "url", + "type": "string" + } + }, + "title": "MopidyData", + "type": "object" + }, + "MopidySourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/MopidyData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "MopidySourceConfig", + "type": "object" + }, + "PlexSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/PlexSourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "PlexSourceConfig", + "type": "object" + }, + "PlexSourceData": { + "properties": { + "libraries": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of libraries to scrobble tracks from\n\nIf none are provided tracks from all libraries will be scrobbled", + "examples": [ + [ + "Audio", + "Music" + ] + ], + "title": "libraries" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "description": "Additional options for Plex/Tautulli logging and tuning", + "properties": { + "logFilterFailure": { + "default": "warn", + "description": "How MS should log when a Plex/Tautulli event fails a defined filter (users/servers)\n\n* `false` => do not log\n* `debug` => log to DEBUG level\n* `warn` => log to WARN level (default)\n\nHint: This is useful if you are sure this source is setup correctly and you have multiple other Plex/Tautulli sources. Set to `debug` or `false` to reduce log noise.", + "enum": [ + "debug", + false, + "warn" + ], + "examples": [ + "warn" + ], + "title": "logFilterFailure" + } + }, + "title": "options", + "type": "object" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "servers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of servers to scrobble tracks from\n\nIf none are provided tracks from all servers will be scrobbled", + "examples": [ + [ + "MyServerName" + ] + ], + "title": "servers" + }, + "user": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "optional list of users to scrobble tracks from\n\nIf none are provided tracks from all users will be scrobbled", + "examples": [ + [ + "MyUser1", + "MyUser2" + ] + ], + "title": "user" + } + }, + "title": "PlexSourceData", + "type": "object" + }, + "Record": { + "title": "Record", + "type": "object" + }, + "ScrobbleThresholds": { + "properties": { + "duration": { + "default": 30, + "description": "The number of seconds before a track should be considered scrobbled.", + "examples": [ + 30 + ], + "title": "duration", + "type": "number" + }, + "percent": { + "description": "The percentage of a track that should have been seen played before it should be scrobbled. Only used if the Source provides information about how long the track is.\n\nNOTE: This should be used with care when the Source is a \"polling\" type (has an 'interval' property). If the track is short and the interval is too high MS may ignore the track if percentage is high because it had not \"seen\" the track for long enough from first discovery, even if you have been playing the track for longer.", + "title": "percent", + "type": "number" + } + }, + "title": "ScrobbleThresholds", + "type": "object" + }, + "SpotifySourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/SpotifySourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "SpotifySourceConfig", + "type": "object" + }, + "SpotifySourceData": { + "properties": { + "clientId": { + "description": "spotify client id", + "examples": [ + "787c921a2a2ab42320831aba0c8f2fc2" + ], + "title": "clientId", + "type": "string" + }, + "clientSecret": { + "description": "spotify client secret", + "examples": [ + "ec42e09d5ae0ee0f0816ca151008412a" + ], + "title": "clientSecret", + "type": "string" + }, + "interval": { + "default": 30, + "description": "How long to wait before polling the source API for new tracks (in seconds)\n\nIt is unlikely you should need to change this unless you scrobble many very short tracks often\n\nReading:\n* https://developer.spotify.com/documentation/web-api/guides/rate-limits/\n* https://medium.com/mendix/limiting-your-amount-of-calls-in-mendix-most-of-the-time-rest-835dde55b10e\n * The rate limit is ~180 req/min", + "examples": [ + 30 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 60, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 60 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "redirectUri": { + "default": "http://localhost:9078/callback", + "description": "spotify redirect URI -- required only if not the default shown here. URI must end in \"callback\"", + "examples": [ + "http://localhost:9078/callback" + ], + "title": "redirectUri", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + } + }, + "required": [ + "clientId", + "clientSecret", + "redirectUri" + ], + "title": "SpotifySourceData", + "type": "object" + }, + "SubSonicSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/SubsonicData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "SubSonicSourceConfig", + "type": "object" + }, + "SubsonicData": { + "properties": { + "interval": { + "default": 10, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 10 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 30, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 30 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "password": { + "description": "Password for the user to login to the server with", + "examples": [ + "MyPassword" + ], + "title": "password", + "type": "string" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + }, + "url": { + "description": "URL of the subsonic media server to query", + "examples": [ + "http://airsonic.local" + ], + "title": "url", + "type": "string" + }, + "user": { + "description": "Username to login to the server with", + "title": "user", + "type": "string" + } + }, + "required": [ + "password", + "url", + "user" + ], + "title": "SubsonicData", + "type": "object" + }, + "TautulliSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/PlexSourceData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "TautulliSourceConfig", + "type": "object" + }, + "YTMusicData": { + "properties": { + "authUser": { + "description": "If the 'X-Goog-AuthUser' header is present in the Request Headers for music.youtube.com it must also be included", + "title": "authUser", + "type": "number" + }, + "cookie": { + "description": "The cookie retrieved from the Request Headers of music.youtube.com after logging in.\n\nSee https://github.com/nickp10/youtube-music-ts-api/blob/master/DOCUMENTATION.md#authenticate and https://ytmusicapi.readthedocs.io/en/latest/setup.html#copy-authentication-headers for how to retrieve this value.", + "examples": [ + "VISITOR_INFO1_LIVE=jMp2xA1Xz2_PbVc; __Secure-3PAPISID=3AxsXpy0M/AkISpjek; ..." + ], + "title": "cookie", + "type": "string" + }, + "interval": { + "default": 30, + "description": "How long to wait before polling the source API for new tracks (in seconds)", + "examples": [ + 30 + ], + "title": "interval", + "type": "number" + }, + "maxInterval": { + "default": 60, + "description": "When there has been no new activity from the Source API multi-scrobbler will gradually increase the wait time between polling up to this value (in seconds)", + "examples": [ + 60 + ], + "title": "maxInterval", + "type": "number" + }, + "maxPollRetries": { + "default": 5, + "description": "default # of automatic polling restarts on error", + "examples": [ + 5 + ], + "title": "maxPollRetries", + "type": "number" + }, + "maxRequestRetries": { + "default": 1, + "description": "default # of http request retries a source can make before error is thrown", + "examples": [ + 1 + ], + "title": "maxRequestRetries", + "type": "number" + }, + "options": { + "$ref": "#/definitions/Record", + "title": "options" + }, + "retryMultiplier": { + "default": 1.5, + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", + "examples": [ + 1.5 + ], + "title": "retryMultiplier", + "type": "number" + }, + "scrobbleThresholds": { + "$ref": "#/definitions/ScrobbleThresholds", + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" + } + }, + "required": [ + "cookie" + ], + "title": "YTMusicData", + "type": "object" + }, + "YTMusicSourceConfig": { + "properties": { + "clients": { + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", + "examples": [ + [ + "MyMalojaConfigName", + "MyLastFMConfigName" + ] + ], + "items": { + "type": "string" + }, + "title": "clients", + "type": "array" + }, + "data": { + "$ref": "#/definitions/YTMusicData", + "title": "data" + }, + "name": { + "description": "Unique identifier for this source.", + "title": "name", + "type": "string" + } + }, + "required": [ + "data" + ], + "title": "YTMusicSourceConfig", + "type": "object" + } + } +} + diff --git a/docsite/tsconfig.json b/docsite/tsconfig.json new file mode 100644 index 00000000..25040baf --- /dev/null +++ b/docsite/tsconfig.json @@ -0,0 +1,10 @@ +{ + // This file is not used in compilation. It is here just for a nice editor experience. + "extends": "@tsconfig/docusaurus/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "resolveJsonModule": true, + // Extending "@tsconfig/docusaurus/tsconfig.json".types with "docusaurus-json-schema-plugin" + "types": ["node", "@docusaurus/module-type-aliases", "@docusaurus/theme-classic", "docusaurus-json-schema-plugin"] + } +} diff --git a/flatpak/icon.svg b/flatpak/icon.svg new file mode 100644 index 00000000..ace9387a --- /dev/null +++ b/flatpak/icon.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/flatpak/io.github.foxxmd.multiscrobbler.yml b/flatpak/io.github.foxxmd.multiscrobbler.yml index ecd22ce4..14d8a646 100644 --- a/flatpak/io.github.foxxmd.multiscrobbler.yml +++ b/flatpak/io.github.foxxmd.multiscrobbler.yml @@ -48,6 +48,7 @@ modules: - install -Dm644 flatpak/${FLATPAK_ID}.desktop /app/share/applications/${FLATPAK_ID}.desktop - install -Dm644 flatpak/icon.png /app/share/icons/hicolor/512x512/apps/${FLATPAK_ID}.png + - install -Dm644 assets/icon.svg /app/share/icons/hicolor/scalable/apps/${FLATPAK_ID}.svg - install -Dm644 flatpak/${FLATPAK_ID}.metainfo.xml /app/share/metainfo/${FLATPAK_ID}.metainfo.xml - install -Dm755 ../run.sh /app/bin/multiscrobbler @@ -56,7 +57,7 @@ modules: - type: git url: https://github.com/FoxxMD/multi-scrobbler tag: 0.4.6 - commit: 5e905eae1798482dbcef504500d26a028c2e15cb + commit: b90ea039245491767baeefc53966b0350016aa4d dest: main # Wrapper to launch the app - type: script diff --git a/package-lock.json b/package-lock.json index 72fb05de..3bbfe27a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "multi-scrobbler", - "version": "0.4.0", + "version": "0.4.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "multi-scrobbler", - "version": "0.4.0", + "version": "0.4.6", "license": "MIT", "dependencies": { "@awaitjs/express": "^0.6.3", @@ -63,6 +63,7 @@ "ts-essentials": "^9.1.2", "ts-node": "^10.7.0", "tsconfig-paths": "^3.13.0", + "typedoc": "^0.23.28", "typescript": "^4.9.5", "typescript-json-schema": "~0.55" }, @@ -510,6 +511,12 @@ "node": ">=0.10.0" } }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", + "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", + "dev": true + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -2188,6 +2195,12 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -2326,6 +2339,12 @@ "node": ">=10" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -2337,6 +2356,18 @@ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -3158,6 +3189,18 @@ "node": "*" } }, + "node_modules/shiki": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", + "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -3640,6 +3683,51 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "node_modules/typedoc": { + "version": "0.23.28", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.28.tgz", + "integrity": "sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.2.12", + "minimatch": "^7.1.3", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -3801,6 +3889,18 @@ "extsprintf": "^1.2.0" } }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 1dc21233..5984fca3 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,12 @@ "build": "tsc", "start": "node src/index.js", "schema": "npm run -s schema-aio & npm run -s schema-source & npm run -s schema-client & npm run -s schema-aiosource & npm run -s schema-aioclient", - "schema-client": "typescript-json-schema tsconfig.json ClientConfig --out src/common/schema/client.json --required --tsNodeRegister --refs --validationKeywords deprecationMessage", - "schema-source": "typescript-json-schema tsconfig.json SourceConfig --out src/common/schema/source.json --required --tsNodeRegister --refs --validationKeywords deprecationMessage", - "schema-aio": "typescript-json-schema tsconfig.json AIOConfig --out src/common/schema/aio.json --required --tsNodeRegister --refs --validationKeywords deprecationMessage", - "schema-aiosource": "typescript-json-schema tsconfig.json AIOSourceConfig --out src/common/schema/aio-source.json --required --tsNodeRegister --refs --validationKeywords deprecationMessage", - "schema-aioclient": "typescript-json-schema tsconfig.json AIOClientConfig --out src/common/schema/aio-client.json --required --tsNodeRegister --refs --validationKeywords deprecationMessage" + "schema-client": "typescript-json-schema tsconfig.json ClientConfig --out src/common/schema/client.json --required --titles --tsNodeRegister --refs --validationKeywords deprecationMessage", + "schema-source": "typescript-json-schema tsconfig.json SourceConfig --out src/common/schema/source.json --required --titles --tsNodeRegister --refs --validationKeywords deprecationMessage", + "schema-aio": "typescript-json-schema tsconfig.json AIOConfig --out src/common/schema/aio.json --required --titles --tsNodeRegister --refs --validationKeywords deprecationMessage", + "schema-aiosource": "typescript-json-schema tsconfig.json AIOSourceConfig --out src/common/schema/aio-source.json --titles --required --tsNodeRegister --refs --validationKeywords deprecationMessage", + "schema-aioclient": "typescript-json-schema tsconfig.json AIOClientConfig --out src/common/schema/aio-client.json --titles --required --tsNodeRegister --refs --validationKeywords deprecationMessage", + "typedoc": "typedoc" }, "exports": { ".": { @@ -90,7 +91,8 @@ "ts-node": "^10.7.0", "tsconfig-paths": "^3.13.0", "typescript": "^4.9.5", - "typescript-json-schema": "~0.55" + "typescript-json-schema": "~0.55", + "typedoc": "^0.23.28" }, "overrides": { "spotify-web-api-node": { diff --git a/src/common/schema/aio-client.json b/src/common/schema/aio-client.json index 452ba749..0cabfea1 100644 --- a/src/common/schema/aio-client.json +++ b/src/common/schema/aio-client.json @@ -12,7 +12,8 @@ { "$ref": "#/definitions/MalojaClientAIOConfig" } - ] + ], + "title": "ClientAIOConfig" }, "CommonClientData": { "properties": { @@ -22,6 +23,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -32,6 +34,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -40,18 +43,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -60,9 +67,11 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" } }, + "title": "CommonClientData", "type": "object" }, "LastfmClientAIOConfig": { @@ -77,6 +86,7 @@ "examples": [ "client" ], + "title": "configureAs", "type": "string" }, "data": { @@ -88,19 +98,22 @@ "$ref": "#/definitions/LastfmData" } ], - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" }, "type": { "enum": [ "lastfm" ], + "title": "type", "type": "string" } }, @@ -109,6 +122,7 @@ "name", "type" ], + "title": "LastfmClientAIOConfig", "type": "object" }, "LastfmData": { @@ -118,6 +132,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "apiKey", "type": "string" }, "maxRequestRetries": { @@ -126,6 +141,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "redirectUri": { @@ -134,6 +150,7 @@ "examples": [ "http://localhost:9078/lastfm/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -142,6 +159,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "secret": { @@ -149,10 +167,12 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "secret", "type": "string" }, "session": { "description": "Optional session id returned from a completed auth flow", + "title": "session", "type": "string" } }, @@ -160,6 +180,7 @@ "apiKey", "secret" ], + "title": "LastfmData", "type": "object" }, "ListenBrainzClientAIOConfig": { @@ -174,23 +195,27 @@ "examples": [ "client" ], + "title": "configureAs", "type": "string" }, "data": { "$ref": "#/definitions/ListenBrainzClientData", - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" }, "type": { "enum": [ "listenbrainz" ], + "title": "type", "type": "string" } }, @@ -199,6 +224,7 @@ "name", "type" ], + "title": "ListenBrainzClientAIOConfig", "type": "object" }, "ListenBrainzClientData": { @@ -209,6 +235,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -219,6 +246,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -227,18 +255,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -247,6 +279,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "token": { @@ -254,6 +287,7 @@ "examples": [ "6794186bf-1157-4de6-80e5-uvb411f3ea2b" ], + "title": "token", "type": "string" }, "url": { @@ -262,10 +296,12 @@ "examples": [ "https://api.listenbrainz.org/" ], + "title": "url", "type": "string" }, "username": { "description": "Username of the user to scrobble for", + "title": "username", "type": "string" } }, @@ -273,25 +309,29 @@ "token", "username" ], + "title": "ListenBrainzClientData", "type": "object" }, "MalojaClientAIOConfig": { "properties": { "data": { "$ref": "#/definitions/MalojaClientData", - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" }, "type": { "enum": [ "maloja" ], + "title": "type", "type": "string" } }, @@ -300,6 +340,7 @@ "name", "type" ], + "title": "MalojaClientAIOConfig", "type": "object" }, "MalojaClientData": { @@ -309,6 +350,7 @@ "examples": [ "myApiKey" ], + "title": "apiKey", "type": "string" }, "maxRequestRetries": { @@ -317,6 +359,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -327,6 +370,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -335,18 +379,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -355,6 +403,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "url": { @@ -362,6 +411,7 @@ "examples": [ "http://localhost:42010" ], + "title": "url", "type": "string" } }, @@ -369,6 +419,7 @@ "apiKey", "url" ], + "title": "MalojaClientData", "type": "object" }, "MatchLoggingOptions": { @@ -380,6 +431,7 @@ "examples": [ false ], + "title": "confidenceBreakdown", "type": "boolean" }, "onMatch": { @@ -388,6 +440,7 @@ "examples": [ false ], + "title": "onMatch", "type": "boolean" }, "onNoMatch": { @@ -396,9 +449,11 @@ "examples": [ false ], + "title": "onNoMatch", "type": "boolean" } }, + "title": "MatchLoggingOptions", "type": "object" }, "RequestRetryOptions": { @@ -409,6 +464,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "retryMultiplier": { @@ -417,20 +473,24 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" } }, + "title": "RequestRetryOptions", "type": "object" } }, "properties": { "clientDefaults": { - "$ref": "#/definitions/RequestRetryOptions" + "$ref": "#/definitions/RequestRetryOptions", + "title": "clientDefaults" }, "clients": { "items": { "$ref": "#/definitions/ClientAIOConfig" }, + "title": "clients", "type": "array" } }, diff --git a/src/common/schema/aio-source.json b/src/common/schema/aio-source.json index 5c90dc07..f0e976be 100644 --- a/src/common/schema/aio-source.json +++ b/src/common/schema/aio-source.json @@ -8,6 +8,7 @@ "examples": [ "a89cba1569901a0671d5a9875fed4be1" ], + "title": "clientId", "type": "string" }, "clientSecret": { @@ -15,6 +16,7 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "clientSecret", "type": "string" }, "interval": { @@ -23,6 +25,7 @@ "examples": [ 60 ], + "title": "interval", "type": "number" }, "maxPollRetries": { @@ -31,6 +34,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -39,10 +43,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/deezer/callback", @@ -50,6 +56,7 @@ "examples": [ "http://localhost:9078/deezer/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -58,11 +65,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ @@ -70,6 +79,7 @@ "clientSecret", "redirectUri" ], + "title": "DeezerData", "type": "object" }, "DeezerSourceAIOConfig": { @@ -85,19 +95,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/DeezerData" + "$ref": "#/definitions/DeezerData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "deezer" ], + "title": "type", "type": "string" } }, @@ -105,6 +119,7 @@ "data", "type" ], + "title": "DeezerSourceAIOConfig", "type": "object" }, "JRiverData": { @@ -115,6 +130,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -123,6 +139,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -131,6 +148,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -139,13 +157,16 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "If you have enabled authentication, the password you set", + "title": "password", "type": "string" }, "retryMultiplier": { @@ -154,11 +175,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "default": "http://localhost:52199/MCWS/v1/", @@ -166,16 +189,19 @@ "examples": [ "http://localhost:52199/MCWS/v1/" ], + "title": "url", "type": "string" }, "username": { "description": "If you have enabled authentication, the username you set", + "title": "username", "type": "string" } }, "required": [ "url" ], + "title": "JRiverData", "type": "object" }, "JRiverSourceAIOConfig": { @@ -191,19 +217,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/JRiverData" + "$ref": "#/definitions/JRiverData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "jriver" ], + "title": "type", "type": "string" } }, @@ -211,6 +241,7 @@ "data", "type" ], + "title": "JRiverSourceAIOConfig", "type": "object" }, "JellyData": { @@ -221,6 +252,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -229,6 +261,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -244,7 +277,8 @@ ], "examples": [ "warn" - ] + ], + "title": "logFilterFailure" }, "logPayload": { "default": false, @@ -252,9 +286,11 @@ "examples": [ false ], + "title": "logPayload", "type": "boolean" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -263,11 +299,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "servers": { "anyOf": [ @@ -286,7 +324,8 @@ [ "MyServerName1" ] - ] + ], + "title": "servers" }, "users": { "anyOf": [ @@ -306,9 +345,11 @@ "MyUser1", "MyUser2" ] - ] + ], + "title": "users" } }, + "title": "JellyData", "type": "object" }, "JellySourceAIOConfig": { @@ -324,19 +365,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/JellyData" + "$ref": "#/definitions/JellyData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "jellyfin" ], + "title": "type", "type": "string" } }, @@ -344,6 +389,7 @@ "data", "type" ], + "title": "JellySourceAIOConfig", "type": "object" }, "KodiData": { @@ -354,6 +400,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -362,6 +409,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -370,6 +418,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -378,13 +427,16 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "The password set for Remote Control via Web Sever", + "title": "password", "type": "string" }, "retryMultiplier": { @@ -393,11 +445,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "default": "http://localhost:8080/jsonrpc", @@ -405,10 +459,12 @@ "examples": [ "http://localhost:8080/jsonrpc" ], + "title": "url", "type": "string" }, "username": { "description": "The username set for Remote Control via Web Sever", + "title": "username", "type": "string" } }, @@ -417,6 +473,7 @@ "url", "username" ], + "title": "KodiData", "type": "object" }, "KodiSourceAIOConfig": { @@ -432,19 +489,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/KodiData" + "$ref": "#/definitions/KodiData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "kodi" ], + "title": "type", "type": "string" } }, @@ -452,6 +513,7 @@ "data", "type" ], + "title": "KodiSourceAIOConfig", "type": "object" }, "LastFmSouceAIOConfig": { @@ -467,6 +529,7 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "configureAs": { @@ -478,19 +541,23 @@ "examples": [ "source" ], + "title": "configureAs", "type": "string" }, "data": { - "$ref": "#/definitions/LastFmSourceData" + "$ref": "#/definitions/LastFmSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "lastfm" ], + "title": "type", "type": "string" } }, @@ -498,6 +565,7 @@ "data", "type" ], + "title": "LastFmSouceAIOConfig", "type": "object" }, "LastFmSourceData": { @@ -507,6 +575,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "apiKey", "type": "string" }, "maxPollRetries": { @@ -515,6 +584,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -523,10 +593,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/lastfm/callback", @@ -534,6 +606,7 @@ "examples": [ "http://localhost:9078/lastfm/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -542,21 +615,25 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "secret": { "description": "Secret generated from Last.fm account", "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "secret", "type": "string" }, "session": { "description": "Optional session id returned from a completed auth flow", + "title": "session", "type": "string" } }, @@ -564,6 +641,7 @@ "apiKey", "secret" ], + "title": "LastFmSourceData", "type": "object" }, "ListenBrainzSourceAIOConfig": { @@ -579,6 +657,7 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "configureAs": { @@ -590,19 +669,23 @@ "examples": [ "source" ], + "title": "configureAs", "type": "string" }, "data": { - "$ref": "#/definitions/ListenBrainzSourceData" + "$ref": "#/definitions/ListenBrainzSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "listenbrainz" ], + "title": "type", "type": "string" } }, @@ -610,6 +693,7 @@ "data", "type" ], + "title": "ListenBrainzSourceAIOConfig", "type": "object" }, "ListenBrainzSourceData": { @@ -620,6 +704,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -628,10 +713,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -639,17 +726,20 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "token": { "description": "User token for the user to scrobble for", "examples": [ "6794186bf-1157-4de6-80e5-uvb411f3ea2b" ], + "title": "token", "type": "string" }, "url": { @@ -658,10 +748,12 @@ "examples": [ "https://api.listenbrainz.org/" ], + "title": "url", "type": "string" }, "username": { "description": "Username of the user to scrobble for", + "title": "username", "type": "string" } }, @@ -669,6 +761,7 @@ "token", "username" ], + "title": "ListenBrainzSourceData", "type": "object" }, "MPRISData": { @@ -691,7 +784,8 @@ "spotify", "vlc" ] - ] + ], + "title": "blacklist" }, "maxPollRetries": { "default": 5, @@ -699,6 +793,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -707,10 +802,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -718,11 +815,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "whitelist": { "anyOf": [ @@ -742,9 +841,11 @@ "spotify", "vlc" ] - ] + ], + "title": "whitelist" } }, + "title": "MPRISData", "type": "object" }, "MPRISSourceAIOConfig": { @@ -760,19 +861,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/MPRISData" + "$ref": "#/definitions/MPRISData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "mpris" ], + "title": "type", "type": "string" } }, @@ -780,6 +885,7 @@ "data", "type" ], + "title": "MPRISSourceAIOConfig", "type": "object" }, "MopidyData": { @@ -798,6 +904,7 @@ "items": { "type": "string" }, + "title": "albumBlacklist", "type": "array" }, "interval": { @@ -806,6 +913,7 @@ "examples": [ 10 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -814,6 +922,7 @@ "examples": [ 30 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -822,6 +931,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -830,10 +940,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -841,17 +953,20 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "uriBlacklist": { "description": "Do not scrobble tracks whose URI STARTS WITH any of these strings, case-insensitive\n\nEX: Don't scrobble tracks from soundcloud by adding 'soundcloud' to this list.\n\nList is ignored if uriWhitelist is used.", "items": { "type": "string" }, + "title": "uriBlacklist", "type": "array" }, "uriWhitelist": { @@ -859,6 +974,7 @@ "items": { "type": "string" }, + "title": "uriWhitelist", "type": "array" }, "url": { @@ -867,9 +983,11 @@ "examples": [ "ws://localhost:6680/mopidy/ws/" ], + "title": "url", "type": "string" } }, + "title": "MopidyData", "type": "object" }, "MopidySourceAIOConfig": { @@ -885,19 +1003,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/MopidyData" + "$ref": "#/definitions/MopidyData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "mopidy" ], + "title": "type", "type": "string" } }, @@ -905,6 +1027,7 @@ "data", "type" ], + "title": "MopidySourceAIOConfig", "type": "object" }, "PlexSourceAIOConfig": { @@ -920,19 +1043,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/PlexSourceData" + "$ref": "#/definitions/PlexSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "plex" ], + "title": "type", "type": "string" } }, @@ -940,6 +1067,7 @@ "data", "type" ], + "title": "PlexSourceAIOConfig", "type": "object" }, "PlexSourceData": { @@ -962,7 +1090,8 @@ "Audio", "Music" ] - ] + ], + "title": "libraries" }, "maxPollRetries": { "default": 5, @@ -970,6 +1099,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -978,6 +1108,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -993,9 +1124,11 @@ ], "examples": [ "warn" - ] + ], + "title": "logFilterFailure" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -1004,11 +1137,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "servers": { "anyOf": [ @@ -1027,7 +1162,8 @@ [ "MyServerName" ] - ] + ], + "title": "servers" }, "user": { "anyOf": [ @@ -1047,12 +1183,15 @@ "MyUser1", "MyUser2" ] - ] + ], + "title": "user" } }, + "title": "PlexSourceData", "type": "object" }, "Record": { + "title": "Record", "type": "object" }, "ScrobbleThresholds": { @@ -1063,13 +1202,16 @@ "examples": [ 30 ], + "title": "duration", "type": "number" }, "percent": { "description": "The percentage of a track that should have been seen played before it should be scrobbled. Only used if the Source provides information about how long the track is.\n\nNOTE: This should be used with care when the Source is a \"polling\" type (has an 'interval' property). If the track is short and the interval is too high MS may ignore the track if percentage is high because it had not \"seen\" the track for long enough from first discovery, even if you have been playing the track for longer.", + "title": "percent", "type": "number" } }, + "title": "ScrobbleThresholds", "type": "object" }, "SourceAIOConfig": { @@ -1113,7 +1255,8 @@ { "$ref": "#/definitions/KodiSourceAIOConfig" } - ] + ], + "title": "SourceAIOConfig" }, "SourceRetryOptions": { "properties": { @@ -1123,6 +1266,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1131,6 +1275,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "retryMultiplier": { @@ -1139,9 +1284,11 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" } }, + "title": "SourceRetryOptions", "type": "object" }, "SpotifySourceAIOConfig": { @@ -1157,19 +1304,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/SpotifySourceData" + "$ref": "#/definitions/SpotifySourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "spotify" ], + "title": "type", "type": "string" } }, @@ -1177,6 +1328,7 @@ "data", "type" ], + "title": "SpotifySourceAIOConfig", "type": "object" }, "SpotifySourceData": { @@ -1186,6 +1338,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "clientId", "type": "string" }, "clientSecret": { @@ -1193,6 +1346,7 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "clientSecret", "type": "string" }, "interval": { @@ -1201,6 +1355,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1209,6 +1364,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1217,6 +1373,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1225,10 +1382,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/callback", @@ -1236,6 +1395,7 @@ "examples": [ "http://localhost:9078/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -1244,11 +1404,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ @@ -1256,6 +1418,7 @@ "clientSecret", "redirectUri" ], + "title": "SpotifySourceData", "type": "object" }, "SubsonicData": { @@ -1266,6 +1429,7 @@ "examples": [ 10 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1274,6 +1438,7 @@ "examples": [ 30 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1282,6 +1447,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1290,16 +1456,19 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "Password for the user to login to the server with", "examples": [ "MyPassword" ], + "title": "password", "type": "string" }, "retryMultiplier": { @@ -1308,21 +1477,25 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "description": "URL of the subsonic media server to query", "examples": [ "http://airsonic.local" ], + "title": "url", "type": "string" }, "user": { "description": "Username to login to the server with", + "title": "user", "type": "string" } }, @@ -1331,6 +1504,7 @@ "url", "user" ], + "title": "SubsonicData", "type": "object" }, "SubsonicSourceAIOConfig": { @@ -1346,19 +1520,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/SubsonicData" + "$ref": "#/definitions/SubsonicData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "subsonic" ], + "title": "type", "type": "string" } }, @@ -1366,6 +1544,7 @@ "data", "type" ], + "title": "SubsonicSourceAIOConfig", "type": "object" }, "TautulliSourceAIOConfig": { @@ -1381,19 +1560,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/PlexSourceData" + "$ref": "#/definitions/PlexSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "tautulli" ], + "title": "type", "type": "string" } }, @@ -1401,12 +1584,14 @@ "data", "type" ], + "title": "TautulliSourceAIOConfig", "type": "object" }, "YTMusicData": { "properties": { "authUser": { "description": "If the 'X-Goog-AuthUser' header is present in the Request Headers for music.youtube.com it must also be included", + "title": "authUser", "type": "number" }, "cookie": { @@ -1414,6 +1599,7 @@ "examples": [ "VISITOR_INFO1_LIVE=jMp2xA1Xz2_PbVc; __Secure-3PAPISID=3AxsXpy0M/AkISpjek; ..." ], + "title": "cookie", "type": "string" }, "interval": { @@ -1422,6 +1608,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1430,6 +1617,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1438,6 +1626,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1446,10 +1635,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -1457,16 +1648,19 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ "cookie" ], + "title": "YTMusicData", "type": "object" }, "YTMusicSourceAIOConfig": { @@ -1482,19 +1676,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/YTMusicData" + "$ref": "#/definitions/YTMusicData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "ytmusic" ], + "title": "type", "type": "string" } }, @@ -1502,17 +1700,20 @@ "data", "type" ], + "title": "YTMusicSourceAIOConfig", "type": "object" } }, "properties": { "sourceDefaults": { - "$ref": "#/definitions/SourceRetryOptions" + "$ref": "#/definitions/SourceRetryOptions", + "title": "sourceDefaults" }, "sources": { "items": { "$ref": "#/definitions/SourceAIOConfig" }, + "title": "sources", "type": "array" } }, diff --git a/src/common/schema/aio.json b/src/common/schema/aio.json index 7abda462..e20f612c 100644 --- a/src/common/schema/aio.json +++ b/src/common/schema/aio.json @@ -12,7 +12,8 @@ { "$ref": "#/definitions/MalojaClientAIOConfig" } - ] + ], + "title": "ClientAIOConfig" }, "CommonClientData": { "properties": { @@ -22,6 +23,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -32,6 +34,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -40,18 +43,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -60,9 +67,11 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" } }, + "title": "CommonClientData", "type": "object" }, "DeezerData": { @@ -72,6 +81,7 @@ "examples": [ "a89cba1569901a0671d5a9875fed4be1" ], + "title": "clientId", "type": "string" }, "clientSecret": { @@ -79,6 +89,7 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "clientSecret", "type": "string" }, "interval": { @@ -87,6 +98,7 @@ "examples": [ 60 ], + "title": "interval", "type": "number" }, "maxPollRetries": { @@ -95,6 +107,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -103,10 +116,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/deezer/callback", @@ -114,6 +129,7 @@ "examples": [ "http://localhost:9078/deezer/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -122,11 +138,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ @@ -134,6 +152,7 @@ "clientSecret", "redirectUri" ], + "title": "DeezerData", "type": "object" }, "DeezerSourceAIOConfig": { @@ -149,19 +168,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/DeezerData" + "$ref": "#/definitions/DeezerData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "deezer" ], + "title": "type", "type": "string" } }, @@ -169,23 +192,27 @@ "data", "type" ], + "title": "DeezerSourceAIOConfig", "type": "object" }, "GotifyConfig": { "properties": { "name": { "description": "A friendly name used to identify webhook config in logs", + "title": "name", "type": "string" }, "priorities": { "$ref": "#/definitions/PrioritiesConfig", - "description": "Priority of messages\n\n* Info -> 5\n* Warn -> 7\n* Error -> 10" + "description": "Priority of messages\n\n* Info -> 5\n* Warn -> 7\n* Error -> 10", + "title": "priorities" }, "token": { "description": "The token created for this Application in Gotify", "examples": [ "AQZI58fA.rfSZbm" ], + "title": "token", "type": "string" }, "type": { @@ -197,6 +224,7 @@ "examples": [ "gotify" ], + "title": "type", "type": "string" }, "url": { @@ -204,6 +232,7 @@ "examples": [ "http://192.168.0.100:8078" ], + "title": "url", "type": "string" } }, @@ -212,6 +241,7 @@ "type", "url" ], + "title": "GotifyConfig", "type": "object" }, "JRiverData": { @@ -222,6 +252,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -230,6 +261,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -238,6 +270,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -246,13 +279,16 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "If you have enabled authentication, the password you set", + "title": "password", "type": "string" }, "retryMultiplier": { @@ -261,11 +297,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "default": "http://localhost:52199/MCWS/v1/", @@ -273,16 +311,19 @@ "examples": [ "http://localhost:52199/MCWS/v1/" ], + "title": "url", "type": "string" }, "username": { "description": "If you have enabled authentication, the username you set", + "title": "username", "type": "string" } }, "required": [ "url" ], + "title": "JRiverData", "type": "object" }, "JRiverSourceAIOConfig": { @@ -298,19 +339,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/JRiverData" + "$ref": "#/definitions/JRiverData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "jriver" ], + "title": "type", "type": "string" } }, @@ -318,6 +363,7 @@ "data", "type" ], + "title": "JRiverSourceAIOConfig", "type": "object" }, "JellyData": { @@ -328,6 +374,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -336,6 +383,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -351,7 +399,8 @@ ], "examples": [ "warn" - ] + ], + "title": "logFilterFailure" }, "logPayload": { "default": false, @@ -359,9 +408,11 @@ "examples": [ false ], + "title": "logPayload", "type": "boolean" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -370,11 +421,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "servers": { "anyOf": [ @@ -393,7 +446,8 @@ [ "MyServerName1" ] - ] + ], + "title": "servers" }, "users": { "anyOf": [ @@ -413,9 +467,11 @@ "MyUser1", "MyUser2" ] - ] + ], + "title": "users" } }, + "title": "JellyData", "type": "object" }, "JellySourceAIOConfig": { @@ -431,19 +487,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/JellyData" + "$ref": "#/definitions/JellyData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "jellyfin" ], + "title": "type", "type": "string" } }, @@ -451,6 +511,7 @@ "data", "type" ], + "title": "JellySourceAIOConfig", "type": "object" }, "KodiData": { @@ -461,6 +522,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -469,6 +531,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -477,6 +540,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -485,13 +549,16 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "The password set for Remote Control via Web Sever", + "title": "password", "type": "string" }, "retryMultiplier": { @@ -500,11 +567,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "default": "http://localhost:8080/jsonrpc", @@ -512,10 +581,12 @@ "examples": [ "http://localhost:8080/jsonrpc" ], + "title": "url", "type": "string" }, "username": { "description": "The username set for Remote Control via Web Sever", + "title": "username", "type": "string" } }, @@ -524,6 +595,7 @@ "url", "username" ], + "title": "KodiData", "type": "object" }, "KodiSourceAIOConfig": { @@ -539,19 +611,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/KodiData" + "$ref": "#/definitions/KodiData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "kodi" ], + "title": "type", "type": "string" } }, @@ -559,6 +635,7 @@ "data", "type" ], + "title": "KodiSourceAIOConfig", "type": "object" }, "LastFmSouceAIOConfig": { @@ -574,6 +651,7 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "configureAs": { @@ -585,19 +663,23 @@ "examples": [ "source" ], + "title": "configureAs", "type": "string" }, "data": { - "$ref": "#/definitions/LastFmSourceData" + "$ref": "#/definitions/LastFmSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "lastfm" ], + "title": "type", "type": "string" } }, @@ -605,6 +687,7 @@ "data", "type" ], + "title": "LastFmSouceAIOConfig", "type": "object" }, "LastFmSourceData": { @@ -614,6 +697,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "apiKey", "type": "string" }, "maxPollRetries": { @@ -622,6 +706,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -630,10 +715,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/lastfm/callback", @@ -641,6 +728,7 @@ "examples": [ "http://localhost:9078/lastfm/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -649,21 +737,25 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "secret": { "description": "Secret generated from Last.fm account", "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "secret", "type": "string" }, "session": { "description": "Optional session id returned from a completed auth flow", + "title": "session", "type": "string" } }, @@ -671,6 +763,7 @@ "apiKey", "secret" ], + "title": "LastFmSourceData", "type": "object" }, "LastfmClientAIOConfig": { @@ -685,6 +778,7 @@ "examples": [ "client" ], + "title": "configureAs", "type": "string" }, "data": { @@ -696,19 +790,22 @@ "$ref": "#/definitions/LastfmData" } ], - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" }, "type": { "enum": [ "lastfm" ], + "title": "type", "type": "string" } }, @@ -717,6 +814,7 @@ "name", "type" ], + "title": "LastfmClientAIOConfig", "type": "object" }, "LastfmData": { @@ -726,6 +824,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "apiKey", "type": "string" }, "maxRequestRetries": { @@ -734,6 +833,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "redirectUri": { @@ -742,6 +842,7 @@ "examples": [ "http://localhost:9078/lastfm/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -750,6 +851,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "secret": { @@ -757,10 +859,12 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "secret", "type": "string" }, "session": { "description": "Optional session id returned from a completed auth flow", + "title": "session", "type": "string" } }, @@ -768,6 +872,7 @@ "apiKey", "secret" ], + "title": "LastfmData", "type": "object" }, "ListenBrainzClientAIOConfig": { @@ -782,23 +887,27 @@ "examples": [ "client" ], + "title": "configureAs", "type": "string" }, "data": { "$ref": "#/definitions/ListenBrainzClientData", - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" }, "type": { "enum": [ "listenbrainz" ], + "title": "type", "type": "string" } }, @@ -807,6 +916,7 @@ "name", "type" ], + "title": "ListenBrainzClientAIOConfig", "type": "object" }, "ListenBrainzClientData": { @@ -817,6 +927,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -827,6 +938,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -835,18 +947,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -855,6 +971,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "token": { @@ -862,6 +979,7 @@ "examples": [ "6794186bf-1157-4de6-80e5-uvb411f3ea2b" ], + "title": "token", "type": "string" }, "url": { @@ -870,10 +988,12 @@ "examples": [ "https://api.listenbrainz.org/" ], + "title": "url", "type": "string" }, "username": { "description": "Username of the user to scrobble for", + "title": "username", "type": "string" } }, @@ -881,6 +1001,7 @@ "token", "username" ], + "title": "ListenBrainzClientData", "type": "object" }, "ListenBrainzSourceAIOConfig": { @@ -896,6 +1017,7 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "configureAs": { @@ -907,19 +1029,23 @@ "examples": [ "source" ], + "title": "configureAs", "type": "string" }, "data": { - "$ref": "#/definitions/ListenBrainzSourceData" + "$ref": "#/definitions/ListenBrainzSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "listenbrainz" ], + "title": "type", "type": "string" } }, @@ -927,6 +1053,7 @@ "data", "type" ], + "title": "ListenBrainzSourceAIOConfig", "type": "object" }, "ListenBrainzSourceData": { @@ -937,6 +1064,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -945,10 +1073,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -956,17 +1086,20 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "token": { "description": "User token for the user to scrobble for", "examples": [ "6794186bf-1157-4de6-80e5-uvb411f3ea2b" ], + "title": "token", "type": "string" }, "url": { @@ -975,10 +1108,12 @@ "examples": [ "https://api.listenbrainz.org/" ], + "title": "url", "type": "string" }, "username": { "description": "Username of the user to scrobble for", + "title": "username", "type": "string" } }, @@ -986,6 +1121,7 @@ "token", "username" ], + "title": "ListenBrainzSourceData", "type": "object" }, "LogLevel": { @@ -996,13 +1132,15 @@ "verbose", "warn" ], + "title": "LogLevel", "type": "string" }, "LogOptions": { "properties": { "console": { "$ref": "#/definitions/LogLevel", - "description": "Specify the minimum log level streamed to the console (or docker container)" + "description": "Specify the minimum log level streamed to the console (or docker container)", + "title": "console" }, "file": { "description": "Specify the minimum log level to output to rotating files. If `false` no log files will be created.", @@ -1013,18 +1151,22 @@ "info", "verbose", "warn" - ] + ], + "title": "file" }, "level": { "$ref": "#/definitions/LogLevel", "default": "'info'", - "description": "Specify the minimum log level for all log outputs without their own level specified.\n\nDefaults to env `LOG_LEVEL` or `info` if not specified." + "description": "Specify the minimum log level for all log outputs without their own level specified.\n\nDefaults to env `LOG_LEVEL` or `info` if not specified.", + "title": "level" }, "stream": { "$ref": "#/definitions/LogLevel", - "description": "Specify the minimum log level streamed to the UI" + "description": "Specify the minimum log level streamed to the UI", + "title": "stream" } }, + "title": "LogOptions", "type": "object" }, "MPRISData": { @@ -1047,7 +1189,8 @@ "spotify", "vlc" ] - ] + ], + "title": "blacklist" }, "maxPollRetries": { "default": 5, @@ -1055,6 +1198,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1063,10 +1207,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -1074,11 +1220,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "whitelist": { "anyOf": [ @@ -1098,9 +1246,11 @@ "spotify", "vlc" ] - ] + ], + "title": "whitelist" } }, + "title": "MPRISData", "type": "object" }, "MPRISSourceAIOConfig": { @@ -1116,19 +1266,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/MPRISData" + "$ref": "#/definitions/MPRISData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "mpris" ], + "title": "type", "type": "string" } }, @@ -1136,25 +1290,29 @@ "data", "type" ], + "title": "MPRISSourceAIOConfig", "type": "object" }, "MalojaClientAIOConfig": { "properties": { "data": { "$ref": "#/definitions/MalojaClientData", - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" }, "type": { "enum": [ "maloja" ], + "title": "type", "type": "string" } }, @@ -1163,6 +1321,7 @@ "name", "type" ], + "title": "MalojaClientAIOConfig", "type": "object" }, "MalojaClientData": { @@ -1172,6 +1331,7 @@ "examples": [ "myApiKey" ], + "title": "apiKey", "type": "string" }, "maxRequestRetries": { @@ -1180,6 +1340,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -1190,6 +1351,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -1198,18 +1360,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -1218,6 +1384,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "url": { @@ -1225,6 +1392,7 @@ "examples": [ "http://localhost:42010" ], + "title": "url", "type": "string" } }, @@ -1232,6 +1400,7 @@ "apiKey", "url" ], + "title": "MalojaClientData", "type": "object" }, "MatchLoggingOptions": { @@ -1243,6 +1412,7 @@ "examples": [ false ], + "title": "confidenceBreakdown", "type": "boolean" }, "onMatch": { @@ -1251,6 +1421,7 @@ "examples": [ false ], + "title": "onMatch", "type": "boolean" }, "onNoMatch": { @@ -1259,9 +1430,11 @@ "examples": [ false ], + "title": "onNoMatch", "type": "boolean" } }, + "title": "MatchLoggingOptions", "type": "object" }, "MopidyData": { @@ -1280,6 +1453,7 @@ "items": { "type": "string" }, + "title": "albumBlacklist", "type": "array" }, "interval": { @@ -1288,6 +1462,7 @@ "examples": [ 10 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1296,6 +1471,7 @@ "examples": [ 30 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1304,6 +1480,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1312,10 +1489,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -1323,17 +1502,20 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "uriBlacklist": { "description": "Do not scrobble tracks whose URI STARTS WITH any of these strings, case-insensitive\n\nEX: Don't scrobble tracks from soundcloud by adding 'soundcloud' to this list.\n\nList is ignored if uriWhitelist is used.", "items": { "type": "string" }, + "title": "uriBlacklist", "type": "array" }, "uriWhitelist": { @@ -1341,6 +1523,7 @@ "items": { "type": "string" }, + "title": "uriWhitelist", "type": "array" }, "url": { @@ -1349,9 +1532,11 @@ "examples": [ "ws://localhost:6680/mopidy/ws/" ], + "title": "url", "type": "string" } }, + "title": "MopidyData", "type": "object" }, "MopidySourceAIOConfig": { @@ -1367,19 +1552,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/MopidyData" + "$ref": "#/definitions/MopidyData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "mopidy" ], + "title": "type", "type": "string" } }, @@ -1387,24 +1576,29 @@ "data", "type" ], + "title": "MopidySourceAIOConfig", "type": "object" }, "NtfyConfig": { "properties": { "name": { "description": "A friendly name used to identify webhook config in logs", + "title": "name", "type": "string" }, "password": { "description": "Required if topic is protected", + "title": "password", "type": "string" }, "priorities": { "$ref": "#/definitions/PrioritiesConfig", - "description": "Priority of messages\n\n* Info -> 3\n* Warn -> 4\n* Error -> 5" + "description": "Priority of messages\n\n* Info -> 3\n* Warn -> 4\n* Error -> 5", + "title": "priorities" }, "topic": { "description": "The topic mutli-scrobbler should POST to", + "title": "topic", "type": "string" }, "type": { @@ -1416,6 +1610,7 @@ "examples": [ "gotify" ], + "title": "type", "type": "string" }, "url": { @@ -1423,10 +1618,12 @@ "examples": [ "http://192.168.0.100:8078" ], + "title": "url", "type": "string" }, "username": { "description": "Required if topic is protected", + "title": "username", "type": "string" } }, @@ -1435,6 +1632,7 @@ "type", "url" ], + "title": "NtfyConfig", "type": "object" }, "PlexSourceAIOConfig": { @@ -1450,19 +1648,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/PlexSourceData" + "$ref": "#/definitions/PlexSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "plex" ], + "title": "type", "type": "string" } }, @@ -1470,6 +1672,7 @@ "data", "type" ], + "title": "PlexSourceAIOConfig", "type": "object" }, "PlexSourceData": { @@ -1492,7 +1695,8 @@ "Audio", "Music" ] - ] + ], + "title": "libraries" }, "maxPollRetries": { "default": 5, @@ -1500,6 +1704,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1508,6 +1713,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -1523,9 +1729,11 @@ ], "examples": [ "warn" - ] + ], + "title": "logFilterFailure" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -1534,11 +1742,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "servers": { "anyOf": [ @@ -1557,7 +1767,8 @@ [ "MyServerName" ] - ] + ], + "title": "servers" }, "user": { "anyOf": [ @@ -1577,9 +1788,11 @@ "MyUser1", "MyUser2" ] - ] + ], + "title": "user" } }, + "title": "PlexSourceData", "type": "object" }, "PrioritiesConfig": { @@ -1588,18 +1801,21 @@ "examples": [ 10 ], + "title": "error", "type": "number" }, "info": { "examples": [ 5 ], + "title": "info", "type": "number" }, "warn": { "examples": [ 7 ], + "title": "warn", "type": "number" } }, @@ -1608,9 +1824,11 @@ "info", "warn" ], + "title": "PrioritiesConfig", "type": "object" }, "Record": { + "title": "Record", "type": "object" }, "RequestRetryOptions": { @@ -1621,6 +1839,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "retryMultiplier": { @@ -1629,9 +1848,11 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" } }, + "title": "RequestRetryOptions", "type": "object" }, "ScrobbleThresholds": { @@ -1642,13 +1863,16 @@ "examples": [ 30 ], + "title": "duration", "type": "number" }, "percent": { "description": "The percentage of a track that should have been seen played before it should be scrobbled. Only used if the Source provides information about how long the track is.\n\nNOTE: This should be used with care when the Source is a \"polling\" type (has an 'interval' property). If the track is short and the interval is too high MS may ignore the track if percentage is high because it had not \"seen\" the track for long enough from first discovery, even if you have been playing the track for longer.", + "title": "percent", "type": "number" } }, + "title": "ScrobbleThresholds", "type": "object" }, "SourceAIOConfig": { @@ -1692,7 +1916,8 @@ { "$ref": "#/definitions/KodiSourceAIOConfig" } - ] + ], + "title": "SourceAIOConfig" }, "SourceRetryOptions": { "properties": { @@ -1702,6 +1927,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1710,6 +1936,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "retryMultiplier": { @@ -1718,9 +1945,11 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" } }, + "title": "SourceRetryOptions", "type": "object" }, "SpotifySourceAIOConfig": { @@ -1736,19 +1965,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/SpotifySourceData" + "$ref": "#/definitions/SpotifySourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "spotify" ], + "title": "type", "type": "string" } }, @@ -1756,6 +1989,7 @@ "data", "type" ], + "title": "SpotifySourceAIOConfig", "type": "object" }, "SpotifySourceData": { @@ -1765,6 +1999,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "clientId", "type": "string" }, "clientSecret": { @@ -1772,6 +2007,7 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "clientSecret", "type": "string" }, "interval": { @@ -1780,6 +2016,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1788,6 +2025,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1796,6 +2034,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1804,10 +2043,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/callback", @@ -1815,6 +2056,7 @@ "examples": [ "http://localhost:9078/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -1823,11 +2065,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ @@ -1835,6 +2079,7 @@ "clientSecret", "redirectUri" ], + "title": "SpotifySourceData", "type": "object" }, "SubsonicData": { @@ -1845,6 +2090,7 @@ "examples": [ 10 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1853,6 +2099,7 @@ "examples": [ 30 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1861,6 +2108,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1869,16 +2117,19 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "Password for the user to login to the server with", "examples": [ "MyPassword" ], + "title": "password", "type": "string" }, "retryMultiplier": { @@ -1887,21 +2138,25 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "description": "URL of the subsonic media server to query", "examples": [ "http://airsonic.local" ], + "title": "url", "type": "string" }, "user": { "description": "Username to login to the server with", + "title": "user", "type": "string" } }, @@ -1910,6 +2165,7 @@ "url", "user" ], + "title": "SubsonicData", "type": "object" }, "SubsonicSourceAIOConfig": { @@ -1925,19 +2181,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/SubsonicData" + "$ref": "#/definitions/SubsonicData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "subsonic" ], + "title": "type", "type": "string" } }, @@ -1945,6 +2205,7 @@ "data", "type" ], + "title": "SubsonicSourceAIOConfig", "type": "object" }, "TautulliSourceAIOConfig": { @@ -1960,19 +2221,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/PlexSourceData" + "$ref": "#/definitions/PlexSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "tautulli" ], + "title": "type", "type": "string" } }, @@ -1980,6 +2245,7 @@ "data", "type" ], + "title": "TautulliSourceAIOConfig", "type": "object" }, "WebhookConfig": { @@ -1990,12 +2256,14 @@ { "$ref": "#/definitions/NtfyConfig" } - ] + ], + "title": "WebhookConfig" }, "YTMusicData": { "properties": { "authUser": { "description": "If the 'X-Goog-AuthUser' header is present in the Request Headers for music.youtube.com it must also be included", + "title": "authUser", "type": "number" }, "cookie": { @@ -2003,6 +2271,7 @@ "examples": [ "VISITOR_INFO1_LIVE=jMp2xA1Xz2_PbVc; __Secure-3PAPISID=3AxsXpy0M/AkISpjek; ..." ], + "title": "cookie", "type": "string" }, "interval": { @@ -2011,6 +2280,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -2019,6 +2289,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -2027,6 +2298,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -2035,10 +2307,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -2046,16 +2320,19 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ "cookie" ], + "title": "YTMusicData", "type": "object" }, "YTMusicSourceAIOConfig": { @@ -2071,19 +2348,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/YTMusicData" + "$ref": "#/definitions/YTMusicData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" }, "type": { "enum": [ "ytmusic" ], + "title": "type", "type": "string" } }, @@ -2091,21 +2372,25 @@ "data", "type" ], + "title": "YTMusicSourceAIOConfig", "type": "object" } }, "properties": { "clientDefaults": { - "$ref": "#/definitions/RequestRetryOptions" + "$ref": "#/definitions/RequestRetryOptions", + "title": "clientDefaults" }, "clients": { "items": { "$ref": "#/definitions/ClientAIOConfig" }, + "title": "clients", "type": "array" }, "logging": { - "$ref": "#/definitions/LogOptions" + "$ref": "#/definitions/LogOptions", + "title": "logging" }, "port": { "default": 9078, @@ -2113,6 +2398,7 @@ "examples": [ 9078 ], + "title": "port", "type": "number" }, "sourceDefaults": { @@ -2124,23 +2410,27 @@ "properties": { "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "type": "object" } - ] + ], + "title": "sourceDefaults" }, "sources": { "items": { "$ref": "#/definitions/SourceAIOConfig" }, + "title": "sources", "type": "array" }, "webhooks": { "items": { "$ref": "#/definitions/WebhookConfig" }, + "title": "webhooks", "type": "array" } }, diff --git a/src/common/schema/client.json b/src/common/schema/client.json index e81a1a0e..53e3f097 100644 --- a/src/common/schema/client.json +++ b/src/common/schema/client.json @@ -20,6 +20,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -30,6 +31,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -38,18 +40,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -58,9 +64,11 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" } }, + "title": "CommonClientData", "type": "object" }, "LastfmClientConfig": { @@ -75,6 +83,7 @@ "examples": [ "client" ], + "title": "configureAs", "type": "string" }, "data": { @@ -86,13 +95,15 @@ "$ref": "#/definitions/LastfmData" } ], - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" } }, @@ -100,6 +111,7 @@ "data", "name" ], + "title": "LastfmClientConfig", "type": "object" }, "LastfmData": { @@ -109,6 +121,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "apiKey", "type": "string" }, "maxRequestRetries": { @@ -117,6 +130,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "redirectUri": { @@ -125,6 +139,7 @@ "examples": [ "http://localhost:9078/lastfm/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -133,6 +148,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "secret": { @@ -140,10 +156,12 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "secret", "type": "string" }, "session": { "description": "Optional session id returned from a completed auth flow", + "title": "session", "type": "string" } }, @@ -151,6 +169,7 @@ "apiKey", "secret" ], + "title": "LastfmData", "type": "object" }, "ListenBrainzClientConfig": { @@ -165,17 +184,20 @@ "examples": [ "client" ], + "title": "configureAs", "type": "string" }, "data": { "$ref": "#/definitions/ListenBrainzClientData", - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" } }, @@ -183,6 +205,7 @@ "data", "name" ], + "title": "ListenBrainzClientConfig", "type": "object" }, "ListenBrainzClientData": { @@ -193,6 +216,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -203,6 +227,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -211,18 +236,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -231,6 +260,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "token": { @@ -238,6 +268,7 @@ "examples": [ "6794186bf-1157-4de6-80e5-uvb411f3ea2b" ], + "title": "token", "type": "string" }, "url": { @@ -246,10 +277,12 @@ "examples": [ "https://api.listenbrainz.org/" ], + "title": "url", "type": "string" }, "username": { "description": "Username of the user to scrobble for", + "title": "username", "type": "string" } }, @@ -257,19 +290,22 @@ "token", "username" ], + "title": "ListenBrainzClientData", "type": "object" }, "MalojaClientConfig": { "properties": { "data": { "$ref": "#/definitions/MalojaClientData", - "description": "Specific data required to configure this client" + "description": "Specific data required to configure this client", + "title": "data" }, "name": { "description": "Unique identifier for this client. Used with sources to restrict where scrobbles are sent.", "examples": [ "MyConfig" ], + "title": "name", "type": "string" } }, @@ -277,6 +313,7 @@ "data", "name" ], + "title": "MalojaClientConfig", "type": "object" }, "MalojaClientData": { @@ -286,6 +323,7 @@ "examples": [ "myApiKey" ], + "title": "apiKey", "type": "string" }, "maxRequestRetries": { @@ -294,6 +332,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -304,6 +343,7 @@ "examples": [ true ], + "title": "checkExistingScrobbles", "type": "boolean" }, "refreshEnabled": { @@ -312,18 +352,22 @@ "examples": [ true ], + "title": "refreshEnabled", "type": "boolean" }, "verbose": { "description": "Options used for increasing verbosity of logging in MS (used for debugging)", "properties": { "match": { - "$ref": "#/definitions/MatchLoggingOptions" + "$ref": "#/definitions/MatchLoggingOptions", + "title": "match" } }, + "title": "verbose", "type": "object" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -332,6 +376,7 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "url": { @@ -339,6 +384,7 @@ "examples": [ "http://localhost:42010" ], + "title": "url", "type": "string" } }, @@ -346,6 +392,7 @@ "apiKey", "url" ], + "title": "MalojaClientData", "type": "object" }, "MatchLoggingOptions": { @@ -357,6 +404,7 @@ "examples": [ false ], + "title": "confidenceBreakdown", "type": "boolean" }, "onMatch": { @@ -365,6 +413,7 @@ "examples": [ false ], + "title": "onMatch", "type": "boolean" }, "onNoMatch": { @@ -373,9 +422,11 @@ "examples": [ false ], + "title": "onNoMatch", "type": "boolean" } }, + "title": "MatchLoggingOptions", "type": "object" } } diff --git a/src/common/schema/source.json b/src/common/schema/source.json index 2e1e84de..7bf320eb 100644 --- a/src/common/schema/source.json +++ b/src/common/schema/source.json @@ -49,6 +49,7 @@ "examples": [ "a89cba1569901a0671d5a9875fed4be1" ], + "title": "clientId", "type": "string" }, "clientSecret": { @@ -56,6 +57,7 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "clientSecret", "type": "string" }, "interval": { @@ -64,6 +66,7 @@ "examples": [ 60 ], + "title": "interval", "type": "number" }, "maxPollRetries": { @@ -72,6 +75,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -80,10 +84,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/deezer/callback", @@ -91,6 +97,7 @@ "examples": [ "http://localhost:9078/deezer/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -99,11 +106,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ @@ -111,6 +120,7 @@ "clientSecret", "redirectUri" ], + "title": "DeezerData", "type": "object" }, "DeezerSourceConfig": { @@ -126,19 +136,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/DeezerData" + "$ref": "#/definitions/DeezerData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "DeezerSourceConfig", "type": "object" }, "JRiverData": { @@ -149,6 +163,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -157,6 +172,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -165,6 +181,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -173,13 +190,16 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "If you have enabled authentication, the password you set", + "title": "password", "type": "string" }, "retryMultiplier": { @@ -188,11 +208,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "default": "http://localhost:52199/MCWS/v1/", @@ -200,16 +222,19 @@ "examples": [ "http://localhost:52199/MCWS/v1/" ], + "title": "url", "type": "string" }, "username": { "description": "If you have enabled authentication, the username you set", + "title": "username", "type": "string" } }, "required": [ "url" ], + "title": "JRiverData", "type": "object" }, "JRiverSourceConfig": { @@ -225,19 +250,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/JRiverData" + "$ref": "#/definitions/JRiverData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "JRiverSourceConfig", "type": "object" }, "JellyData": { @@ -248,6 +277,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -256,6 +286,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -271,7 +302,8 @@ ], "examples": [ "warn" - ] + ], + "title": "logFilterFailure" }, "logPayload": { "default": false, @@ -279,9 +311,11 @@ "examples": [ false ], + "title": "logPayload", "type": "boolean" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -290,11 +324,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "servers": { "anyOf": [ @@ -313,7 +349,8 @@ [ "MyServerName1" ] - ] + ], + "title": "servers" }, "users": { "anyOf": [ @@ -333,9 +370,11 @@ "MyUser1", "MyUser2" ] - ] + ], + "title": "users" } }, + "title": "JellyData", "type": "object" }, "JellySourceConfig": { @@ -351,19 +390,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/JellyData" + "$ref": "#/definitions/JellyData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "JellySourceConfig", "type": "object" }, "KodiData": { @@ -374,6 +417,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -382,6 +426,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -390,6 +435,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -398,13 +444,16 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "The password set for Remote Control via Web Sever", + "title": "password", "type": "string" }, "retryMultiplier": { @@ -413,11 +462,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "default": "http://localhost:8080/jsonrpc", @@ -425,10 +476,12 @@ "examples": [ "http://localhost:8080/jsonrpc" ], + "title": "url", "type": "string" }, "username": { "description": "The username set for Remote Control via Web Sever", + "title": "username", "type": "string" } }, @@ -437,6 +490,7 @@ "url", "username" ], + "title": "KodiData", "type": "object" }, "KodiSourceConfig": { @@ -452,19 +506,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/KodiData" + "$ref": "#/definitions/KodiData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "KodiSourceConfig", "type": "object" }, "LastFmSourceData": { @@ -474,6 +532,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "apiKey", "type": "string" }, "maxPollRetries": { @@ -482,6 +541,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -490,10 +550,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/lastfm/callback", @@ -501,6 +563,7 @@ "examples": [ "http://localhost:9078/lastfm/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -509,21 +572,25 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "secret": { "description": "Secret generated from Last.fm account", "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "secret", "type": "string" }, "session": { "description": "Optional session id returned from a completed auth flow", + "title": "session", "type": "string" } }, @@ -531,6 +598,7 @@ "apiKey", "secret" ], + "title": "LastFmSourceData", "type": "object" }, "LastfmSourceConfig": { @@ -546,6 +614,7 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "configureAs": { @@ -557,19 +626,23 @@ "examples": [ "source" ], + "title": "configureAs", "type": "string" }, "data": { - "$ref": "#/definitions/LastFmSourceData" + "$ref": "#/definitions/LastFmSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "LastfmSourceConfig", "type": "object" }, "ListenBrainzSourceConfig": { @@ -585,6 +658,7 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "configureAs": { @@ -596,19 +670,23 @@ "examples": [ "source" ], + "title": "configureAs", "type": "string" }, "data": { - "$ref": "#/definitions/ListenBrainzSourceData" + "$ref": "#/definitions/ListenBrainzSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "ListenBrainzSourceConfig", "type": "object" }, "ListenBrainzSourceData": { @@ -619,6 +697,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -627,10 +706,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -638,17 +719,20 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "token": { "description": "User token for the user to scrobble for", "examples": [ "6794186bf-1157-4de6-80e5-uvb411f3ea2b" ], + "title": "token", "type": "string" }, "url": { @@ -657,10 +741,12 @@ "examples": [ "https://api.listenbrainz.org/" ], + "title": "url", "type": "string" }, "username": { "description": "Username of the user to scrobble for", + "title": "username", "type": "string" } }, @@ -668,6 +754,7 @@ "token", "username" ], + "title": "ListenBrainzSourceData", "type": "object" }, "MPRISData": { @@ -690,7 +777,8 @@ "spotify", "vlc" ] - ] + ], + "title": "blacklist" }, "maxPollRetries": { "default": 5, @@ -698,6 +786,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -706,10 +795,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -717,11 +808,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "whitelist": { "anyOf": [ @@ -741,9 +834,11 @@ "spotify", "vlc" ] - ] + ], + "title": "whitelist" } }, + "title": "MPRISData", "type": "object" }, "MPRISSourceConfig": { @@ -759,19 +854,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/MPRISData" + "$ref": "#/definitions/MPRISData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "MPRISSourceConfig", "type": "object" }, "MopidyData": { @@ -790,6 +889,7 @@ "items": { "type": "string" }, + "title": "albumBlacklist", "type": "array" }, "interval": { @@ -798,6 +898,7 @@ "examples": [ 10 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -806,6 +907,7 @@ "examples": [ 30 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -814,6 +916,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -822,10 +925,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -833,17 +938,20 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "uriBlacklist": { "description": "Do not scrobble tracks whose URI STARTS WITH any of these strings, case-insensitive\n\nEX: Don't scrobble tracks from soundcloud by adding 'soundcloud' to this list.\n\nList is ignored if uriWhitelist is used.", "items": { "type": "string" }, + "title": "uriBlacklist", "type": "array" }, "uriWhitelist": { @@ -851,6 +959,7 @@ "items": { "type": "string" }, + "title": "uriWhitelist", "type": "array" }, "url": { @@ -859,9 +968,11 @@ "examples": [ "ws://localhost:6680/mopidy/ws/" ], + "title": "url", "type": "string" } }, + "title": "MopidyData", "type": "object" }, "MopidySourceConfig": { @@ -877,19 +988,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/MopidyData" + "$ref": "#/definitions/MopidyData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "MopidySourceConfig", "type": "object" }, "PlexSourceConfig": { @@ -905,19 +1020,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/PlexSourceData" + "$ref": "#/definitions/PlexSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "PlexSourceConfig", "type": "object" }, "PlexSourceData": { @@ -940,7 +1059,8 @@ "Audio", "Music" ] - ] + ], + "title": "libraries" }, "maxPollRetries": { "default": 5, @@ -948,6 +1068,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -956,6 +1077,7 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { @@ -971,9 +1093,11 @@ ], "examples": [ "warn" - ] + ], + "title": "logFilterFailure" } }, + "title": "options", "type": "object" }, "retryMultiplier": { @@ -982,11 +1106,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "servers": { "anyOf": [ @@ -1005,7 +1131,8 @@ [ "MyServerName" ] - ] + ], + "title": "servers" }, "user": { "anyOf": [ @@ -1025,12 +1152,15 @@ "MyUser1", "MyUser2" ] - ] + ], + "title": "user" } }, + "title": "PlexSourceData", "type": "object" }, "Record": { + "title": "Record", "type": "object" }, "ScrobbleThresholds": { @@ -1041,13 +1171,16 @@ "examples": [ 30 ], + "title": "duration", "type": "number" }, "percent": { "description": "The percentage of a track that should have been seen played before it should be scrobbled. Only used if the Source provides information about how long the track is.\n\nNOTE: This should be used with care when the Source is a \"polling\" type (has an 'interval' property). If the track is short and the interval is too high MS may ignore the track if percentage is high because it had not \"seen\" the track for long enough from first discovery, even if you have been playing the track for longer.", + "title": "percent", "type": "number" } }, + "title": "ScrobbleThresholds", "type": "object" }, "SpotifySourceConfig": { @@ -1063,19 +1196,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/SpotifySourceData" + "$ref": "#/definitions/SpotifySourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "SpotifySourceConfig", "type": "object" }, "SpotifySourceData": { @@ -1085,6 +1222,7 @@ "examples": [ "787c921a2a2ab42320831aba0c8f2fc2" ], + "title": "clientId", "type": "string" }, "clientSecret": { @@ -1092,6 +1230,7 @@ "examples": [ "ec42e09d5ae0ee0f0816ca151008412a" ], + "title": "clientSecret", "type": "string" }, "interval": { @@ -1100,6 +1239,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1108,6 +1248,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1116,6 +1257,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1124,10 +1266,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "redirectUri": { "default": "http://localhost:9078/callback", @@ -1135,6 +1279,7 @@ "examples": [ "http://localhost:9078/callback" ], + "title": "redirectUri", "type": "string" }, "retryMultiplier": { @@ -1143,11 +1288,13 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ @@ -1155,6 +1302,7 @@ "clientSecret", "redirectUri" ], + "title": "SpotifySourceData", "type": "object" }, "SubSonicSourceConfig": { @@ -1170,19 +1318,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/SubsonicData" + "$ref": "#/definitions/SubsonicData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "SubSonicSourceConfig", "type": "object" }, "SubsonicData": { @@ -1193,6 +1345,7 @@ "examples": [ 10 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1201,6 +1354,7 @@ "examples": [ 30 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1209,6 +1363,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1217,16 +1372,19 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "password": { "description": "Password for the user to login to the server with", "examples": [ "MyPassword" ], + "title": "password", "type": "string" }, "retryMultiplier": { @@ -1235,21 +1393,25 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" }, "url": { "description": "URL of the subsonic media server to query", "examples": [ "http://airsonic.local" ], + "title": "url", "type": "string" }, "user": { "description": "Username to login to the server with", + "title": "user", "type": "string" } }, @@ -1258,6 +1420,7 @@ "url", "user" ], + "title": "SubsonicData", "type": "object" }, "TautulliSourceConfig": { @@ -1273,25 +1436,30 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/PlexSourceData" + "$ref": "#/definitions/PlexSourceData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "TautulliSourceConfig", "type": "object" }, "YTMusicData": { "properties": { "authUser": { "description": "If the 'X-Goog-AuthUser' header is present in the Request Headers for music.youtube.com it must also be included", + "title": "authUser", "type": "number" }, "cookie": { @@ -1299,6 +1467,7 @@ "examples": [ "VISITOR_INFO1_LIVE=jMp2xA1Xz2_PbVc; __Secure-3PAPISID=3AxsXpy0M/AkISpjek; ..." ], + "title": "cookie", "type": "string" }, "interval": { @@ -1307,6 +1476,7 @@ "examples": [ 30 ], + "title": "interval", "type": "number" }, "maxInterval": { @@ -1315,6 +1485,7 @@ "examples": [ 60 ], + "title": "maxInterval", "type": "number" }, "maxPollRetries": { @@ -1323,6 +1494,7 @@ "examples": [ 5 ], + "title": "maxPollRetries", "type": "number" }, "maxRequestRetries": { @@ -1331,10 +1503,12 @@ "examples": [ 1 ], + "title": "maxRequestRetries", "type": "number" }, "options": { - "$ref": "#/definitions/Record" + "$ref": "#/definitions/Record", + "title": "options" }, "retryMultiplier": { "default": 1.5, @@ -1342,16 +1516,19 @@ "examples": [ 1.5 ], + "title": "retryMultiplier", "type": "number" }, "scrobbleThresholds": { "$ref": "#/definitions/ScrobbleThresholds", - "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled." + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", + "title": "scrobbleThresholds" } }, "required": [ "cookie" ], + "title": "YTMusicData", "type": "object" }, "YTMusicSourceConfig": { @@ -1367,19 +1544,23 @@ "items": { "type": "string" }, + "title": "clients", "type": "array" }, "data": { - "$ref": "#/definitions/YTMusicData" + "$ref": "#/definitions/YTMusicData", + "title": "data" }, "name": { "description": "Unique identifier for this source.", + "title": "name", "type": "string" } }, "required": [ "data" ], + "title": "YTMusicSourceConfig", "type": "object" } } diff --git a/tsconfig.json b/tsconfig.json index a7f95c2d..4b572a2a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,6 +23,7 @@ "node_modules", "coverage", "tests/*.ts", - "_site" + "_site", + "docsite" ] } diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 00000000..9a8d573d --- /dev/null +++ b/typedoc.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "name": "multi-scrobbler Docs", + "entryPoints": ["./src/common/infrastructure/config/aioConfig.ts"], + "sort": ["source-order"], + "categorizeByGroup": false, + "searchGroupBoosts": { + "Functions": 1.5 + }, + "navigationLinks": { + "Docs": "https://foxxmd.github.io/multi-scrobbler", + "GitHub": "https://github.com/foxxmd/multi-scrobbler" + } +} -- 2.51.2 From 058fbee0c8faa45c93b0cfe9714302a11e5b4e47 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 13 Jul 2023 15:40:48 -0400 Subject: [PATCH 07/17] Migrate all docs to docsite --- .github/ISSUE_TEMPLATE/bug_report.md | 4 +- README.md | 42 +- docs/FAQ.md | 136 ---- docs/configuration.md | 761 -------------------- docs/google-header.jpg | Bin 231527 -> 0 bytes docs/installation.md | 118 --- docs/kitchensink.md | 288 -------- docs/plex.md | 68 -- docs/service.md | 68 -- docsite/docs/FAQ.md | 6 +- docsite/docs/configuration/configuration.md | 55 +- docsite/docs/installation/installation.md | 18 +- docsite/docs/installation/service.md | 6 +- docsite/docusaurus.config.js | 9 +- docsite/sidebars.js | 2 +- docsite/src/pages/index.mdx | 42 +- 16 files changed, 95 insertions(+), 1528 deletions(-) delete mode 100644 docs/FAQ.md delete mode 100644 docs/configuration.md delete mode 100644 docs/google-header.jpg delete mode 100644 docs/installation.md delete mode 100644 docs/kitchensink.md delete mode 100644 docs/plex.md delete mode 100644 docs/service.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 3c86b7eb..538e0fbe 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,7 +7,7 @@ assignees: '' --- -[Please check the FAQ](https://github.com/FoxxMD/multi-scrobbler/blob/master/docs/FAQ.md) before submitting a bug report. +[Please check the FAQ](https://github.com/FoxxMD/multi-scrobbler/blob/master/docsite/docs/FAQ.md) before submitting a bug report. **Describe the bug** A clear and concise description of what the bug is. @@ -23,7 +23,7 @@ Steps to reproduce the behavior: A clear and concise description of what you expected to happen. **Logs** -If possible reproduce the issue with [debug logging ON](https://github.com/FoxxMD/multi-scrobbler/blob/master/docs/FAQ.md#turn-on-debug-logging) +If possible reproduce the issue with [debug logging ON](https://github.com/FoxxMD/multi-scrobbler/blob/master/docsite/docs/FAQ.md#turn-on-debug-logging) ``` Copy and paste as much log data as possible related to this issue here. diff --git a/README.md b/README.md index deba6bc0..5cdad449 100644 --- a/README.md +++ b/README.md @@ -10,28 +10,28 @@ alt="multi-scrobbler logo" width="180" height="180"> A javascript app to scrobble music you listened to, to [Maloja](https://github.com/krateng/maloja), [Last.fm](https://www.last.fm), and [ListenBrainz](https://listenbrainz.org) * Supports scrobbling from many **Sources** - * [Spotify](/docs/configuration.md#spotify) - * [Plex](/docs/configuration.md#plex) or [Tautulli](/docs/configuration.md#tautulli) - * [Subsonic-compatible APIs](/docs/configuration.md#subsonic) (like [Airsonic](https://airsonic.github.io/)) - * [Jellyfin](/docs/configuration.md#jellyfin) - * [Youtube Music](/docs/configuration.md#youtube-music) - * [Last.fm](/docs/configuration.md#lastfm-source) - * [ListenBrainz](/docs/configuration.md#listenbrainz--source-) - * [Deezer](/docs/configuration.md#deezer) - * [MPRIS (Linux Desktop)](/docs/configuration.md#mpris) - * [Mopidy](/docs/configuration.md#mopidy) - * [JRiver](/docs/configuration.md#jriver) - * [Kodi](/docs/configuration.md#kodi) + * [Spotify](/docsite/docs/configuration/configuration.md#spotify) + * [Plex](/docsite/docs/configuration/configuration.md#plex) or [Tautulli](/docsite/docs/configuration/configuration.md#tautulli) + * [Subsonic-compatible APIs](/docsite/docs/configuration/configuration.md#subsonic) (like [Airsonic](https://airsonic.github.io/)) + * [Jellyfin](/docsite/docs/configuration/configuration.md#jellyfin) + * [Youtube Music](/docsite/docs/configuration/configuration.md#youtube-music) + * [Last.fm](/docsite/docs/configuration/configuration.md#lastfm-source) + * [ListenBrainz](/docsite/docs/configuration/configuration.md#listenbrainz--source-) + * [Deezer](/docsite/docs/configuration/configuration.md#deezer) + * [MPRIS (Linux Desktop)](/docsite/docs/configuration/configuration.md#mpris) + * [Mopidy](/docsite/docs/configuration/configuration.md#mopidy) + * [JRiver](/docsite/docs/configuration/configuration.md#jriver) + * [Kodi](/docsite/docs/configuration/configuration.md#kodi) * Supports scrobbling to many **Clients** - * [Maloja](/docs/configuration.md#maloja) - * [Last.fm](/docs/configuration.md#lastfm) - * [ListenBrainz](/docs/configuration.md#listenbrainz) -* Monitor status of Sources and Clients using [webhooks (Gotify or Ntfy)](/docs/configuration.md#webhook-configurations) or [healthcheck endpoint](/docs/configuration.md#health-endpoint) + * [Maloja](/docsite/docs/configuration/configuration.md#maloja) + * [Last.fm](/docsite/docs/configuration/configuration.md#lastfm) + * [ListenBrainz](/docsite/docs/configuration/configuration.md#listenbrainz) +* Monitor status of Sources and Clients using [webhooks (Gotify or Ntfy)](/docsite/docs/configuration/configuration.md#webhook-configurations) or [healthcheck endpoint](/docsite/docs/configuration/configuration.md#health-endpoint) * Supports configuring for single or multiple users (scrobbling for your friends and family!) * Web server interface for stats, basic control, and detailed logs * Smart handling of credentials (persistent, authorization through app) * Easy configuration through ENVs or JSON -* Install using [Docker images for x86/ARM](/docs/installation.md#docker), [flatpak](/docs/installation.md#flatpak), or [locally with NodeJS](/docs/installation.md#nodejs) +* Install using [Docker images for x86/ARM](/docsite/docs/installation/installation.md#docker), [flatpak](/docsite/docs/installation/installation.md#flatpak), or [locally with NodeJS](/docsite/docs/installation/installation.md#nodejs) **Why should I use this over a browser extension and/or mobile app scrobbler?** @@ -42,7 +42,7 @@ A javascript app to scrobble music you listened to, to [Maloja](https://github.c **But I already scrobble my music to Last.fm/ListenBrainz, is multi-scrobbler for me?** -Yes! You can use [Last.fm as a **Source**](/docs/configuration.md#lastfm--source-) or [Listenbrainz as a **Source**](/docs/configuration.md#listenbrainz--source-) to forward scrobbles from your profile to any other Client! That way you can keep your current scrobble setup as-is but still get the benefit of capturing your data to a self-hosted location. +Yes! You can use [Last.fm as a **Source**](/docsite/docs/configuration/configuration.md#lastfm--source-) or [Listenbrainz as a **Source**](/docsite/docs/configuration/configuration.md#listenbrainz--source-) to forward scrobbles from your profile to any other Client! That way you can keep your current scrobble setup as-is but still get the benefit of capturing your data to a self-hosted location. @@ -71,11 +71,11 @@ Client configurations consist of: ## Installation -[See the **Installation** documentation](/docs/installation.md) +[See the **Installation** documentation](/docsite/docs/installation/installation.md) ## Configuration -[See the **Configuration** documentation](/docs/configuration.md) +[See the **Configuration** documentation](/docsite/docs/configuration/configuration.md) ## Usage @@ -90,7 +90,7 @@ On first startup you may need to authorize Spotify and/or Last.fm by visiting th ## Help/FAQ -Having issues with connections or configuration? Check the [FAQ](/docs/FAQ.md) before creating an issue! +Having issues with connections or configuration? Check the [FAQ](/docsite/docs/FAQ.md) before creating an issue! ## License diff --git a/docs/FAQ.md b/docs/FAQ.md deleted file mode 100644 index d8f354a5..00000000 --- a/docs/FAQ.md +++ /dev/null @@ -1,136 +0,0 @@ -* [Connection Issues](#connection-issues) - * [Plex/Tautulli/Jellyfin don't connect](#plextautullijellyfin-dont-connect) - * [Jellyfin has warnings about undefined or missing data](#jellyfin-has-warnings-about-undefined-or-missing-data) - * [Spotify/Deezer/LastFM won't authenticate](#spotifydeezerlastfm-wont-authenticate) -* [Configuration Issues](#configuration-issues) - * [Config could not be parsed](#config-could-not-be-parsed) -* [Scrobbling Issues](#scrobbling-issues) - * [Last.fm does not scrobble tracks with multiple artists correctly](#lastfm-does-not-scrobble-tracks-with-multiple-artists-correctly) - * [Jellyfin does not scrobble tracks with multiple artists correctly](#jellyfin-does-not-scrobble-tracks-with-multiple-artists-correctly) - -# Connection Issues - -## Plex/Tautulli/Jellyfin don't connect - -These three [sources](/README.md#source) are **ingress-based** which means that multi-scrobbler waits for the Plex/Tautulli/Jellyfin server to contact multi-scrobbler, as opposed to multi-scrobbler contacting the server. - -multi-scrobbler will log information about any server that connects to it for these three services. In the logs it looks something like this: - -``` -2023-02-22T10:55:56-05:00 info : [Ingress - Plex ] Received request from a new remote address: ::ffff:192.168.0.140 (UA: PlexMediaServer/1.24.5.5173-8dcc73a59) -2023-02-22T10:55:56-05:00 info : [Ingress - Plex ] ::ffff:192.168.0.140 (UA: PlexMediaServer/1.24.5.5173-8dcc73a59) Received valid data from server examplePlex for the first time. -2023-02-22T10:55:56-05:00 warn : [Plex Request ] Received valid Plex webhook payload but no Plex sources are configured -``` -It also logs if a server tries to connect to a URL that it does not recognize: -``` -2023-02-22T11:16:12-05:00 debug : [App ] Server received POST request from ::ffff:192.168.0.140 (UA: PlexMediaServer/1.24.5.5173-8dcc73a59) to unknown route: /plkex -``` -**So, if you do not see either of these in your logs then Plex/Tautulli/Jellyfin is not able to connect to your multi-scrobbler instance at all.** - -This is not something multi-scrobbler can fix and means you have an issue in your network. - -### Troubleshooting - -Check or try all these steps before submitting an issue: - -#### Turn on Debug Logging - -First, turn on **debug** logging for multi-scrobbler by setting the environmental variable `LOG_LEVEL=debug`: - -* using node `LOG_LEVEL=debug ... node src/index.js` -* using docker `docker run -e LOG_LEVEL=debug ... foxxmd/multi-scrobbler` - -Check the output for any additional information. - -#### Check Host name and URL - -The URLs examples in the [configuration](/docs/configuration.md) documentation assume you are running Plex/Tautulli/Jellyfin on the same server as multi-scrobbler. If these are not the same machine then you need to determine the IP address or domain name that multi-scrobbler is reachable at and use that instead of `localhost` when configuring these sources. **This is likely the same host name that you would use to access the web interface for multi-scrobbler.** - -EX `http://localhost:9078/plex` -> `http://192.168.0.140:9078/plex` - -#### Check Firewall and Port Forwarding - -If the machine multi-scrobbler is running on has a firewall ensure that port **9078** is open. Or if it is in another network entirely make sure your router is forwarding this port and it is open to the correct machine. - -#### Check Source Service Logs - -Plex/Tautulli/Jellyfin all have logs that will log if they cannot connect to multi-scrobbler. Check these for further information. - -##### Plex - -Settings -> Manage -> Console - -##### Tautulli - -Check the command-line output of the application or docker logs. - -##### Jellyfin - -Administration -> Dashboard -> Advanced -> Logs - -## Jellyfin has warnings about undefined or missing data - -Make sure you have -* [Configured the webhook plugin correctly](/docs/configuration.md#jellyfin) - * Checked the **Send All Properties(ignores template)** option in the webhook settings and **Saved** - -multi-scrobbler is known to work on Jellyfin `10.8.9` with Webhook version `11.0.0.0`. - -You can verify the payload sent from the webhook by modifying your jellyfin configuration to include `logPayload: true` which will output the raw payload to DEBUG level logging: - -```json -[ - { - "name": "MyJellyfin", - "clients": [], - "data": { - "users": ["FoxxMD"], - "options": { - "logPayload": true - } - } - } -] -``` - -If your issue persists and you open an Issue for it please include the raw payload logs in your report. - - -## Spotify/Deezer/LastFM won't authenticate - -Ensure any **client id** or **secrets** are correct in your configuration. - -The callback/redirect URL for these services must be: - -* the same address you would use to access the multi-scrobbler web interface - * the web-interface must be accessible from the browser you are completing authentication from. - -If multi-scrobbler is not running on the same machine your browser is on then the default/example addresses (`http://localhost...`) **will not work.** You must determine the address you can reach the web interface at (such as `http://192.168.0.140:9078`) then use that in place of `localhost` in the callback URLs. - -EX `http://localhost:9078/lastfm/callback` -> `http://192.168.0.220:9078/lastfm/callback` - -# Configuration Issues - -## Config could not be parsed - -If you see something like this in your logs: - -``` -2023-02-19T10:05:42-06:00 warn : [App] App config file exists but could not be parsed! -2023-02-19T10:05:42-06:00 error : [App] Exited with uncaught error -2023-02-19T10:05:42-06:00 error : [App] Error: config.json could not be parsed -``` - -It means the JSON in your configuration file is not valid. Copy and paste your configuration into a site like [JSONLint](https://jsonlint.com/) to find out where errors you have and fix them. - -# Scrobbling Issues - -## Last.fm does not scrobble tracks with multiple artists correctly - -This is a limitation of the [Last.fm API](https://www.last.fm/api/show/track.scrobble) where the **artist** field is only one string and Last.fm does not recognize (play well) with "combined" artists. - -Multi-scrobbler works the same was the official Spotify-Last.fm integration works -- it only scrobbles the **first** artist on a multi-artist track. - -## Jellyfin does not scrobble tracks with multiple artists correctly - -This is a limitation caused by the [Jellyfin webhook plugin](https://github.com/FoxxMD/multi-scrobbler/issues/70#issuecomment-1443804712) only sending the first artist to multi-scrobbler. This issues needs to be [fixed upstream on the Jellyfin webhook repository.](https://github.com/jellyfin/jellyfin-plugin-webhook/issues/166) diff --git a/docs/configuration.md b/docs/configuration.md deleted file mode 100644 index 708b2ba1..00000000 --- a/docs/configuration.md +++ /dev/null @@ -1,761 +0,0 @@ -* [Configuration Overview](#configuration-overview) - * [ENV-Based Configuration](#env-based-configuration) - * [File-Based Configuration](#file-based-configuration) - * [All-in-One File Configuration](#all-in-one-file-configuration) - * [Specific File Configuration](#specific-file-configuration) -* [Source Configurations](#source-configurations) - * [Spotify](#spotify) - * [Plex](#plex) - * [Tautulli](#tautulli) - * [Subsonic](#subsonic) - * [Jellyfin](#jellyfin) - * [Last.fm (Source)](#lastfm--source-) - * [Listenbrainz (Source)](#listenbrainz--source-) - * [Deezer](#deezer) - * [Youtube Music](#youtube-music) - * [MPRIS (Linux Desktop)](#mpris) - * [Mopidy](#mopidy) - * [JRiver](#jriver) - * [Kodi](#kodi) -* [Client Configurations](#client-configurations) - * [Maloja](#maloja) - * [Last.fm](#lastfm) - * [Listenbrainz](#listenbrainz) -* [Monitoring](#monitoring) - * [Webhooks](#webhook-configurations) - * [Health Endpoint](#health-endpoint) - -# Configuration Overview - -[**Sources** and **Clients**](/README.md#how-does-multi-scrobbler-ms-work) are configured using environmental (ENV) variables and/or json files. - -**MS will parse configuration from both configuration types.** You can mix and match configurations but it is generally better to stick to one or the other. - -TIP: Check the [**FAQ**](/docs/FAQ.md) if you have any issues after configuration! - -## ENV-Based Configuration - -This is done by passing environmental variables and so does not require any files to run MS. - -* Using a docker container EX `docker run -e "SPOTIFY_CLIENT_ID=yourId" -e "SPOTIFY_CLIENT_SECRET=yourSecret" ...` -* Using a local installations by exporting variables before running MS EX `SPOTIFY_CLIENT_ID=yourId SPOTIFY_CLIENT_SECRET=yourSecret node index.js` - -Use ENV-based configuration if: - -* You are the only person for whom MS is scrobbling for -* You have a very simple setup for MS such as one scrobble [Client](/README.md#client) and one [Source](/README.md#source) IE Plex -> Maloja - -## File-Based Configuration - -MS will parse configuration files located in the directory specified by the `CONFIG_DIR` environmental variable. This variable defaults to: - -* Local installation -> `PROJECT_DIR/config` -* Docker -> `/config` (in the container) -- see the [install docs](/docs/installation.md#docker) for how to configure this correctly - -Use File-based configuration if: - -* You have many [Sources](/README.md#source) -* You have many of each type of **Source** you want to scrobble from IE 2x Plex accounts, 3x Spotify accounts, 1x - Funkwhale... -* You have more than one scrobble **Client** you want to scrobble to IE multiple Maloja servers -* You want only some **Sources** to scrobble to some **Clients** IE Fred's Spotify account scrobbles to Fred's Maloja - server, but not Mary's Maloja server - -File-based configurations located in the `CONFIG_DIR` directory can be parsed from - -* an **all-in-one** config file named `config.json` that contains information for all Sources and Clients and/or -* many **specific** files named based on the client/source to configure IE `plex.json` `spotify.json` - -There are **example configurations** for all Source/Client types and AIO config located in the [/config](/config) directory of this project. These can be used as-is by renaming them to `.json`. -For docker installations these examples are copied to your configuration directory on first-time use. - -There is also a [**kitchensink example**](/docs/kitchensink.md) that provides examples of using all sources/clients in a complex configuration. - -### All-in-One File Configuration - -[**Explore the schema for this configuration, along with an example generator and validator, here**](https://json-schema.app/view/%23?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fdevelop%2Fsrc%2Fcommon%2Fschema%2Faio.json) - -Example directory structure: - -``` -/CONFIG_DIR - config.json -``` - -