From 37ff3dc9247e86398f7dc45fefe61eda55f411fe Mon Sep 17 00:00:00 2001 From: luisdralves Date: Fri, 12 Jun 2026 16:04:35 +0100 Subject: [PATCH] Reimplemented (but better) --- .dockerignore | 7 + .env.example | 9 + .eslintignore | 3 - .eslintrc.cjs | 17 - .gitea/workflows/deploy.yaml | 35 +- .gitignore | 51 +- .prettierignore | 2 - Dockerfile | 28 +- README.md | 52 +- bin/async-spawn.ts | 21 - bin/build-textures.ts | 12 - bin/db.ts | 3 - bin/fetch-textures.ts | 85 - bin/generate-depth.sh | 50 - bin/get-type.sh | 34 - bin/get-type.ts | 51 - bin/init.sql | 172 - bin/insert.ts | 180 - biome.json | 40 + bun-env.d.ts | 4 - bun.lock | 1455 +--- docker-compose.yml | 19 +- index.html | 18 + next.config.mjs | 14 - package.json | 76 +- prisma/main.db | Bin 1150976 -> 0 bytes prisma/main.dump.sql | 4370 ----------- prisma/schema.prisma | 199 - public/favicon.ico | Bin 39727 -> 0 bytes public/models/bahamas-cents-10.gltf | 104 - public/models/bahamas-cents-15.gltf | 104 - public/models/euro-cents-20.gltf | 104 - public/models/squiggly-circle.gltf | 309 - public/models/tostao-furado.gltf | 104 - src/api.ts | 33 + src/api/countries/get-countries.ts | 12 - src/api/countries/get-country-counts.ts | 64 - src/api/currencies/get-currencies.ts | 19 - src/api/index.ts | 3 - src/api/types/get-random-type.ts | 43 - src/api/types/get-type.ts | 14 - src/api/types/get-types.ts | 157 - src/api/types/relations.ts | 13 - src/atlas-layout.ts | 6 + src/components/banknote/index.tsx | 102 - src/components/coin/base.tsx | 128 - src/components/coin/custom.tsx | 52 - src/components/coin/index.tsx | 52 - src/components/filters/check-row.tsx | 28 + src/components/filters/face-value-slider.tsx | 55 + src/components/filters/icons/check.svg | 3 + src/components/filters/icons/chevron.svg | 3 + src/components/filters/icons/filters.svg | 3 + src/components/filters/index.tsx | 359 - src/components/filters/inverted-group.tsx | 50 + src/components/filters/labels.ts | 23 + .../filters/multi-select-countries.tsx | 59 - .../filters/multi-select-currencies.tsx | 34 - src/components/filters/multi-select.tsx | 82 + src/components/filters/multi-toggle.tsx | 32 - src/components/filters/section.tsx | 8 + src/components/filters/sidebar.tsx | 217 + src/components/filters/state.ts | 64 + src/components/filters/year-range-slider.tsx | 75 + src/components/hail/coin-mesh.tsx | 48 - src/components/hail/index.module.css | 8 - src/components/hail/index.tsx | 85 +- src/components/hail/slot.tsx | 76 + src/components/hail/utils.ts | 15 + src/components/header/index.tsx | 65 - src/components/loading.tsx | 7 + src/components/piece/banknote/geometry.ts | 163 + src/components/piece/banknote/index.tsx | 72 + src/components/piece/coin/extrude.ts | 229 + src/components/piece/coin/geometry.ts | 60 + src/components/piece/coin/index.tsx | 75 + src/components/piece/coin/outlines.ts | 296 + src/components/piece/coin/shape-variants.ts | 118 + src/components/piece/index.tsx | 19 + src/components/pile/coin-instances.tsx | 46 - src/components/pile/coin.tsx | 145 + src/components/pile/custom-sleep.tsx | 64 + src/components/pile/floor.tsx | 13 + src/components/pile/index.module.css | 3 - src/components/pile/index.tsx | 99 - src/components/pile/scene.tsx | 63 + src/components/pile/stage-light-model.tsx | 36 - src/components/pile/stage-light.tsx | 99 + src/components/showcase/index.module.css | 8 - src/components/showcase/index.tsx | 62 - src/components/showcase/info-box.tsx | 96 - src/components/showcase/info-panel.tsx | 66 + src/components/showcase/lights.tsx | 41 + src/components/showcase/nav-button.tsx | 22 + src/components/showcase/piece-stage.tsx | 166 + src/components/showcase/row.tsx | 128 - src/components/showcase/store.ts | 95 - src/core/hooks/use-media-query.ts | 27 - src/core/hooks/use-previous.ts | 11 - src/core/hooks/use-types.ts | 30 - src/core/utils/flags.ts | 21 - src/core/utils/merge-textures.ts | 144 - src/core/utils/numista.ts | 39 - src/core/utils/texture-urls.ts | 11 - src/db/filters.ts | 177 + src/db/index.ts | 19 + src/db/parse-filters.ts | 40 + src/db/queries.ts | 26 + src/db/schema.sql | 59 + src/db/types.ts | 85 + src/filter-types.ts | 39 + src/ingest/atlas.ts | 157 + src/ingest/cli.ts | 63 + src/ingest/commands.ts | 149 + src/ingest/dominant-color.ts | 13 + src/ingest/images.ts | 52 + src/ingest/issuers.ts | 108 + src/ingest/normalize.ts | 141 + src/ingest/numista.ts | 47 + src/ingest/prompts.ts | 168 + src/ingest/rim-crop.ts | 58 + src/ingest/wikidata.ts | 51 + src/main.tsx | 41 + src/pages/_app.tsx | 27 - src/pages/_document.tsx | 13 - src/pages/api/countries.ts | 27 - src/pages/api/country-counts.ts | 19 - src/pages/api/currencies.ts | 27 - src/pages/api/merge-textures/[id].ts | 46 - src/pages/api/types/index.ts | 75 - src/pages/api/types/random.ts | 19 - src/pages/home.tsx | 84 + src/pages/index.tsx | 98 - src/pages/pile.tsx | 99 +- src/pages/shape-test.tsx | 367 + src/pages/showcase.tsx | 163 +- src/server/index.ts | 33 + src/sharp.d.ts | 4 + src/styles.css | 130 + src/styles/globals.css | 18 - src/styles/search.module.css | 3 - src/styles/theme.css | 6861 ----------------- src/types/numista.ts | 206 - src/vite-env.d.ts | 2 + tsconfig.json | 25 +- up.sh | 8 - vite.config.ts | 22 + 147 files changed, 5379 insertions(+), 16886 deletions(-) create mode 100644 .dockerignore create mode 100644 .env.example delete mode 100644 .eslintignore delete mode 100644 .eslintrc.cjs delete mode 100644 .prettierignore delete mode 100644 bin/async-spawn.ts delete mode 100644 bin/build-textures.ts delete mode 100644 bin/db.ts delete mode 100644 bin/fetch-textures.ts delete mode 100755 bin/generate-depth.sh delete mode 100755 bin/get-type.sh delete mode 100644 bin/get-type.ts delete mode 100644 bin/init.sql delete mode 100644 bin/insert.ts create mode 100644 biome.json delete mode 100644 bun-env.d.ts create mode 100644 index.html delete mode 100644 next.config.mjs delete mode 100644 prisma/main.db delete mode 100644 prisma/main.dump.sql delete mode 100644 prisma/schema.prisma delete mode 100644 public/favicon.ico delete mode 100644 public/models/bahamas-cents-10.gltf delete mode 100644 public/models/bahamas-cents-15.gltf delete mode 100644 public/models/euro-cents-20.gltf delete mode 100644 public/models/squiggly-circle.gltf delete mode 100644 public/models/tostao-furado.gltf create mode 100644 src/api.ts delete mode 100644 src/api/countries/get-countries.ts delete mode 100644 src/api/countries/get-country-counts.ts delete mode 100644 src/api/currencies/get-currencies.ts delete mode 100644 src/api/index.ts delete mode 100644 src/api/types/get-random-type.ts delete mode 100644 src/api/types/get-type.ts delete mode 100644 src/api/types/get-types.ts delete mode 100644 src/api/types/relations.ts create mode 100644 src/atlas-layout.ts delete mode 100644 src/components/banknote/index.tsx delete mode 100644 src/components/coin/base.tsx delete mode 100644 src/components/coin/custom.tsx delete mode 100644 src/components/coin/index.tsx create mode 100644 src/components/filters/check-row.tsx create mode 100644 src/components/filters/face-value-slider.tsx create mode 100644 src/components/filters/icons/check.svg create mode 100644 src/components/filters/icons/chevron.svg create mode 100644 src/components/filters/icons/filters.svg delete mode 100644 src/components/filters/index.tsx create mode 100644 src/components/filters/inverted-group.tsx create mode 100644 src/components/filters/labels.ts delete mode 100644 src/components/filters/multi-select-countries.tsx delete mode 100644 src/components/filters/multi-select-currencies.tsx create mode 100644 src/components/filters/multi-select.tsx delete mode 100644 src/components/filters/multi-toggle.tsx create mode 100644 src/components/filters/section.tsx create mode 100644 src/components/filters/sidebar.tsx create mode 100644 src/components/filters/state.ts create mode 100644 src/components/filters/year-range-slider.tsx delete mode 100644 src/components/hail/coin-mesh.tsx delete mode 100644 src/components/hail/index.module.css create mode 100644 src/components/hail/slot.tsx create mode 100644 src/components/hail/utils.ts delete mode 100644 src/components/header/index.tsx create mode 100644 src/components/loading.tsx create mode 100644 src/components/piece/banknote/geometry.ts create mode 100644 src/components/piece/banknote/index.tsx create mode 100644 src/components/piece/coin/extrude.ts create mode 100644 src/components/piece/coin/geometry.ts create mode 100644 src/components/piece/coin/index.tsx create mode 100644 src/components/piece/coin/outlines.ts create mode 100644 src/components/piece/coin/shape-variants.ts create mode 100644 src/components/piece/index.tsx delete mode 100644 src/components/pile/coin-instances.tsx create mode 100644 src/components/pile/coin.tsx create mode 100644 src/components/pile/custom-sleep.tsx create mode 100644 src/components/pile/floor.tsx delete mode 100644 src/components/pile/index.module.css delete mode 100644 src/components/pile/index.tsx create mode 100644 src/components/pile/scene.tsx delete mode 100644 src/components/pile/stage-light-model.tsx create mode 100644 src/components/pile/stage-light.tsx delete mode 100644 src/components/showcase/index.module.css delete mode 100644 src/components/showcase/index.tsx delete mode 100644 src/components/showcase/info-box.tsx create mode 100644 src/components/showcase/info-panel.tsx create mode 100644 src/components/showcase/lights.tsx create mode 100644 src/components/showcase/nav-button.tsx create mode 100644 src/components/showcase/piece-stage.tsx delete mode 100644 src/components/showcase/row.tsx delete mode 100644 src/components/showcase/store.ts delete mode 100644 src/core/hooks/use-media-query.ts delete mode 100644 src/core/hooks/use-previous.ts delete mode 100644 src/core/hooks/use-types.ts delete mode 100644 src/core/utils/flags.ts delete mode 100644 src/core/utils/merge-textures.ts delete mode 100644 src/core/utils/numista.ts delete mode 100644 src/core/utils/texture-urls.ts create mode 100644 src/db/filters.ts create mode 100644 src/db/index.ts create mode 100644 src/db/parse-filters.ts create mode 100644 src/db/queries.ts create mode 100644 src/db/schema.sql create mode 100644 src/db/types.ts create mode 100644 src/filter-types.ts create mode 100644 src/ingest/atlas.ts create mode 100644 src/ingest/cli.ts create mode 100644 src/ingest/commands.ts create mode 100644 src/ingest/dominant-color.ts create mode 100644 src/ingest/images.ts create mode 100644 src/ingest/issuers.ts create mode 100644 src/ingest/normalize.ts create mode 100644 src/ingest/numista.ts create mode 100644 src/ingest/prompts.ts create mode 100644 src/ingest/rim-crop.ts create mode 100644 src/ingest/wikidata.ts create mode 100644 src/main.tsx delete mode 100644 src/pages/_app.tsx delete mode 100644 src/pages/_document.tsx delete mode 100644 src/pages/api/countries.ts delete mode 100644 src/pages/api/country-counts.ts delete mode 100644 src/pages/api/currencies.ts delete mode 100644 src/pages/api/merge-textures/[id].ts delete mode 100644 src/pages/api/types/index.ts delete mode 100644 src/pages/api/types/random.ts create mode 100644 src/pages/home.tsx delete mode 100644 src/pages/index.tsx create mode 100644 src/pages/shape-test.tsx create mode 100644 src/server/index.ts create mode 100644 src/sharp.d.ts create mode 100644 src/styles.css delete mode 100644 src/styles/globals.css delete mode 100644 src/styles/search.module.css delete mode 100644 src/styles/theme.css delete mode 100644 src/types/numista.ts create mode 100644 src/vite-env.d.ts delete mode 100755 up.sh create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9ea72d2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.env +.env.* +!.env.example +.git +node_modules +dist +data diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..90dccdd --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +# Port exposed by the BE compose stack on the host. Caddy reverse-proxies /api/* here. +HOST_PORT=3000 + +# Host path bind-mounted into the container at /app/data. +# Must contain catalogue.db, atlases/, flags/. +DATA_DIR=./data + +# Ingest pipeline only (bun run ingest). Not read by the deployed server. +NUMISTA_API_KEY= diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 9f38cb8..0000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -public -.next \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 0ff1d6e..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - env: { browser: true, es2020: true }, - extends: [ - 'plugin:@next/next/recommended', - 'plugin:@tanstack/eslint-plugin-query/recommended', - '@untile/eslint-config-typescript-react' - ], - parser: '@typescript-eslint/parser', - plugins: ['@tanstack/query'], - rules: { - 'id-length': 'off', - 'id-match': ['error', '^_$|^_?[a-zA-Z][_a-zA-Z0-9]*$|^[A-Z][_A-Z0-9]+[A-Z0-9]$'], - 'no-underscore-dangle': 'off', - 'react/no-unknown-property': 'off', - 'react/react-in-jsx-scope': 'off' - } -}; diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index 64c8f37..c01620c 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -4,31 +4,56 @@ on: push: branches: [master] +concurrency: + group: deploy-coins + cancel-in-progress: false + jobs: build-deploy: runs-on: ubuntu-latest container: image: docker:latest volumes: + - /var/www/coins:/deploy-fe - /opt/coins:/deploy steps: - name: Install dependencies - run: apk add --no-cache git nodejs + run: apk add --no-cache git bash curl nodejs + + - name: Install Bun + run: | + curl -fsSL https://bun.sh/install | bash + ln -s /root/.bun/bin/bun /usr/local/bin/bun - uses: actions/checkout@v4 - - name: Copy source to deploy directory + - name: Install workspace dependencies + run: bun install --frozen-lockfile + + - name: Build frontend + run: bun run build + + - name: Deploy frontend + run: | + rm -rf /deploy-fe/* + cp -r dist/* /deploy-fe/ + + - name: Copy source for backend build run: | rm -rf /deploy/build + mkdir -p /deploy/build cp -r . /deploy/build - name: Create .env file working-directory: /deploy/build run: | - echo "HOST_PORT=${{ vars.HOST_PORT }}" > .env - echo "PHOTOS_DIR=/opt/coins/photos" >> .env + cat > .env << 'EOF' + HOST_PORT=${{ vars.HOST_PORT }} + DATA_DIR=/opt/coins/data + NUMISTA_API_KEY=${{ secrets.NUMISTA_API_KEY }} + EOF - - name: Build and deploy + - name: Build and deploy backend working-directory: /deploy/build run: | docker compose build diff --git a/.gitignore b/.gitignore index c83650e..77f32e5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,46 +1,7 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/bin/python -/bin/marigold - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.directory -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript +node_modules/ +dist/ +data/ *.tsbuildinfo -next-env.d.ts - -# assets -public/photos -public/photos-original -public/done -tmp - -# sqlite cache -main.db-shm -main.db-wal +.bun +.env* +!.env.example diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 9160fd0..0000000 --- a/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -public/models \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index ebbe3ef..851bf08 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,20 @@ -FROM oven/bun:latest AS base +FROM oven/bun:1 + WORKDIR /app -RUN apt-get update && apt-get install -y imagemagick && rm -rf /var/lib/apt/lists/* - -FROM base AS deps COPY package.json bun.lock ./ RUN bun install --frozen-lockfile -FROM deps AS builder -COPY . . -RUN bunx prisma generate -RUN --mount=type=bind,from=photos,source=.,target=/app/public/photos \ - bun run build +COPY tsconfig.json ./ +COPY src/server ./src/server +COPY src/db ./src/db +COPY src/ingest ./src/ingest +COPY src/filter-types.ts src/atlas-layout.ts ./src/ -FROM base AS runner ENV NODE_ENV=production - -COPY --from=builder /app/public ./public -COPY --from=builder /app/.next/standalone ./ -COPY --from=builder /app/.next/static ./.next/static -COPY --from=builder /app/prisma ./prisma -COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma -COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma +ENV COINS_DATA_DIR=/app/data +ENV PORT=3000 EXPOSE 3000 -CMD ["bun", "run", "server.js"] +CMD ["bun", "src/server/index.ts"] diff --git a/README.md b/README.md index 965a122..b7410b1 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,30 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). +# Coins -## Getting Started +A personal coin collection, rendered in 3D from Numista data. -First, run the development server: +Three pages: -```bash -npm run dev -# or -yarn dev -# or -pnpm dev +- `/` — country grid over a hail of falling coins. +- `/showcase` — one coin at a time on a lit turntable. +- `/pile` — every coin in the filter dropped onto a floor under physics. + +## Stack + +Vite · React 19 · react-three/fiber + drei + rapier · Tailwind v4 · Bun + `bun:sqlite`. + +## Ingest + +```sh +bun run ingest add [+count] ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +Fetches the type from Numista, downloads images, bakes atlases, upserts the row. `remove`, `set-count`, `refetch`, `rebake` also available. -You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. +## Dev -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. +```sh +bun install +bun run dev +``` -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. +Data (catalogue + atlases + flags) lives in `./data/`. diff --git a/bin/async-spawn.ts b/bin/async-spawn.ts deleted file mode 100644 index 7e9bcc5..0000000 --- a/bin/async-spawn.ts +++ /dev/null @@ -1,21 +0,0 @@ -import process from 'process'; -import { spawn } from 'child_process'; - -export const asyncSpawn = (command: string, args: string[]) => { - return new Promise((resolve, reject) => { - const child = spawn(command, args, { - stdio: 'inherit' - }); - - child.on('error', reject); - child.stdout?.on('data', process.stdout.write); - child.stderr?.on('data', process.stderr.write); - child.on('close', code => { - if (code === 0) { - resolve(code); - } else { - reject(code); - } - }); - }); -}; diff --git a/bin/build-textures.ts b/bin/build-textures.ts deleted file mode 100644 index 4fae3ab..0000000 --- a/bin/build-textures.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { getTypes } from '@/api/types/get-types'; -import { generateImage } from '@/core/utils/merge-textures'; - -const coins = (await getTypes({ category: 'coins' })).filter(coin => coin.shape !== 'Round'); - -for (const [coinIndex, coin] of coins.entries()) { - console.log('coin', coinIndex, 'of', coins.length); - await generateImage(coin.id, 'base'); - await generateImage(coin.id, 'bump'); -} - -process.exit(0); diff --git a/bin/db.ts b/bin/db.ts deleted file mode 100644 index ff68833..0000000 --- a/bin/db.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Database } from 'bun:sqlite'; - -export const db = new Database('./prisma/main.db'); diff --git a/bin/fetch-textures.ts b/bin/fetch-textures.ts deleted file mode 100644 index 0c0d847..0000000 --- a/bin/fetch-textures.ts +++ /dev/null @@ -1,85 +0,0 @@ -import path from 'path'; -import Vibrant from 'node-vibrant'; -import { NumistaType } from '@/types/numista'; -import { asyncSpawn } from './async-spawn'; -import puppeteer, { Page } from 'puppeteer'; -import { writeFile } from 'fs/promises'; -import { getTextureUrl } from '@/core/utils/texture-urls'; - -const baseDir = './public'; - -export const downloadFile = async (page: Page, url: string): Promise<[string, string, string?]> => { - const filepath = url.split('catalogue')[1]; - const folder = path.join(baseDir, filepath.split('/').slice(0, -1).join('/')); - console.log(url); - await asyncSpawn('mkdir', ['-p', folder]); - const destination = path.join(baseDir, filepath); - - const pageRes = await page.goto(url, { waitUntil: 'load' }); - - if (pageRes) { - await writeFile(destination, await pageRes.buffer()); - } - - const destinationWebp = destination.replace(/\.\w*$/g, '.webp') - - await asyncSpawn('cwebp', [destination, '-o', destinationWebp]) - - let color: string | undefined; - const palette = await Vibrant.from(destination).getPalette(); - - if (palette.Vibrant) { - color = 'rgb(' + palette.Vibrant.rgb.join(',') + ')'; - } - - return [destinationWebp, destination, color]; -}; - -export const fetchTextures = async (type: NumistaType) => { - try { - const browser = await puppeteer.launch({ headless: false }); - const page = await browser.newPage(); - const texturesToBump: string[] = []; - page.setViewport({ width: 1280, height: 926 }); - - if (type?.obverse?.picture) { - const [destinationWebp, destination, color] = await downloadFile(page, type.obverse.picture); - type.obverse.picture = destinationWebp.split('public')[1]; - texturesToBump.push(`./public${destination.split('public')[1]}`); - - if (color) { - type.color = color; - } - } - - if (type?.reverse?.picture) { - const [destinationWebp, destination] = await downloadFile(page, type.reverse.picture); - type.reverse.picture = destinationWebp.split('public')[1]; - texturesToBump.push(`./public${destination.split('public')[1]}`); - } - - if (type?.edge?.picture) { - const [destinationWebp, destination] = await downloadFile(page, type.edge.picture); - type.edge.picture = destinationWebp.split('public')[1]; - await asyncSpawn('rm', [`./public${destination.split('public')[1]}`]) - } - - await browser.close(); - - const bumpPngs = [] - for (const texture of texturesToBump) { - await asyncSpawn('./bin/generate-depth.sh', [texture]); - const bumpTextureWebp = getTextureUrl(texture, 'bump') - const bumpTexturePng = bumpTextureWebp.replace(/(\.[^/.]+)$/, '.png') - bumpPngs.push(bumpTexturePng) - await asyncSpawn('cwebp', [bumpTexturePng, '-o', bumpTextureWebp]) - } - - await asyncSpawn('rm', [...texturesToBump,...bumpPngs]) - - return type; - } catch (e) { - console.error(e); - return null; - } -}; diff --git a/bin/generate-depth.sh b/bin/generate-depth.sh deleted file mode 100755 index b05a18b..0000000 --- a/bin/generate-depth.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -set -e - -if [[ -z $1 ]]; then - echo "Usage: $0 " - exit 1 -fi - -if [[ ! -f "$1" ]]; then - echo "$1 is not a file" - exit 1 -fi - -file=$(realpath "$1") -mkdir -p ./tmp -rm -fr ./tmp/* -cp "$file" ./tmp - -( - cd ./bin - - if [[ ! -d "python" ]]; then - python -m venv python - fi - - source python/bin/activate - - if [[ ! -d "marigold" ]]; then - git clone https://github.com/prs-eth/Marigold.git marigold - fi - - cd marigold - pip install -r requirements.txt - - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True python run.py \ - --input_rgb ../../tmp \ - --output_dir ../../tmp \ - --checkpoint prs-eth/marigold-v1-0 \ - --denoise_steps 50 \ - --ensemble_size 10 - - cp ../../tmp/depth_bw/*_pred.png "$(dirname "$file")" - - ( - cd "$(dirname "$file")" - target=(*_pred.png) - mv "$target" "${target/_pred.png/_bump.png}" - ) -) diff --git a/bin/get-type.sh b/bin/get-type.sh deleted file mode 100755 index 0291dc0..0000000 --- a/bin/get-type.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# Usage -# `./get-type.sh ` - -type=$1 -dir="./public/$1s/$2" -tmpdir="./public/new-$1s/$2" -id=$3 -count=${4:-1} - -if [ -f "$dir/$id.json" ]; then - echo "Already exists in main dir" - oldcount=$(cat $dir/$id.json | jq '.count') - if [ $oldcount == null ]; then - oldcount=1 - fi - newcount=$count+$oldcount - json=$(cat $dir/$id.json | jq '.count='$newcount) - echo $json | jq > $dir/$id.json -elif [ -f "$tmpdir/$id.json" ]; then - echo "Already exists in tmp dir" - oldcount=$(cat $tmpdir/$id.json | jq '.count') - if [ $oldcount == null ]; then - oldcount=1 - fi - newcount=$count+$oldcount - json=$(cat $tmpdir/$id.json | jq '.count='$newcount) - echo $json | jq > $tmpdir/$id.json -else - mkdir -p $tmpdir - curl -X GET "https://api.numista.com/api/v3/types/$id" -H "Numista-API-Key: egr10utzWmYztFrZhJSRGF7Tv64RA3b2S4xdz4di" | jq '.count='$count > $tmpdir/$id.json - cat $tmpdir/$id.json | jq '.title' -fi diff --git a/bin/get-type.ts b/bin/get-type.ts deleted file mode 100644 index 4ca0c33..0000000 --- a/bin/get-type.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { NumistaType } from '@/types/numista'; -import { asyncSpawn } from './async-spawn'; -import { fetchTextures } from './fetch-textures'; -import { db } from './db'; -import { handleInsertType, handleUpdateTypeCount } from './insert'; -import { readFile, rm } from 'fs/promises'; - -// eslint-disable-next-line prefer-const -let [id, count] = process.argv.slice(2, 4).map(value => Number(value)); - -if (!id) { - throw new Error('Invalid id ' + id); -} - -if (!count) { - count = 1; -} - -const query = db.query('SELECT * FROM NumistaType WHERE id = ' + id + ';'); -let type = query.get() as NumistaType | null; - -if (type) { - console.log(type.title); - type.count = (type.count ?? 1) + count; - handleUpdateTypeCount(type); -} else { - await asyncSpawn('sh', [ - '-c', - `curl https://api.numista.com/api/v3/types/${id} -H Numista-API-Key:egr10utzWmYztFrZhJSRGF7Tv64RA3b2S4xdz4di | jq '.count='${count} > tmp-${id}.json` - ]); - - type = JSON.parse(await readFile(`tmp-${id}.json`, { encoding: 'utf-8' })); - - if (!type) { - throw new Error('Invalid response for id ' + id); - } - - console.log(type.title); - - await rm(`tmp-${id}.json`); - - type = await fetchTextures(type); - - if (!type) { - throw new Error('Error processing textures for id ' + id); - } - - handleInsertType(type); -} - -db.close(); diff --git a/bin/init.sql b/bin/init.sql deleted file mode 100644 index 0568203..0000000 --- a/bin/init.sql +++ /dev/null @@ -1,172 +0,0 @@ -CREATE TABLE Issuer ( - code TEXT NOT NULL COLLATE NOCASE PRIMARY KEY, - name TEXT NOT NULL COLLATE NOCASE -); - -CREATE TABLE Currency ( - id INTEGER NOT NULL PRIMARY KEY, - name TEXT NOT NULL COLLATE NOCASE, - full_name TEXT NOT NULL COLLATE NOCASE -); - -CREATE TABLE Value ( - id INTEGER NOT NULL PRIMARY KEY, - text TEXT COLLATE NOCASE, - numeric_value REAL, - numerator INTEGER, - denominator INTEGER, - currency_id INTEGER, - FOREIGN KEY (currency_id) REFERENCES Currency(id) -); - -CREATE TABLE Demonetization ( - id INTEGER NOT NULL PRIMARY KEY, - is_demonetized BOOLEAN NOT NULL, - demonetization_date TEXT -); - -CREATE TABLE Composition ( - id INTEGER NOT NULL PRIMARY KEY, - text TEXT -); - -CREATE TABLE Technique ( - id INTEGER NOT NULL PRIMARY KEY, - text TEXT -); - -CREATE TABLE Reverse ( - id INTEGER NOT NULL PRIMARY KEY, - engravers TEXT, - designers TEXT, - description TEXT, - lettering TEXT, - lettering_scripts TEXT, - unabridged_legend TEXT, - lettering_translation TEXT, - picture TEXT, - thumbnail TEXT, - picture_copyright TEXT, - picture_copyright_url TEXT, - picture_license_name TEXT, - picture_license_url TEXT -); - -CREATE TABLE Obverse ( - id INTEGER NOT NULL PRIMARY KEY, - engravers TEXT, - designers TEXT, - description TEXT, - lettering TEXT, - lettering_scripts TEXT, - unabridged_legend TEXT, - lettering_translation TEXT, - picture TEXT, - thumbnail TEXT, - picture_copyright TEXT, - picture_copyright_url TEXT, - picture_license_name TEXT, - picture_license_url TEXT -); - -CREATE TABLE Edge ( - id INTEGER NOT NULL PRIMARY KEY, - engravers TEXT, - designers TEXT, - description TEXT, - lettering TEXT, - lettering_scripts TEXT, - unabridged_legend TEXT, - lettering_translation TEXT, - picture TEXT, - thumbnail TEXT, - picture_copyright TEXT, - picture_copyright_url TEXT, - picture_license_name TEXT, - picture_license_url TEXT -); - -CREATE TABLE Watermark ( - id INTEGER NOT NULL PRIMARY KEY, - engravers TEXT, - designers TEXT, - description TEXT, - lettering TEXT, - lettering_scripts TEXT, - unabridged_legend TEXT, - lettering_translation TEXT, - picture TEXT, - thumbnail TEXT, - picture_copyright TEXT, - picture_copyright_url TEXT, - picture_license_name TEXT, - picture_license_url TEXT -); - -CREATE TABLE NumistaType ( - id INTEGER NOT NULL PRIMARY KEY, - url TEXT, - title TEXT NOT NULL COLLATE NOCASE, - category TEXT NOT NULL CHECK (category IN ('coin', 'banknote', 'exonumia')), - issuer_code TEXT, - min_year INTEGER, - max_year INTEGER, - type TEXT COLLATE NOCASE, - value_id INTEGER, - demonetization_id INTEGER, - shape TEXT, - composition_id INTEGER, - technique_id INTEGER, - weight REAL, - size REAL, - size2 REAL, - thickness REAL, - orientation TEXT CHECK (orientation IN ('coin', 'medal', 'variable', 'three', 'nine')), - obverse_id INTEGER, - reverse_id INTEGER, - edge_id INTEGER, - watermark_id INTEGER, - series TEXT, - commemorated_topic TEXT, - comments TEXT, - count INTEGER NOT NULL, - color TEXT, - FOREIGN KEY (issuer_code) REFERENCES Issuer(code), - FOREIGN KEY (value_id) REFERENCES Value(id), - FOREIGN KEY (demonetization_id) REFERENCES Demonetization(id), - FOREIGN KEY (composition_id) REFERENCES Composition(id), - FOREIGN KEY (technique_id) REFERENCES Technique(id), - FOREIGN KEY (obverse_id) REFERENCES Obverse(id), - FOREIGN KEY (reverse_id) REFERENCES Reverse(id), - FOREIGN KEY (edge_id) REFERENCES Edge(id), - FOREIGN KEY (watermark_id) REFERENCES Watermark(id) -); - -CREATE TABLE RulerGroup ( - id INTEGER NOT NULL PRIMARY KEY, - name TEXT NOT NULL -); - -CREATE TABLE Ruler ( - id INTEGER NOT NULL PRIMARY KEY, - name TEXT NOT NULL, - wikidata_id TEXT, - group_id INTEGER, - FOREIGN KEY (group_id) REFERENCES RulerGroup(id) -); - -CREATE TABLE TypeRuler ( - type_id INTEGER NOT NULL, - ruler_id INTEGER NOT NULL, - FOREIGN KEY (type_id) REFERENCES NumistaType(id), - FOREIGN KEY (ruler_id) REFERENCES Ruler(id), - UNIQUE(type_id, ruler_id) -); - -CREATE TABLE TypeRelated ( - type1_id INTEGER NOT NULL, - type2_id INTEGER NOT NULL, - FOREIGN KEY (type1_id) REFERENCES NumistaType(id), - FOREIGN KEY (type2_id) REFERENCES NumistaType(id), - UNIQUE(type1_id, type2_id) -); \ No newline at end of file diff --git a/bin/insert.ts b/bin/insert.ts deleted file mode 100644 index 8255455..0000000 --- a/bin/insert.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { NumistaType } from '@/types/numista'; -import { db } from './db'; - -const bannedKeys = ['issuing_entity']; - -const omit = (data: object, keys: string[] = []) => - Object.fromEntries( - Object.entries(data).filter( - ([key, value]) => !keys.includes(key) && (typeof value === 'number' || typeof value === 'boolean' || !!value) - ) - ); - -const exists = (table: string, primaryKey: string, value: unknown) => { - const stmt = `SELECT * FROM ${table} WHERE ${primaryKey}=${typeof value === 'string' ? `'${value}'` : value}`; - - return !!db.prepare(stmt).get(); -}; - -const inserter = (table: string, data: Record, primaryKey?: string) => { - if (primaryKey && exists(table, primaryKey, data[primaryKey])) { - console.error(`${table} ${data[primaryKey]} already exists`); - return; - } - - const entries = Object.entries(data).filter(([key]) => !bannedKeys.includes(key)); - - const stmt = `INSERT INTO ${table} (${entries.map(([key]) => key).join(', ')}) VALUES (${entries - .map(([, value]) => { - if (Array.isArray(value)) { - return `'${value.join(', ').replaceAll("'", "''")}'`; - } - if (typeof value === 'string') { - return `'${value.replaceAll("'", "''")}'`; - } - return value; - }) - .join(', ')});`; - - console.log(stmt); - db.exec(stmt); -}; - -export const handleInsertType = (type: NumistaType) => { - if (type.issuer) { - inserter('Issuer', omit(type.issuer), 'code'); - } - if (type.value) { - if (type.value.currency) { - inserter('Currency', omit(type.value.currency), 'id'); - } - - inserter( - 'Value', - omit( - { - ...type.value, - currency_id: type.value.currency?.id, - id: type.id - }, - ['currency'] - ), - 'id' - ); - } - if (type.demonetization) { - inserter('Demonetization', omit({ ...type.demonetization, id: type.id }), 'id'); - } - if (type.composition) { - inserter('Composition', omit({ ...type.composition, id: type.id }), 'id'); - } - if (type.technique) { - inserter('Technique', omit({ ...type.technique, id: type.id }), 'id'); - } - if (type.obverse) { - inserter('Obverse', omit({ ...type.obverse, id: type.id }), 'id'); - } - if (type.reverse) { - inserter('Reverse', omit({ ...type.reverse, id: type.id }), 'id'); - } - if (type.edge) { - inserter('Edge', omit({ ...type.edge, id: type.id }), 'id'); - } - if (type.watermark) { - inserter('Watermark', omit({ ...type.watermark, id: type.id }), 'id'); - } - - inserter( - 'NumistaType', - omit( - { - ...type, - issuer_code: type.issuer?.code, - count: type.count || 1, - ...(type.value && { value_id: type.id }), - ...(type.demonetization && { demonetization_id: type.id }), - ...(type.composition && { composition_id: type.id }), - ...(type.technique && { technique_id: type.id }), - ...(type.obverse && { obverse_id: type.id }), - ...(type.reverse && { reverse_id: type.id }), - ...(type.edge && { edge_id: type.id }), - ...(type.watermark && { watermark_id: type.id }) - }, - [ - 'issuer', - 'value', - 'ruler', - 'obverse', - 'reverse', - 'edge', - 'watermark', - 'tags', - 'references', - 'mints', - 'printers', - 'demonetization', - 'composition', - 'technique', - 'related_types' - ] - ), - 'id' - ); - - if (type.ruler?.length) { - for (const ruler of type.ruler) { - if (ruler.group) { - inserter('RulerGroup', omit(ruler.group), 'id'); - } - - inserter( - 'Ruler', - omit( - { - ...ruler, - group_id: ruler.group?.id - }, - ['group'] - ), - 'id' - ); - - try { - inserter('TypeRuler', { - type_id: type.id, - ruler_id: ruler.id - }); - } catch { - //ok - } - } - } -}; - -export const handleUpdateTypeCount = (type: NumistaType) => { - if (!exists('NumistaType', 'id', type.id)) { - console.error(`id ${type.id} does not exist`); - return; - } - - const stmt = `UPDATE NumistaType SET count = ${type.count} WHERE id = ${type.id}`; - - console.log(stmt); - db.exec(stmt); -}; - -export const handleRelated = (type: NumistaType) => { - if (type.related_types?.length) { - for (const related_type of type.related_types) { - if (exists('NumistaType', 'id', related_type.id)) { - inserter( - 'TypeRelated', - omit({ - type1_id: type.id, - type2_id: related_type.id - }) - ); - } - } - } -}; diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..d5f40e4 --- /dev/null +++ b/biome.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": true + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "lineWidth": 100 + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single" + } + }, + "css": { + "parser": { + "tailwindDirectives": true + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + } +} diff --git a/bun-env.d.ts b/bun-env.d.ts deleted file mode 100644 index 2c6bac2..0000000 --- a/bun-env.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -/// -/// -/// diff --git a/bun.lock b/bun.lock index 8966aee..31a5c48 100644 --- a/bun.lock +++ b/bun.lock @@ -1,1459 +1,726 @@ { "lockfileVersion": 1, - "configVersion": 0, + "configVersion": 1, "workspaces": { "": { "name": "coins", "dependencies": { - "@prisma/client": "^5.4.1", - "@react-three/cannon": "^6.6.0", - "@react-three/drei": "^9.83.9", - "@react-three/fiber": "^8.13.0", - "@tanstack/react-query": "^4.35.3", - "@tanstack/react-query-devtools": "^4.35.3", - "next": "^13.5.1", - "prettier": "^3.0.3", - "primeicons": "^6.0.1", - "primereact": "^9.6.2", - "prisma": "^5.4.1", - "puppeteer": "^23.5.3", - "react": "18.2.0", - "react-div-100vh": "^0.7.0", - "react-dom": "18.2.0", - "three": "0.152.2", - "zustand": "^4.4.1", + "@clack/prompts": "^1.5.1", + "@react-three/drei": "^10.7.7", + "@react-three/fiber": "^9.6.1", + "@react-three/rapier": "^2.2.0", + "@tailwindcss/vite": "^4.3.0", + "@vitejs/plugin-react": "^6.0.2", + "lru-cache": "^11.5.1", + "node-vibrant": "^4.0.4", + "nuqs": "^2.8.9", + "react": "^19.2.7", + "react-aria-components": "^1.18.0", + "react-dom": "^19.2.7", + "sharp": "^0.35.0", + "tailwindcss": "^4.3.0", + "three": "^0.184.0", + "vite": "^8.0.16", + "wouter": "^3.10.0", }, "devDependencies": { - "@next/eslint-plugin-next": "^13.5.4", - "@tanstack/eslint-plugin-query": "^4.34.1", - "@types/node": "20.6.0", - "@types/react": "18.2.21", - "@types/react-dom": "18.2.7", - "@types/three": "0.152.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "@untile/eslint-config-typescript-react": "^2.0.1", - "@untile/prettier-config": "^2.0.1", - "bun-types": "^1.0.3", - "eslint": "8.49.0", - "eslint-config-next": "13.4.19", - "eslint-plugin-react-hooks": "^4.6.0", - "node-vibrant": "^3.2.1-alpha.1", - "typescript": "5.2.2", + "@biomejs/biome": "2.4.16", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "@types/three": "^0.184.1", + "bun-types": "^1.3.14", + "typescript": "^6.0.3", + "vite-plugin-svgr": "^5.2.0", }, }, }, "packages": { - "@aashutoshrathi/word-wrap": ["@aashutoshrathi/word-wrap@1.2.6", "", {}, "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA=="], + "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@ampproject/remapping": ["@ampproject/remapping@2.2.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg=="], + "@babel/compat-data": ["@babel/compat-data@7.29.7", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="], - "@babel/code-frame": ["@babel/code-frame@7.22.13", "", { "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" } }, "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w=="], + "@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@babel/compat-data": ["@babel/compat-data@7.22.20", "", {}, "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw=="], + "@babel/generator": ["@babel/generator@7.29.7", "", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ=="], - "@babel/core": ["@babel/core@7.23.0", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-module-transforms": "^7.23.0", "@babel/helpers": "^7.23.0", "@babel/parser": "^7.23.0", "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.0", "@babel/types": "^7.23.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ=="], + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], - "@babel/eslint-parser": ["@babel/eslint-parser@7.22.15", "", { "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.11.0", "eslint": "^7.5.0 || ^8.0.0" } }, "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg=="], + "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/generator": ["@babel/generator@7.23.0", "", { "dependencies": { "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" } }, "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g=="], + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], - "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.22.5", "", { "dependencies": { "@babel/types": "^7.22.5" } }, "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg=="], + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.22.15", "", { "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], - "@babel/helper-environment-visitor": ["@babel/helper-environment-visitor@7.22.20", "", {}, "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="], + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], - "@babel/helper-function-name": ["@babel/helper-function-name@7.23.0", "", { "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" } }, "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw=="], + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.29.7", "", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="], - "@babel/helper-hoist-variables": ["@babel/helper-hoist-variables@7.22.5", "", { "dependencies": { "@babel/types": "^7.22.5" } }, "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw=="], + "@babel/helpers": ["@babel/helpers@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.22.15", "", { "dependencies": { "@babel/types": "^7.22.15" } }, "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w=="], + "@babel/parser": ["@babel/parser@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": "./bin/babel-parser.js" }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="], - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.23.0", "", { "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/helper-validator-identifier": "^7.22.20" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw=="], + "@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.22.5", "", {}, "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg=="], + "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/helper-simple-access": ["@babel/helper-simple-access@7.22.5", "", { "dependencies": { "@babel/types": "^7.22.5" } }, "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w=="], + "@babel/traverse": ["@babel/traverse@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.7", "debug": "^4.3.1" } }, "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw=="], - "@babel/helper-split-export-declaration": ["@babel/helper-split-export-declaration@7.22.6", "", { "dependencies": { "@babel/types": "^7.22.5" } }, "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g=="], + "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.22.5", "", {}, "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="], + "@biomejs/biome": ["@biomejs/biome@2.4.16", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.16", "@biomejs/cli-darwin-x64": "2.4.16", "@biomejs/cli-linux-arm64": "2.4.16", "@biomejs/cli-linux-arm64-musl": "2.4.16", "@biomejs/cli-linux-x64": "2.4.16", "@biomejs/cli-linux-x64-musl": "2.4.16", "@biomejs/cli-win32-arm64": "2.4.16", "@biomejs/cli-win32-x64": "2.4.16" }, "bin": { "biome": "bin/biome" } }, "sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.22.20", "", {}, "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.16", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.22.15", "", {}, "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.16", "", { "os": "darwin", "cpu": "x64" }, "sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw=="], - "@babel/helpers": ["@babel/helpers@7.23.1", "", { "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.0", "@babel/types": "^7.23.0" } }, "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.16", "", { "os": "linux", "cpu": "arm64" }, "sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ=="], - "@babel/highlight": ["@babel/highlight@7.22.20", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.16", "", { "os": "linux", "cpu": "arm64" }, "sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg=="], - "@babel/parser": ["@babel/parser@7.23.0", "", { "bin": "./bin/babel-parser.js" }, "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.16", "", { "os": "linux", "cpu": "x64" }, "sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ=="], - "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.22.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.16", "", { "os": "linux", "cpu": "x64" }, "sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg=="], - "@babel/plugin-transform-react-display-name": ["@babel/plugin-transform-react-display-name@7.22.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw=="], + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.16", "", { "os": "win32", "cpu": "arm64" }, "sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A=="], - "@babel/plugin-transform-react-jsx": ["@babel/plugin-transform-react-jsx@7.22.15", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.22.5", "@babel/types": "^7.22.15" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA=="], + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.16", "", { "os": "win32", "cpu": "x64" }, "sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw=="], - "@babel/plugin-transform-react-jsx-development": ["@babel/plugin-transform-react-jsx-development@7.22.5", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.22.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A=="], + "@clack/core": ["@clack/core@1.4.1", "", { "dependencies": { "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-FILJa1gGKEFTGZAJE9RpVhrjKz3c3h4ar60dSv6cGuDqufQ84YEIS3GAGvZiN+H6yaLbbvTFNejjCC4tXpZEuw=="], - "@babel/plugin-transform-react-pure-annotations": ["@babel/plugin-transform-react-pure-annotations@7.22.5", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA=="], + "@clack/prompts": ["@clack/prompts@1.5.1", "", { "dependencies": { "@clack/core": "1.4.1", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-zccHj2z2oCCO4yrDiRSlFOxWerGqRiysP7a5jPK6uoI9URKAquwY42Dd/iUP8JWHxEzdRe4TlbvZCo8z1/mhrw=="], - "@babel/preset-react": ["@babel/preset-react@7.22.15", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-transform-react-display-name": "^7.22.5", "@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-react-jsx-development": "^7.22.5", "@babel/plugin-transform-react-pure-annotations": "^7.22.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w=="], + "@dimforge/rapier3d-compat": ["@dimforge/rapier3d-compat@0.12.0", "", {}, "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow=="], - "@babel/runtime": ["@babel/runtime@7.23.1", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@babel/template": ["@babel/template@7.22.15", "", { "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", "@babel/types": "^7.22.15" } }, "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w=="], + "@emnapi/runtime": ["@emnapi/runtime@1.11.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg=="], - "@babel/traverse": ["@babel/traverse@7.23.0", "", { "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/parser": "^7.23.0", "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "@babel/types": ["@babel/types@7.23.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg=="], + "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.4.0", "", { "dependencies": { "eslint-visitor-keys": "^3.3.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA=="], + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.3.0" }, "os": "darwin", "cpu": "arm64" }, "sha512-ZgaYEwaj+lx/5n4W8GmZ2IYz0PQHjN5eqRcfijWGB+2Aq7ZInZGa0qJyAn6DEtyLuWHRSrmWOqT9q3qqTBvmUQ=="], - "@eslint-community/regexpp": ["@eslint-community/regexpp@4.8.2", "", {}, "sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g=="], + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.3.0" }, "os": "darwin", "cpu": "x64" }, "sha512-c1z9LFpKB0slQW3RchwBE8iSVzGp70TNjUUO9k4BZwwW4HH7JBGHeIy4b+kk4n/kcBASb9evKCE3/7Slmslgiw=="], - "@eslint/eslintrc": ["@eslint/eslintrc@2.1.2", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g=="], + "@img/sharp-freebsd-wasm32": ["@img/sharp-freebsd-wasm32@0.35.0", "", { "dependencies": { "@img/sharp-wasm32": "0.35.0" }, "os": "freebsd" }, "sha512-Li2KTev0H90kEtnJHkI9xQojXt1AqWmFBMXiPw5kqd1jQgP7gi5HVK/qC5Rmh/59NuAwUuPzzPITmX22NomYYQ=="], - "@eslint/js": ["@eslint/js@8.49.0", "", {}, "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w=="], + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EKbmBKtyTH+GPFDRw2TgK2oV6hyxxlJVIar4hoTYSNmIwipgMFdxPQqR392GmfdsPGWga0mCFN1cCKjRb9cljw=="], - "@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.11.11", "", { "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.5" } }, "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA=="], + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Pl2OmOvrJ42adUllESxBsG54PfXLo1OYg9i3c5/5Ln/qJ0gZuTM9YMhQJPIbXqwidLRc/c2zuHt4RsrymmNv7A=="], - "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.0", "", { "os": "linux", "cpu": "arm" }, "sha512-A8UpHoUDW4DwnXoV6+q3C1s7QLRAHtPDEjWuNZjwHMyoCNZnm0GeNN8ls9f/bsEYTRQRW96C/n34XJQHJ2fT7A=="], - "@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@1.2.1", "", {}, "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="], + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-C0SqjoFKnszqa44EQ7xoaT48nnO0lOyXEULfXMWi8krrjOPGYkeK30Okzla6ATbBYsyZ0ySinK0FVkpv3DwzfQ=="], - "@jimp/bmp": ["@jimp/bmp@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.16.13", "bmp-js": "^0.1.0" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-9edAxu7N2FX7vzkdl5Jo1BbACfycUtBQX+XBMcHA2bk62P8R0otgkHg798frgAk/WxQIzwxqOH6wMiCwrlAzdQ=="], + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WOpkVxAjFd369iaIzEgNRreFD+gWdUMIGD5zplhNKNeqS6mm5dac3q2AFyCBmzYoAdouzZvRBgxy4z8QHZb4/A=="], - "@jimp/core": ["@jimp/core@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.16.13", "any-base": "^1.1.0", "buffer": "^5.2.0", "exif-parser": "^0.1.12", "file-type": "^16.5.4", "load-bmfont": "^1.3.1", "mkdirp": "^0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" } }, "sha512-qXpA1tzTnlkTku9yqtuRtS/wVntvE6f3m3GNxdTdtmc+O+Wcg9Xo2ABPMh7Nc0AHbMKzwvwgB2JnjZmlmJEObg=="], + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.0", "", { "os": "linux", "cpu": "none" }, "sha512-DRWw0mOHusrCCuw2rqP87oLg6PGlkomVDFqw2hIwsSfwWpu4k3XLcBPaKKl6ct/GtL/cwNkgwjV/tc0Mqht3VA=="], - "@jimp/custom": ["@jimp/custom@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "@jimp/core": "^0.16.13" } }, "sha512-LTATglVUPGkPf15zX1wTMlZ0+AU7cGEGF6ekVF1crA8eHUWsGjrYTB+Ht4E3HTrCok8weQG+K01rJndCp/l4XA=="], + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-9APy+nFWhHS+kzLgWZfLcyrUd7YqnAQVa4BPOo4xkoHpdoktOAPG4cEr9+Jpl0TtqfVmcMJimNL5qNTyyOHZNA=="], - "@jimp/gif": ["@jimp/gif@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.16.13", "gifwrap": "^0.9.2", "omggif": "^1.0.9" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-yFAMZGv3o+YcjXilMWWwS/bv1iSqykFahFMSO169uVMtfQVfa90kt4/kDwrXNR6Q9i6VHpFiGZMlF2UnHClBvg=="], + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-y9RNUYDe2A1UAdhLyfeOodGRszQdaEoe4nfOpp/sNVPl2CWIcUyFaDoCh4vPLPxu19803j2naLqZup2WxDXCLA=="], - "@jimp/jpeg": ["@jimp/jpeg@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.16.13", "jpeg-js": "^0.4.2" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-BJHlDxzTlCqP2ThqP8J0eDrbBfod7npWCbJAcfkKqdQuFk0zBPaZ6KKaQKyKxmWJ87Z6ohANZoMKEbtvrwz1AA=="], + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-cC1wkC0Mlucd0KSiGrLkJnB/ZqPvZCntc/Lk7ZnYO5ZSbF2euNek4Xvxafojq+wN1q/W0eprdpUIjUr/EV2PBg=="], - "@jimp/plugin-resize": ["@jimp/plugin-resize@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.16.13" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-qoqtN8LDknm3fJm9nuPygJv30O3vGhSBD2TxrsCnhtOsxKAqVPJtFVdGd/qVuZ8nqQANQmTlfqTiK9mVWQ7MiQ=="], + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-LiYMhUZicB1QG//+RvmYZpXJO8fYRENfp+MZUCnG9aw+AKvGAy9gPaCnuwsPcBFs8EV66M0NNxj9VHcNklE8zw=="], - "@jimp/png": ["@jimp/png@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.16.13", "pngjs": "^3.3.3" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-8cGqINvbWJf1G0Her9zbq9I80roEX0A+U45xFby3tDWfzn+Zz8XKDF1Nv9VUwVx0N3zpcG1RPs9hfheG4Cq2kg=="], + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.0" }, "os": "linux", "cpu": "arm" }, "sha512-VVlpEWwizEFIOom0zdoeKuO5nuTswzVE5uHcBNvHzmeHUpNFajY3HFfbQ+zIH4E2kVaZ/yVxmsShW56TtEy4uA=="], - "@jimp/tiff": ["@jimp/tiff@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "utif": "^2.0.1" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-oJY8d9u95SwW00VPHuCNxPap6Q1+E/xM5QThb9Hu+P6EGuu6lIeLaNBMmFZyblwFbwrH+WBOZlvIzDhi4Dm/6Q=="], + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.0" }, "os": "linux", "cpu": "arm64" }, "sha512-4+4XHLNT5wDT0roYlHTEmH9lDKt0acf9Tv+3hM3iceOirkxrR404/3WjAYZ9F9CkHrxeRcGLJXbi4vluMZ9O+A=="], - "@jimp/types": ["@jimp/types@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "@jimp/bmp": "^0.16.13", "@jimp/gif": "^0.16.13", "@jimp/jpeg": "^0.16.13", "@jimp/png": "^0.16.13", "@jimp/tiff": "^0.16.13", "timm": "^1.6.1" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-mC0yVNUobFDjoYLg4hoUwzMKgNlxynzwt3cDXzumGvRJ7Kb8qQGOWJQjQFo5OxmGExqzPphkirdbBF88RVLBCg=="], + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.0" }, "os": "linux", "cpu": "ppc64" }, "sha512-N3hzbEpUTJC8pWpPVJvgzGxM+so/MAXc8O2s/53B0LL9ZGpfXpME7Wizkc5d/8fRBlBtkDjzoZGDCqqNDHqLEw=="], - "@jimp/utils": ["@jimp/utils@0.16.13", "", { "dependencies": { "@babel/runtime": "^7.7.2", "regenerator-runtime": "^0.13.3" } }, "sha512-VyCpkZzFTHXtKgVO35iKN0sYR10psGpV6SkcSeV4oF7eSYlR8Bl6aQLCzVeFjvESF7mxTmIiI3/XrMobVrtxDA=="], + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.0" }, "os": "linux", "cpu": "none" }, "sha512-l6vmKVPnbS0RhVMbyxP5meAARsbhCnBN4fy31qz0+3a6Rv4jEqfzDrT89y6ZPkCi0AJGnwp2En528yXo401Hpw=="], - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.3", "", { "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } }, "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ=="], + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.0" }, "os": "linux", "cpu": "s390x" }, "sha512-MYlMiPFiv/EKPAHnp3yNZ9AAWFsxga9c5Bkc6wkar6bqzHLlkGVJHRm0u1ei+VXnZxp3Mz9MG9ZIsI8vSOf3sQ=="], - "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.1", "", {}, "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA=="], + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.0" }, "os": "linux", "cpu": "x64" }, "sha512-TYaItB5oj1ioXjhyn2xrR208vf+YuIIcHptQWRRaBmFhvIvL9D72DXN8w75xup0KXA8UdEAhQ9Qb2S49FD/9Cw=="], - "@jridgewell/set-array": ["@jridgewell/set-array@1.1.2", "", {}, "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="], + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.0" }, "os": "linux", "cpu": "arm64" }, "sha512-DSTb6ijQzqe6DdAaOBVqJ/SYf1vO8EW5bK6X6LRXufEBebf2722VCdvBUtZ3rtV0x2ApfPNDy/p7LrrjaWjiyQ=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.4.15", "", {}, "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="], + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.0", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.0" }, "os": "linux", "cpu": "x64" }, "sha512-K7ykQ+26Rt6+4BTU80AuGgTPIYX86UxiAKT4rcXX/WNTo7k1ZxpKz+TguHnwVpCqQK3B5PK0vZ0ZBe6nz/ib1w=="], - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.19", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw=="], + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.0", "", { "dependencies": { "@emnapi/runtime": "^1.11.0" } }, "sha512-9woLIFORERCr+6cWu87dQ22J34EExkhc73U1kZW0c+RclQqWetoodByp4dWZ/hN8/KVmTRAx2HOnUwib8AwZdA=="], - "@mediapipe/tasks-vision": ["@mediapipe/tasks-vision@0.10.2", "", {}, "sha512-d8Q9uRK89ZRWmED2JLI9/blpJcfdbh0iEUuMo8TgkMzNfQBY1/GC0FEJWrairTwHkxIf6Oud1vFBP+aHicWqJA=="], + "@img/sharp-webcontainers-wasm32": ["@img/sharp-webcontainers-wasm32@0.35.0", "", { "dependencies": { "@img/sharp-wasm32": "0.35.0" }, "cpu": "none" }, "sha512-t+kie1TOyaDM6Dho+f+y0VqIUNhYQaKCUahuZVi0E0frgdiaOaPsDxDW3wfKacUdaNBCnK/ZDBMg33ydvHj8uA=="], - "@next/env": ["@next/env@13.5.3", "", {}, "sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg=="], + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.35.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-M5eKxug0dabbaWgFKvPa3odNs2OpaP+81NASfGKkt4GcYXpNhSu7CaeYxWkLNV6vHmUp4hnCxnxrUyhUJhXbKA=="], - "@next/eslint-plugin-next": ["@next/eslint-plugin-next@13.5.4", "", { "dependencies": { "glob": "7.1.7" } }, "sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A=="], + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.35.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-z0+pZ03QCDvdVN0Ez9IX/yjWC19ikMlXrmdYMwYNLTh2BLPx3hXWPvyqWfquZ0BTO9O6GVOjIVoTcyyacMnWlQ=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@13.5.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw=="], + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.35.0", "", { "os": "win32", "cpu": "x64" }, "sha512-feNnlz5ZHKr0MY1LPHvZQyJeBkbo4ctsn0D8FvA53VTw5TC63rfEL2UrWbkSBR19htSE7Mw78xYVwdJqoMWVHw=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@13.5.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ=="], + "@internationalized/date": ["@internationalized/date@3.12.2", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@13.5.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA=="], + "@internationalized/number": ["@internationalized/number@3.6.7", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@13.5.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA=="], + "@internationalized/string": ["@internationalized/string@3.2.9", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-kzP/M/mbQxODlmOt4bIQZ2SBVUWUSqMLXooXixnX7noche8WHaQcA+nwFN1K2KCF/cp+LDUhcJsCicwkvhD1pg=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@13.5.3", "", { "os": "linux", "cpu": "x64" }, "sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g=="], + "@jimp/bmp": ["@jimp/bmp@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "bmp-js": "^0.1.0" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@13.5.3", "", { "os": "linux", "cpu": "x64" }, "sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g=="], + "@jimp/core": ["@jimp/core@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "any-base": "^1.1.0", "buffer": "^5.2.0", "exif-parser": "^0.1.12", "file-type": "^16.5.4", "isomorphic-fetch": "^3.0.0", "pixelmatch": "^4.0.2", "tinycolor2": "^1.6.0" } }, "sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@13.5.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA=="], + "@jimp/custom": ["@jimp/custom@0.22.12", "", { "dependencies": { "@jimp/core": "^0.22.12" } }, "sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q=="], - "@next/swc-win32-ia32-msvc": ["@next/swc-win32-ia32-msvc@13.5.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ=="], + "@jimp/gif": ["@jimp/gif@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "gifwrap": "^0.10.1", "omggif": "^1.0.9" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@13.5.3", "", { "os": "win32", "cpu": "x64" }, "sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q=="], + "@jimp/jpeg": ["@jimp/jpeg@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "jpeg-js": "^0.4.4" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q=="], - "@nicolo-ribaudo/eslint-scope-5-internals": ["@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1", "", { "dependencies": { "eslint-scope": "5.1.1" } }, "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg=="], + "@jimp/plugin-resize": ["@jimp/plugin-resize@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + "@jimp/png": ["@jimp/png@0.22.12", "", { "dependencies": { "@jimp/utils": "^0.22.12", "pngjs": "^6.0.0" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg=="], - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + "@jimp/tiff": ["@jimp/tiff@0.22.12", "", { "dependencies": { "utif2": "^4.0.1" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg=="], - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@jimp/types": ["@jimp/types@0.22.12", "", { "dependencies": { "@jimp/bmp": "^0.22.12", "@jimp/gif": "^0.22.12", "@jimp/jpeg": "^0.22.12", "@jimp/png": "^0.22.12", "@jimp/tiff": "^0.22.12", "timm": "^1.6.1" }, "peerDependencies": { "@jimp/custom": ">=0.3.5" } }, "sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA=="], - "@pmndrs/cannon-worker-api": ["@pmndrs/cannon-worker-api@2.4.0", "", { "peerDependencies": { "three": ">=0.139" } }, "sha512-oJA1Bboc+WObksRaGDKJG0Wna9Q75xi1MdXVAZ9qXzBOyPsadmAnrmiKOEF0R8v/4zsuJElvscNZmyo3msbZjA=="], + "@jimp/utils": ["@jimp/utils@0.22.12", "", { "dependencies": { "regenerator-runtime": "^0.13.3" } }, "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q=="], - "@prisma/client": ["@prisma/client@5.4.1", "", { "dependencies": { "@prisma/engines-version": "5.4.1-1.2f302df92bd8945e20ad4595a73def5b96afa54f" }, "peerDependencies": { "prisma": "*" } }, "sha512-xyD0DJ3gRNfLbPsC+YfMBBuLJtZKQfy1OD2qU/PZg+HKrr7SO+09174LMeTlWP0YF2wca9LxtVd4HnAiB5ketQ=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@prisma/engines": ["@prisma/engines@5.4.1", "", {}, "sha512-vJTdY4la/5V3N7SFvWRmSMUh4mIQnyb/MNoDjzVbh9iLmEC+uEykj/1GPviVsorvfz7DbYSQC4RiwmlEpTEvGA=="], + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], - "@prisma/engines-version": ["@prisma/engines-version@5.4.1-1.2f302df92bd8945e20ad4595a73def5b96afa54f", "", {}, "sha512-+nUQM/y8C+1GG5Ioeqcu6itFslCfxvQSAUVSMC9XM2G2Fcq0F4Afnp6m0pXF6X6iUBWen7jZBPmM9Qlq4Nr3/A=="], + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - "@puppeteer/browsers": ["@puppeteer/browsers@2.4.0", "", { "dependencies": { "debug": "^4.3.6", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.4.0", "semver": "^7.6.3", "tar-fs": "^3.0.6", "unbzip2-stream": "^1.4.3", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - "@react-spring/animated": ["@react-spring/animated@9.6.1", "", { "dependencies": { "@react-spring/shared": "~9.6.1", "@react-spring/types": "~9.6.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ=="], + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@react-spring/core": ["@react-spring/core@9.6.1", "", { "dependencies": { "@react-spring/animated": "~9.6.1", "@react-spring/rafz": "~9.6.1", "@react-spring/shared": "~9.6.1", "@react-spring/types": "~9.6.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ=="], + "@mediapipe/tasks-vision": ["@mediapipe/tasks-vision@0.10.17", "", {}, "sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg=="], - "@react-spring/rafz": ["@react-spring/rafz@9.6.1", "", {}, "sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ=="], + "@monogrid/gainmap-js": ["@monogrid/gainmap-js@3.4.0", "", { "dependencies": { "promise-worker-transferable": "^1.0.4" }, "peerDependencies": { "three": ">= 0.159.0" } }, "sha512-2Z0FATFHaoYJ8b+Y4y4Hgfn3FRFwuU5zRrk+9dFWp4uGAdHGqVEdP7HP+gLA3X469KXHmfupJaUbKo1b/aDKIg=="], - "@react-spring/shared": ["@react-spring/shared@9.6.1", "", { "dependencies": { "@react-spring/rafz": "~9.6.1", "@react-spring/types": "~9.6.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.2" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q=="], - "@react-spring/three": ["@react-spring/three@9.6.1", "", { "dependencies": { "@react-spring/animated": "~9.6.1", "@react-spring/core": "~9.6.1", "@react-spring/shared": "~9.6.1", "@react-spring/types": "~9.6.1" }, "peerDependencies": { "@react-three/fiber": ">=6.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "three": ">=0.126" } }, "sha512-Tyw2YhZPKJAX3t2FcqvpLRb71CyTe1GvT3V+i+xJzfALgpk10uPGdGaQQ5Xrzmok1340DAeg2pR/MCfaW7b8AA=="], + "@oxc-project/types": ["@oxc-project/types@0.133.0", "", {}, "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA=="], - "@react-spring/types": ["@react-spring/types@9.6.1", "", {}, "sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q=="], + "@react-three/drei": ["@react-three/drei@10.7.7", "", { "dependencies": { "@babel/runtime": "^7.26.0", "@mediapipe/tasks-vision": "0.10.17", "@monogrid/gainmap-js": "^3.0.6", "@use-gesture/react": "^10.3.1", "camera-controls": "^3.1.0", "cross-env": "^7.0.3", "detect-gpu": "^5.0.56", "glsl-noise": "^0.0.0", "hls.js": "^1.5.17", "maath": "^0.10.8", "meshline": "^3.3.1", "stats-gl": "^2.2.8", "stats.js": "^0.17.0", "suspend-react": "^0.1.3", "three-mesh-bvh": "^0.8.3", "three-stdlib": "^2.35.6", "troika-three-text": "^0.52.4", "tunnel-rat": "^0.1.2", "use-sync-external-store": "^1.4.0", "utility-types": "^3.11.0", "zustand": "^5.0.1" }, "peerDependencies": { "@react-three/fiber": "^9.0.0", "react": "^19", "react-dom": "^19", "three": ">=0.159" }, "optionalPeers": ["react-dom"] }, "sha512-ff+J5iloR0k4tC++QtD/j9u3w5fzfgFAWDtAGQah9pF2B1YgOq/5JxqY0/aVoQG5r3xSZz0cv5tk2YuBob4xEQ=="], - "@react-three/cannon": ["@react-three/cannon@6.6.0", "", { "dependencies": { "@pmndrs/cannon-worker-api": "^2.4.0", "cannon-es": "^0.20.0", "cannon-es-debugger": "^1.0.0" }, "peerDependencies": { "@react-three/fiber": ">=8", "react": ">=18", "three": ">=0.139" } }, "sha512-lP9rJoVHQi0w+dYF8FJAm2xr5eLfNEckb04j72kjqndUkuOPr26N4rSBhQbHl5b5N3tEnhQaIMungAvHkcY8/A=="], + "@react-three/fiber": ["@react-three/fiber@9.6.1", "", { "dependencies": { "@babel/runtime": "^7.17.8", "@types/webxr": "*", "base64-js": "^1.5.1", "buffer": "^6.0.3", "its-fine": "^2.0.0", "react-use-measure": "^2.1.7", "scheduler": "^0.27.0", "suspend-react": "^0.1.3", "use-sync-external-store": "^1.4.0", "zustand": "^5.0.3" }, "peerDependencies": { "expo": ">=43.0", "expo-asset": ">=8.4", "expo-file-system": ">=11.0", "expo-gl": ">=11.0", "react": ">=19 <19.3", "react-dom": ">=19 <19.3", "react-native": ">=0.78", "three": ">=0.156" }, "optionalPeers": ["expo", "expo-asset", "expo-file-system", "expo-gl", "react-dom", "react-native"] }, "sha512-zF0rsKcVYpcJwbFEnv2HkHX9cvOEgsfQo/X8lwmR2dn13S4qEQJXir9fxf5js2LQFoXqxOY7MDkOkYx2uZ4gSg=="], - "@react-three/drei": ["@react-three/drei@9.85.0", "", { "dependencies": { "@babel/runtime": "^7.11.2", "@mediapipe/tasks-vision": "0.10.2", "@react-spring/three": "~9.6.1", "@use-gesture/react": "^10.2.24", "camera-controls": "^2.4.2", "cross-env": "^7.0.3", "detect-gpu": "^5.0.28", "glsl-noise": "^0.0.0", "lodash.clamp": "^4.0.3", "lodash.omit": "^4.5.0", "lodash.pick": "^4.4.0", "maath": "^0.9.0", "meshline": "^3.1.6", "react-composer": "^5.0.3", "react-merge-refs": "^1.1.0", "stats-gl": "^1.0.4", "stats.js": "^0.17.0", "suspend-react": "^0.1.3", "three-mesh-bvh": "^0.6.0", "three-stdlib": "^2.26.6", "troika-three-text": "^0.47.2", "utility-types": "^3.10.0", "uuid": "^9.0.1", "zustand": "^3.5.13" }, "peerDependencies": { "@react-three/fiber": ">=8.0", "react": ">=18.0", "react-dom": ">=18.0", "three": ">=0.137" }, "optionalPeers": ["react-dom"] }, "sha512-9Cd/xY48eVUgFQy6LId9wt7jBS/KiJ1warPiYAVPhVuhL2xth++lJ/LndYfRZ+0CVfDes0uk+01zjD6QXWBzOQ=="], + "@react-three/rapier": ["@react-three/rapier@2.2.0", "", { "dependencies": { "@dimforge/rapier3d-compat": "0.19.2", "suspend-react": "^0.1.3", "three-stdlib": "^2.35.12" }, "peerDependencies": { "@react-three/fiber": "^9.0.4", "react": "^19", "three": ">=0.159.0" } }, "sha512-mVsqbKXlGZoN+XrqdhzFZUQmy8pibEOVzl4k7LC+LHe84bQnYBSagy1Hvbda6bL1PJDdTFyiDiBk5buKFinNIQ=="], - "@react-three/fiber": ["@react-three/fiber@8.14.3", "", { "dependencies": { "@babel/runtime": "^7.17.8", "@types/react-reconciler": "^0.26.7", "base64-js": "^1.5.1", "its-fine": "^1.0.6", "react-reconciler": "^0.27.0", "react-use-measure": "^2.1.1", "scheduler": "^0.21.0", "suspend-react": "^0.1.3", "zustand": "^3.7.1" }, "peerDependencies": { "expo": ">=43.0", "expo-asset": ">=8.4", "expo-file-system": ">=11.0", "expo-gl": ">=11.0", "react": ">=18.0", "react-dom": ">=18.0", "react-native": ">=0.64", "three": ">=0.133" }, "optionalPeers": ["expo", "expo-asset", "expo-file-system", "expo-gl", "react-dom", "react-native"] }, "sha512-i1IldQKsotrm7lFG5emEofWs2IDHdPigp648d7Bh1B2p8Y+T5WVVHvEHsB9Ou5n5N773OxFWV++8sV9cdD44UA=="], + "@react-types/shared": ["@react-types/shared@3.35.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-iNWvuzEwANttpQpdlu8nPBtdHb0mcCMj1ZTH//iRB5E/14IAnyRlR25rxH7pNLyzHINsPGEKnWvpwDMCT6vziQ=="], - "@rushstack/eslint-patch": ["@rushstack/eslint-patch@1.5.0", "", {}, "sha512-EF3948ckf3f5uPgYbQ6GhyA56Dmv8yg0+ir+BroRjwdxyZJsekhZzawOecC2rOTPCz173t7ZcR1HHZu0dZgOCw=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.3", "", { "os": "android", "cpu": "arm64" }, "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw=="], - "@swc/helpers": ["@swc/helpers@0.5.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA=="], - "@tanstack/eslint-plugin-query": ["@tanstack/eslint-plugin-query@4.34.1", "", { "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-RflOwyXamuHhuMX5RL6wtKiVw9Hi5Hhiv9gW2/ICVc4omflB+GflrxwvQ+EWRKrSRv3C0YcR0UzRxuiZ4mLq7Q=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg=="], - "@tanstack/match-sorter-utils": ["@tanstack/match-sorter-utils@8.8.4", "", { "dependencies": { "remove-accents": "0.4.2" } }, "sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g=="], - "@tanstack/query-core": ["@tanstack/query-core@4.35.3", "", {}, "sha512-PS+WEjd9wzKTyNjjQymvcOe1yg8f3wYc6mD+vb6CKyZAKvu4sIJwryfqfBULITKCla7P9C4l5e9RXePHvZOZeQ=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.3", "", { "os": "linux", "cpu": "arm" }, "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw=="], - "@tanstack/react-query": ["@tanstack/react-query@4.35.3", "", { "dependencies": { "@tanstack/query-core": "4.35.3", "use-sync-external-store": "^1.2.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-native": "*" }, "optionalPeers": ["react-dom", "react-native"] }, "sha512-UgTPioip/rGG3EQilXfA2j4BJkhEQsR+KAbF+KIuvQ7j4MkgnTCJF01SfRpIRNtQTlEfz/+IL7+jP8WA8bFbsw=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw=="], - "@tanstack/react-query-devtools": ["@tanstack/react-query-devtools@4.35.3", "", { "dependencies": { "@tanstack/match-sorter-utils": "^8.7.0", "superjson": "^1.10.0", "use-sync-external-store": "^1.2.0" }, "peerDependencies": { "@tanstack/react-query": "^4.35.3", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-UvLT7qPzCuCZ3NfjwsOqDUVN84JvSOuW6ukrjZmSqgjPqVxD6ra/HUp1CEOatQY2TRvKCp8y1lTVu+trXM30fg=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.3", "", { "os": "linux", "cpu": "x64" }, "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.3", "", { "os": "none", "cpu": "arm64" }, "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg=="], + + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.3", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.3", "", { "os": "win32", "cpu": "x64" }, "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.4.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + + "@svgr/babel-plugin-add-jsx-attribute": ["@svgr/babel-plugin-add-jsx-attribute@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g=="], + + "@svgr/babel-plugin-remove-jsx-attribute": ["@svgr/babel-plugin-remove-jsx-attribute@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA=="], + + "@svgr/babel-plugin-remove-jsx-empty-expression": ["@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA=="], + + "@svgr/babel-plugin-replace-jsx-attribute-value": ["@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ=="], + + "@svgr/babel-plugin-svg-dynamic-title": ["@svgr/babel-plugin-svg-dynamic-title@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og=="], + + "@svgr/babel-plugin-svg-em-dimensions": ["@svgr/babel-plugin-svg-em-dimensions@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g=="], + + "@svgr/babel-plugin-transform-react-native-svg": ["@svgr/babel-plugin-transform-react-native-svg@8.1.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q=="], + + "@svgr/babel-plugin-transform-svg-component": ["@svgr/babel-plugin-transform-svg-component@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw=="], + + "@svgr/babel-preset": ["@svgr/babel-preset@8.1.0", "", { "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", "@svgr/babel-plugin-transform-svg-component": "8.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug=="], + + "@svgr/core": ["@svgr/core@8.1.0", "", { "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", "camelcase": "^6.2.0", "cosmiconfig": "^8.1.3", "snake-case": "^3.0.4" } }, "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA=="], + + "@svgr/hast-util-to-babel-ast": ["@svgr/hast-util-to-babel-ast@8.0.0", "", { "dependencies": { "@babel/types": "^7.21.3", "entities": "^4.4.0" } }, "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q=="], + + "@svgr/plugin-jsx": ["@svgr/plugin-jsx@8.1.0", "", { "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", "@svgr/hast-util-to-babel-ast": "8.0.0", "svg-parser": "^2.0.4" }, "peerDependencies": { "@svgr/core": "*" } }, "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA=="], + + "@swc/helpers": ["@swc/helpers@0.5.23", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.0", "", { "os": "android", "cpu": "arm64" }, "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0", "", { "os": "linux", "cpu": "arm" }, "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.0", "", { "dependencies": { "@emnapi/core": "^1.10.0", "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.3.0", "", { "dependencies": { "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "tailwindcss": "4.3.0" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw=="], "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], - "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], + "@tweenjs/tween.js": ["@tweenjs/tween.js@23.1.3", "", {}, "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA=="], - "@tweenjs/tween.js": ["@tweenjs/tween.js@18.6.4", "", {}, "sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], - "@types/draco3d": ["@types/draco3d@1.4.5", "", {}, "sha512-JdcOl2fwoCZOHGZErjnrku3h6hF/8D21VBCclyP4m9Kggh+vMXsLyAmfEiOXwUXZ1jpv2jdfWV/a5NCgw/g/Kg=="], + "@types/draco3d": ["@types/draco3d@1.4.10", "", {}, "sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw=="], - "@types/json-schema": ["@types/json-schema@7.0.13", "", {}, "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ=="], + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], - "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], + "@types/node": ["@types/node@25.9.2", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw=="], - "@types/node": ["@types/node@20.6.0", "", {}, "sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg=="], + "@types/offscreencanvas": ["@types/offscreencanvas@2019.7.3", "", {}, "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A=="], - "@types/offscreencanvas": ["@types/offscreencanvas@2019.7.1", "", {}, "sha512-+HSrJgjBW77ALieQdMJvXhRZUIRN1597L+BKvsyeiIlHHERnqjcuOLyodK3auJ3Y3zRezNKtKAhuQWYJfEgFHQ=="], + "@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="], - "@types/prop-types": ["@types/prop-types@15.7.7", "", {}, "sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog=="], + "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], - "@types/react": ["@types/react@18.2.21", "", { "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA=="], + "@types/react-reconciler": ["@types/react-reconciler@0.28.9", "", { "peerDependencies": { "@types/react": "*" } }, "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg=="], - "@types/react-dom": ["@types/react-dom@18.2.7", "", { "dependencies": { "@types/react": "*" } }, "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA=="], + "@types/stats.js": ["@types/stats.js@0.17.4", "", {}, "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA=="], - "@types/react-reconciler": ["@types/react-reconciler@0.26.7", "", { "dependencies": { "@types/react": "*" } }, "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ=="], + "@types/three": ["@types/three@0.184.1", "", { "dependencies": { "@dimforge/rapier3d-compat": "~0.12.0", "@tweenjs/tween.js": "~23.1.3", "@types/stats.js": "*", "@types/webxr": ">=0.5.17", "fflate": "~0.8.2", "meshoptimizer": "~1.1.1" } }, "sha512-6q4VdiqVsrTRqmk62/BnlcAvIrnDM0zf2ZDVKI5kZiniWrSaOHaQzmbp+BNzoggc/8tgW412pL//wZIxu2PPTA=="], - "@types/react-transition-group": ["@types/react-transition-group@4.4.7", "", { "dependencies": { "@types/react": "*" } }, "sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg=="], + "@types/webxr": ["@types/webxr@0.5.24", "", {}, "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg=="], - "@types/scheduler": ["@types/scheduler@0.16.4", "", {}, "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ=="], + "@use-gesture/core": ["@use-gesture/core@10.3.1", "", {}, "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw=="], - "@types/semver": ["@types/semver@7.5.3", "", {}, "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw=="], + "@use-gesture/react": ["@use-gesture/react@10.3.1", "", { "dependencies": { "@use-gesture/core": "10.3.1" }, "peerDependencies": { "react": ">= 16.8.0" } }, "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g=="], - "@types/stats.js": ["@types/stats.js@0.17.1", "", {}, "sha512-OgfYE1x2w1jRUXzzKABX+kOdwz2y9PE0uSwnZabkWfJTWOzm7Pvfm4JI2xqRE0q2nwUe2jZLWcrcnhd9lQU63w=="], + "@vibrant/color": ["@vibrant/color@4.0.4", "", {}, "sha512-Fq2tAszz4QOPWfHZ+KuEAchXUD8i594BM2fOJt8dI/fvYbiVoBycBF/BlNH6F4IWBubxXoPqD4JmmAHvFYbNew=="], - "@types/three": ["@types/three@0.152.0", "", { "dependencies": { "@tweenjs/tween.js": "~18.6.4", "@types/stats.js": "*", "@types/webxr": "*", "fflate": "~0.6.9", "lil-gui": "~0.17.0" } }, "sha512-9QdaV5bfZEqeQi0xkXLdnoJt7lgYZbppdBAgJSWRicdtZoCYJ34nS2QkdeuzXt+UXExofk4OWqMzdX71HeDOVg=="], + "@vibrant/core": ["@vibrant/core@4.0.4", "", { "dependencies": { "@vibrant/color": "^4.0.4", "@vibrant/generator": "^4.0.4", "@vibrant/image": "^4.0.4", "@vibrant/quantizer": "^4.0.4", "@vibrant/worker": "^4.0.4" } }, "sha512-yZ0XSpW2biKyaJPpBC31AVYgn7NseKSO2q3KNMmDrkL2qC6TEWsBMnSQ28n0m///chZELXpQLx1CCOsWg5pj8w=="], - "@types/webxr": ["@types/webxr@0.5.5", "", {}, "sha512-HVOsSRTQYx3zpVl0c0FBmmmcY/60BkQLzVnpE9M1aG4f2Z0aKlBWfj4XZ2zr++XNBfkQWYcwhGlmuu44RJPDqg=="], + "@vibrant/generator": ["@vibrant/generator@4.0.4", "", { "dependencies": { "@vibrant/color": "^4.0.4", "@vibrant/types": "^4.0.4" } }, "sha512-rwq8PnlpKdch4YqaA1FAwdm71gKE2cMrUsbu72TqRFGa8rpP1roaZlQCVXIIwElXVc3r9axZyAcqyTLaMjhrTg=="], - "@types/yauzl": ["@types/yauzl@2.10.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw=="], + "@vibrant/generator-default": ["@vibrant/generator-default@4.0.4", "", { "dependencies": { "@vibrant/color": "^4.0.4", "@vibrant/generator": "^4.0.4" } }, "sha512-QeVDeH2dz9lityvJCb84Ml4hlBTElwCpU7SVpiDFBh6gPoCLnzcb1H9G4NgG3hOlAPyrBM+Ivq1Pg+1lZj5Ywg=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.7.3", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.7.3", "@typescript-eslint/type-utils": "6.7.3", "@typescript-eslint/utils": "6.7.3", "@typescript-eslint/visitor-keys": "6.7.3", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA=="], + "@vibrant/image": ["@vibrant/image@4.0.4", "", { "dependencies": { "@vibrant/color": "^4.0.4" } }, "sha512-NBIJj7umfDRVpFjJHQo1AFSCWCzQyjfil+Yxu7W62PEL72GPCif0CDiglPkvVF8QhDLmnx/x1k3LIBb9jWF2sw=="], - "@typescript-eslint/experimental-utils": ["@typescript-eslint/experimental-utils@5.62.0", "", { "dependencies": { "@typescript-eslint/utils": "5.62.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw=="], + "@vibrant/image-browser": ["@vibrant/image-browser@4.0.4", "", { "dependencies": { "@vibrant/image": "^4.0.4" } }, "sha512-7qVyAm+z9t98iwMDzUgGCwgRg0KBB5RXQFgiO2Um5Izd1wO7BKC0SHVEz2k7sRx3XNfBf+JExp8quPrvSz17gg=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@6.7.3", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.7.3", "@typescript-eslint/types": "6.7.3", "@typescript-eslint/typescript-estree": "6.7.3", "@typescript-eslint/visitor-keys": "6.7.3", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ=="], + "@vibrant/image-node": ["@vibrant/image-node@4.0.4", "", { "dependencies": { "@jimp/custom": "^0.22.12", "@jimp/plugin-resize": "^0.22.12", "@jimp/types": "^0.22.12", "@vibrant/image": "^4.0.4" } }, "sha512-aG8Ukt9oTa6FWaAV5oBKsBetkKASWH31hZiFJ2R1291f3TZlphUyQTJz5TubucIRsCEl4dgG1xyxFPgse2IABA=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.7.3", "", { "dependencies": { "@typescript-eslint/types": "6.7.3", "@typescript-eslint/visitor-keys": "6.7.3" } }, "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ=="], + "@vibrant/quantizer": ["@vibrant/quantizer@4.0.4", "", { "dependencies": { "@vibrant/color": "^4.0.4", "@vibrant/image": "^4.0.4", "@vibrant/types": "^4.0.4" } }, "sha512-722CooC2W4mlBiv+zyAsIrIvARnMCN/P2Muo8bnWd0SQlVWFtQnFxJWGOUPOPS4DGe3pGoqmNfvS0let4dICZQ=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.7.3", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.7.3", "@typescript-eslint/utils": "6.7.3", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw=="], + "@vibrant/quantizer-mmcq": ["@vibrant/quantizer-mmcq@4.0.4", "", { "dependencies": { "@vibrant/color": "^4.0.4", "@vibrant/image": "^4.0.4", "@vibrant/quantizer": "^4.0.4" } }, "sha512-/1CNnM96J8K+OBCWNUzywo6VdnmdFJyiKO+ty/nkfe8H0NseOEHIL7PrVtWGgtsb0rh2uTAq2rjXv65TfgPy8g=="], - "@typescript-eslint/types": ["@typescript-eslint/types@6.7.3", "", {}, "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw=="], + "@vibrant/types": ["@vibrant/types@4.0.4", "", {}, "sha512-Qq3mVTJamn7yD4OBgBEUKaxfDlm3sxBK55N7dH3XzI9Ey7KR00R06uwtqOcEJMsziWTEXdYN3VUlYaj2Tkt7hw=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.7.3", "", { "dependencies": { "@typescript-eslint/types": "6.7.3", "@typescript-eslint/visitor-keys": "6.7.3", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g=="], + "@vibrant/worker": ["@vibrant/worker@4.0.4", "", { "dependencies": { "@vibrant/types": "^4.0.4" } }, "sha512-Q/R6PYhSMWCXEk/IcXbWIzIu7Z4b58ABkGvcdF8Y+q/7g+KnpxKW5x/jfQ/6ciyYSby13wZZoEdNr3QQVgsdBQ=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@6.7.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.7.3", "@typescript-eslint/types": "6.7.3", "@typescript-eslint/typescript-estree": "6.7.3", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg=="], + "@vitejs/plugin-react": ["@vitejs/plugin-react@6.0.2", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.0" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler"] }, "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.7.3", "", { "dependencies": { "@typescript-eslint/types": "6.7.3", "eslint-visitor-keys": "^3.4.1" } }, "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg=="], - - "@untile/eslint-config": ["@untile/eslint-config@2.0.1", "", { "dependencies": { "@babel/core": "^7.22.9", "@babel/eslint-parser": "^7.22.9", "eslint-plugin-jest": "^27.2.3", "eslint-plugin-mocha": "^10.1.0", "eslint-plugin-new-with-error": "^4.0.0", "eslint-plugin-sort-destructure-keys": "^1.4.0", "eslint-plugin-sort-imports-es6": "^0.0.3", "eslint-plugin-sort-imports-es6-autofix": "^0.6.0", "eslint-plugin-sql-template": "^2.0.0", "eslint-plugin-switch-case": "^1.1.2" }, "peerDependencies": { "eslint": "8" } }, "sha512-ygwFa4Ql32M7CgaCMR1DXZl96HcvQK8XLmbBHuxMSTRPQH7xdxkgYWr3f7OUajOfodcc6NU4dYzeH9hnytKdNw=="], - - "@untile/eslint-config-react": ["@untile/eslint-config-react@2.0.1", "", { "dependencies": { "@babel/eslint-parser": "^7.22.9", "@babel/preset-react": "^7.22.5", "@untile/eslint-config": "^2.0.1", "eslint-config-prettier": "^8.9.0", "eslint-plugin-react": "^7.33.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-sort-class-members": "^1.18.0" }, "peerDependencies": { "eslint": "8", "prettier": "3" } }, "sha512-wLSSvVFKu4pNDSxWzznV2TMbg6byxKqb+jTJAenv3N4/LV4kgwAMEU++8xEje0cJr7R5iAVXp/2PNeI3SEoPtQ=="], - - "@untile/eslint-config-typescript": ["@untile/eslint-config-typescript@2.0.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "^6.2.1", "@typescript-eslint/parser": "^6.2.1", "@untile/eslint-config": "^2.0.1", "eslint-config-prettier": "^8.9.0", "eslint-plugin-sort-class-members": "^1.18.0", "eslint-plugin-sort-imports-es6-autofix": "^0.6.0", "eslint-plugin-typescript-sort-keys": "^2.3.0" }, "peerDependencies": { "eslint": "8", "prettier": "3", "typescript": ">=4.9.0 || >=5.0.0" } }, "sha512-54J8uzwPeGxTWxoGBBSC0Jgc05hjIBZYDnPxlM7iiP0HXslUbL8DeYxOkwvdPJytN/JX0zjP3pZlFnQL6loWxA=="], - - "@untile/eslint-config-typescript-react": ["@untile/eslint-config-typescript-react@2.0.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "^6.2.1", "@typescript-eslint/parser": "^6.2.1", "@untile/eslint-config-react": "^2.0.1", "@untile/eslint-config-typescript": "^2.0.1" }, "peerDependencies": { "eslint": "8", "typescript": ">=4.9.0 || >=5.0.0" } }, "sha512-V4JS9W7pYO8E9AvEQInMHcKhAh3AhYlbNqny8FVgeLvxIF4QDq8dudDSQD4Xydj5IbCkGtX4CLqlkmuFhu075Q=="], - - "@untile/prettier-config": ["@untile/prettier-config@2.0.1", "", { "peerDependencies": { "prettier": "3" } }, "sha512-qww4NeRQdWuvfJjzYJCxGVCw2KWjoVjZNerjvmm+1tr/BMpqKZzVx/RBQE6F2g/MVDWibtbQGYwSNWGel09ELQ=="], - - "@use-gesture/core": ["@use-gesture/core@10.3.0", "", {}, "sha512-rh+6MND31zfHcy9VU3dOZCqGY511lvGcfyJenN4cWZe0u1BH6brBpBddLVXhF2r4BMqWbvxfsbL7D287thJU2A=="], - - "@use-gesture/react": ["@use-gesture/react@10.3.0", "", { "dependencies": { "@use-gesture/core": "10.3.0" }, "peerDependencies": { "react": ">= 16.8.0" } }, "sha512-3zc+Ve99z4usVP6l9knYVbVnZgfqhKah7sIG+PS2w+vpig2v2OLct05vs+ZXMzwxdNCMka8B+8WlOo0z6Pn6DA=="], - - "@vibrant/color": ["@vibrant/color@3.2.1-alpha.1", "", {}, "sha512-cvm+jAPwao2NerTr3d1JttYyLhp3eD/AQBeevxF7KT6HctToWZCwr2AeTr003/wKgbjzdOV1qySnbyOeu+R+Jw=="], - - "@vibrant/core": ["@vibrant/core@3.2.1-alpha.1", "", { "dependencies": { "@vibrant/color": "^3.2.1-alpha.1", "@vibrant/generator": "^3.2.1-alpha.1", "@vibrant/image": "^3.2.1-alpha.1", "@vibrant/quantizer": "^3.2.1-alpha.1", "@vibrant/types": "^3.2.1-alpha.1", "@vibrant/worker": "^3.2.1-alpha.1" } }, "sha512-X9Oa9WfPEQnZ6L+5dLRlh+IlsxJkYTw9b/g3stFKoNXbVRKCeXHmH48l7jIBBOg3VcXOGUdsYBqsTwPNkIveaA=="], - - "@vibrant/generator": ["@vibrant/generator@3.2.1-alpha.1", "", { "dependencies": { "@vibrant/color": "^3.2.1-alpha.1", "@vibrant/types": "^3.2.1-alpha.1" } }, "sha512-luS5YvMhwMqG01YTj1dJ+cmkuIw1VCByOR6zIaCOwQqI/mcOs88JBWcA1r2TywJTOPlVpjfnDvAlyaKBKh4dMA=="], - - "@vibrant/generator-default": ["@vibrant/generator-default@3.2.1-alpha.1", "", { "dependencies": { "@vibrant/color": "^3.2.1-alpha.1", "@vibrant/generator": "^3.2.1-alpha.1" } }, "sha512-BWnQhDaz92UhyHnpdAzKXHQecY+jvyMXtzjKYbveFxThm6+HVoLjwONlbck7oyOpFzV2OM7V11XuR85BxaHvjw=="], - - "@vibrant/image": ["@vibrant/image@3.2.1-alpha.1", "", { "dependencies": { "@vibrant/color": "^3.2.1-alpha.1", "@vibrant/types": "^3.2.1-alpha.1" } }, "sha512-4aF5k79QfyhZOqRovJpbnIjWfe3uuWhY8voqVdd4/qgu4o70/AwVlM+pYmCaJVzI45VWNWWHYA5QlYuKsXnBqQ=="], - - "@vibrant/image-browser": ["@vibrant/image-browser@3.2.1-alpha.1", "", { "dependencies": { "@vibrant/image": "^3.2.1-alpha.1" } }, "sha512-6xWvQfB20sE6YtCWylgEAHuee3iD8h3aFIDbCS2yj7jIelKcYTrrp5jg2d2BhOOB6pC5JzF+QfpCrm0DmAIlgQ=="], - - "@vibrant/image-node": ["@vibrant/image-node@3.2.1-alpha.1", "", { "dependencies": { "@jimp/custom": "^0.16.1", "@jimp/plugin-resize": "^0.16.1", "@jimp/types": "^0.16.1", "@vibrant/image": "^3.2.1-alpha.1" } }, "sha512-/Io/Rpo4EkO6AhaXdcxUXkbOFhSFtjm0LSAM4c0AyGA5EbC8PyZqjk8b11bQAEMCaYaweFQfTdGD7oVbXe21CQ=="], - - "@vibrant/quantizer": ["@vibrant/quantizer@3.2.1-alpha.1", "", { "dependencies": { "@vibrant/color": "^3.2.1-alpha.1", "@vibrant/image": "^3.2.1-alpha.1", "@vibrant/types": "^3.2.1-alpha.1" } }, "sha512-iHnPx/+n4iLtYLm1GClSfyg2fFbMatFG0ipCyp9M6tXNIPAg+pSvUJSGBnVnH7Nl/bR8Gkkj1h0pJ4RsKcdIrQ=="], - - "@vibrant/quantizer-mmcq": ["@vibrant/quantizer-mmcq@3.2.1-alpha.1", "", { "dependencies": { "@vibrant/color": "^3.2.1-alpha.1", "@vibrant/image": "^3.2.1-alpha.1", "@vibrant/quantizer": "^3.2.1-alpha.1" } }, "sha512-Wuk9PTZtxr8qsWTcgP6lcrrmrq36syVwxf+BUxdgQYntBcQ053SaN34lVGOJ0WPdK5vABoxbYljhceCgiILtZw=="], - - "@vibrant/types": ["@vibrant/types@3.2.1-alpha.1", "", {}, "sha512-ts9u7nsrENoYI5s0MmPOeY5kCLFKvQndKVDOPFCbTA0z493uhDp8mpiQhjFYTf3kPbS04z9zbHLE2luFC7x4KQ=="], - - "@vibrant/worker": ["@vibrant/worker@3.2.1-alpha.1", "", { "dependencies": { "@vibrant/types": "^3.2.1-alpha.1" } }, "sha512-mtSlBdHkFNr4FOnMtqtHJxy9z5AsUcZzGlpiHzvWOoaoN9lNTDPwxOBd0q4VTYWuGPrIm6Fuq5m7aRbLv7KqiQ=="], - - "acorn": ["acorn@8.10.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw=="], - - "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - - "agent-base": ["agent-base@7.1.0", "", { "dependencies": { "debug": "^4.3.4" } }, "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg=="], - - "ajv": ["ajv@6.12.6", "", { "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" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], "any-base": ["any-base@1.1.0", "", {}, "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="], "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "aria-query": ["aria-query@5.3.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A=="], - - "array-buffer-byte-length": ["array-buffer-byte-length@1.0.0", "", { "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" } }, "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A=="], - - "array-includes": ["array-includes@3.1.7", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" } }, "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ=="], - - "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], - - "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.3", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.2.1" } }, "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA=="], - - "array.prototype.flat": ["array.prototype.flat@1.3.2", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA=="], - - "array.prototype.flatmap": ["array.prototype.flatmap@1.3.2", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ=="], - - "array.prototype.tosorted": ["array.prototype.tosorted@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.2.1" } }, "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg=="], - - "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" } }, "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw=="], - - "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], - - "ast-types-flow": ["ast-types-flow@0.0.7", "", {}, "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="], - - "asynciterator.prototype": ["asynciterator.prototype@1.0.0", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg=="], - - "available-typed-arrays": ["available-typed-arrays@1.0.5", "", {}, "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="], - - "axe-core": ["axe-core@4.8.2", "", {}, "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g=="], - - "axobject-query": ["axobject-query@3.2.1", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg=="], - - "b4a": ["b4a@1.6.4", "", {}, "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw=="], - - "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "bare-events": ["bare-events@2.5.0", "", {}, "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A=="], - - "bare-fs": ["bare-fs@2.3.5", "", { "dependencies": { "bare-events": "^2.0.0", "bare-path": "^2.0.0", "bare-stream": "^2.0.0" } }, "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw=="], - - "bare-os": ["bare-os@2.4.4", "", {}, "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ=="], - - "bare-path": ["bare-path@2.1.3", "", { "dependencies": { "bare-os": "^2.1.0" } }, "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA=="], - - "bare-stream": ["bare-stream@2.3.0", "", { "dependencies": { "b4a": "^1.6.6", "streamx": "^2.20.0" } }, "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA=="], + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], - "basic-ftp": ["basic-ftp@5.0.3", "", {}, "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.36", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lVq/Df7LXlO79MVaaUHztSwWiG9oXoWHlgvNS51v8Dpd4+G4/VIy6qYePTw31nAVls33nUtnfezYeLkYAak9dg=="], "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], "bmp-js": ["bmp-js@0.1.0", "", {}, "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="], - "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], - "braces": ["braces@3.0.2", "", { "dependencies": { "fill-range": "^7.0.1" } }, "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="], + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - "browserslist": ["browserslist@4.22.1", "", { "dependencies": { "caniuse-lite": "^1.0.30001541", "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" } }, "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ=="], - - "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - - "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], - - "buffer-equal": ["buffer-equal@0.0.1", "", {}, "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA=="], - - "bun-types": ["bun-types@1.0.3", "", {}, "sha512-XlyKVdYCHa7K5PHYGcwOVOrGE/bMnLS51y7zFA3ZAAXyiQ6dTaNXNCWTTufgII/6ruN770uhAXphQmzvU/r2fQ=="], - - "busboy": ["busboy@1.6.0", "", { "dependencies": { "streamsearch": "^1.1.0" } }, "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA=="], - - "call-bind": ["call-bind@1.0.2", "", { "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" } }, "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA=="], + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "camera-controls": ["camera-controls@2.7.2", "", { "peerDependencies": { "three": ">=0.126.1" } }, "sha512-6+gaZFK3LYbWaXC94EN0BYLlvpo9xfUqwp59vsU3nV7WXIU05q4wyP5TOgyG1tqTHReuBofb20vKfZNBNjMtzw=="], + "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001539", "", {}, "sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA=="], + "camera-controls": ["camera-controls@3.1.2", "", { "peerDependencies": { "three": ">=0.126.1" } }, "sha512-xkxfpG2ECZ6Ww5/9+kf4mfg1VEYAoe9aDSY+IwF0UEs7qEzwy0aVRfs2grImIECs/PoBtWFrh7RXsQkwG922JA=="], - "cannon-es": ["cannon-es@0.20.0", "", {}, "sha512-eZhWTZIkFOnMAJOgfXJa9+b3kVlvG+FX4mdkpePev/w/rP5V8NRquGyEozcjPfEoXUlb+p7d9SUcmDSn14prOA=="], - - "cannon-es-debugger": ["cannon-es-debugger@1.0.0", "", { "peerDependencies": { "cannon-es": "0.x", "three": "0.x", "typescript": ">=3.8" }, "optionalPeers": ["typescript"] }, "sha512-sE9lDOBAYFKlh+0w+cvWKwUhJef8HYnUSVPWPL0jD15MAuVRQKno4QYZSGxgOoJkMR3mQqxL4bxys2b3RSWH8g=="], - - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - - "chromium-bidi": ["chromium-bidi@0.8.0", "", { "dependencies": { "mitt": "3.0.1", "urlpattern-polyfill": "10.0.0", "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" } }, "sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug=="], + "caniuse-lite": ["caniuse-lite@1.0.30001799", "", {}, "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw=="], "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "copy-anything": ["copy-anything@3.0.5", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w=="], - - "cosmiconfig": ["cosmiconfig@9.0.0", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="], + "cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], "cross-env": ["cross-env@7.0.3", "", { "dependencies": { "cross-spawn": "^7.0.1" }, "bin": { "cross-env": "src/bin/cross-env.js", "cross-env-shell": "src/bin/cross-env-shell.js" } }, "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw=="], - "cross-spawn": ["cross-spawn@7.0.3", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - "csstype": ["csstype@3.1.2", "", {}, "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="], + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "data-uri-to-buffer": ["data-uri-to-buffer@5.0.1", "", {}, "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg=="], + "detect-gpu": ["detect-gpu@5.0.70", "", { "dependencies": { "webgl-constants": "^1.1.1" } }, "sha512-bqerEP1Ese6nt3rFkwPnGbsUF9a4q+gMmpTVVOEzoCyeCc+y7/RvJnQZJx1JwhgQI5Ntg0Kgat8Uu7XpBqnz1w=="], - "debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - "debug": ["debug@4.3.4", "", { "dependencies": { "ms": "2.1.2" } }, "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="], + "dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="], - "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + "draco3d": ["draco3d@1.5.7", "", {}, "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ=="], - "define-data-property": ["define-data-property@1.1.0", "", { "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.0" } }, "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g=="], + "electron-to-chromium": ["electron-to-chromium@1.5.371", "", {}, "sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w=="], - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + "enhanced-resolve": ["enhanced-resolve@5.23.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA=="], - "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], - "detect-gpu": ["detect-gpu@5.0.37", "", { "dependencies": { "webgl-constants": "^1.1.1" } }, "sha512-EraWs84faI4iskB4qvE39bevMIazEvd1RpoyGLOBesRLbiz6eMeJqqRPHjEFClfRByYZzi9IzU35rBXIO76oDw=="], + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - "devtools-protocol": ["devtools-protocol@0.0.1342118", "", {}, "sha512-75fMas7PkYNDTmDyb6PRJCH7ILmHLp+BhrZGeMsa4bCh40DTxgCz2NRy5UDzII4C5KuD0oBMZ9vXKhEl6UD/3w=="], + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], - "doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], - - "dom-helpers": ["dom-helpers@5.2.1", "", { "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA=="], - - "dom-walk": ["dom-walk@0.1.2", "", {}, "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="], - - "draco3d": ["draco3d@1.5.6", "", {}, "sha512-+3NaRjWktb5r61ZFoDejlykPEFKT5N/LkbXsaddlw6xNSXBanUYpFc2AXXpbJDilPHazcSreU/DpQIaxfX0NfQ=="], - - "electron-to-chromium": ["electron-to-chromium@1.4.541", "", {}, "sha512-do9EfdtgtowzRNdnUhFtc0wMjazMHiXBNP/848cNa22dmmRSVE2JuBKfcjt0tg2+FN90OIE4E6MbcQ2bzDRawg=="], - - "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - - "end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="], - - "enhanced-resolve": ["enhanced-resolve@5.15.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg=="], - - "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - - "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], - - "es-abstract": ["es-abstract@1.22.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.11" } }, "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA=="], - - "es-iterator-helpers": ["es-iterator-helpers@1.0.15", "", { "dependencies": { "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.1", "es-abstract": "^1.22.1", "es-set-tostringtag": "^2.0.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "iterator.prototype": "^1.1.2", "safe-array-concat": "^1.0.1" } }, "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g=="], - - "es-set-tostringtag": ["es-set-tostringtag@2.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", "has-tostringtag": "^1.0.0" } }, "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg=="], - - "es-shim-unscopables": ["es-shim-unscopables@1.0.0", "", { "dependencies": { "has": "^1.0.3" } }, "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w=="], - - "es-to-primitive": ["es-to-primitive@1.2.1", "", { "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="], - - "escalade": ["escalade@3.1.1", "", {}, "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="], - - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - - "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], - - "eslint": ["eslint@8.49.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", "@eslint/js": "8.49.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ=="], - - "eslint-config-next": ["eslint-config-next@13.4.19", "", { "dependencies": { "@next/eslint-plugin-next": "13.4.19", "@rushstack/eslint-patch": "^1.1.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.31.7", "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g=="], - - "eslint-config-prettier": ["eslint-config-prettier@8.10.0", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg=="], - - "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], - - "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.6.1", "", { "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", "eslint-module-utils": "^2.7.4", "fast-glob": "^3.3.1", "get-tsconfig": "^4.5.0", "is-core-module": "^2.11.0", "is-glob": "^4.0.3" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg=="], - - "eslint-module-utils": ["eslint-module-utils@2.8.0", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw=="], - - "eslint-plugin-import": ["eslint-plugin-import@2.28.1", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.findlastindex": "^1.2.2", "array.prototype.flat": "^1.3.1", "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", "eslint-module-utils": "^2.8.0", "has": "^1.0.3", "is-core-module": "^2.13.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.6", "object.groupby": "^1.0.0", "object.values": "^1.1.6", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A=="], - - "eslint-plugin-jest": ["eslint-plugin-jest@27.4.2", "", { "dependencies": { "@typescript-eslint/utils": "^5.10.0" }, "peerDependencies": { "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", "eslint": "^7.0.0 || ^8.0.0", "jest": "*" }, "optionalPeers": ["jest"] }, "sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg=="], - - "eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.7.1", "", { "dependencies": { "@babel/runtime": "^7.20.7", "aria-query": "^5.1.3", "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "ast-types-flow": "^0.0.7", "axe-core": "^4.6.2", "axobject-query": "^3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", "jsx-ast-utils": "^3.3.3", "language-tags": "=1.0.5", "minimatch": "^3.1.2", "object.entries": "^1.1.6", "object.fromentries": "^2.0.6", "semver": "^6.3.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA=="], - - "eslint-plugin-mocha": ["eslint-plugin-mocha@10.2.0", "", { "dependencies": { "eslint-utils": "^3.0.0", "rambda": "^7.4.0" }, "peerDependencies": { "eslint": ">=7.0.0" } }, "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ=="], - - "eslint-plugin-new-with-error": ["eslint-plugin-new-with-error@4.0.0", "", { "peerDependencies": { "eslint": ">=2.13.1" } }, "sha512-bblMghf2v3h9uheOyRQCFXhmDqzdrO0uZLXmieTSFoBqKlPHfIM5fXDOp/r+gzAzQmHmZ7m2NB5svdbL6tX5lA=="], - - "eslint-plugin-react": ["eslint-plugin-react@7.33.2", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.6", "object.fromentries": "^2.0.6", "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw=="], - - "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@4.6.0", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g=="], - - "eslint-plugin-sort-class-members": ["eslint-plugin-sort-class-members@1.19.0", "", { "peerDependencies": { "eslint": ">=0.8.0" } }, "sha512-YayvASA1bavdPeRU9FMPnale2+Oi3aMcHGVC5EUm9b671oxm7ahvR+q8BfsU2aV+KAFezNfu47VPgdZK6gwYPw=="], - - "eslint-plugin-sort-destructure-keys": ["eslint-plugin-sort-destructure-keys@1.5.0", "", { "dependencies": { "natural-compare-lite": "^1.4.0" }, "peerDependencies": { "eslint": "3 - 8" } }, "sha512-xGLyqHtbFXZNXQSvAiQ4ISBYokrbUywEhmaA50fKtSKgceCv5y3zjoNuZwcnajdM6q29Nxj+oXC9KcqfMsAPrg=="], - - "eslint-plugin-sort-imports-es6": ["eslint-plugin-sort-imports-es6@0.0.3", "", { "peerDependencies": { "eslint": ">=2.0.0" } }, "sha512-ZhMDUnB5O92VK5WMOlvgRm7dFLkcJue67GzeQH1R3D7T/dv37Rva7+TJ5KOl8m6G9Mzr8ld9VTTQ6aHS1nHBUg=="], - - "eslint-plugin-sort-imports-es6-autofix": ["eslint-plugin-sort-imports-es6-autofix@0.6.0", "", { "peerDependencies": { "eslint": ">=7.7.0" } }, "sha512-2NVaBGF9NN+727Fyq+jJYihdIeegjXeUUrZED9Q8FVB8MsV3YQEyXG96GVnXqWt0pmn7xfCZOZf3uKnIhBrfeQ=="], - - "eslint-plugin-sql-template": ["eslint-plugin-sql-template@2.0.0", "", { "dependencies": { "sql-parse": "^0.1.5" } }, "sha512-3Jt0dKFEUuxIdEvxh0p2CTZOoc6/6aVZ1HeFN46CepjC2fLY1MsyEJeEmTLqfL1rMPqxxQYXbLKZxqSXAuYeJw=="], - - "eslint-plugin-switch-case": ["eslint-plugin-switch-case@1.1.2", "", { "dependencies": { "lodash.last": "^3.0.0", "lodash.zipobject": "^4.0.0" } }, "sha512-mhDdJ6WX5LKv0PccziefBGPhIryJamgd3vTNqhEZUBeTGUeGdsgttwU/68xOViyScwr8RqCwTGC2Pd1cPYGNRg=="], - - "eslint-plugin-typescript-sort-keys": ["eslint-plugin-typescript-sort-keys@2.3.0", "", { "dependencies": { "@typescript-eslint/experimental-utils": "^5.0.0", "json-schema": "^0.4.0", "natural-compare-lite": "^1.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^1 || ^2 || ^3 || ^4 || ^5", "eslint": "^5 || ^6 || ^7 || ^8", "typescript": "^3 || ^4 || ^5" } }, "sha512-3LAcYulo5gNYiPWee+TksITfvWeBuBjGgcSLTacPESFVKEoy8laOQuZvJlSCwTBHT2SCGIxr3bJ56zuux+3MCQ=="], - - "eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], - - "eslint-utils": ["eslint-utils@3.0.0", "", { "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "peerDependencies": { "eslint": ">=5" } }, "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="], - - "eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - - "espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], - - "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - - "esquery": ["esquery@1.5.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg=="], - - "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], - - "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], - - "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], "exif-parser": ["exif-parser@0.1.12", "", {}, "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="], - "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], + "fast-string-truncated-width": ["fast-string-truncated-width@3.0.3", "", {}, "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g=="], - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + "fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="], - "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], + "fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="], - "fast-glob": ["fast-glob@3.3.1", "", { "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" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], - - "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - - "fastq": ["fastq@1.15.0", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw=="], - - "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], - - "fflate": ["fflate@0.6.10", "", {}, "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg=="], - - "file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], + "fflate": ["fflate@0.8.3", "", {}, "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA=="], "file-type": ["file-type@16.5.4", "", { "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", "token-types": "^4.1.1" } }, "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw=="], - "fill-range": ["fill-range@7.0.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="], - - "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], - - "flat-cache": ["flat-cache@3.1.0", "", { "dependencies": { "flatted": "^3.2.7", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew=="], - - "flatted": ["flatted@3.2.9", "", {}, "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ=="], - - "for-each": ["for-each@0.3.3", "", { "dependencies": { "is-callable": "^1.1.3" } }, "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw=="], - - "fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], - - "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], - - "function-bind": ["function-bind@1.1.1", "", {}, "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="], - - "function.prototype.name": ["function.prototype.name@1.1.6", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "functions-have-names": "^1.2.3" } }, "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg=="], - - "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - - "get-intrinsic": ["get-intrinsic@1.2.1", "", { "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-proto": "^1.0.1", "has-symbols": "^1.0.3" } }, "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw=="], - - "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], - - "get-symbol-description": ["get-symbol-description@1.0.0", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw=="], - - "get-tsconfig": ["get-tsconfig@4.7.2", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A=="], - - "get-uri": ["get-uri@6.0.1", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^5.0.1", "debug": "^4.3.4", "fs-extra": "^8.1.0" } }, "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q=="], - - "gifwrap": ["gifwrap@0.9.4", "", { "dependencies": { "image-q": "^4.0.0", "omggif": "^1.0.10" } }, "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ=="], - - "glob": ["glob@7.1.7", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="], - - "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - - "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], - - "global": ["global@4.4.0", "", { "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" } }, "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w=="], - - "globals": ["globals@13.22.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw=="], - - "globalthis": ["globalthis@1.0.3", "", { "dependencies": { "define-properties": "^1.1.3" } }, "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="], - - "globby": ["globby@11.1.0", "", { "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" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], + "gifwrap": ["gifwrap@0.10.1", "", { "dependencies": { "image-q": "^4.0.0", "omggif": "^1.0.10" } }, "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw=="], "glsl-noise": ["glsl-noise@0.0.0", "", {}, "sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w=="], - "gopd": ["gopd@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.1.3" } }, "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], - - "has": ["has@1.0.3", "", { "dependencies": { "function-bind": "^1.1.1" } }, "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="], - - "has-bigints": ["has-bigints@1.0.2", "", {}, "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="], - - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - - "has-property-descriptors": ["has-property-descriptors@1.0.0", "", { "dependencies": { "get-intrinsic": "^1.1.1" } }, "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ=="], - - "has-proto": ["has-proto@1.0.1", "", {}, "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="], - - "has-symbols": ["has-symbols@1.0.3", "", {}, "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="], - - "has-tostringtag": ["has-tostringtag@1.0.0", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ=="], - - "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - - "https-proxy-agent": ["https-proxy-agent@7.0.5", "", { "dependencies": { "agent-base": "^7.0.2", "debug": "4" } }, "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw=="], + "hls.js": ["hls.js@1.6.16", "", {}, "sha512-VSIRpLfRwlAAdGL4wiTucx2ScRipo0ed1FBatWkyt832jC4CReKstga6yIhYVwGu9LOBjuX9wzmRMeQdBJtzEA=="], "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - "ignore": ["ignore@5.2.4", "", {}, "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ=="], - "image-q": ["image-q@4.0.0", "", { "dependencies": { "@types/node": "16.9.1" } }, "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw=="], - "import-fresh": ["import-fresh@3.3.0", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="], + "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - - "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], - - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - - "internal-slot": ["internal-slot@1.0.5", "", { "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } }, "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ=="], - - "ip": ["ip@1.1.8", "", {}, "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="], - - "is-array-buffer": ["is-array-buffer@3.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" } }, "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w=="], + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], - "is-async-function": ["is-async-function@2.0.0", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA=="], - - "is-bigint": ["is-bigint@1.0.4", "", { "dependencies": { "has-bigints": "^1.0.1" } }, "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="], - - "is-boolean-object": ["is-boolean-object@1.1.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="], - - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - - "is-core-module": ["is-core-module@2.13.0", "", { "dependencies": { "has": "^1.0.3" } }, "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ=="], - - "is-date-object": ["is-date-object@1.0.5", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="], - - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], - - "is-finalizationregistry": ["is-finalizationregistry@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw=="], - - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - - "is-function": ["is-function@1.0.2", "", {}, "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="], - - "is-generator-function": ["is-generator-function@1.0.10", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A=="], - - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - - "is-map": ["is-map@2.0.2", "", {}, "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg=="], - - "is-negative-zero": ["is-negative-zero@2.0.2", "", {}, "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="], - - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - - "is-number-object": ["is-number-object@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="], - - "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], - - "is-regex": ["is-regex@1.1.4", "", { "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg=="], - - "is-set": ["is-set@2.0.2", "", {}, "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g=="], - - "is-shared-array-buffer": ["is-shared-array-buffer@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA=="], - - "is-string": ["is-string@1.0.7", "", { "dependencies": { "has-tostringtag": "^1.0.0" } }, "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="], - - "is-symbol": ["is-symbol@1.0.4", "", { "dependencies": { "has-symbols": "^1.0.2" } }, "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="], - - "is-typed-array": ["is-typed-array@1.1.12", "", { "dependencies": { "which-typed-array": "^1.1.11" } }, "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg=="], - - "is-weakmap": ["is-weakmap@2.0.1", "", {}, "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA=="], - - "is-weakref": ["is-weakref@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2" } }, "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="], - - "is-weakset": ["is-weakset@2.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg=="], - - "is-what": ["is-what@4.1.15", "", {}, "sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA=="], - - "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "is-promise": ["is-promise@2.2.2", "", {}, "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="], "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - "iterator.prototype": ["iterator.prototype@1.1.2", "", { "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" } }, "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w=="], + "isomorphic-fetch": ["isomorphic-fetch@3.0.0", "", { "dependencies": { "node-fetch": "^2.6.1", "whatwg-fetch": "^3.4.1" } }, "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA=="], - "its-fine": ["its-fine@1.1.1", "", { "dependencies": { "@types/react-reconciler": "^0.28.0" }, "peerDependencies": { "react": ">=18.0" } }, "sha512-v1Ia1xl20KbuSGlwoaGsW0oxsw8Be+TrXweidxD9oT/1lAh6O3K3/GIM95Tt6WCiv6W+h2M7RB1TwdoAjQyyKw=="], + "its-fine": ["its-fine@2.0.0", "", { "dependencies": { "@types/react-reconciler": "^0.28.9" }, "peerDependencies": { "react": "^19.0.0" } }, "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng=="], + + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], "jpeg-js": ["jpeg-js@0.4.4", "", {}, "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="], "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], + "js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], - "jsesc": ["jsesc@2.5.2", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="], - - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], - "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + "lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="], - "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], - "json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], - "jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], - "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], - "keyv": ["keyv@4.5.3", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], - "ktx-parse": ["ktx-parse@0.4.5", "", {}, "sha512-MK3FOody4TXbFf8Yqv7EBbySw7aPvEcPX++Ipt6Sox+/YMFvR5xaTyhfNSk1AEmMy+RYIw81ctN4IMxCB8OAlg=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], - "language-subtag-registry": ["language-subtag-registry@0.3.22", "", {}, "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], - "language-tags": ["language-tags@1.0.5", "", { "dependencies": { "language-subtag-registry": "~0.3.2" } }, "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], - "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], - "lil-gui": ["lil-gui@0.17.0", "", {}, "sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "load-bmfont": ["load-bmfont@1.4.1", "", { "dependencies": { "buffer-equal": "0.0.1", "mime": "^1.3.4", "parse-bmfont-ascii": "^1.0.3", "parse-bmfont-binary": "^1.0.5", "parse-bmfont-xml": "^1.1.4", "phin": "^2.9.1", "xhr": "^2.0.1", "xtend": "^4.0.0" } }, "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA=="], + "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "lru-cache": ["lru-cache@11.5.1", "", {}, "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A=="], - "lodash.clamp": ["lodash.clamp@4.0.3", "", {}, "sha512-HvzRFWjtcguTW7yd8NJBshuNaCa8aqNFtnswdT7f/cMd/1YKy5Zzoq4W/Oxvnx9l7aeY258uSdDfM793+eLsVg=="], + "maath": ["maath@0.10.8", "", { "peerDependencies": { "@types/three": ">=0.134.0", "three": ">=0.134.0" } }, "sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g=="], - "lodash.last": ["lodash.last@3.0.0", "", {}, "sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + "meshline": ["meshline@3.3.1", "", { "peerDependencies": { "three": ">=0.137" } }, "sha512-/TQj+JdZkeSUOl5Mk2J7eLcYTLiQm2IDzmlSvYm7ov15anEcDJ92GHqqazxTSreeNgfnYu24kiEvvv0WlbCdFQ=="], - "lodash.omit": ["lodash.omit@4.5.0", "", {}, "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg=="], - - "lodash.pick": ["lodash.pick@4.4.0", "", {}, "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q=="], - - "lodash.zipobject": ["lodash.zipobject@4.1.3", "", {}, "sha512-A9SzX4hMKWS25MyalwcOnNoplyHbkNVsjidhTp8ru0Sj23wY9GWBKS8gAIGDSAqeWjIjvE4KBEl24XXAs+v4wQ=="], - - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - - "lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "maath": ["maath@0.9.0", "", { "peerDependencies": { "@types/three": ">=0.144.0", "three": ">=0.144.0" } }, "sha512-aAR8hoUqPxlsU8VOxkS9y37jhUzdUxM017NpCuxFU1Gk+nMaZASZxymZrV8LRSHzRk/watlbfyNKu6XPUhCFrQ=="], - - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - - "meshline": ["meshline@3.1.6", "", { "peerDependencies": { "three": ">=0.137" } }, "sha512-8JZJOdaL5oz3PI/upG8JvP/5FfzYUOhrkJ8np/WKvXzl0/PZ2V9pqTvCIjSKv+w9ccg2xb+yyBhXAwt6ier3ug=="], - - "micromatch": ["micromatch@4.0.5", "", { "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="], - - "mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], - - "min-document": ["min-document@2.19.0", "", { "dependencies": { "dom-walk": "^0.1.0" } }, "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ=="], - - "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - - "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "meshoptimizer": ["meshoptimizer@1.1.1", "", {}, "sha512-oRFNWJRDA/WTrVj7NWvqa5HqE1t9MYDj2VaWirQCzCCrAd2GHrqR/sQezCxiWATPNlKTcRaPRHPJwIRoPBAp5g=="], "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], - "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "mmd-parser": ["mmd-parser@1.0.4", "", {}, "sha512-Qi0VCU46t2IwfGv5KF0+D/t9cizcDug7qnNoy9Ggk7aucp0tssV8IwTMkBlDbm+VqAf3cdQHTCARKSsuS2MYFg=="], + "nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], - "ms": ["ms@2.1.2", "", {}, "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="], + "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], - "nanoid": ["nanoid@3.3.6", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="], + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + "node-releases": ["node-releases@2.0.47", "", {}, "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og=="], - "natural-compare-lite": ["natural-compare-lite@1.4.0", "", {}, "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g=="], + "node-vibrant": ["node-vibrant@4.0.4", "", { "dependencies": { "@types/node": "^18.15.3", "@vibrant/core": "^4.0.4", "@vibrant/generator-default": "^4.0.4", "@vibrant/image-browser": "^4.0.4", "@vibrant/image-node": "^4.0.4", "@vibrant/quantizer-mmcq": "^4.0.4" } }, "sha512-hA/pUXBE9TJ41G9FlTkzeqD5JdxgvvPGYZb/HNpdkaxxXUEnP36imSolZ644JuPun+lTd+FpWWtBpTYdp2noQA=="], - "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], - - "next": ["next@13.5.3", "", { "dependencies": { "@next/env": "13.5.3", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", "postcss": "8.4.14", "styled-jsx": "5.1.1", "watchpack": "2.4.0", "zod": "3.21.4" }, "optionalDependencies": { "@next/swc-darwin-arm64": "13.5.3", "@next/swc-darwin-x64": "13.5.3", "@next/swc-linux-arm64-gnu": "13.5.3", "@next/swc-linux-arm64-musl": "13.5.3", "@next/swc-linux-x64-gnu": "13.5.3", "@next/swc-linux-x64-musl": "13.5.3", "@next/swc-win32-arm64-msvc": "13.5.3", "@next/swc-win32-ia32-msvc": "13.5.3", "@next/swc-win32-x64-msvc": "13.5.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg=="], - - "node-releases": ["node-releases@2.0.13", "", {}, "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="], - - "node-vibrant": ["node-vibrant@3.2.1-alpha.1", "", { "dependencies": { "@types/node": "^10.12.18", "@vibrant/core": "^3.2.1-alpha.1", "@vibrant/generator-default": "^3.2.1-alpha.1", "@vibrant/image-browser": "^3.2.1-alpha.1", "@vibrant/image-node": "^3.2.1-alpha.1", "@vibrant/quantizer-mmcq": "^3.2.1-alpha.1", "url": "^0.11.0" } }, "sha512-EQergCp7fvbvUCE0VMCBnvaAV0lGWSP8SXLmuWQIBzQK5M5pIwcd9fIOXuzFkJx/8hUiiiLvAzzGDS/bIy2ikA=="], - - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], - - "object-inspect": ["object-inspect@1.12.3", "", {}, "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="], - - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - - "object.assign": ["object.assign@4.1.4", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ=="], - - "object.entries": ["object.entries@1.1.7", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA=="], - - "object.fromentries": ["object.fromentries@2.0.7", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA=="], - - "object.groupby": ["object.groupby@1.0.1", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1" } }, "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ=="], - - "object.hasown": ["object.hasown@1.1.3", "", { "dependencies": { "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA=="], - - "object.values": ["object.values@1.1.7", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng=="], + "nuqs": ["nuqs@2.8.9", "", { "dependencies": { "@standard-schema/spec": "1.0.0" }, "peerDependencies": { "@remix-run/react": ">=2", "@tanstack/react-router": "^1", "next": ">=14.2.0", "react": ">=18.2.0 || ^19.0.0-0", "react-router": "^5 || ^6 || ^7", "react-router-dom": "^5 || ^6 || ^7" }, "optionalPeers": ["@remix-run/react", "@tanstack/react-router", "next", "react-router", "react-router-dom"] }, "sha512-8ou6AEwsxMWSYo2qkfZtYFVzngwbKmg4c00HVxC1fF6CEJv3Fwm6eoZmfVPALB+vw8Udo7KL5uy96PFcYe1BIQ=="], "omggif": ["omggif@1.0.10", "", {}, "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="], - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - - "optionator": ["optionator@0.9.3", "", { "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" } }, "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg=="], - - "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - - "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], - - "pac-proxy-agent": ["pac-proxy-agent@7.0.1", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "pac-resolver": "^7.0.0", "socks-proxy-agent": "^8.0.2" } }, "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A=="], - - "pac-resolver": ["pac-resolver@7.0.0", "", { "dependencies": { "degenerator": "^5.0.0", "ip": "^1.1.8", "netmask": "^2.0.2" } }, "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg=="], - "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], - "parse-bmfont-ascii": ["parse-bmfont-ascii@1.0.6", "", {}, "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA=="], - - "parse-bmfont-binary": ["parse-bmfont-binary@1.0.6", "", {}, "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="], - - "parse-bmfont-xml": ["parse-bmfont-xml@1.1.4", "", { "dependencies": { "xml-parse-from-string": "^1.0.0", "xml2js": "^0.4.5" } }, "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ=="], - - "parse-headers": ["parse-headers@2.0.5", "", {}, "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="], - "parse-json": ["parse-json@5.2.0", "", { "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" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], - "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - - "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], "peek-readable": ["peek-readable@4.1.0", "", {}, "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="], - "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "phin": ["phin@2.9.3", "", {}, "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA=="], - - "picocolors": ["picocolors@1.0.0", "", {}, "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="], - - "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], "pixelmatch": ["pixelmatch@4.0.2", "", { "dependencies": { "pngjs": "^3.0.0" }, "bin": { "pixelmatch": "bin/pixelmatch" } }, "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA=="], - "pngjs": ["pngjs@3.4.0", "", {}, "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="], + "pngjs": ["pngjs@6.0.0", "", {}, "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="], - "postcss": ["postcss@8.4.14", "", { "dependencies": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig=="], + "postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="], "potpack": ["potpack@1.0.2", "", {}, "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ=="], - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - - "prettier": ["prettier@3.0.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg=="], - - "primeicons": ["primeicons@6.0.1", "", {}, "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA=="], - - "primereact": ["primereact@9.6.2", "", { "dependencies": { "@types/react-transition-group": "^4.4.1", "react-transition-group": "^4.4.1" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" } }, "sha512-wc7bvhR+9TiWkHADp02R10lnLbtmXiJ0Pdix8jgVh9HdHMaT2tbA6zPuhaRvA1PVT49hvrDXRCL9QB6YtaCi3w=="], - - "prisma": ["prisma@5.4.1", "", { "dependencies": { "@prisma/engines": "5.4.1" }, "bin": { "prisma": "build/index.js" } }, "sha512-op9PmU8Bcw5dNAas82wBYTG0yHnpq9/O3bhxbDBrNzwZTwBqsVCxxYRLf6wHNh9HVaDGhgjjHlu1+BcW8qdnBg=="], - "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], - "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], + "promise-worker-transferable": ["promise-worker-transferable@1.0.4", "", { "dependencies": { "is-promise": "^2.1.0", "lie": "^3.0.2" } }, "sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw=="], - "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + "react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="], - "proxy-agent": ["proxy-agent@6.4.0", "", { "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.3", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.0.1", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.2" } }, "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ=="], + "react-aria": ["react-aria@3.49.0", "", { "dependencies": { "@internationalized/date": "^3.12.2", "@internationalized/number": "^3.6.7", "@internationalized/string": "^3.2.9", "@react-types/shared": "^3.35.0", "@swc/helpers": "^0.5.0", "aria-hidden": "^1.2.3", "clsx": "^2.0.0", "react-stately": "3.47.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-4+oK9FwJQWYhyA5zLfj/feOGY0zZbkE1muoF4gyxMroHVypjcYaRSTlJwvxph2zIlxt757KX6xIK2wJ5Aw1Kog=="], - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "react-aria-components": ["react-aria-components@1.18.0", "", { "dependencies": { "@internationalized/date": "^3.12.2", "@react-types/shared": "^3.35.0", "@swc/helpers": "^0.5.0", "client-only": "^0.0.1", "react-aria": "3.49.0", "react-stately": "3.47.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-FhRQjuDkH4WhgFv+O2sYTzK3JzdZTGpBeaqfRlfTo+DcSZzD8elJEkytHe7SDpcexVKeire8NVd7OruZHfCVoA=="], - "pump": ["pump@3.0.0", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww=="], + "react-dom": ["react-dom@19.2.7", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.7" } }, "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ=="], - "punycode": ["punycode@1.4.1", "", {}, "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="], + "react-stately": ["react-stately@3.47.0", "", { "dependencies": { "@internationalized/date": "^3.12.2", "@internationalized/number": "^3.6.7", "@internationalized/string": "^3.2.9", "@react-types/shared": "^3.35.0", "@swc/helpers": "^0.5.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-H3ar+SOWP920EbVg7qWfP3fZjZiwhlEJAEJQqjt+w8oKijCwFgr0+R4941PIHscOXRNRvEOjvWilitImC0DdBg=="], - "puppeteer": ["puppeteer@23.5.3", "", { "dependencies": { "@puppeteer/browsers": "2.4.0", "chromium-bidi": "0.8.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1342118", "puppeteer-core": "23.5.3", "typed-query-selector": "^2.12.0" }, "bin": { "puppeteer": "lib/cjs/puppeteer/node/cli.js" } }, "sha512-FghmfBsr/UUpe48OiCg1gV3W4vVfQJKjQehbF07SjnQvEpWcvPTah1nykfGWdOQQ1ydJPIXcajzWN7fliCU3zw=="], + "react-use-measure": ["react-use-measure@2.1.7", "", { "peerDependencies": { "react": ">=16.13", "react-dom": ">=16.13" }, "optionalPeers": ["react-dom"] }, "sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg=="], - "puppeteer-core": ["puppeteer-core@23.5.3", "", { "dependencies": { "@puppeteer/browsers": "2.4.0", "chromium-bidi": "0.8.0", "debug": "^4.3.7", "devtools-protocol": "0.0.1342118", "typed-query-selector": "^2.12.0", "ws": "^8.18.0" } }, "sha512-V58MZD/B3CwkYsqSEQlHKbavMJptF04fzhMdUpiCRCmUVhwZNwSGEPhaiZ1f8I3ABQUirg3VNhXVB6Z1ubHXtQ=="], + "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], - "qs": ["qs@6.11.2", "", { "dependencies": { "side-channel": "^1.0.4" } }, "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA=="], + "readable-web-to-node-stream": ["readable-web-to-node-stream@3.0.4", "", { "dependencies": { "readable-stream": "^4.7.0" } }, "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "regenerator-runtime": ["regenerator-runtime@0.13.11", "", {}, "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="], - "queue-tick": ["queue-tick@1.0.1", "", {}, "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="], - - "rambda": ["rambda@7.5.0", "", {}, "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA=="], - - "react": ["react@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ=="], - - "react-composer": ["react-composer@5.0.3", "", { "dependencies": { "prop-types": "^15.6.0" }, "peerDependencies": { "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, "sha512-1uWd07EME6XZvMfapwZmc7NgCZqDemcvicRi3wMJzXsQLvZ3L7fTHVyPy1bZdnWXM4iPjYuNE+uJ41MLKeTtnA=="], - - "react-div-100vh": ["react-div-100vh@0.7.0", "", { "peerDependencies": { "react": ">=16.8.0" } }, "sha512-I3d77tQyaSlOx/6vurDDLk7upb5GA2ldEtVXkk7Kn5cy+tLlS0KlqDK14xUxlxh7jz4StjgKcwFyrpymsPpomA=="], - - "react-dom": ["react-dom@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" }, "peerDependencies": { "react": "^18.2.0" } }, "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g=="], - - "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - - "react-merge-refs": ["react-merge-refs@1.1.0", "", {}, "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ=="], - - "react-reconciler": ["react-reconciler@0.27.0", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.21.0" }, "peerDependencies": { "react": "^18.0.0" } }, "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA=="], - - "react-transition-group": ["react-transition-group@4.4.5", "", { "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g=="], - - "react-use-measure": ["react-use-measure@2.1.1", "", { "dependencies": { "debounce": "^1.2.1" }, "peerDependencies": { "react": ">=16.13", "react-dom": ">=16.13" } }, "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig=="], - - "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "readable-web-to-node-stream": ["readable-web-to-node-stream@3.0.2", "", { "dependencies": { "readable-stream": "^3.6.0" } }, "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw=="], - - "reflect.getprototypeof": ["reflect.getprototypeof@1.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" } }, "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw=="], - - "regenerator-runtime": ["regenerator-runtime@0.14.0", "", {}, "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="], - - "regexp.prototype.flags": ["regexp.prototype.flags@1.5.1", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "set-function-name": "^2.0.0" } }, "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg=="], - - "remove-accents": ["remove-accents@0.4.2", "", {}, "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA=="], - - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + "regexparam": ["regexparam@3.0.0", "", {}, "sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q=="], "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "resolve": ["resolve@1.22.6", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw=="], - "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - - "reusify": ["reusify@1.0.4", "", {}, "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="], - - "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], - - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - - "safe-array-concat": ["safe-array-concat@1.0.1", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" } }, "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q=="], + "rolldown": ["rolldown@1.0.3", "", { "dependencies": { "@oxc-project/types": "=0.133.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.3", "@rolldown/binding-darwin-arm64": "1.0.3", "@rolldown/binding-darwin-x64": "1.0.3", "@rolldown/binding-freebsd-x64": "1.0.3", "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", "@rolldown/binding-linux-arm64-gnu": "1.0.3", "@rolldown/binding-linux-arm64-musl": "1.0.3", "@rolldown/binding-linux-ppc64-gnu": "1.0.3", "@rolldown/binding-linux-s390x-gnu": "1.0.3", "@rolldown/binding-linux-x64-gnu": "1.0.3", "@rolldown/binding-linux-x64-musl": "1.0.3", "@rolldown/binding-openharmony-arm64": "1.0.3", "@rolldown/binding-wasm32-wasi": "1.0.3", "@rolldown/binding-win32-arm64-msvc": "1.0.3", "@rolldown/binding-win32-x64-msvc": "1.0.3" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g=="], "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "safe-regex-test": ["safe-regex-test@1.0.0", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" } }, "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - "sax": ["sax@1.2.4", "", {}, "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="], + "semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], - "scheduler": ["scheduler@0.21.0", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ=="], - - "semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], - - "set-function-name": ["set-function-name@2.0.1", "", { "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.0" } }, "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA=="], + "sharp": ["sharp@0.35.0", "", { "dependencies": { "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", "semver": "^7.8.4" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.35.0", "@img/sharp-darwin-x64": "0.35.0", "@img/sharp-freebsd-wasm32": "0.35.0", "@img/sharp-libvips-darwin-arm64": "1.3.0", "@img/sharp-libvips-darwin-x64": "1.3.0", "@img/sharp-libvips-linux-arm": "1.3.0", "@img/sharp-libvips-linux-arm64": "1.3.0", "@img/sharp-libvips-linux-ppc64": "1.3.0", "@img/sharp-libvips-linux-riscv64": "1.3.0", "@img/sharp-libvips-linux-s390x": "1.3.0", "@img/sharp-libvips-linux-x64": "1.3.0", "@img/sharp-libvips-linuxmusl-arm64": "1.3.0", "@img/sharp-libvips-linuxmusl-x64": "1.3.0", "@img/sharp-linux-arm": "0.35.0", "@img/sharp-linux-arm64": "0.35.0", "@img/sharp-linux-ppc64": "0.35.0", "@img/sharp-linux-riscv64": "0.35.0", "@img/sharp-linux-s390x": "0.35.0", "@img/sharp-linux-x64": "0.35.0", "@img/sharp-linuxmusl-arm64": "0.35.0", "@img/sharp-linuxmusl-x64": "0.35.0", "@img/sharp-webcontainers-wasm32": "0.35.0", "@img/sharp-win32-arm64": "0.35.0", "@img/sharp-win32-ia32": "0.35.0", "@img/sharp-win32-x64": "0.35.0" } }, "sha512-BqvG5XbwPZ4NV0DK90d86leEECMsoa8bO0nqnKWlBDYxri4GJ7c4EDInaF6q20lTh/mATmnDIKWJFfXnoVfH5g=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "side-channel": ["side-channel@1.0.4", "", { "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" } }, "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw=="], + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], - "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + "snake-case": ["snake-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg=="], - "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - "socks": ["socks@2.7.1", "", { "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" } }, "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ=="], - - "socks-proxy-agent": ["socks-proxy-agent@8.0.2", "", { "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", "socks": "^2.7.1" } }, "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g=="], - - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - - "source-map-js": ["source-map-js@1.0.2", "", {}, "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="], - - "sql-parse": ["sql-parse@0.1.5", "", {}, "sha512-e2ExBX6iDHoCDC1zN2NvZV49UMhKVLvvwrDjzSVHFS3TKHKtIpl2nMDQkdlbTjDVvf2bxRYBq9iXAAMZvZpGVA=="], - - "stats-gl": ["stats-gl@1.0.5", "", {}, "sha512-XimMxvwnf1Qf5KwebhcoA34kcX+fWEkIl0QjNkCbu4IpoyDMMsOajExn7FIq5w569k45+LhmsuRlGSrsvmGdNw=="], + "stats-gl": ["stats-gl@2.4.2", "", { "dependencies": { "@types/three": "*", "three": "^0.170.0" } }, "sha512-g5O9B0hm9CvnM36+v7SFl39T7hmAlv541tU81ME8YeSb3i1CIP5/QdDeSB3A0la0bKNHpxpwxOVRo2wFTYEosQ=="], "stats.js": ["stats.js@0.17.0", "", {}, "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw=="], - "streamsearch": ["streamsearch@1.1.0", "", {}, "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="], - - "streamx": ["streamx@2.15.1", "", { "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" } }, "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA=="], - - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "string.prototype.matchall": ["string.prototype.matchall@4.0.10", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "regexp.prototype.flags": "^1.5.0", "set-function-name": "^2.0.0", "side-channel": "^1.0.4" } }, "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ=="], - - "string.prototype.trim": ["string.prototype.trim@1.2.8", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ=="], - - "string.prototype.trimend": ["string.prototype.trimend@1.0.7", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA=="], - - "string.prototype.trimstart": ["string.prototype.trimstart@1.0.7", "", { "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1" } }, "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg=="], - "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], - - "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "strtok3": ["strtok3@6.3.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^4.1.0" } }, "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw=="], - "styled-jsx": ["styled-jsx@5.1.1", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" } }, "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw=="], - - "superjson": ["superjson@1.13.3", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg=="], - - "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "suspend-react": ["suspend-react@0.1.3", "", { "peerDependencies": { "react": ">=17.0" } }, "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ=="], - "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + "svg-parser": ["svg-parser@2.0.4", "", {}, "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="], - "tar-fs": ["tar-fs@3.0.6", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^2.1.1", "bare-path": "^2.1.0" } }, "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w=="], + "tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], - "tar-stream": ["tar-stream@3.1.6", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], - "text-decoder": ["text-decoder@1.2.0", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg=="], + "three": ["three@0.184.0", "", {}, "sha512-wtTRjG92pM5eUg/KuUnHsqSAlPM296brTOcLgMRqEeylYTh/CdtvKUvCyyCQTzFuStieWxvZb8mVTMvdPyUpxg=="], - "text-table": ["text-table@0.2.0", "", {}, "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="], + "three-mesh-bvh": ["three-mesh-bvh@0.8.3", "", { "peerDependencies": { "three": ">= 0.159.0" } }, "sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg=="], - "three": ["three@0.152.2", "", {}, "sha512-Ff9zIpSfkkqcBcpdiFo2f35vA9ZucO+N8TNacJOqaEE6DrB0eufItVMib8bK8Pcju/ZNT6a7blE1GhTpkdsILw=="], - - "three-mesh-bvh": ["three-mesh-bvh@0.6.7", "", { "peerDependencies": { "three": ">= 0.151.0" } }, "sha512-RYdjMsH+vZvjLwA+ehI4+ZqTaTehAz4iho2yfL5PdGsIHyxpB78g0iy4Emj8079m/9KBX02TzddkvPSKSruQjg=="], - - "three-stdlib": ["three-stdlib@2.26.8", "", { "dependencies": { "@types/draco3d": "^1.4.0", "@types/offscreencanvas": "^2019.6.4", "@types/webxr": "^0.5.2", "draco3d": "^1.4.1", "fflate": "^0.6.9", "ktx-parse": "^0.4.5", "mmd-parser": "^1.0.4", "potpack": "^1.0.1", "zstddec": "^0.0.2" }, "peerDependencies": { "three": ">=0.128.0" } }, "sha512-KcGnIe60APle51lzHJdRPuN2O0HvawBKq3Fd9KNk/ImISxVlI7m+LBYoFN5rki9RV2vi5wDDvrMUgVCR/jhVxw=="], - - "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], + "three-stdlib": ["three-stdlib@2.36.1", "", { "dependencies": { "@types/draco3d": "^1.4.0", "@types/offscreencanvas": "^2019.6.4", "@types/webxr": "^0.5.2", "draco3d": "^1.4.1", "fflate": "^0.6.9", "potpack": "^1.0.1" }, "peerDependencies": { "three": ">=0.128.0" } }, "sha512-XyGQrFmNQ5O/IoKm556ftwKsBg11TIb301MB5dWNicziQBEs2g3gtOYIf7pFiLa0zI2gUwhtCjv9fmjnxKZ1Cg=="], "timm": ["timm@1.7.1", "", {}, "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw=="], "tinycolor2": ["tinycolor2@1.6.0", "", {}, "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="], - "to-fast-properties": ["to-fast-properties@2.0.0", "", {}, "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="], - - "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], "token-types": ["token-types@4.2.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ=="], - "troika-three-text": ["troika-three-text@0.47.2", "", { "dependencies": { "bidi-js": "^1.0.2", "troika-three-utils": "^0.47.2", "troika-worker-utils": "^0.47.2", "webgl-sdf-generator": "1.1.1" }, "peerDependencies": { "three": ">=0.125.0" } }, "sha512-qylT0F+U7xGs+/PEf3ujBdJMYWbn0Qci0kLqI5BJG2kW1wdg4T1XSxneypnF05DxFqJhEzuaOR9S2SjiyknMng=="], + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], - "troika-three-utils": ["troika-three-utils@0.47.2", "", { "peerDependencies": { "three": ">=0.125.0" } }, "sha512-/28plhCxfKtH7MSxEGx8e3b/OXU5A0xlwl+Sbdp0H8FXUHKZDoksduEKmjQayXYtxAyuUiCRunYIv/8Vi7aiyg=="], + "troika-three-text": ["troika-three-text@0.52.4", "", { "dependencies": { "bidi-js": "^1.0.2", "troika-three-utils": "^0.52.4", "troika-worker-utils": "^0.52.0", "webgl-sdf-generator": "1.1.1" }, "peerDependencies": { "three": ">=0.125.0" } }, "sha512-V50EwcYGruV5rUZ9F4aNsrytGdKcXKALjEtQXIOBfhVoZU9VAqZNIoGQ3TMiooVqFAbR1w15T+f+8gkzoFzawg=="], - "troika-worker-utils": ["troika-worker-utils@0.47.2", "", {}, "sha512-mzss4MeyzUkYBppn4x5cdAqrhBHFEuVmMMgLMTyFV23x6GvQMyo+/R5E5Lsbrt7WSt5RfvewjcwD1DChRTA9lA=="], + "troika-three-utils": ["troika-three-utils@0.52.4", "", { "peerDependencies": { "three": ">=0.125.0" } }, "sha512-NORAStSVa/BDiG52Mfudk4j1FG4jC4ILutB3foPnfGbOeIs9+G5vZLa0pnmnaftZUGm4UwSoqEpWdqvC7zms3A=="], - "ts-api-utils": ["ts-api-utils@1.0.3", "", { "peerDependencies": { "typescript": ">=4.2.0" } }, "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg=="], + "troika-worker-utils": ["troika-worker-utils@0.52.0", "", {}, "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw=="], - "tsconfig-paths": ["tsconfig-paths@3.14.2", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "tslib": ["tslib@2.6.2", "", {}, "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="], + "tunnel-rat": ["tunnel-rat@0.1.2", "", { "dependencies": { "zustand": "^4.3.2" } }, "sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ=="], - "tsutils": ["tsutils@3.21.0", "", { "dependencies": { "tslib": "^1.8.1" }, "peerDependencies": { "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA=="], + "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], - "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], - "type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], - "typed-array-buffer": ["typed-array-buffer@1.0.0", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", "is-typed-array": "^1.1.10" } }, "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw=="], + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], - "typed-array-byte-length": ["typed-array-byte-length@1.0.0", "", { "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" } }, "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA=="], + "utif2": ["utif2@4.1.0", "", { "dependencies": { "pako": "^1.0.11" } }, "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w=="], - "typed-array-byte-offset": ["typed-array-byte-offset@1.0.0", "", { "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" } }, "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg=="], + "utility-types": ["utility-types@3.11.0", "", {}, "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw=="], - "typed-array-length": ["typed-array-length@1.0.4", "", { "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "is-typed-array": "^1.1.9" } }, "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng=="], + "vite": ["vite@8.0.16", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.3", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw=="], - "typed-query-selector": ["typed-query-selector@2.12.0", "", {}, "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg=="], - - "typescript": ["typescript@5.2.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w=="], - - "unbox-primitive": ["unbox-primitive@1.0.2", "", { "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="], - - "unbzip2-stream": ["unbzip2-stream@1.4.3", "", { "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg=="], - - "universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], - - "update-browserslist-db": ["update-browserslist-db@1.0.13", "", { "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg=="], - - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - - "url": ["url@0.11.3", "", { "dependencies": { "punycode": "^1.4.1", "qs": "^6.11.2" } }, "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw=="], - - "urlpattern-polyfill": ["urlpattern-polyfill@10.0.0", "", {}, "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg=="], - - "use-sync-external-store": ["use-sync-external-store@1.2.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA=="], - - "utif": ["utif@2.0.1", "", { "dependencies": { "pako": "^1.0.5" } }, "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg=="], - - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - - "utility-types": ["utility-types@3.10.0", "", {}, "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg=="], - - "uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - - "watchpack": ["watchpack@2.4.0", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg=="], + "vite-plugin-svgr": ["vite-plugin-svgr@5.2.0", "", { "dependencies": { "@rollup/pluginutils": "^5.3.0", "@svgr/core": "^8.1.0", "@svgr/plugin-jsx": "^8.1.0" }, "peerDependencies": { "vite": ">=3.0.0" } }, "sha512-qj2eAKF8C6PZWemVTvQA0xgQIcP1hHU6Buh7fl6BhvayWwnuxE+z417miKxeDvRWbDrupQ1oK99hfxElopJ3sQ=="], "webgl-constants": ["webgl-constants@1.1.1", "", {}, "sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg=="], "webgl-sdf-generator": ["webgl-sdf-generator@1.1.1", "", {}, "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA=="], + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-fetch": ["whatwg-fetch@3.6.20", "", {}, "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "which-boxed-primitive": ["which-boxed-primitive@1.0.2", "", { "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="], + "wouter": ["wouter@3.10.0", "", { "dependencies": { "mitt": "^3.0.1", "regexparam": "^3.0.0", "use-sync-external-store": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-zTfddD80zc2/J5l8JKcdvzOK6AwP0kpyHEI3DxRN2bn8U1oJPnrSVm8v+X3WwDamvLAOxTO7ZvkxkpRWlyeJ1Q=="], - "which-builtin-type": ["which-builtin-type@1.1.3", "", { "dependencies": { "function.prototype.name": "^1.1.5", "has-tostringtag": "^1.0.0", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", "is-generator-function": "^1.0.10", "is-regex": "^1.1.4", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", "which-typed-array": "^1.1.9" } }, "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw=="], + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "which-collection": ["which-collection@1.0.1", "", { "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" } }, "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A=="], - - "which-typed-array": ["which-typed-array@1.1.11", "", { "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" } }, "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew=="], - - "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - - "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], - - "xhr": ["xhr@2.6.0", "", { "dependencies": { "global": "~4.4.0", "is-function": "^1.0.1", "parse-headers": "^2.0.0", "xtend": "^4.0.0" } }, "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA=="], - - "xml-parse-from-string": ["xml-parse-from-string@1.0.1", "", {}, "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="], - - "xml2js": ["xml2js@0.4.23", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug=="], - - "xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], - - "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - - "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - - "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - - "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], - - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - - "zod": ["zod@3.21.4", "", {}, "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw=="], - - "zstddec": ["zstddec@0.0.2", "", {}, "sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA=="], - - "zustand": ["zustand@4.4.1", "", { "dependencies": { "use-sync-external-store": "1.2.0" }, "peerDependencies": { "@types/react": ">=16.8", "immer": ">=9.0", "react": ">=16.8" }, "optionalPeers": ["@types/react", "immer", "react"] }, "sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw=="], - - "@babel/code-frame/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], - - "@babel/core/json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + "zustand": ["zustand@5.0.14", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g=="], "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], - - "@babel/eslint-parser/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/highlight/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + "@jimp/core/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], - "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + "@react-three/rapier/@dimforge/rapier3d-compat": ["@dimforge/rapier3d-compat@0.19.2", "", {}, "sha512-AZHL1jqUF55QJkJyU1yKeh4ImX2J93bVLIezT1+o0FZqTix6O06MOaqpKoJ4MmbDCsoZmwO+qc471/SDMDm2AA=="], - "@humanwhocodes/config-array/minimatch": ["minimatch@3.0.8", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q=="], + "@rolldown/binding-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@jimp/utils/regenerator-runtime": ["regenerator-runtime@0.13.11", "", {}, "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@nicolo-ribaudo/eslint-scope-5-internals/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@puppeteer/browsers/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "@puppeteer/browsers/semver": ["semver@7.6.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.2" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q=="], - "@react-three/drei/zustand": ["zustand@3.7.2", "", { "peerDependencies": { "react": ">=16.8" } }, "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA=="], + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], - "@react-three/fiber/zustand": ["zustand@3.7.2", "", { "peerDependencies": { "react": ">=16.8" } }, "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA=="], - - "@types/react-dom/@types/react": ["@types/react@18.2.22", "", { "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA=="], - - "@types/react-reconciler/@types/react": ["@types/react@18.2.22", "", { "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA=="], - - "@types/react-transition-group/@types/react": ["@types/react@18.2.23", "", { "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "sha512-qHLW6n1q2+7KyBEYnrZpcsAmU/iiCh9WGCKgXvMxx89+TYdJWRjZohVIo9XTcoLhfX3+/hP0Pbulu3bCZQ9PSA=="], - - "@types/yauzl/@types/node": ["@types/node@20.7.1", "", {}, "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg=="], - - "@typescript-eslint/experimental-utils/@typescript-eslint/utils": ["@typescript-eslint/utils@5.62.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.7.4", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.7.4", "@typescript-eslint/type-utils": "6.7.4", "@typescript-eslint/utils": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/parser": ["@typescript-eslint/parser@6.7.4", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.7.4", "@typescript-eslint/types": "6.7.4", "@typescript-eslint/typescript-estree": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@6.7.4", "", { "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.7.4", "@typescript-eslint/type-utils": "6.7.4", "@typescript-eslint/utils": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/parser": ["@typescript-eslint/parser@6.7.4", "", { "dependencies": { "@typescript-eslint/scope-manager": "6.7.4", "@typescript-eslint/types": "6.7.4", "@typescript-eslint/typescript-estree": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA=="], - - "bare-stream/b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], - - "bare-stream/streamx": ["streamx@2.20.1", "", { "dependencies": { "fast-fifo": "^1.3.2", "queue-tick": "^1.0.1", "text-decoder": "^1.1.0" }, "optionalDependencies": { "bare-events": "^2.2.0" } }, "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA=="], - - "browserslist/caniuse-lite": ["caniuse-lite@1.0.30001543", "", {}, "sha512-qxdO8KPWPQ+Zk6bvNpPeQIOH47qZSYdFZd6dXQzb2KzhnSXju4Kd7H1PkSJx6NICSMgo/IhRZRhhfPTHYpJUCA=="], - - "chromium-bidi/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - - "eslint-config-next/@next/eslint-plugin-next": ["@next/eslint-plugin-next@13.4.19", "", { "dependencies": { "glob": "7.1.7" } }, "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ=="], - - "eslint-config-next/eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@5.0.0-canary-09285d5a7-20230925", "", { "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, "sha512-eLL9Elv+92YRNg402DMxUqVnizMAJLihse/QoH8GM8JBHniFNFlMu6nVkkgzJ1vHO+yp6p+a+2iJY9G3K7cxMA=="], - - "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "eslint-plugin-import/doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], - - "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "eslint-plugin-jest/@typescript-eslint/utils": ["@typescript-eslint/utils@5.62.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ=="], - - "eslint-plugin-jsx-a11y/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "eslint-plugin-react/doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], - - "eslint-plugin-react/resolve": ["resolve@2.0.0-next.4", "", { "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ=="], - - "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], - - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - - "glob/minimatch": ["minimatch@3.0.8", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q=="], - - "http-proxy-agent/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], - - "https-proxy-agent/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "image-q/@types/node": ["@types/node@16.9.1", "", {}, "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="], - "its-fine/@types/react-reconciler": ["@types/react-reconciler@0.28.4", "", { "dependencies": { "@types/react": "*" } }, "sha512-Xd55E2aLI9Q/ikDQEmfRzIwYJs4oO0h9ZHA3FZDakzt1WR6JMZcpqtCZlF97I72KVjoY4rHXU5TfvkRDOyr/rg=="], + "node-vibrant/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], - "node-vibrant/@types/node": ["@types/node@10.17.60", "", {}, "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="], + "pixelmatch/pngjs": ["pngjs@3.4.0", "", {}, "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="], - "pac-proxy-agent/http-proxy-agent": ["http-proxy-agent@7.0.0", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ=="], + "stats-gl/three": ["three@0.170.0", "", {}, "sha512-FQK+LEpYc0fBD+J8g6oSEyyNzjp+Q7Ks1C568WWaoMRLW+TkNNWmenWeGgJjV105Gd+p/2ql1ZcjYvNiPZBhuQ=="], - "pac-proxy-agent/https-proxy-agent": ["https-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.0.2", "debug": "4" } }, "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA=="], + "three-stdlib/fflate": ["fflate@0.6.10", "", {}, "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg=="], - "proxy-agent/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], + "tunnel-rat/zustand": ["zustand@4.5.7", "", { "dependencies": { "use-sync-external-store": "^1.2.2" }, "peerDependencies": { "@types/react": ">=16.8", "immer": ">=9.0.6", "react": ">=16.8" }, "optionalPeers": ["@types/react", "immer", "react"] }, "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw=="], - "proxy-agent/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], - - "puppeteer-core/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], - - "react-dom/scheduler": ["scheduler@0.23.0", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw=="], - - "rimraf/glob": ["glob@7.2.3", "", { "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" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - - "socks/ip": ["ip@2.0.0", "", {}, "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="], - - "string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "text-decoder/b4a": ["b4a@1.6.7", "", {}, "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg=="], - - "tsutils/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "uri-js/punycode": ["punycode@2.3.0", "", {}, "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="], - - "@babel/code-frame/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], - - "@babel/code-frame/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - - "@babel/code-frame/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - - "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - - "@babel/highlight/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], - - "@babel/highlight/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - - "@babel/highlight/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - - "@nicolo-ribaudo/eslint-scope-5-internals/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], - - "@puppeteer/browsers/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "@typescript-eslint/experimental-utils/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@5.62.0", "", { "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" } }, "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w=="], - - "@typescript-eslint/experimental-utils/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@5.62.0", "", {}, "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ=="], - - "@typescript-eslint/experimental-utils/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@5.62.0", "", { "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA=="], - - "@typescript-eslint/experimental-utils/@typescript-eslint/utils/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@eslint-community/regexpp": ["@eslint-community/regexpp@4.9.1", "", {}, "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4" } }, "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.7.4", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.7.4", "@typescript-eslint/utils": "6.7.4", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@6.7.4", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.7.4", "@typescript-eslint/types": "6.7.4", "@typescript-eslint/typescript-estree": "6.7.4", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" } }, "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4" } }, "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" } }, "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@eslint-community/regexpp": ["@eslint-community/regexpp@4.9.1", "", {}, "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4" } }, "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@6.7.4", "", { "dependencies": { "@typescript-eslint/typescript-estree": "6.7.4", "@typescript-eslint/utils": "6.7.4", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@6.7.4", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", "@typescript-eslint/scope-manager": "6.7.4", "@typescript-eslint/types": "6.7.4", "@typescript-eslint/typescript-estree": "6.7.4", "semver": "^7.5.4" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" } }, "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" } }, "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4" } }, "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A=="], - - "@untile/eslint-config-typescript/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/parser/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ=="], - - "@untile/eslint-config-typescript/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" } }, "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA=="], - - "eslint-import-resolver-node/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "eslint-module-utils/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "eslint-plugin-import/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "eslint-plugin-jest/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@5.62.0", "", { "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" } }, "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w=="], - - "eslint-plugin-jest/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@5.62.0", "", {}, "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ=="], - - "eslint-plugin-jest/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@5.62.0", "", { "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA=="], - - "eslint-plugin-jest/@typescript-eslint/utils/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], - - "http-proxy-agent/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "https-proxy-agent/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "its-fine/@types/react-reconciler/@types/react": ["@types/react@18.2.22", "", { "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA=="], - - "proxy-agent/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "puppeteer-core/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - - "@babel/code-frame/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], - - "@babel/code-frame/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - - "@babel/highlight/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], - - "@babel/highlight/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - - "@typescript-eslint/experimental-utils/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@5.62.0", "", { "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" } }, "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw=="], - - "@typescript-eslint/experimental-utils/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@5.62.0", "", { "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" } }, "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw=="], - - "@typescript-eslint/experimental-utils/@typescript-eslint/utils/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@6.7.4", "", { "dependencies": { "@typescript-eslint/types": "6.7.4", "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" } }, "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "eslint-plugin-jest/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@5.62.0", "", { "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" } }, "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw=="], - - "eslint-plugin-jest/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@5.62.0", "", { "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" } }, "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw=="], - - "eslint-plugin-jest/@typescript-eslint/utils/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], - - "@babel/code-frame/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], - - "@babel/highlight/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], - - "@untile/eslint-config-typescript-react/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], - - "@untile/eslint-config-typescript/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@6.7.4", "", {}, "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA=="], + "node-vibrant/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], } } diff --git a/docker-compose.yml b/docker-compose.yml index 35422e5..b26c10f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,14 @@ name: coins services: - app: - build: - context: . - additional_contexts: - - photos=/deploy/photos - ports: - - '${HOST_PORT:-3000}:3000' - volumes: - - ${PHOTOS_DIR:-./public/photos}:/app/public/photos + server: + build: . restart: unless-stopped + ports: + - "${HOST_PORT:-3000}:3000" + volumes: + - "${DATA_DIR:-./data}:/app/data" + environment: + COINS_DATA_DIR: /app/data + PORT: "3000" + NUMISTA_API_KEY: ${NUMISTA_API_KEY:-} diff --git a/index.html b/index.html new file mode 100644 index 0000000..30d3858 --- /dev/null +++ b/index.html @@ -0,0 +1,18 @@ + + + + + + Coins + + + + + +
+ + + diff --git a/next.config.mjs b/next.config.mjs deleted file mode 100644 index 0411214..0000000 --- a/next.config.mjs +++ /dev/null @@ -1,14 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - output: 'standalone', - reactStrictMode: true, - redirects: () => [ - { - destination: '/', - permanent: true, - source: '/showcase-banknotes' - } - ] -}; - -export default nextConfig; diff --git a/package.json b/package.json index 4dac197..4a84d39 100644 --- a/package.json +++ b/package.json @@ -2,52 +2,42 @@ "name": "coins", "version": "0.0.0", "private": true, + "type": "module", "scripts": { - "dev": "next dev", - "prebuild": "bun build-textures", - "build": "next build", - "start": "next start", - "lint": "next lint", - "get-type": "bun ./bin/get-type.ts", - "build-textures": "bun ./bin/build-textures.ts", - "generate-depth": "./bin/generate-depth.sh" + "dev": "trap 'kill 0' EXIT; bun run dev:server & bun run dev:web", + "dev:web": "vite --host", + "dev:server": "bun --watch src/server/index.ts", + "build": "vite build", + "start": "bun src/server/index.ts", + "ingest": "bun src/ingest/cli.ts", + "typecheck": "tsc --noEmit" }, "dependencies": { - "@prisma/client": "^5.4.1", - "@react-three/cannon": "^6.6.0", - "@react-three/drei": "^9.83.9", - "@react-three/fiber": "^8.13.0", - "@tanstack/react-query": "^4.35.3", - "@tanstack/react-query-devtools": "^4.35.3", - "next": "^13.5.1", - "prettier": "^3.0.3", - "primeicons": "^6.0.1", - "primereact": "^9.6.2", - "prisma": "^5.4.1", - "puppeteer": "^23.5.3", - "react": "18.2.0", - "react-div-100vh": "^0.7.0", - "react-dom": "18.2.0", - "three": "0.152.2", - "zustand": "^4.4.1" + "@clack/prompts": "^1.5.1", + "@react-three/drei": "^10.7.7", + "@react-three/fiber": "^9.6.1", + "@react-three/rapier": "^2.2.0", + "@tailwindcss/vite": "^4.3.0", + "@vitejs/plugin-react": "^6.0.2", + "lru-cache": "^11.5.1", + "node-vibrant": "^4.0.4", + "nuqs": "^2.8.9", + "react": "^19.2.7", + "react-aria-components": "^1.18.0", + "react-dom": "^19.2.7", + "sharp": "^0.35.0", + "tailwindcss": "^4.3.0", + "three": "^0.184.0", + "vite": "^8.0.16", + "wouter": "^3.10.0" }, "devDependencies": { - "@next/eslint-plugin-next": "^13.5.4", - "@tanstack/eslint-plugin-query": "^4.34.1", - "@types/node": "20.6.0", - "@types/react": "18.2.21", - "@types/react-dom": "18.2.7", - "@types/three": "0.152.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "@untile/eslint-config-typescript-react": "^2.0.1", - "@untile/prettier-config": "^2.0.1", - "bun-types": "^1.0.3", - "eslint": "8.49.0", - "eslint-config-next": "13.4.19", - "eslint-plugin-react-hooks": "^4.6.0", - "node-vibrant": "^3.2.1-alpha.1", - "typescript": "5.2.2" - }, - "prettier": "@untile/prettier-config" + "@biomejs/biome": "2.4.16", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "@types/three": "^0.184.1", + "bun-types": "^1.3.14", + "typescript": "^6.0.3", + "vite-plugin-svgr": "^5.2.0" + } } diff --git a/prisma/main.db b/prisma/main.db deleted file mode 100644 index 7905903205471f6d00af95b444e1633203b688bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150976 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

}O4(J(v-lPa2p%y8uKOCV?;pE5b{`pe5*>nT!p{ znLPVG{iSBGzgam&s6Qml?vkfRF>r&R+GyyRHWRmM6f~na%%ePQZ0k%a+ZVketDqy8cJQ z)bt+|P5keGp4og5|V1CK=rEDh(mk#t^44Ko#snQX7$>+)e@ zh!;awbT=sGF^~5;s)T>&W!Ca8i?sx$DmB&A ztYw%Q7&yP`oH3ihKEb$2RM~0)LZLOxqE_bCft)c1mKwq7JZUrjX3)^-T|T9S{wF`Rv7~eiw}m&*PuZ;Gb`x zwE_Qm3ducd+r-7Q&t5!>mI=_ufJ)|m{OXHmKXLKwWAx7D{4wmub(Aym5b!nym(Q;4 zv%Ftyu58&-G4XfCNH6Gf)$#9XwcI+2(^qOLeLIYC&7}c9tIHEiy7Z7UjVs9Q@?eOt zO+ewr{r8nWg}M5b_){JJX`UUzT@=7vL6BNxJFfxJXoz(b3Dvwm`7|L#%I%t%O z`r)xdNT6e&;>dWkpE6DH=)h>?IGgy?;Mhr@%rwWug^)@GovBa~rC)~=P;D9|Yfl~9 zt}2AKQZ9t+{{mIXurgFZ0Y)}qx8~&=zce2O*}TZ;Qf1|o6VSPiaZY$VtIprCC4>Z7 zX=dohgQPH_45TB{uxOrN=%MCrgyS^Dj#6-XVGu3L3&;^=^>Wg{Af{;z3Ar%1Tq$n^ zN8UiGb37c6Gs@QXDF$aVXXV!3UOiujMoMaE6*WNPE0wO6V!#UGL24<6%3VMHwX2oA z%5@bF9tyC0BHxN5f=__uJ>P@AbbUh4VVugvSH5uZm9JfV<@t-R-hc6x&t81x8y8F23^3i?2L(@s$@YzVg7u zS594g^<(lA0=SYvGJ_R!?e+#XtRbG0*ap}A`5t!5Gj_4db>}+McTj7Zyd?dFd5}Hc z;OZSdEMZaGs`BT%xflp0^Ja(v#s3wwUsz>eGs{@NgjEJ3e~zg-5}>-g4S>xqftU(=uJc;%6MYMa(bN4nx_aQk!CcGGH&Sa7eBL1#cu z2K8Xt??B}@K%+(Md0g$6?f6lvez5X!oCE@kVzBX@hykd7reRn%(vtN9#p|bHC%A{w zVx0K$(XfuDlf+ql)f^-azt;`-wZY*fI_$bh;`~i){+C9)-uzwC0WfD)xzdSLFo`j! zx-W$ay)zVa1?={Pv|Chck;N5CRw~0>Zz*;aHC9XJr*jE`6|wFTBT^pok9?OTNqakU z>F8{C@2_s=as|PF8DF9rk8aU%k!rKdLpEw?a~Rt z?_kImLf*pObkq@;c87M+2i%CwsDRv zAvTw#2KN3E$W?&(4%K!ABU$(q7)G^;0R$>$6QCK;LI0&uEh-IfXt+M*y=eKccFTD6 zOISbb{=Y`zE38~g1uqc~w$Ab}2o8dH-aFIw<9Y(CmMtw|`M8Tie+Bx05oPgOxIgrH z2|yMtLQ}KEqF2Z)J#7FC3ycdi2|y@@6FsUGF|7`BcMfSeOf8(w%rZU0h=7ZfrghLmV| zg5eg`VPn=n!Z4@jdSW`5F|!O3j({)ZP~n9JC8eL7O;67PKpdSv_PZQrb7;>&2k#6; zMukuOh|*9@^o+7~mI2(BX%U+CSBuzXONeb*Rj+9AulCb+DixuAdN4MIf8+6eH2P&Q8lM=8K^_AU^>BDR3~ZYzI-sO4r>Pb*L2V}6%;UzE5Q2)8 zGd&|(zN}{}Lw{MMLH8q+Z5D^_u(9+tLmeo?VCsi6Q{Zly7cJT>`9#_@Im-0b=cMi} zOk4oKG86(j;IK4{E3+YPn~|&eP}HDgJ(S&D4=PtFE@ew#)8{sRY{T!Ye`Vc&TX$g1 ze^-92xURZ)`&9S)w+(G2aI^eV`HjktK136tj^Ll0hfWfRu?}W&um);6hJLcWCTm)mixyG(ba8d+GEx8GJQ4i#iE!H@bXbfyJQA z-Y;Ni4uYtzyjR9+GpMf@8dedi(IKH#!j)4&|6XjVtJkh-S` zlxNnM-5Vc_w5+UbP6T}^pTieG$t`Gika3$eg&f9*2i-wD#q%HOF-T%}aq> z8+yC=5Pcv9835XSUe9Fpg56=A)h(6Z|8+_U-Cfy*%Tv^D!i92PDrh~H1W2~lg@zqb_ho5J~oX?`IZ$eaXsKc)> z;`aG)InkFIz@ILs6l1MML!*H0S?-24gg~jzv#Ij6ch|Cx3_X2i=qK7{9nC({B)IN< zDQ8-90dj<*CZHU4{rEO(3OTS6Z%JExSLG|eeKoXu@fwP{PgXoPKu!9miA~0!h)j*5 zlahKX!ssHKD)Z^qebi``&%?bf;^rk}F%aP3MbUuYHPDPIBS?PH5vMfy&VUtXsAH8@ z<-RlT*_bx6DfV-apRz37Ph+}k$n8wI+|D#65ugPyh{-MX6mlgCi`@Y|bY^ZYqg971U))+# z)#Z4OjuoQXs;Zf~a0k-<0J5zKCrq#-6mSNCNU#~iwOdq(qjPmADEDXa&s*(Jb$8`| zX9N#b#ybWBO;Ju=Hw&3%aKp1^)4mM3iFzLS0s|eb;tVdJXM;$f@*0b7m%f5J`3X+& zj`yOULC3+785vrxw#C=Ydmk;mQRBArdF_3jXS95!Y)4uuI_+ z=)Epyz$QIv!x};b@_0|&0!*S~$?^y@EP>S^#IHbZqFQ<&CrCjFNA;cR*~ zmiLQ?yCM`H8!A89Lt+}L1i-h%!^Uw9%x56irw(9n1u%c@fI5V~&@|O@12i81d_eWt z;NY`oFP{AY?;Jtn2r5ymN5nF2xM`0FUiQ?tI6%MtH+Of9^6|qEag+JOA-hhw3{hRu zX=EA3uF6k#ljAysf8e-M{CpUFJD4&-{0X?fK^cJz6&M=|!U>cYpj^-9PS@TpHkv*T z;s38uKCfJL&2~@sySHt@1b{!=ys+utZ|d3jz=l8FaLfANS@-%n_u7xG`TI5R$IITp zKb4!RU)n?}Lz7pOVrBQu_|HH=1F@hK2s%Gt(fnXu^tkkNDv21%2Lcfc759d0`U00; zQV1@A_AL!vdwOx2KIO*C_>?Ih7%$L;=cSK`f`vVgrS4NMTeA75+;AD6GT}=5+LUL5DNoLzl42W{htY@$w~` zeE6HHPyWtjh*(ScLOO=+y3pi^c4nLT!n#knY{}-I@}rmWDT5(*B9sa^d|+EfOGqaa zVcC++KP5}>t?c4V`8`Q3mB0uUmlt>{Zzn$GvL%;)%IZkvUy$HXZmW!V5G??zb0a+G z7+9POrJfjCx2LHni0-D(ZHtQDF1%y;Ol%B4> zr*iSV(9T1<1Wsc=tFM;k5OAtPOD`6+18TI$|Jp~j{i3yQLv^WxD87wOba(ZQJ6b&c zG~zt)h4{E$*WM+)H1M1PNmI7UKK|Kz_g-qI*vx-a5aS#OJfQq(& zv}mxWc-_T`t1w24ky@cFJ&VW!L=6z}`LCS+>iH+}&*#oRasKn?Ki42<^L6+Xh>K=2 z(nf;{gqr^mzx(W7d-Y2Qq1O0+AdOvIc=%2}r-~qKr@=A1xq+lQ7aSw5h66{qA96D!#XOzjEVL<$4#Sa7YIy zCtAf+Fbrn(g#lE1HBdDXSv{YUr=n7VFE|1?pbEP~%9ng79-17!)Pc$?OI1DAcd{MFEoh#r}$4@=6 zqh=J|LMP*!J(~}tn`|hpk1pLlCG1TGia-o(I z%Yg6eR+W7}X`sr;+a?(@zmBsSA-SB1GXlsg3(x&(3^yT_bO6bvS@J;tB>}Sq*%J7m z0SX{wfkRkC{IZrHDd5n{peNINZ8O!?tso@B3NUvs{@pObWLNwKE)!obD7)t|(R(4; zGo%$}Ge104oY7dV&Cq55fz#$twdBwRYYM^PQxC<);&&WxxWeVlJqr@zDXLG{rc$U| zK|I1JikT^6et|GRGhjE)7H2ZVuZPZ&`T2QAJ~8W<%~k`8FC_`bKGkeMSquz%dRpR~ zj{yZjyn?(x16{Ig+n`pw3QKtbIcn^ZtkN`#G>$h3yXuE31 ztwZ(b;!7W7)?qizbXeYF+_@ey2OTOdRMfOrIBd+D3Tc?%uIYZH!Tlj1Uu-&qHPK>( zS+i9;FWMuE&mQ207d|zK_6FqqOncP9wo)M1n86YpC@sy*thP|>Nod7hWGvl2XF8bh zxPvYa=seuWY}w6)wp~?77E?cpIgH3#B~RwmV&yjOBnTuvC9|%CRNG>aOqFtb?D_-s zO9(;LZnWX*Uwo+ctXI%$Z~Ls$!}g_U|F!Nrwne)BpUu&Y|Fq_RD*xqQOR&eDqk7eu?~Ge@rw5qZ4xbZ5 zmH*>6`R^cy{R&#R_PH@L^W*nviIfWzgbCcseh}w@htOxYJ*Mrd9kp%M?Wdl;2F}{9 zlO#@{UZ^{Vf!5jeK&+Xi>26P=)^iO5_boKU{5+lF2yW*j|Z6ehy3z zHuIm>1%yU20;DH}%FRvmK+b!1YxFd1;=F{J&QCP|YuK0c>4x}`Bq0tgG#};*T z%OH~gtBq6x$imA2{|YcHb*J-Y$+St;#5x4%#jMjEFlyF@u#>@@cdFnk$6y$o-vx)- zpEZgI&gr#DgJx-&o$Y9WC@o|&C+dLJMKso+^aiwN8KWv{?e55`r;S361^M|YN?xFY z?GUy5sRQ_&lotnjK#c>`JA%r2ChtIJufX!=r})R$3Q4Np@xO4^mYva2G=4_MM%D1> z0D4^`k%6(1od;A<52la_$tO|q!zbrsya0p+YMjsffnCCf1CpF^!_#ZRMNq9LvJ4N- z`iwsi1-v)~EChX6yxahBbtu*XrD3r@s?rosYgSO8-D?U#HxBG9pK|LDS+)Z)k@=qfmfe z0o)GgL_K_j38iG6=O%zC86sEEs70L1o)TU~M_i3ZK`$vss!<#Ms7h1R8c74?0JX8a zt`5;JmZA}(&H^Eu9UYeU3z3XYrL=iX#-2U#@XE(Dpu^cZsiC^#^fzy+dDbjt(rM4S z&S7YsDlr?K!4?IssDwM=OgX*a=XAPhEW6FHtnI2z%xQJ>^e1_Ni4mVI&m+BYW#qb# z9}N1_31<>bZH@rqR6jt|_HLNAt2Pme)V7tYTAiMap8BVqOwV@Ho!uDyPmnD&FOk{^ zOO2&EDUB_SWqU4~_Lp{Ds17({!0!zL=IikXy#a4iTJp;v_hCteCX04lq}}WOOxe2j z-OAc`qx*k;{dJrE;i|RW|I&Tkwsl<(ZwbC7J-3y8s8a_%_Vh5Q25+wHsvZJKMgM%I zhlcSCWeQ*lIfRC-x$~bSbtwYll{M#O-a(8vnDnS(%43?*h0ulhi~GL_{+kl!yJ_$O zl38ue=;`B#tYo?Pi~FB&od4|k=hgE+IRE|g-#Pz-pWJ```SUNF|3muL3+G=s|2=&B z1^oM!pH$Dkr2eFWf8lS>(+keOjGsLJlPbRZlZVg0c>dquFBN)&il5LczE7_NZtTX8%;~ngGJwbnA9|7-C&p(0%zDGZy$(-q#u>QGE{)p@H4SI{Za({er9oP6?fA=F)(x1x^*bD|{Q! zyB^tO%J_%aLt)^m;}`dTnmXqK*ws(7f8<|)|5V4jyT(Ro#v~>THuy2}Cbq`!eorWs z*4$oa0OZ+02fBj^k!;gtU&+G40FbGxPYk#MoBmE2UD?@K$*ZczANc-W!a7&(8r!dg zhfZFP4*Ox&orgrZ+!&g-G|RkkG0qKMQZX}yR%13`mVt10_k~9>xK16IB#$vXy1PCj z!)Gx|mo!s^qv9YG3|vI~p5f@xSOmR|4Qn)P4ZU)lNT!NitSkmccv#0LsI>}ZGx%$- z$7QotQhU4DfB_?UH@ehpH~#Oa%SFCrJSGsp2c3y@I)t8TpC1hjAgY1Y!^uP}G_NOS z<;C5OvbxSWXtrvTo2)v1=F2@bH}cA(9a_7QHLwE@%E6EC^|&;*10ZJ~4R)|6mG;Xv z5zFd)CY<1nic%eZ;0GKDu!|rMS3cWusoH*BYC_XMp6v6Wiwhm=&^enuJ#E(PxLB(r zAA4AUM9CG!0q!CDSWc?L<%Q&Z9V}(G_e5)F&FN3OK#AZ-(kFogQV5uQr`_h5wyO%6 zjvM(|YFLF!P@qn$jVB5Bj`lr2}IcfgwZa z>a|<5YP)I^^HBNFgI~O%b{REdr#gSY+bS8kmNxSjLZ$c$;$ayU>g0ou1~j*c95 zo?3<&y9IjIV8Y>bwHmGspBnxTYXyS+c6w5J8aTk9!{zgNU5J70U65^8l{?kBUZBdt zgO3HQGPu!{0Z=3>lYuYoPiSaE_a#Ca20jrt5&#f3uQF2xtyUE>00mXgJ+N)&m9VqiET-&*OP>d?o2kRbv3FzNm-C=rF(;~Apu z)Is(EW)x7Dzyur6Ch)$3+p#~~H>M&NIuJp~HF*c0W6ya>8z%tcJwxi4`v0@{F3@eB z=bh*0n`BX@XxU9&H}UkdJdUJLgmAya>pCC_QIvQyNJ^1iH~j#7AYp<40}ztwHnl;@ zvgJ{xanekZHq+)}H*p#_aof~#FPSrDGP6CWqj+{_y7unumi2BsXSX|NcRRCt&Yqcb zc7MeSQg%4pX;oV!^X6ml)7PxB<18yC7zmQMfEevv z_7I96?mYK)^|lKy&dGi%ZU~4EWIx9%_`XN#ZPi|BPqNkIB>jjbC|wrxlR1FFXY>PO9{A#>X+sgOXv{1w8IVUG z7?R&ksM;85l_6mQ(+?y)2a~f?iNv(d0c+Knm;oo85z7D~!NKvxLVj=5Wvj5GGwqk` zrp~PGz3_VX zHw%vzR~GSF;b>cc9LTD6wj?+lX_(e4$V_kCO<ihh9cZPZe#VW7PTcZVw5mi zG%E{U_-gK))qi;5C0wf!ZK!$!LitqHC;elCbaNXO*><+EM3PYot5eiBCBHXDUay#^ z`f4sp5;pIM3uf|}qY0@<&Ttn@&%|fY-pM0+d_0jH9ipR~;^WBVuzoV3&m?E3>1{qT zdV*Ax>ho^BYigUkOvBZH>a+@(u~<49Npo|=q5%&*AHh)6?Q|d7i?>?W-fAGmr3IsO z?%oUECTiETXBLmw&-jcQUaVS+oq9$AG}L&pg25lCb5B7ADCOI9u}~1UTau({N|RK} z+2W*;LWw0IJ8k4?s&+b+Nh?CwRWj%Je{@_%gLAp4M|<#v&}<%2e+i4;N)(wIi=w)c zhYuN$dUFucR87aJo|0LnUapV;D86v-7I|Tg#GII&Y^9*Mc;yY&*ND@Dmp0TpWOaF3 z1db@@IlPGc3V1+1BTK7lIY+Ga8tO0m1$m%eOVB>@S~yGUQG9kk&fTIZL}dDba5Sc8 zmk)Y$@#-JTEmjs~kC^Cp2;{oFitvs@hf4?v0$>h;D)t3#d{ccxW?f$@87pS#qq^UE z3iW%TU6l7|et$Iw|1QO34i~RNyXj|f?rvvcpeVxIVdDkSTm)hQe1omA&c`%zP-Tjm{?@jY%K|l1=>?JvrDX?%(eh%5POe}bk_rNK6Sqw+ z4+>5t-bdLUN++*hGC94R7n7TS8VI14L9+x4hV`yw!h@>HpeSjioG&-X8#PX`YAJ0a)|!jrj6FFzwqrF zMe?fyf(<2UEbek5Q(=lCp0J$3Mf0QjiCkKh@2E=67mN8r*tBdGn*d-2X2xa3tY}pt zRA;Ys|Bst!1;W#f_S<3Lk$lluUg9pWVMK!_w+)<+%CW)>72tblQf0%2v& z$O}t8sY`t%J~F8fP0r5PlQu?&M&sD&iTH`cNPPY2^|eVozJ5NL;Fr@g0BY7hH_pZ1 z;yyVJ+NQ-}lcSXz=@;gUDiMhI1lgBctGVT>-IQDJjdw8r@59=j)!sXIdv~4LdG7i@yKX`I@Q#n)bP8$O|E+%P z!e1@OA$y=IP+;6>Ib@cdGVyc?E+{R3SU+ZxQZ21;wF*P0U9*$#7TW4`;UOFiO3#tJ>i9DOmjWWc?FHkF&dmp0M#e$qDs7G}LkY~b=Bx7dm zEnJ!}!v1r(_TdBRm^TzkrP8pgg*<^!)Ei)1uX0B_EZWr_oxSj*TO?C*pF!ryHvLD8 zMGh%kyS3a1tkiR6GBLIO8-rum20fk}K_$_=-X7vK_GJAJ3i=A+mvB!RnHJj-cc^p8 ztt?eigh0JLSa_Z$H3o!aJ#WR)(>nez3`>+ZW=6d92Zel|02%E_)NNH@>t(ySvm{#v z+1G3Tx!!^5;}`zZgQA;4A94>CQ{d1uTrEeI2kBAidG|k z`Qi)n66F>Ps|PQ#4fy@V=B*f1Hq?Qg4L%toviGs715#%U}45fXu~R{Xlgm z?$ZtEi&Q^l!*a_+@A^1Nsgi!&B&%y?2nY@_5bN=rK3k9&9n|{@kt-XQ0@)?u0#^yf zA19bgMJT684U{m5%eky|uT)azfa+r&NCT1wE>35DLrfx2arL^S0%q2~oIL)6@17!U zKRbSOHYwlE=;T+9CmzxzJs%fnb8pY7AAC1C{)6x8>hby*KkXpEOA7+y_l67v0=H0>^nWSK z895Cb9BoVp8al*zG8x3Lgrnql_!Ta-v{(?ZFwAee0;El$E3)HG6**pBa9%SKi-sZr z{5Nla1cOUJO|#%OFWP;~B*;an=a{dP|>j!)= z0n7BS04aF5GRSo15-@lP&G|8fW*Piaq~@+1EBXt5(fh6A;G*1!c@3gJ#EX#56+Sw zXeuQ4_K=O0nDa=2QZu7QRp}XS#R$U}Nn|JEQ=?2GWv0aF*wMH=a5_FQLpEVzhNJ?8 zf}zPHE!UTG2i1zqsF74{zUpXK(xLtG|r-yywAHCahKycABUGls`p(oic|^2eE2D zaPO?>qo+A@;{f$fdtU$T*S`l~-W?Pk;QZT))Nj!kWhBSU(+1fPt6zYRQLDR(8-${{ zL+77yw6Vt4iE$0avZgQK%Vq;mxibv`t#nzW-E!4#+JL9LpZU9hfUTaM6Er2*zk}#t z1NLvuv?dX&e4K4>n~96`GAKkVc}G4Ee^zxyN_?K9{-xUZh^(x-kyX4^B^uial~!=F zxwxa`)YB!wwDVY-zKa4>Gx3#_#l&^B--yGURBK9b=(K1X@zWfl=Zhqxxvp{05r2{X zOnN?L)MO2@D1`u7(If(t?g$w?OW`xEPo_AsqcW@DpAfoX5$?3 zE0#9DdF5Nw9|Q>tW$xVaeRQclR%^Ir1$Kr2PR8XnR16z8*z)ORI~jVDD^qHrXSJaO zDId}r4XIKmDi16GOnlclsbOuO5+LjcauqaU{y-?>k9n}W;Q;J@?%WF-AlGS4$MOk`(%al}y1Y91Ykzxd6W(_-(7N6{DF?Q(snTKtl;75%(j0FRt`eq*1;qB) zy+GSI%e7As;@(Q7y@o&SOPfqg2nXruaob3><*LrUbPYqjcJSB!-MzPI2brf^g;sEu zuu!I(AI0o1s$`eBu#h{cGWb|K(DK-OxeXxGCpSZILz$@zn#eAbIgM*6ut&-?H}Vcz zRD>Qzo}GQ;n{S?bb4{0T86WoYn`>|U{+rLLAK&=ao6o#??u|cq^I5WoW8;bA$4Sz> z@trrH<(J=h<7Jp0-+YE|UV7s@Egnm2ipHuL;J-*mx{t~+DFw&#sAbB0fppZDjb{Bu z+Mts|Jda@HYD+R57PVz}H2|cimOk_Av&!9A5X)`H@Ymdpy1Q}B;Ycq(;;6aP=}lyp zO&hUL)^B>vpoikTpRNR#LH1UQcHKm2+VwyE_62s=R(^l(K<`ao)^=R?>)Q3dbKS4^ z-n#qz&0pB@;`{TH{P?`<)!xs2IjJ19d+biQmcXKG%prDw+mRmC35x<=MxPs*aN19c zrUx!I#{GC*BEz;=)3JNaq1Goq_ZwW;PN+qtzr|(!3C|B)3$^OEwLpCV@C)%ag@*tE zg+B{(V-PGW1t;3m++_&1Ue?jvt_2l#rGnC!c#Qw`L=TfrMnUVZYZ1rOc4&^~7Sq82ELU z_P&-w>a?n@?%kq4SiAmn-#;T|(A5VXEYiE6fVSF%3?`>7q_QN_qcW=Epvnwn*}(18 zXsbvnEkiRXw2G<9;*y>zQbd!+lv)lxw@5urdIgr~0nD2`G;YDKr5LKn{3^tU&xYvC+4<$1bx|b+6d5? z5Xq*&Ra0FJGV{RQ4SxA0ZE-%e@VP(!kTN`T?O7;(!VS+)USeoVUIvAMYxNyLIiqYddgl z2d?eFwH>&&1MkKTtUmf|VK4R6)!W4lJ5}u!c7Di1r3Y#na&rES6D8*bBV$e328&Op zPR(tlm?|w&%30<)()J7GyW&4DnNoVyr*MhE+L(DgYZIj7^a|MnsU9BB|6ADGnIedD zV4iJiuvbDA8fBcPJIA$=7gVicdjZ`W-btou{@sxBPugpq{m_L4)#hQ)H_8V z0f|s65EPskQJw^KEsv{V-N=clIB(FpeT>R$7t7p|WU(?_E z%IaHR`9po<;%|BQy+_}8^|KqVetzTCU*{`<;H%GVy!sjb`WqV;f1hX20=iWQxV;zK zxOh>$fiKFNx%l$N#j1LTyvDOlZ((Mhk1U^&-qOKJCL^rFdZJ_i0}h6WTllRpU+a=u zwjXUCc1w`hw1RykCj=h0Y?113GxOC*a9&-w5E7E3$pKA^jee?5xmyd+#jKend{^r#`R6m~*wwho>6lr??ho3%EYoB?PPV>THpG$~x?b%)W zxW97Y9!Yt`g$HJcQ4Bu$Aw3T%bPnwIvNXeiJrb~tbUkc5|3@1yd|D+No+Rh+(#G@O z+j#!_8_$1p}XR)s5$WL;di=GaJuefvWAw{poX$Q{RUD{a#qH>2KY9x!SdJaoAX zzD}R3K;b0c7z!TLc%rZ5J_OEW@T$ zT&$FCV*7%7{*15MqkaFm@Biuhzxw|7zJK5M*M0v(-@onqQQx2Ut@r&|-z$AD_x*0) z3wvJg`|Z9j^?k1I(|u3(Rr`LquhLiS%k`!E9@+C}eJA@K>^t6<*t6dEKwq@a*Y}aW zd-^`q_kq4Wd;Yv{XP>s`|K0QVd;V_EU+(!|_WY0XV%Pq=wgcC8;Mxvc+ktC4aBT;! z?ZCAixV8h=cHr6$T-$+bJ8&gCaPpO%JpAGRo*6e)JFa>&irOY_esR{!)E z|NLV0uY?x=k?Ow|7QA1me)Shv<&MAm6@GZ=-$(-e)W7;LUqAlCAiux!)hyqiczKDh zvoHTVUuVAi0lrRuL*7a9>%y<~;Fsh*PJQ7ce4YHPFqcj|_aVNHKX)Tv$3D%=T-W=o ztbFYJ3BHa#Eg$gcIfJhw=j2&O&PfEHcxo44htJ;6*P&{RuY=W}F`&UeDJD zmihAYb9}j9_Tax7=gWPEdT;zV{Qn=*uK&C1X0(s(`Ti}h?Vh~(sU2_KWb)^2{I|OI zroGyLRt=5zYyC_LmrpoWtmMiAldxly7*e*pG6Vc_S~`6tO)b;GsM65VUw?ogkAO6K zKdMufDJY6Xu#YnDmhL&bL)+%bbJ&95*qDXQP3DRnNyaDEpN@}CLn}DxQLosN?rV9j zlj5_n79kQ=?g}%F3)p#;qmz@z*M15@(gAJt6ob?H)u<(8W)@00eM}nuvWyqZk1P5f z09<@@$!)@NQOwF5!ZT!Uoo;aQ{VQ{d($8WTv6<$eg=x1-N8q_j3w^n?tCtk-C>vdC zN~iio=9r~Fs_$#Nd;9bQEgQw~fVR6l79UBD9yu~OJ9cFoosDHO{&YB$jl_Im54?@h za5UhuP0-o<4r|)tC@|A71y(M%5Q?ondV>HT}P zkhb~+W9en{??mS;HfV;Z$SBi67+7HlX%Yff*&+#X%re^@r>06}3N|`5i@*|!FH9pr zz3;%03PZrLz0(Sn>xd_8izggXHd+R*g2`osQadB9@3SSgPnB&&{`HyijS~&_b(FPg zNQm_IoERQ#G1JZk*d&oi)(AtO#_Y0ej5wW5z)E8 zBbJB;sDo`OqAp9st}|LvZ9W5^+=Fi8E@ zy6XX(?3>=FX4%5>xS$5}G7-R<2m*f!BLl=gC}st8&3l>V3F@}bl_AX@hbBp=St^Xt zl~KFUt)RXF{ z2T^0>&loFIBdzz-$ ztZQrF6x82lu2fWv@P=uPFT4VKL&ca@@WYH|%6QDe>e4NHwSH}N*BqLR>vuZ=#`<|R zU^=OW5Ezws-PE_UG5|eF!VU{v^N3Lq2uBBhu92u{Uvm9?8&9o`M>ljdo*aW`8@jWR z`0Uu25Yi`md)hz0gW0fMuP}q7VmJh0CZaIEGr|SijnmfvB0w1 zc>~KX4A6{2IUpx~n%N2#7bkA9nNf6%OQ<~qLO2Zh73docNINR|CHOn)q)c|(gaB^r z+hE_Z3Wu1v0?=~r6Nev;vmErC2sSIdQkyS;vYu3@?ud2C6TGo zw6zc|SQ#S zE$8a6G{FU|9R)&O{E*Y zetn2vz0?1#?H}K(#k94Zg6x>C?))HLG84M=cs?uem*b`k>Jk8GS?<7^zsz}R3ZOZ3 z$0dM{=jAZ#qoZ=p;Mj)+8R}$7JcvYFXTLfeZUzJT=9u@9gOgtjFQY-!5t4hAKM4!n z;zv1KkTvF*Dx~j=@2iK{7Dd0q{!+tmfU0MJt@4)W-SoE{KSwX% zUYpBt1`qp#ZjEX461LPAi#g1-zZ)*~>cVj)sq1V>32dt?l6nt{DY%uG07F~Hg>FjF6e|6By?AH`@MNCLR)P({Z<*%?=zwSGm^sZhAO!wq%XK4AU0C*0a-L)`%mlh#xi{Ug}H_i=(4t~DAO&4C|*2GUJZ0~=iBed`j;n; z=!sdFl4WKOmy|Ei;V>E%aVO{D*a&2zv4}tG^QVnWkjdu(Z_p3FxvObBTdrygFNOQO z$goW3F54#3dZ3VQjMdhTd{hbUB$GjX&OvMxTtPQ8X8w$sD{o(D?QH7XDYJ)8CPptW zG8vZKEK|qRsBbqC3&gS_NUtyE34jca!q$GZLhP_=_fOy_Vj{@3!@dTK+9*f@AQ&nQ z@~D<$=Zv~gQBsHV_qH58GB6N2X6fG;SRzRyu^HV0@RDpI0v4MUZ4)Y-+3 zB*?lniqsp~@|bcw8S3cuhqKW@#1jbme2gNxdI`5*wfhqO`N&>vzjk)#DI|Qdy8CW% zIE(XS!HA!YIioPMMMN-SGIQJ1PZ~_}EX*;V#tN*nxe{5nZKZD`%m|h2dL$OpSurbzyH!!nN%+>YhR4V6f$+dk+QC&qZ=0GROlB=2c|86cm%lr?{WjBXj~#*P zo>>!7eYk^)G-S&B(U40|wsjF(0Sb&DCkP{=TKnmcwis^+W5fa2n z3St3{3w>B>x*X@zbo({7gVM1m5@WmG`M+P+wjY^TVEw zfQM^p`AjT~(tAd6UBjj1k{9>G~Rk3L2DYeha$lJ9pZjcjJ z5rUdNFG4QIV0>sHW50#op4!Ll?HN~wFVx)3eP%LrXDG!(NbS(N(l7y{LVa(-0OF`u*xU>x5WNxu_y|uMD?}T3H$&lgnMFTP@ z;wm+x!=l~S4F7{lGah)~X+}Gj*w|L^CR)G(HXv@8DS=ooRIJL>H2{hV&D8EqtJNqL!dzgN(Z86#fp^0?`W^* zmtP*x))CT29{t$pcw!>)kc7K>tTow#*yEh}b;kCZe{wEx*7&FLcfQmdu8LAj3h!hZpZe)xl5V?|1CwP&4 zx4Tkod=((A_Wdb`n)CDfj@X?Rb~RyH@Q~mykzZ%@;fs1-`<-((hh ztxKm>C;WJysc_a8z_3L!iM11H!33_FvAU%=0*Sf+y@^yS zCBoK>8P`{c0OmN7CYdTJ(gGKxOvE=TM#z|gH&T`%OTrkHlKGP0`{+z6W-J_$C=7L4 zNpJzUQ&}l7FNDoXumYb5 zFuo(3iZaZ@9|LW6wSY4Po@ldX_XYbwSm8ymQf#N)Om$Mc&jl-oJFH(utStfz#M}ao z>|>}FutjqukBKZ4{ZXfueg)9yLVBPX{k(RU;T*dk8|kQH7ryMV+bo}}yE>6i*m2vt zDxcM#`K4QFO!R%QUMEi)xy7PB%1BfFD72Wxp?tBDp=L)~M84+CGI?}S&=ylu`^>q5 zaPG;l6@Lmp!ZcDDgPcVy5)MW|FuJ@iwpz98hGq4^hxcmtFGkJ}j~X*L4o9e2O7)}$!4ZnKD@ag_Dc_VTY_q3=bOT-Q4~4VTAi~igeNirB zi)?*Q+ppU7JzbmlxWtL8WpEjH*eSv>T7z-R%7E;LDO){G4w<{Mxq7AGyT>X-ltc7F zP~&P3;oUMbbJ_Bf+|r$0Z!703AmFVl2YvzX4^GG%MjKkR5a~=HcFW=Yh+>` zZ#YPIv)kZlt3|smQi=b2wC`zq{$=mdEkD)s-Cfn4|6xbw#{cR1|Hv=jtN)$7Z+Wlw z3GM71EB)FCw4o0?42c50?F-U4HCLx}q$|)*4*NkLCM`R~CHn4*Ew(0^n*&L6 z1oB57cfc13MFxQQL{)DOPQ3{$uS}0uKD}wExxHD6>$v=O2suK&VF9pMJ~ubNY%1uc zdNf&uEbu`I{RC}<)oVnVShUns(Ltt3-T@S+6(c(3c75NauU`7SOMh_b57}TCI14)`5lUCEKO1+eefh$Z&gmF8$`E&tLk=rROg_r>=NEzxnE= zFI@WErROevU0(C^{P^6ZFJ1cWOJCG9(}4mxIo+{S39PedQXZuankpIs)@6Xb zF)#(E)t%}Haim3bVSm`9NSO&`Qn9R*DWl;?#BG_W zqUnNJraiD==*ddCY@RU&)E~sfGmW`Cc|+wRlsNgKZHU{-EXwI0QO!sM{ZPi6u$oA6 zk0aO)=GQ?&a%%KrEvL#kICSaO<{08y2ZND};U`Py@ka2o@e19Yr>&Rmz7%#8l@yG3 zN(!|KZ~J|hJgiN7QQ5=4I$QVD6jG07XIV1=yC`7-{QeyDpQ} zLyMM7Bq*P)?hnhB4iR-uR?YjD{a$(=MHY*;^s)`jbm4JkJ0>qogdL;Am#98S2iTnLY*S-KY&=+P=SrP?!V&FevD%rcE0n4=U8p8`JCwTe()A`6 z(nqE!F{~7(<+|UVuB6i@*`!p|PnF3Zq$m<`iJ5NDm3C`(T~}7;epQevs}X$sdl~&D zzUwh696}Cq)L1bUuZca=j*x6g8Hl#2htU!^`$7hkNsi~rF>b^%3k*emC$uP*HmGS) z_HPx#S^Y$B>GQ9@C;$iX{Owm&-#fu^j<+x6KcCla%DZU=XV0(JgDrl_-syhrgTMsd zFFQS&R6E^jL+y=k-Se2++2+oc%K}~6@wK0RT%oXTy1Q#TPW;d|9oj^ErnD0@mFW8@ zv;gzc7m`sonZ0XW0N>P)K#RfZB$$ZHKH8dKSfE>i*|VaKLgj4}j2(cq5sP(sbZmNe zf*6(fZfbCE#@mT(oBQFfTp%t>taX7<7qWoV<5y{$&c+{;s`%MEAEq^r@`Lb&bgER< zXaQ6e$?>`tS1|har5;aZDpn!H$=Tpn%7$f(iWH<&uc!PxHDAOh5x>-?$HGM^k^x70 z55cS@fJJ(v4T|E%f@$SPsedW@ZF(#rB5Ys7lBMk`*1k)h|It%Fs{ZI7|LDm}uh0#u zL}t`Mt}e?Ml%Zar5cMLJsxR0D3`!Nc^J{+9u4Ze!cyG^$6sMH-SoICZhT4UQK-!vP^RcbWb=$GMWNc%eH=P&(oxC$@VsJK*9KpzrRUQ*GGG&^B4Sx_9 zJ)n;awYV#e+U9FdvS51@v?3w+x56GTQy8LtPQNSurfsa-bp>AQukKa?yh&)BE-S!h zXwo(%w5i(O6lpnmku9UB7U2Xp3#Tqgl}6zKZN-%}y{1X}+ndUSJW;Z>{)pSit4Un# z*X_Qz?yB~PxT?9gL0sFDRr{jwl?o`*Q9$W*Hq4ZZR2DQ?AVMdNH|#PTXckc0b-OR1 z4_Dz+2DP~x0p0x$oTsL^p+O1+bQk#l=f&LrC_iI1Uac2qhRWf?N5JcE?*}|YmGpwBj zFPP~CPjXbn0XTKAo{xKm_`jA*@<4L*pnkuTtghw29SyRRhM{cQFNMco#0*7Z9ymya zEzzaVx5b){=3H&y`N1l)ngZII;p-1H>r1>ar__ZB77*W>e&h zS}4zKYdxraC=V(?*+NpAq6_iOy3i&ey*>2^`!Yr>6NrUFL6n4RAP@)#+|oJM^3?6u z?3Q}Os*J5VsGU98->*e%bAsnv$xwe7FCrYw2rY3&P7%9^!1fL1N>(a@;IUE`i%t4~ zsa-~eY4y_js5qLSiIFnaV3Ar#T8dw4Fa`CGVAL9g;#y-Y>D#JsCF&!tx2-UwKum0t zo%5K-)34n-%3@sBuBgx58v*z%?3=096<`mVYd*G zM&)U~Cy*%tnYNyIB5cZE*O_!}b)h$;6^~-F8f|NIv4o72*HH!dE3A!x#*TmI+ zO-Eeai~o0yX*X+0?WW}$)~@>(T5`|6TfWuv^38wZKDJ+7s(wIPsaEee)vrCQs5}@) z2#&r;a;hMFkUETXdSWG|U__NdI!}=l2rbjC8UpACD{>?UMK73>#d+PPk*FPBCo4Ia zh|eTPKdv92oEV)LfthnSk<=#=d>xBV3@0Y`ZS?@^F8ux8A4ij7*qlvZ{!c zt!Fu^vP6scK*}f|_7e}d3$B}&uoYp@H0MD>uf?jjtM;{1?D;91lH*<2b7hZ}$F;3Z zZDp5sq>ZD2>^tmfVAGx|@K!JoiKU_@`L`gQ>M$m`EDG1Qxznm$KZ0wE)!Wp88D;#{ zc$b9tww;!GPRhD`msQRx#ob<9+)C);YDwJO;&D4-?{t*f2|S&Or5QG4M&Q~Dgo)jP zewS#qMuE3owfh2}sqR$*e?;a1c1hrGr-jrHI3ntFG7oM?^sP2@vt0dtkR8#i-!y;% zc|swt-y4X!OrF%`+F{kM%axgzMfdmSwP#-84y=``KP&O<+0g}#5srq8p*i8v$2~%( zkfD$z{FFt7sDq1;t^xI*|Rn*`McBW$r&!jSEPy}r< ztVSNkg^n?%fhjX6B-I56i$nZufx2*V?GQ!KQ~cSWNrD$9Nu%nn(q?QdEinwxDFIk7 z$9sWUgt-m%Oqf*%s0{*BSciR6lgXJ`2#72g#3KANr|E-idZQApwNJoI>5~BWX7pKo zM33uZy*;d^&zzvjrG7dwt&dI&N$aalXRO|7XpwksvOkAIF}Fh_o0qT;XPap_mFk^J z>XYxJ)LX6VHNh{<7dcyp8>Qyf<7&_yuYd&ZK^ImSvliiCe8j97#h?{GC zz!t;^s4SJL#~C^ef2!imsXxPrK-zwJVmV#PEvc4NBSlM~4Z>J9-Q0}Mb=%1!5=Sb$ z>H74CA};$#YImht!ajRWZ1GU_r`5jSDe>IN zCW0@TNk@GlKiQuspn~G&0o`YY9G>eeEG)vulsxLLwg>*<*lA&>n2`H zRvDeF9jq=c^xv0INu7J1I1XS{##Wypr(>3m(i1ONnKe0+PWl7Z47|Bw24*aEPuUcB z2c6LkHvUu{B_=9U=gxpTBI~wXn}l4-rBc!`DA(p0dqysdT_wXaG&ynPho2>OkI%q^ zb~G_|A~7>M6o=kybTE;eiG%j}>)(8dFh}L=k{uG?d(ChK<)EvyG`QEfaYaDMw9m>lgC?qr{HCLCm#Tz&7RX%cWC6@ zbew3{+3YcGuIjh(mh|KdGmded@SU#ITf%q*Q-Fqip_Ca7GCnm(mB6*}aPHAgt9IRZ zoPD_ZA*D(WZd;YgbnbJiH))gq%02O|^y#Xdak7-+H@~~i_+`|qQ|npHCj*8M^9N!< zpFf+WU!7u z3@z&v^7(u%SEzFz*0h0u&uv26u~%vdTYEP9{bW`Cn=8x=TzmL?dI!!vT9tu)_da#| z1O1@~@GI|0Xqt3J3I*$6@$`y4y7{D$PtP9#dOnah8QKOHTa9_i_T9j`1JQ&%NwK)r z12qbXj@wwA<3aO9t8Q3UNfv@U3&aWW3q4fgWtJ;TqR|rQ!Np_d@jIonN>VjWrbhn7 zQ(VUDm6j*#0V*n#WjwmyAy2T1lP#RVa*^-|kTNuY*77%&=gEy&r;76EqcWB(8jxbT zUpy~9VM#xOZ*AaHTdgg!+K^gG-qkTmolfag9tUL|PMj)zGAb_SvE5|66(tpg z|JP=<-ap@6*!2&09=qw+ZutMM|9O6KHUF)dXYap_rufyH9_(MNegHm(4{CRmNAahV zP@@eDmWoCOZm%Ok#Ep@KieK3G#Q>8JPzLwtxLsIJwtA3s9Ka)W=_$E^4crO z1YeH4_Dbu#%%(RoY~}>c&&uEf=Rh?;2%F(|!)6vHG6h+vKVFRWv=#PXMCB)*npOmY zBgKsUIn^^^R}p(I4>`g{%sa@8TTrYujZnV- z>@A$>(bdB=vn5~zm79E;8#!10;i_@Q&``XrUlpt2QT<4`Ig72L%!3+tGhvo?3mTD=UI4y)cKwa3fbu!M$*+v_zUoW6+ zE?OraN(?AIGWjW1j~d=f?Wj4&2`3Dyo5S?E zxP%NeE@1EXc(JhlB1pEplcL+^X=)`bjI06V>A$z?JB2)OR_?@b&de7V+1hCtT?{J- z5bqW29yrSM!q(F8canxd?E;g@43x_Vq;;cFa%Cmoe(8iccu=|pj6lZlG0uvg$?9I6 zz&fpI%P`6Q&RL9;+mv3DEj+PGr}e%2t7gIy-92y+O;_M>(PxYmX!h0jTor?P#?Cp3 z^UlYJ8PCnfC?zmwfRecO^)n?9Rl(e=8;?^bY=#t-JBw5w#+Z%pKkMYY1A+{aGY=t1 z8f$|wk1rHs^tjtXm3{KU9oDo3N&5qRtOKKqDbqQQSCuh8QZ3)6-KCK^zXQTyo4Es+ z!B{R`$;*XCH*7Wsdkb8!1Z?&dzEm`q)f8)_!+`1^eie+P;)rjkI9j*XWgBGWI+Sb8 zN@+0=yLP!n@QNh-ecX_je2C7D)A>h*Xy?Fmo(g0^fV0-nOaKo=i}U89)s5Yn(~{-e zqXYC>p}XONZ3{w}9-BOom>4~#<^bC-f6z0nkAW{Zp(peSSlo~4T&zq;nixvxQ^~{+ zzXDV61Yr-B?KFh&1>;fubUDYrxD1(`YToVb*)-f9rwM2U4nvvnf<6?yJ(BnKbWq2} zm#w#89*()ig*C0Yr3No}it(q#AAVn-DdEV|t8eIa z!7{uXVq>HajNOz@eW9~Ou#L*a9k?ykYAjywo1WofB||W)PY$Z@>wMF1i;g%ocZZF2 zag)x7hP1vZa4Nu7M)h&j>xX~V+cU#Yv-%(q7Qownh^f61RBg1yygA#)Jy5agc~LTBC zMm*67g^sA-Wn0Hqi`oKGDNRNd$R&5E1_J7CFQbV*2N#Q~xXjn}lAIqSi^-QwXW zgt#%}@kyf872|DC32!KE#8M&hs?2x~$3iY)Z_O&PdC_-HC2l`^T&cwPsp;$WvIy0R29`7RQsT#=4N;eR3L?hU!^B(JGO zheh8pwV>|$TAO>|+OOU>J8*X3sa>~equNw%d}XUtl*R=S9og(NqD3jJNu%w zE?6et78iAb|CkU|0z`>y3Rr6Qy**%;ZoQGoVf|!6pGnS6&(tH4Mm`*c{5xg+jp_k0 zP`j)!u7^qEVV)j#C!%h2D)!+r%)m-2fkt9lpFE<+#}i4shmL=sY9O(z{r(6T}Jp+gdcs zVVurvNpRT}p-NfW>OFJC(`P^O)Xhp^4p;l%b%nuO{ISy)M_szBEzyum){;hTkwvah zTl&vtZS(T(YYUjwYwEH+UZ?2K|VcRxI?4UwSu02k>DmqdeQ zZnoV5IVmwtBHh?sVK-BqQTZE+OtmY65ns|64Edi;FT1iuz^Ac;lOIo_ljm zf8!f(o_*unZ~Xon-+1G9-gw!{8NKnHH=lj;9KU(_jc>GA{6l)nF9xZK%as|=6Orc( zYk^_jc&QeZ8tPBx;b7RM@ER9z1eaedO8tMg_62Rv-rfI4kGX5d&Np`a;Z5JU@gvv& z#dUwhuivfzR)^2QRYQvO9)`4qNRtYH;OP2`1eqm$5UG%^6Wx&(I@!4?8%yZq(-#WG zWh*D3gvbM}K4qD<$HOIQP{{+UvLXpjGBGtfIL2*H`B!@BW)stKsrGhPatUJ%pGIouNrlZZkO3i)Zd5; z>YdVBiWq)0&TZ_#H<8mfKK*)hkN(YyB z)24(2sgMbONZK%sSl9!pD5ODQmqV0mTit2ZMituzRN%UEOuD#NTipxkYz1ACNmYqT zI*-Q>d#v$z+w&;%s1#+3Xp#b7)C_i$bylPi(p{_Ih9xYpf^j&mx_GFH_laDhtR!KE zI{1x?v^~ZG$P@GMsqr6-QfJ_Q+XE4Qg&!Z__?N zjdr!ltCq0$VHoBwP^qi>Qw&njv}*rd{n`gkReR-f5bbL{*rF-Z#nX%cl}NN$@bvgX zm@{cELwO1|075?y(J^HFFXH_1py&0ks{i{+%O{_mo=!TS(f}cAG9C64l~TEU*sZ`f ztj?IpZ#wX$(d30KK%3h*#Kc%yc^`1vR`SwV_8;oRw86R_CV$76xI|pXV zRh?~Kc?`VZ>cdYRyj5G&DnNw$aZT?)q2hG)QzwzbBsNJ#{$@UWk2esz&sZw0f3s|# zHgY7x6@KxeC}5*CQmzPpb#OMdw1cvO%HBB!>%rNCE@kocr{km33CmQeGWj$KhPQsF zDz|J%=bM&2=HwUfVO#ImEJVZ1+>M6a&P8inz}~0w;z}gqw&<|7<0+ULLfYzmOoG3Y z{rx#emdDhPB!=YVz&7FMumAC*#YRoEhQtGQ0%Vz?@}0|{HXxYfv(3|-cx?TTIngEI zDi1QmBIff`F2a}LRAZ2m4BwFnmgyoRUR8BxQF2|G+)^GW6`mm%J(HGcBtp&W^@JvB zU)$f81lV9QK0Qi%Uy`0vzMmMHY!L*n^>{AtXmm=_VEMz)+qt|18W*tlzf1VCv;W|! zJ8#pp{naO?1)2LqH4sA-O#nX|s@e{fyBVxxIfr#Pl33iUhU9Vwjn=V%78>`pSGa;( z9jhkT-@Ay(4P_%SuRj}QFi|iZ@dN@fe?-*M6^V8uP`A^4I_ZCs^@+N$cC$`@>s4y}PpO<(nVb@r9e7yYXkPzga8cG<5yH zwcE~pWUn@&RRg#t0e}Sk+U-w_mX}Yjf0fZB>wi!NtMB}XLAMEfj#dhDauo=>4h9?> zuR{M?FwtbXZF)#CM!Ri#0MWigbf#lAZ?th}!E zPHMye^F=}ynPLYmfEf(>Q;|@}jCv?@gu*_z1Ddv4)VUPazq$-=ZZNlyHS(u(Lqp!n zop~#+$#4PY3Ww=pD;{Q+_~DFcW;|x$>@DXGh*Z{gKiIDw-;PwK!EKc2QvjhrOjcBt zB0FrhoEv?HD;5`0J>YNJ} z1*jCfvcTCOC}xI@pf~LMS%%?&K*;Mel~P59)YMj#OkQoIVO@Wg%;Hks^t9K2-X07H zIuL2219px`qWGh;6C?5Dsm4b;mw&V9B7ulE?ac%|U`HYZ^Df~dTP@mseORrWyIm4T z71Ut}b&!FocF#2~+4@Tb{TNxKLh)DyDOz}2V#|hjvYwbN6PyyP*WKP@v+)UiD4rYx zqQlh4#3?8_^~Cg4eEm7_q2lYd9KYrlaiUK6rcq=&`zB1W(rXd+htjD?(C~UQG00fM zAT$Djkjo%+t3~Z?Pdt=}_PSFb;Jt3>$s0T8_#S6O1)L36IS{xWp#baTO< zY!q;SM~qT>{Usw_W_qNU#S^s2h&!tfm5SxEy_=H5Y~4(?ZR!uLdk33|JD0`TCt097 z*V5YHxjr?8VAAZ@X6&}!6UKs;sG~Y6|aZ-Wvcw%BQNoqNnm`)^5#6{W1;`-p|3w)C%?~P+2E^OsYtx zb2XnaQyx)8r~p01(%fNwK1^pz%*!wr_&I{U$l=D~yyUG0<#T?4kOu=-6+RgjKJVC%&k@-YAgs%}cj5tyVBisenu9FvY2)mLeqnKnI`txCWgIF~-U zbB5Fkwi0Znv{?PAbGvVag2`yG@nX+&n6skJ-15Bm!qa@gUwV89>q5uZXjwWV%M2AZ z=J2>?7|3==exO!>^`ZGAU2L!A zIChBvEoNu{ajiaq+DeX%I_aXB%NR$5P17VFzsxpCN*C)PhF*YwqMkHs$X!TPfg~sS zUY?sPFXfFDDQ+n$&XoB$4HR}snP=906lyjn>J`BgBPXOHsGO75nxNP&^6tXb>4XW^ z8x(uy83v>`rb)ebJOOL$o%s2LPxh%vUOKegd ziT``Ff1vgL{VlKW{=1$Z?0RhH7jJs;hCjXTU-3(At^b^Hn~bc!>9{0=9?7fmL^g+epvh>}U0W#k=rGL+);r=pgx? z<6V#>FGWVWi6wdGh>XzNr|1~oqq2*-MA|h9jy1Y-U9RQMed0DPqE#PxSj0^sREAe3 zjU~dIJae_EyzAq}LcUnZl8PZ2(k`dJ{X=Tvtukc$gjG?Ix=qGhY~j^tZqsij)Q}W@ zj3Rt;xOFJbd*x(CeZDRnOtp$F;qk5wYT<1E;8 z6MmJU^V%<*dqkb>Q_k6zM9>wU?QPcUwsWwX2y@yN=VI^WlkF$IcISFGN>{DY9r>;v zJ$K?(&{V%XOMX=mBvFRV6!WmTtv?S6G)^6x-nTN@d4N9C%N zjCQ2SR_P&OPAz7%bpwQ6$)v;r2ZfP^np#EPXN;0B7Vb3XrT(FO(WuJ=OUoMe&eQ|B z)qikq;#NM_2xRp`zsyIar*R&OekMja@jRi)}Ie!<>6^CfD^d~I<@uSf~P{-`$_ z&153cv_BT|grm#}h0Eq@k5Q*(?Jb!a8ku&ElkmPRrRT~jfq1s(+?X{$!(dhzY9N^4 zqzQ&VvU*4Prkp93vRR2moh0G$Vxa`ldmMa|3`7^yjo|-d;Rq41O1Y?MDfUK_W(R*n zvaV$JWW<72%NO0$DoqZ?)}$erOblz0v_X-a$$qk!O5vFUwxUV1v8oFSLRmfCvJL{| z=fR0eiQ%-UX}Y+$NcR*|Xlr?UF_ogGO8|1H4Jb@APw{(E+IXQr`lwWv)S8{j93qFb z%m6_(#KHdEWhDLDE1h-cwO1sA!N(@$7QO-#Vn0is4qDxzk^@BKmJ=yJ`KHR2r?B;{J32yYL^Y4LGqFeadf(= zuHa<7Rq>%of2^MK%hw$&aMGrmwfPmA%9bccv8{8xzWG-Zrv7$2XUIGKo#L9R%xW#(u?AB-Q3kIQg|Ba_LK z@g&1IXQ!-xc_csUGm|55F(%+{Ax4b0SX<{Lq^wss9CiyTZd}0Lr=ydT$Jg>t!(tfH z&fbd(Nt^89!wiyA^;A2G9t3C!&1|a*#hG8hhlU3Vq+!0`C{er8Nn=5<4mhmcMF(mUIS5D*mCmSf zZZsu-r|F}qrD#B|12$)RbbNCC{Io8quSuv3Teitb34?caiVKGBJh#&ucYey2tJ>0{)SgK}{ghh>#nwK4uGkRs z+O)Cn;g~nZ-0=5qHp?x$Wn;wKwbI_&^0~aEuc}X|)HJzD!GK>$YI>W=jH~4X?wFSj zznAmUA!gpXJE)D)R;$mNEXWDMoxpt;imgUOXpCe(f%fPWw&T17~&R3hK zeB@k4$@dc~Pl@y7B2U@f8pM{V%2?pNY_|PAmzCZ|3Cki~67a+4(hUN3cPYQq0)9_d zncVjCHp-VZx+C7+9luZg|2x`^Ke*w^J%7>LfBlEF@7#RX&YO1sVb8C=2NM9Rx$_~_ z`nmHHR`bAJ3YWYj=5&VaPZ=PX3g2ytFq>A6SXH=`4UmI^a0FzSiK zz<>MQmj1U|)K-UO;?Uw^r7M#HSAXfeOis~OKe)ix@#=MA+MAL9vem?#76+rWZR8CY z8C8;wc?@%^z0LwvHSIh(L*eg$8IYW$9=E6&mWxYP&o>X1#Gcd9v9HZe@AI^Z?aik* ziA}+^Vjz-(zG$mxd@gTMM+!W@JLhlpW6v<-Y`j*-}qpUuNeFK}7(`2`d9BrJMgV52f;(ZDJqVSF&CQUL3pPau!>DS%E+^Nu{NM-B_aHkH_ep^3>+cw-`n|i!c6YdPZPVQ$H`Z|D z_lSj8S*=*D8^STvewPKY!~mwz2eC+lR0}8a#j1lvu~f6Hgn}g)iPFIUc2j=Pwk~MZ}rUne(jE}Tl4sM(slqFg$YzVFFlh7 z=A=qsw@aRo5s}i2D|P9mhL#%WS*)36qQ_|}+BV2u6&D=uc)nt@MprlAcp){5g${WFf5J2gjtz@;nQxIlMI?5g(} zpIleJ%xxv(f|W1r__NJ@<27C>u?+e?r=TOho-ENWw69*iY4D_RqU{Nd!}=+GGC7=> zP?n&zd&$|Oy5sAQxm4EXCG36bqVL>$)BmdNy5VN+#!uaF^UeQq=L0*Ud;YxlU*B?J z_nkL<C zVVA|C`qe2!g>6=CG~`=T3a-wdKcxs8hahac-`?~V!p5e26PKU!(H$TeWQ`ysPHoQa z**k7Cep*-Q_E!!{6u2FUbz0)SDWh_; z$~9N$%SLabHS$&7hJph**J;gT@Vea6#swO8&pmz4+KuNQ-3!fLb(#Q1=4VQZw2nSo z#_2O3*P$2yJ=DZ*rqE!`0I__rxS$}4MP(`kie^v1sSWXRi0$QJP~A6K7`35W;ndLE zXm~TXN%I?NMyf%GVn3->4nDX1W{wX8y!etl4)}Qi$MBCOpDJD)Hks%)KLkn!%wh)Fov{^AffY>LDiCitD>* zE#8MqtrpLh_i7Jl)zL{t8`~#aF_6emHCP!O1{OV8$tmtz+0yplQU#!su{Bx9m0_-} z9o*)56n4$ZezcW$mWO+qPBp5dlgdxb)Tu*S`InoHvpgJN;j&?IhB!LpoI$@^PNK#I zx^#%+=SwQD5!)6o!ie})b~p@b5n!VI!=wVzDxP}^{OoG*$)vKS&&Z68;gAMu31-yf|VSPE)n7P&#Qxj7+4;r&l9d-P+*A|GBZ zfTdg>O1DM8w&i&eH^<^blY@!LI#JL5SfE8Sj#W~Oe>HW-4Xv%$;moN4HTwH``!>BCJQ}m?=L#1X9*#mc!Yx1{WctQW$FMnJAo8M$y=fD5b_w~Oych0J9 zB7kGYl2NdtnH94}>h-9xR4lk=R<1p}I|pm+?hE%ojHy+P)f@V?1*#!Fewrz9W}uz2 z%?WhB3KuWcHd?5ZKWAmBkLDIh%&h>B*GCKGbSbx_YI168tY@oAi9FpIVDI>06XueU z_iQ}>&5akH-gy378_$1#@%(o;UU*X9c;R>T zjpx6|x9S%>i-+<@9xV^4|4n`O{6E`x{`2;epZ`66^+)O@UR96hx!-HicJ+S5oe6-m znVyG;27)RO@^H||H^N6KzW(&QF|QAsr=1(8ARhy1`dzv#4bQhFN_=iE&FjZ2g@Uof z;`x=cH$7WXXr)I!AuaLn+iLHrmUz8g>uiisweMjVu{RP;c^RD^iUvYna_@AmgxoeF zHDQ=KENlz+>Uu)g9(k6T-G{Z+8x-CcMYxO8dL?+{?PJ#5L5^!w2^|r~?`b9sfT&?_ zIOUB+Gc*c#{9%7g#$jGP2)Wb3wpus7LZF+5d(A{Y3t^rhR%p<;+O+KIk(wdf7X& z`veGf8?z5>T4kESY-Gz-rjejdIhpoU&lYZ<+6^UK>j2M~Z<&lU1Vr+IZP`8?PtRZq z4Jly7if#CPfj}l2j50FW6AOeQfl$c++2SAYJ(#>MY#y!wp3@oFn0#Na$U z{KBdj&s6d&M#g-U=1%L~ID%N7XRaFYoq5>r(%v?$U~lhL_U{P)-_6>;)%JX<_vd%_ z-@Ic-?8e`|{$KEm_w#>ii_hJ-R~y&X79SW_!1c&1k-A*2+^f^YWoBh8(dJyN9MTh| z+ydYk(mZjCEp(tfZ!AfZGz2mNA`?5=IRBB!?(?)#Tas#UJ(3i#neKs*lDjn00*rQf*p!lkcV`s$_MzVvnd_~>AA)B=aM*5Niyt90}^J*QavbF zz#PixK82RXHuUJxQ$;NCc zA8#lV&ZfNSlmRWiC+v%a16<(ltiB_&4r_MZ=R0k&XSZ8V98;L;dDSN%yFw9Bqd6Demvm=0 zQI8hU`TV*Nl`Gj>BtbSwni4Ge{U!sb#(wy`GC!!TENxAp7sYF9O{*F7Wn+O*hhx)k($9aw*IFnGrhn_1*xORFYW73ET?VhSXP>Vl+3J5 zIH(2@-Wg~i^tYb;;&gf*BneXs2dtOR6*!BHlvBK@%@d^#sV}T&Z9Y4MFQyxKXG&fL zZnH&u(zCpvZo(U-Ufjc+8fe7r!J}%G8fyyg;OJ3)rITJ3gi#}li}QKO>vOfs^(t?? z1_eEDApse>|psmob+}psQ`PoCH~j4_e29Sntzmr;tDMx`zbx z6}C2{QQ_sS)R?iXDFn_tl&vkx3lHL^m}Tsq%sX8m(@L7+G~M;l~3HYue>Tv&eWO(G7HTn9JtD zO75{DC2NYUO3^4H{w<-I~|Za67X$fFS&<6a?*xnz$p$`_qi}6HF`Pm%h!}53Z-u_7TCpe$ ze{yuhseCdV*=4}mw1Q(n@w=F|Af7V<0+``Al}<;Z^Ru~p8aK|wpm++_z%|9Cw|d{N zJ#i}&r&pfn*M1qqIpa+r5?cRyQ6GZRCND$zrYZa7#m6*pKhT6J#pq+;Us}DhRu^o8 z=oBUdr~xC3*#dzGO{<~BeCMDK8##qwT1rfN^vE~*6{m@%@!hnn z;_SL4HLTGEF~7^^&*mlUeW$xM9P&q3pZK*2H43hGyQAQSm{tOcR>-Wep7a=lyE-{9 zlYA0$CC2<7h=bl|7EeCK{GKKSRM$&~sbAL2udA8+<`1O(ULz9r(7r-$#jTDu&-vQC zsH3*soBJm5|4rJww&z68w|2aC!#TcvTmC!uv(J6#HtjC$nH%shs?LaoQO0nS6H)#} zP8imj`e2l6kVV9xG*pOGEG;Nj+ykG4gfd;huc)NVl1)Lm37Ty=6mk<8 zI?QTs&vK==XAaX^UuRU@R(0FTo=u@g0@p}4P<~dJepH)<((E#AvV#7I+u=|(E2x&R zkMRkQJ~9>`J~e&xT=cm+Z^!>W_sQyBj>jE#vcJUxR~sv?bXmtQ2Bak+5*z`jteCp` zmeUwt1DN3GjpK&HvYe`v<_1m_OH1Mlm&B2#XI8eQ$zv8NHa_7b+=7zHGC4g$uAv&t zhK`RVCI)AdBLk@BiOJ*?6q$)6yK{ZQJzL%Q{zB*9Idzoq6sK85Q{K z9Z|#gKPOYPpoYCOOp#EQMoI!!E`z*8 zj!P!2z~Ug<*F!xfli1d%6AY`wsvIDhHD%u{q=1*HN09X>%ZO4Hz;a|bu!}}%;iKvR zjtl%!!HUU4t0c99y|k2B9WZ$Vyqr9Xi^a&(Xkm{sbMRv7R7$S5er3qY)*9C5b6ld@ z2d_Ox#d{#Ms6n$lE3*eHtei_jHeV@8;uw}t7@aN9q%1@{ZQVz<@;5{*^>?6NSG@%Q zy3XY#IB6msRiCjxgglNk_zY6P>9)E>>@6H!rj`i9bIozZvLr`UklH5dPCC)6+9D?? z5$USSQeM+~8Hr0|;3Kl-p^m%=iMdX>=hb^{R2XOPE`On^=QR%?J|y5`*=W%%&&cTH z(9uyYxf7TG%BgVQCPybGRe+3(&p=dtoI=7->kT)VUs;5+RX<7O&)XYOa8;#I_ETH8 z$vNtluc!rQ634J3|RGf{Gl*Rv2H8>TdZjx@~(#8Pak-WVUmV+{_fFnZKzz` zFFF1xDmrsHDmn~Ah1i7HNh&VTm6QDu!fytp9ycC07K&w2tmQK%U!&wr#8|s5t0Zxms z=^D6{lryXp57>02A@Z<_eGF1Y9nx;Em=+IIOio!vm5oi~;v7)$F&{%Y=;KhjrXR50 zxIFG4O5bd_tOgZ~vvwQG2UNUQF?VA292cC;V}u`BLgi97 zh=?5`dZa?`WD!ew6sEPFPoj%G(`iM7J`$&$%qHKBXEyIVLC){U8=b0brd^%-3 z8a4(;Q+M99IGwt;wRdn+b!OAEXOlq7)l;1VOC+0?Nyag6I1}`yquEd(?1_3AALxs@ z>@&Fhl3l-(*FOB*&RewsZS6i%W!mv4r2aZlq^LGRV;~@5##|QUKsHBsqLAYS<59s8 z&u}*6Qp}53YqDx|Y{w1$rhix|n2K{GyooyO**T0nafSUFh_UXOH8{#OQ+_~imt`*DyA!`Mt*P7V2+iIGkO*c{(wOmfgAJ5BxR zw&;f3R!)0+e^%Sg-1pu0?Ye*GukQF6*#EzFed@Y>+DPB--oM{=DxiAuvm>`^4C#n->n;tLN}{(tt~J-n^^yz_+bHXZufY{pGJK9=i9ibN3i ziybEgNl1dkTX>Nor-^e2fFw*1U;sigm9`E@$xbruOp`QC+~(%Ssq3_9qNb_sblN^^ zCezv7)^Ydg%-Ss9hpYc9dQY?=H(URT`TXiqrgB*=$XDc>lsi0e&^fouWR zp8{@ev56?X8}w&xcLH0x=X%9@jD^~z6`=t$%2$YaT6aE8ji84DKkrL3Y;EZF1xe-g zd>Ly=pg6h&yLKY9&>nJJWFK3p?oUV5o`!CZh=Pr9;DC>G$Sxh;kT15Z#a{9Atudl1 z&z{tuTc7*%m|*Rir;zA(VO76V5H)mFJXu!CO%@9TQFD|7N&+Z>=^$py0ZG_OY$z1N zc~u&y)+qD4G3c@wGOR0p8>+eIN@XxpP!?f#i+CKG%1q}*IlL#cBU2Mju4DA{9d_hk zH>{V+gNaxe2Sz^RCJJsk5sW25$!IFwBQ9x&HqH1>RTuC*uiC((4H&(?%4Hi5etJ}@ zRjn^CK_779aY?G{9AvXHM~YQg8>xQ|G92@!n0KWL6S-93R5~J_>#9)O=F4tr8QVn` zr5-6UoK1{Z6SJO06&3)Jo)-zN=f-pLF-QS;wREXiu0A%Z#xTj(1FVv`2|;W|rIcW|M53 z`}BK!MGZ(Yx-a|sl8m|_wUu{@3B~x4Eg_Sz3yd&6jGEg~jJ1`IvTceHM5MW?P9^ot zl9-SP36v)07UxjvqQO);9*0n+N0r&1tFT?e{#CIvd(FlNKYdX2-1T=hhY#J;d_S-m z;SJ5mb}N_IpGMl*vN`5gz3&Lv;AOy0S0>Pb6Jz(K56bZ&(=D-nBRtiw2-8)NhRV&S zjcSpr9w~@%eCvCynX}xA6=$Z7X2)l8>fo>7;rY3e@CO4mWkip`25epwDDxW{ObImNHia-XZP>>m~G37lFhv`etTRGsGC!z1h(mm??9c`Go&yvYpBT!VGXDVOi z@87#W>u>+e#BGq>K6DCwTwxZ3v8G1BKHO!_ILEtE1vBO4B8ncl^LVll_u6UBoMrqW$-S%Jg>+t`7I1u>oEzAA4-u%A4+iv{K z^&h)#?Akl7e)-Cm{(AZ|lZw$JH{GJ;*?zIjApEvL$|%9uMzZF2II5x6a!~mqMTl;Z zn!Y8w%LQw75fMdV-76>zaDB|9L2m^{frMV+B34b9Mcl^0L-zVxe_qE3tpCjC-z}D% z_!@?HVB^|jS3?){P`m3wc{5l@U9IDIuZSUQ`AGwNBL>%#zk2F+GUv}$IUkzWHPZ)~ zfD9=Q!2YJ;_bArnES^Tupor=`xhNPIe%pXr!6rbWr?)vkTpkMq=#fI>k$R&rn1H-I z5lN<9(hKv^U^+r|+E~v((%rRf#(JtMMxX3Y>x=vu1Q!u9t4ArV`pwoysQ#4S^ z@y%>MCFW9)Y{XOHxpXMV4oQ<>vIiOdLj2IJVKc*5<`Y>z_qos=QqWiM9H+NBjD<)0 zIIF+X;#2f_kHiEfu&PXFpNHK93K3f3?J!G6YJQR4uL_0(;^9)uY{VFbtL>eYh(m7cKacc%tGl&Ti zjX*1(`AHPp2oim&m`JY7(1ZgTVnoDO+DYS-kW-<%5z!{Sycdugz5BE^YKK1Wt_%=0 zUmc9}%6i+@f?eY}xUn(%*<;EFaAz|MaPOVV&3nZMAOqH}fFjk~!I%=_@G>fVrUK){ z&{{An$1S-7gs9aq>-Alf+_up*o&yabRWK74Zp#HQGBK7L$5tB`^BrefZerS+^VSd0 z--j&gc86Cuh!!QRxzz!%^#wt5k`{Y}AiCBT9Ao$M=q;V$!2}@cqEc(kx~4sV>VP*_ z6P_51_nNbKnfA55?f^VkBM;mTl${8p; zHYF4mC_y0}Yvlj~_kn|~Tm;Rnpf$2X^bIBSrbTxSXi{YrP>S}5!+cpYD3ob;dGl$! zWIV;U&JjOeoviGrlbITt7?tW-M`ts`nW@g`L$`_1Fa!GzGc@02N>W!oB{Z@3Q__Fk zm$3hj1g`$URd)xD+|ukncJt@^PTjP6!w;`7vk!Lpr#b!kg2XXC_#nBU92$4=vn6K8 z0EXK9r=WPEgE5WxGnp?MJ~XrW#i!Y?-4e3O zs)k6Z^~?H}C0kcWG128kmahn*Kq)Vd(`*Av33k~mxv`H{{R?%}$qvtE2(k3{z5CtS zS)97L31KSD9-nykyDu|d*?hw#bi{$$*0deKA_ZMmi;Wrp!F&?1k((&SLvB2XXEjD8 z_a42gJGN>DdZ<_#codXrWq3Grxfq&CQp{tRU^fk(gG_rc91IN>uvLP^%7vNFQ>gHs zz!P^ZAXf}{K8tC(=uE7xihNOCc8$l=SqXD!gq$!KVqP5;5JO|!0vALH@u8A4zbGFR z%OpDpfDC8{NVJveN`sUYSI3vfK0H|ZBcW(1zms4T^1<5!lcQSzVN&c zxvLSnSc07Vl6Iz$v27}Z%Kc3Bh-u$8QB$F3HKyI5R$FR{ehEKdt}U?_GF`$J+ELsI zO$;8(j0pnXIqFQH=3PEfw3C9uj93fUJ}tSu>ZmA!5Ui}Jv(YZ-76u)sz&xdc3T|;e z98W@B7)nxqv&XRT&dr)7y{GI~Kis7R{&Bc${gJ1p#2dVRQwG-(;#ATlFYgW3Ue^Yv zxN!_WK-`-1{4#Z`AZmBn_=|%0luIdKrBUZe3osvf1#0g)7;giF2F2Q54@e?BKcAmVrozQovX}^hzK+72)1x+I2Wh)T&A_$n(2aqo{(;)Z z_nXXU8NaOOc`=jd9FQ$mZ;+ZV1(nG$f)qmh%IfoB$hoV|R4HHecBB4i48KfG1i++3 zvPxjK6zkMV5g-;D+bu6^Q%p97kQ6Mt0_!6GRhA!QNaEcQ{Jq-X@;QnX83wrIkhE}= zt&)X+W-C)uOSoZ!=r(_Wr#76`X+0E>?)=Lvc48gH0!%O7h=c!=+|h zY}e?P30sdpMHU)p9K9Tj#`ex;1Ks zjpbLEL#-?=#nbB_dkUWb?%spMOvZNQ?&XYFlEb{+1C2Quja)qLLC9@WjZ7RDfq&KyemNwO+BG~ud1hTAW!qtJ$J`Zba1V>A2ne$1NZHGh zOZF1^_|?Y3qH{#j`!%##t%KnVK2NgMv(9t|_*3R6$V4fzru>;yPXX;@K)RiqhPaa; zUc4s^I;UKfF+PoOUDbsmx)*kcrb0c&$?SBi7R+=Huhj%?-KcLwzx1dm4C{BV9SXQ7 z9#2c0OwlDszSsi_o1kK1zCcKS--L26YcII~)9X7bk#u#AKe7?HxwF|F)lfU0`UVZkp^RIsA)n{M*)~ny? z?~~tNyTJd>zqVoOJ9E|dUcLD0Z@u=ZSD)(`^09_IM24O7Y`XN=>Y{e4ZGE2ATb5B8 z@`H(Rk7&Tw?Pjb;KwC29rSch-E^H`at}K$ZG56~Up{#B`lsnYCZq0C{jk;j!Wf?(D zq^cWFtGccfeN{qDAhjJ4^qRXS`VvlX{$mwuFLjBzkWp*TLz+5*NgNJ4qtrDay>!AU z>~~j!&P33enwUA=G5SV56nBVhqRnUB684t9-~Y0zk=o{O)t!kt4q9iby1M39EzJ(> za-%yhfX3Ecb{6N=o*hg?=L&OCV4ksPA(?_hB^)8wtw)dP4sDwG-a8}x{Jp<+SZJX( zK12lQeVqJ)l)oG;R2zhTjC5)ei4bV$W@nITGRHEX^D1~EI}K^3vV?FELc$;!8C|g2 zl2I!DMbY5!hn7+0q?Ii}DEUyJu;o^kwGYcJMb5OqP$}SYac9n~UT65n<|Q2-LtF7d zNopr2Itru89G_#A+6;*PKCfp`7f5I?ltt;_0;yifv4%;m!{X>@wFi-;*?8k%UJRuRH~D%#5zKW z>vNpTWw$PlAqxXhYFL|Q))v&??woJCqx*RtztV&pX~3+bD@|Iu<*Ng?A!cSVsKs|C z%L%LwmaiCinZ^P<*h(=%MIsH_KR%<4&2QF8(_zcX$AV&1ftZn(o*$jfJxp@IOV3Yb z`DY{xFk4}HGou|_)b7L;3xgC4y;~^6Ba~#104|9oBC%+%QLY_ZwR>?&v9GCgtop{; zuN+nQq3cwM7b<|<^CrU&?IHmK9{o2jfQYP%9@SZYwuNfN9=p}b=5s4xC$3DKGWAD( z+^0VLrY`S8rcIAYR_#+yD|nFbavnn0?Dk?IJZNd1q&|xzuFLS0iK%1!dCmU)* zNc5bRXP_%R1j|Kx_|^}%bdzv@Lv3Apk<>!+TbQ)PK?ioy$E0<$^PT;~U0C@yY3y(E+5 zcMB_hw_H8rF2OaXyqF_Z=xMpA25W%u=*%eky<=#&^@F(|d_n7z&h#h=hU3#GCOVF- zY15XSfx7&z@B#_Eh55w1o1BZeu~aYyGB1|ywXpQg&Du?{XS7%Axo1Bt)T7ITt&tt6 zxr^21&2QG6hruN;ov4-0Y(D*iPl!!mh??`Blh_7;j+OA8%ury+t$TwgwqMe59^U<6 z;w*<)C=@NiVV(@eV^QK{=^oDx-(YUj?4A$i6F>dzQQ;7KGMPUVc)u~!RZ*N0nefxA zxWHF+$q1F6tI!0Rh>wv4xUod2QPmRFCJ|(L3yLnpm{xza{ySy@6k4EOEH2?F7y9YS znIgC+HUX$qFJVyFv{~}7Zs90^s}N)Au-H|??Nh0fHb~hDZUq~sGkV8h+rcxxW>`xO zWXEQO21Q(?(sWty142p!^F2;~ZNOSdeH>mzDz{6rqK^Kn zzGG}EN=aqzscxmQOCML06vOe(f|Hd^ccT{(CroCg)pwG zNHG+IE;b$^TcNiY;|^`^`94{nc=jh0fbXv6t(YO|^u6zK8Gb)tb;!k=CzC5qMwwYV z;c5}IGFauS*0DPbDdNQVsVw|C$DD~H4)jybPzKnDcxsPKOr6S1jX1ND>OWj3zs*b> z&2kxlD17go%u9CM=k(hE|Lsv8`5Q1Jx?C;A;BT->?3J*JulGHBhZ@p%G~cd=)Q0RY zJEUs+)%3Qyk`X;@hxD-1%b-%vtGAVF2UQv{gDRo%jd%T~)Y}Sd44N>S#64}a(~qqa zk>JV(FW{QyOfPFDMPi|brPm)1JuJ>Oe=M|X98``;;9s3#Q27|vQ~cx<4{?R(P0$T0 zEE;r3Xd(dX3ybOlz?`<{bm$XcgrwAZG19KV&kng_1&Sy{rvKi8_F|La*j&Cy<*h=# zki=^mp}1PFUei|Ou6v_qj(id7cm3x5Z_QMG^+UUzskvw>AEPWtI+z4Z5Q}rX5djc1 zQaO0GIJaWakHtzG#XRUgNDXlkcb)z&jc%E#_2bX1-4S?y;B@n5QWUOHDc^y>$<1$4 z%EK`+wE8HFkhoAiDi9>-wPC$uVX3CW5Qj9l4?h>j=^~}~!axHQPoaKM@@n2C# zV-2)valS=Ft3!;Y9-|EMDS%xiI*I9{n9@`&vL%TNqPwAe7Hbp^G4;p!Rmzk+*x&b8 zAODS;jPj}Rm?kAh)AC5W^Q0`U(j@XlG(SF3&3i9qf{%HVPgQqb`J!`RtO|?e*@FU( zedXzaSH9vL(C-V?8&EnywSp8em{qHO3S4vmYMMeLU$n2L*ATA&(u60gm{;5D+TrnI zW7!5qqXmZc05AGQ(&&Hrl`p;WYYrT7Uw-9j{`ZAfz93-T14Ehd6QV>+%}!6}G6$jG zJcEYq1vQMePRF+!Z!?A(>(UyvHr`x2_V#5hI#+s(YAPIdTVJog@0Bl#(Hid5SB6M> zl&P3%K#%7VDzOWi0&jIGrI|?f$e`tKz$|7jv@G`j+oaszzqsWC{Wrhu9eoQomTq|T z`tM)&%(Wl8=Dw@n#n*4LKkF;sJ}ANPJed3s;s}3;7{Q1?)2v!qAA2^h+zwgt5yb6~ zRlsNRlEaiPT&;H6Kb+SUVX(b?s5j+PPV?AjV3I?xSV+KZ-wiy7c`g+3Na(ap_4~hlr`pJ7 zQ3LithDKHDNl_{Mhf5Hru*cNx=B7_kKtk=w5fiNA%jx3irf3(xgryyN= z=7meoeE!li-@f$B?_PT5k1sv*b^b*azx4Iry7cwmy!7?o;s34HPkR+c@{zKc_=>`9sUixBr+#Yb7v#^rh#I5F3}A0iC@2 zW)9f)>Pc*m+R=)cNPNqC60kk|+mGD=dZ9V?QSwqO%J(uTsS!UB@Ho+oGW3=u94Z_R zEg%#chJryJ7y3|?FtQ2VGnhjHpYjMr#Z{y=4=Pz07Ll>znc>{{%!D(P9nTOsn!(vi z#i22fa^n+2CnVphq_mK#yT!*;W@<{k9Bc-IeG(N!OfL#tjdv77qp4-7+n6yQ3W)t%hH}X&Vi(<6QuL3;wFo$eh~R=_~R_( z#L~z8bZEy6t7t0H~Y~!#Y;l9E%GXcAlY1XhpH~6 zIqQ@#5gQl6vK0yDh#{+NZOI1Sk|J!gs6@uMeBRwpsY9%pWXw6#vEu9^^7_D;?56X{ zXmLIfEudH>qU1aDs?6-zsu`?Zp2-_O{cPiQu&)~j7eGa_f+WewV}xIW5#Ca`!_B`! z_!0jGBPumdr%A+B#@ZA$VwTpdkKuTAQE@`@DYg9$ZKrR(=ceaxcNXRqTORtEC79n&!E>p zTECfZcDY?wek8UIuF67^XSG6+o6ia1wWtprn>xqBl7{3fyTMC}VXZhAgWb6&7qPzq zGu3-qif1Ev@gX(zr)B6>veVsbZ9_jp?}v+JVNI98ml%o!msM#Uyag@xbkl!TCE6vQ zU|GPg#7Nrq$FXW$IAGq=@kqPMtSbZE@Z!+(J4j)SRlz zJl&p5dphbSsNj@QoW3+8fl1)jcAV_97mw%tRA zUl4LhSS90yL@}B!&PUx;EEtW%!>LrS6k zB)uNEt*P3kRWnt}%vp8U6Bq9gS#Fj|(YSn_EY3W64ERPE8?sQG%eg zAWsv`2IK?ZK=9Hte{kvRza-wxuYcUR^!49%En!W>g;5~SZy3B;dN zsN)CzF4f#+XL`|HEELaBvP9gd+zb^##5qt3QhODbb6o5JYSj}~B3^RP&a`%#M$7P=om&*^Y7+AGL#$5!nmH)w!X1OY$%LzWxSSn(TRBF&^;dv_vZ9K-# zhZ1}vb8$s!K<|qliUtg1A3rU5Bg43%{bj#1t)3&e&sGFWKjp3n)1PRfBa(HEb-_4L zB)Wu-L#=L9ALGQCtRfPQH-v{l^h?SwFIXe&q}qoSXIQxYCP_=pW2rG}yXLYIo(u1&MP z_s$!!aoxqL@Nx^kG| zq!mU+rcS0==1HLuv=%#B#LX)u4B3?@OJuoQkGyCh3b_U0C56;>KYcQLQ_6A2qU~I# zJ5O9B9_taFXl7nDV5j5?ofGGO^5Wv{Xbl?!j~`0g-E_PvsZxe*y?8Ez&9+u128Wt2 zOugDOH>Y1=-Ts62t6yhreJf8TM)GpK+yo_&~Krko@EOP%I$XZGI|0a9|*#AyJk((-3m zb-~h6$To$Bf38r7L{q_Zi0aOvUef?~Xw$BVz4IjuU7VL~+N_>9^tfFeZ9FEU0&(}i zk^5$t21RRvuNDR|PQw9?D!5D~UZ&QEh|nVp7K}Yxm%z@m8thJNA`=Ab$<&cf6|d_Q zv2AyvH|d;3d_u`^I+097=M&VKOeLe(q&?bXb{4m3bI)gS{pT(g?JTB6*xnPk@A0+~ z__3VDjwyn@tVgkG=0i1L27gbZCg%q)o>oLLA05_2G2)TC3a?qoDyF#R4ef(~&314f6GpBs$2oIjlP}8i;=AJ0jtMNK+KdtHBJxUL`ce+; z+IIH6{8Z3+`PW{)_`{FC{3kE}{>$I`;l>Zo|FHS;i+r-)(jaionM@WPKiReRE+tAt zd3Rp^^_M^Q@>gGe=H*Y5Fsh&VX@398%fIsSQ!jsw&!6VMpO!>YNhj?%nY>np3D?v~ zkqJ5{d=n)3q*lN!)ELA;LXAB_0DSkGg=*seH(vWUfg8Sb{X4Jyn_GUj|2sGTVc*b= ze|yb;x#p^?4+ISUf8!TkoY&yJM?CP}eUInZ{Zns}Qcb&{T1lY4y?LQ~5a{&igYZN5 zR4Z@9;nkddk;-~h4TXoQIFy1a4U3yPe1{lN+POoUa+TKIa_o*ARPO5*hKJV4sTB%-@c!oOz~a-Lu@R?y@)mIYm?wp|QomXO?Ptf{-j7Nn|V6eW|kkfkW zGH$w3RoOZt7Y1>=^(ekO8}V(_^$+~s9m>bKpA?z&Wu3p7EA{kl@mbnUY7B*K94-d% z){fR`bKzo*y%LNTjQzBc5_kpvF*{MYad&$LaGWjWuL!6A`mL2?e!&fA>o6u}~pNN`DeYy?CO>&fD~)?HV-;?TXX58h>!h?W91j50H@g zA#4-|HIS`UK-P}K^IgI}D;CSDE5DX1Hp5F{cktAgoe!MMQNauUkjg}!J`1N|#gE_T z7%_`aP}ucV0K?S7gZ#N{x#;cp3cnyR3FEpq)e{sYy*-^VBib_XDDpL`UtxB7CUeA@ zrVwH7Xm;8;F)=%yFu*SfqYb|lp!l&Y--Gj1)?k@fN4 zgM0xZ^mL=8t@|`r8$!-dVMLJnqHL;gr3zG<4zofc+4^!VOxj7JGWR^abaJO;;IkjsLI(kJ3Jifda~nkvn~vCQx>YPxA| zj1CcFMTe)$N@a%L0GI7em~oY3u>Yz!{C^Jw0uS8s>;0$u#&7(8ZYW&$;cJdxE&Q^V z{nI@AJw*TmD?QgC_r)Y^N9p(=I|8xUJ%C59Ht3!%2p-+mGh{fv$hTmA42H+#IfB^v z9XoUyBoj_Vdt8pb`+b8(NB`!sWApd!%k_JH5YsY;!l+UfSY*x&yUX(wYCMiuZa5eX zhUT(TXbuMj9h)OANxVKv7`amyj?K5fgk1`rWQoRmG^pEJ*dm+G z-}ZxlD1f)~_u35+<~MQc3EFB{>4^_GGc|w{6*8Pg^;t;}l@FAlnx+tA4Y5SshK|o3 zaE{^OYykW*(K8a0%GLbRS>fr|EGpF%CFlUoF1ldSoCBv8i^Vd2Q?P09iX0fO0$$_S zqi$i5Z^!U@9(3LXXrZvoucOt~M*ScH(JQo}tDp%Emr`rIFb(Or-88_E1OB~y5Q_Mc z03W6sPy`NnWxPc8>MlLt2#(KxkHX+tG~eH$X!r)eLAxHz){gg@TKCE1o%j^&h!HM6&Vo20tnxH_45j$IHv))!JS3r>f=o1&9ru47D(Txl?50obsc{ zSkAk!kJMrMR<3(eTFI56r5djB3TM+iIppFp=L9mBNQ$_WZ{oaTS1vao^62hH*R8j? z!AYHS%aooZduKI|I=vtna2>~=_a}xwcZbMK@i{S9# z8VE;IbHXkjPpLv&iBPXT@EuzjGT!+@Nb&0JyKQgbvdHXCyzGF7 zmt~86vtvrPgUm`7S{;joVqWyl?yXpl8o2L%Gof1v3Dzh7@bqnf8YWCM_7G0cTzwVB z+=_Ez^E-8S`rPJoEWpZINrWl`i{(>TK+p{}3LJ6u)v?Uc)0rtQ{?&(PHk(t^nd!}@ zHW)h#T=-9>V~q-vwx%q^v|a6sKqM$o#bPfoec^mO5>K<(qsd4p1s_mvO5aY6nxPrn ze0p{BIl(f|yX7;bD?uwhal;>;x-)QJ;K`es{cz1)N1#CEmj#hYH9*LvDt@Z9Wy!a7 z>SwVlMU~b75iHNSIdpAn%lou?GOUZByRbb)QbEMa-v#VdwuuKo6fc#CIk`f(F{NSS z!Q$ciPF+_}XAc@v6|&h#5XQUX6Gtbeoso<)Iy*gaWMVwWPr2!#iHu^O6^BDT&kG8a z%$L~Wxglsqxb5U(ztv&;;`uGqTXHeTqRcF$v!l5Q-#yCq)@-&4kR~r@2yh|M;0Q&Y zi`Jw%X@*f>E@{fRMOyi$m@d_`IxE_rjv=Gtg>yALN`~AKQaNy0AZuj|;r^8)AMvZ) zTT<=VK&EVQ2o~>UM@=toZPW;k%67IxFz7jU%UsTrM;rAjj#aAp9%VA?)a0zQAhv7D z?i|mui6wdkezZ4Xcf}PV>ek=;hg5K+u3dT-o_aK9k@=t%rP>evuoh3fb%?c-$oq0e z^n&H2Z!ch{-C`2%UM;N>Gii5gwN*gb!eRezsa4m>`P2Rao9td>=(NaTlr01AX2$G zCPpX5hNOHdJ`htNZbI85iH;TP7v#fL;16>`)u(QoEY_<8@G)XMRvq$1R-fxTfhe9;y*3i|?6jf-4-|;pI91g1K6uHW=LAmsS!NI)m?!o@6 zek*Wupcn`gZ~15aFTCwDH-F@&*&7Qt)UKbsE_wAOmh4{qS%2RTe&%)>YTi%k>s?^A zr9_rp_cDjxu=33KE+i3nVMqX#*|eU$gxWH=#$-{O*30l)dk5=wPewD!ggRv8>r;{WN8$TO6|o| z{P)(z`RPB0P&yMhpIO3VXtIe<2A#2>(~a|XhQ&zupazy)0o{mis~mxFI2MzmF(WC+ zRh=IJ-q+S@E7eeFmPF^^8hfg3#ge;aS;06H%NpujFG5yi)fCR}JbF=?lh4X4Rli)K z@gBJjl^a#jHLVX=WkWwvp%TOvYXwX+072a?+f0!q?6ZfsU~^&LZ`lq8fZd6{)e6I; zGvQ1*GtR7Y)Im9td>dzKroZnbzw+D3X-705PHQK`|2h?5y9>ReRuLW~$Xaki^U$ZH z_&pqr^@yb1u~mDf?-?R`{U`s7ikt(1HHmo{I83Ipy7`?7RU{?cRavZRCvou2$JQdS4Ce z-E?ppSG=IVQt6SCq+&c*lAn>^I=iV};{vVOl_t#WdZfzdZ}_u& z#qD>#-?;r0_rkVrKM~DBj+5uCS%J51o**{_3N_-^&Kc~p>Bj16MI3#85)k8kIQ<>y6UrJv~Y3@M5zR~W#h;{#Mq35u3)N<63 zID?@P%Dd4>7-m}#w{h|>dh>|v*y`RN6v6*R6|`s$zMjB|No)34%OwN8OB9!NqkS5_ zL!&eGS%+-}X52k=>#5#oF0IIovSSFTsQYx3#mF`!g@vjY>uv)o4qyQTIJF+IkyTV-Rsx`ImKNc`YK0+cHWpcP-s{Z05#reG(>*>Y0Ih90frRI25vA4?$Y zQEX?Kbs{Nhq?D^e^ajm70fVOmQj|B&??xf7tW^qdT)YM8bSIsgT|?Hx0nulVX#KVp z%nEt~h(7zT`wztb|8wA)|8&*=cf&gZ|M}MbTOR0t=gqg?_+S5?T8is^FT>^@4?NU7 z2xtu&E=j35)xhY3VxUAlh+<`-vQRBnL~K|hBxTx7xr9n{AGq|wS1-Nr;-wd!zVyQH zUwYxomtOe#r5C<=>4jgp^ui13=ij*W;>XpmpMnSk9+4NmcIkzSmtOePr5Bo)UidwA z$>%S<@ZC!tqUz@*2|UQBo?@bL>(=3xM&GgqXo_yw`#z9c`H9 zMEb|Z;-4Q7QnK^!7xUN{GR8a(`f9<5V5v({xGsiqFjeB{p$D!HiKhL@L% zZ}|&FP#Qu%RO>gyUl@(0uUsC|gl|)vzwIyKyci5@d<>#V%VOKU8o&amN3C*mMP13+F5nYp- ztyW84u43;Sc+X0y3=m+M@=>%;X<6<1P>EH%gC_0T>R6Vqyks+HUuX8Vjv#JH-PUw{ z-DR3-Lg*AjPAB)h%Dy&VSvAG#tCDb?j)&ug`8=G8!4%n7;Y6ZG9LG+Ln%UetLYnh8 z{v}KoNC;UI@3@?Vcxy?tB}b_xv1Kht{pNUVZY~j<3qh3}r`T=0S8ubo7Pe`0&)35G zJ6{P&)N;S7b!+PGOqAD_R{%!9w3lD(=8m*Jcb%OGylLX-Y&J(33BV=9C{Jb_8z>>x zypuCls_qmDsZb)EC>Ds4B;mazPSTs(#ZwHoYt@Y4E*but6F{|dp|Z- zcmwE^-^cHBTD82nQjuuaxxiPfCJ9}i??h-;Up^)|VQUmA*(R~Vc;>(&>5N#vgWAE@ ziVIf0KxldnHyj21ePp-s|J}oz?N;)9WzkTNKF_umOlMo(w*I&MM&P<@PX+q_rti0J zy77k5YfoMMbl~3w?z#2&E%*0-B+z{CzX{1C-?ghij&|L5+ZBukq>}NS);p1d9vws8 z;#N)g=5*sd{~Fru6M^-TsSYJngSk2hPk^$ew&v!u)j<;qrhtr45>;mn!{AC$O{ikK z0_03!RSw!VuOp|uHZt9^{#J$ebOcs_ZQ|3PBZ8}4?bIfaj4Mel0Rg4}SL8fP5h$FN z0uD3FOHrP}afqIv@}O;A^c=uq?#CL55TLFL3*ZhZ(wFs8d4mRf;gtq`R1;?0_mTjy zdE#Fmx{dj>#l0l)V2A1JwgA;Qz%FPq$9GzY)Q;_OyLn@(nlJ-0)hG>U>{m1Yuj;o2 z4hBxtTT&BjD)`Ic&EJ3^t57xZFO$Z&P^PMoKXTl?b6dj0amP6x9L|i7TEO? z=}|xPI;)!S?Yave{a4qE6aN!;o;Z|Vz&kBow($~ZCP3-K)pJ#?SL29f`7bXQm#Y-k zk%$%hD;XjWOSo!?XVt}<&mNP{73QJr9H8)PhJ9IvSk4KjoJYZWQuFm7p)WLYw#LyS z!7{cTza4cOIDaV>`&re3(AyxOO?yX##EyT2)%OU;IgghM4S;iKXjo9zqqw~Ig#YuX z;|-K{N-Kug-}90ZCa(o(Rw@0O&5UhbC;&C8OH5k6HV;@SR#(chy}g$rNJp#!--1d{ zl}pcpvy@shmFg;tgsUo`r}3SX^)2$2VEu5xNpgs~uc}D7)l;a<%%HV8CViR$Pav#o z__9Ti$P?y@)SIRpxx%SPsQ?P$E>a<90gN9uh+I<5=Nmw+Olbi_(FTQ|+;mE@EDBLi z4xXABt`-;?2v*$a4V5A%R{>xKsVZ$<9(o#7wncwmGUQ~&r=85?Bz3oBlxK6}B=dBp zi+88llQvWnl49b;J!E}|wI;L1xX8Roi}p}8OkczidtCSa2F$7#XKLy%D=J<8)FC#v zF&;)q+i~;`A0hm34i7VXpgr$H1t8ktm)%k+cC_%Q6JC`?;04HzK$%RYSaw+-Wh%y z_x$CuI0M!P2DY2K&96a$DH6{{1@>y%q+ay0TT|7aW!sFo1u_jB`PkdJ-KWUR5ah9P zvW2&^C%n<5AW9ytFDgHV+;EVr$Yc^)v@4vVZ5rMCDXRZvS@Gu$zOOY!KLY-|9_aJ5 zJ}7g$#R>B|lBVo_94^*K{o%M|-o*>Eom%ai_Cm5amyTnLrz1hC9P0-${(LJAb zeAkmG4?m`VnwkIfb7E3v;)eoJBGXC_QpYRjlZ5IiBnZzjho%%cXeoEVIEE%hb0>3| z4(-j4*BF9l7ZzkIiG_CejG)a!m#gEtdnfpt&BfJ<#Cd5y?Y2|b4R$#%Co`auUet}H zWxK(;h|-qJ(~h>c5hCGeJQ|yiq|^CSIv9$FVxe%a%)UD{y63yA|LUc{jaQ8at{T7P zO#jN;B7Ohw4Ub+oea**zOt;&Q__f#X`oGBZgedtgi^`FrCmDD!$zLPqnoQam4uKyz zL7TtLkPI{*`Jhm1KHiK9 zorWz>Fyfv;6C87w%GCyy;UqBun6u)z_iLiZ#-tbso}nGNe2UP%6`kBk2NM9G@kj}a zczIjq9$^F;dFgp7V0&e-UwR(c6ONRrkzxnP$^kju`8|BV?Dx9DW0!dG9kx3<(9sIYkJuv#QRD8#5 zXBGqBdMB-ys?a(VlkoEwhQ=@x+(mr`h^V5&sPIB}oZ~D-o zK>lORK|zH}-N$pzvFci}CTrou<{y+R!q$N)UxA@x*wew70dd%nmkUq8>KYaW-XAH1 zxKa{sW#jtMr6Acgf@kvwozXUhrxOoUahb{|_0l=(pu%0#(5pjMN*zbeqOx*bT-5SP zDrb3oVrpdSST;94a4I`Jb0jmG9Y2ic4WE%xT-73*Ym}gjsNf|hlVM3OTv@_IyajBj zzidIyQF|2$6OT}quCjn}dx+0`l{?JR)m)=GvXZY7Jg1Hp8$hpjF9F+hUng20R@F4k zs4994>6vawWs5Qxswv!W?)FRCzX31r$&zY$3+*)zMX5)($MG-E_Gg~AQoF-pN&Xh! zoViS;wsX0qvlho=*OYc2-v>$JBQz5nA;cnoj~$bkqn)k(K5xFnL*RrvH(bYUGsm2% zW4ZC{fWC3^7=61X^)QcotxeBEx8_Q z{t|9#5>wwn5Hp9Qmgs`#J=5lyFg)rMc+J?OY>!IuEKA5Aw^3Fc6Q-vc-`NbbUe4s` z>{M<%Gn|_k&x}g0ad)F`vMdf(YZmIGnVH|lzDtDX=L)HO0hWkxJ{iQWPsS;U*xLbT zjmGU7HG|%Y7_O(A&C%Nf_XgGCd_Ald*ArY_~k@mz-R(ycw< zI3&OhIPs(^CB*~eO7F9WxG@xUG9w3tJ?nU7?fcEj_dlzuNW%JKxPIKuGLou^11GZ` z1tZhF^1*6S9J$@M9;N=@O@XCA-yh#}@y7q-hJShex32xp)z4pjEg$XmpN*er{>6To z_46N+ruD233(*MYaR)z|lk4O~d%!VEV_cYC4jjdz>{^Et3**ee%X6sZB#8E)Gu%$0 zCgf+MQVID-!J)PzdzzI?W)gdiPPcCNt$}8+`DY)wl_|;c_k(&~rd0a7-iDk+D%8P$ z)drD8yzTh6>Y#SMa*zH5`^qW*vfVh_{GZ;XD^m1Ie!F{{`3>X0C93wO=D+PxrD(I6 z<54dcc#rsRW$y3zv7dV|VQ=QS@71hspL<#{a%PX_etlo_k7ks{o{>~PsAS%O%pxWN zvj7uJtIjYUk@$A`e+D3sh+rRu=jPJ$u^9MG(wM{IwdhS# z-=R%2(37LbBB}M8n&198HB3=~B5XTM)049^=*!-a6V7z)Oz>K^ME4!lE~{?TY2YkvDS zIp6NPKM;8PiN_BH-ci@*8>-^jim%f5?^3usW#3vKJkiU=(xe#ksvAVl9K>ni;j`Z@HK z<%LH@jM;MWb)+!vW%^<&)nmfAFMUzkFyjg0=2H(fzxGpi1l||;<%7+e4+Rz!wG?^` z6-4nAjq*?BTvh5!;)lxPESgcy72sj;EVLY|%H666^E_vfCKVGWlYqo>y7aDc^MIKu z!^eQ60P19XR8%r6aIJ^Ol6x>bgms}-sumP1394f;dhy^92J#ST_5xH{)1K6)JB(;a zgq3FqgDs3{3ji#?iU|yHkYLor8CWh06RaokTzS~Mlq(VM8wND%j0FcFKVUe4bJZX4 zTT-~$G*(C?WjMYKQQ$p8#$he!oWe7_O53~zj1u0)CU*J)5# z5z_vRO*LZZ;k9a^+^k9|hWvT5_-F zogqHP!&{ge!vjS8O9#%MwAI)%34Ds!`Q() zsa=%*c)b}v1ObH<7S%xc2Ln-JaC$;iCuqbkhEuGAzxw$11m>ZC;1^yx=qSTU1hTP_ zrQEpOqzz@|QdJ&R=_WUHAAs!W5y?gfstZ&XY+(&#iTth|s?N3>%EKq=vqSgBj<9LN z?jGex<})$pS8COH0ZB642c#HtovlidNpJmVFPfv4j(^~_w{{0_EN)%G8sd6pe0YL% zqzh1yd=$IP_Nzsv$Ua-kj2IUcp4AMzSC9XD-^*u?9kdQN((77~_K+yqg4_9IED_Jo z#oRneQ#>;jjr2-#vO}9jda5jsRae{pCjz&8u0Qv-GdJIT!vohGy*hiLAG)f$2X z)yoh7>RsmT**4#xavQ$#=~uq-%CEoj*;jt~m9M_?g;&1SF&RUR@&YVeEohAXU2^EL zN2o(1A<1$OlEf8z1{W(q3Pf*zp3k*4VMfuT{E^NNz4<%eYZ8gC^E9!g^FQDGw-7vz z!T7sZQ*R|<`^;-?oiIu7)8A_a4c`dRMCS-RS!w>8ci$ce2Y&HB;rYQSE}Q3AvAo<^ zbuy%rJSJ4fI>rYJA7~JxItYE4C~mG(Y}BA@(j@!lOF4Oj_epdUQ4jc!5@zaBf_Mmj zR8OQd1=(Sba3om(wH*tGaH8ge64?jdn1SQKRtks~p|%{7G+QK|!;|Xf>6C6)Pmv?B zrt#xOlB?$;j#XJFLFQ{zyK|ss4KQsXxRT9Uk{1GAwZh?RMEE?L4q?wL>M=MVZzo>s z)#}+|&0Gf)7XCdHi^Y<;Rcarg>a5A9$Ol0*bFEq-x`K=7I18};p#4yAR=yB(P*QHy zFSw*QBv+)5&VkjlRdfM4XB(J*Wal2#1ESgYiZ!$h4pDOq9+opW6FjC5NHGmb#+X-- zu>+-fXRX>mkE$*?WGbu?a)*VVe1o-vp7tgElYV%|q}N&U1iZseD@*d)xVxD+IrTg! z`!?tRo^`lQFVxzG-7ZX+Xd|M?X#AVjJ?Rae=!nuG(I_HHlbA8bBf~-_107U%DpOBV z8`PxpIN?KGUJ<1W^&Wn{yrJ*{=UCj{~ZZC@~-lp z9n#&eQ=#0G;b3o*@%7zjk6B|Z#zN^U1N^H7%-(F?<9D*b;}P+ zlFK{_A8~LU6n}jJKqh)u0-(58`ya|YS-5ZQe**Y#?f*Ay|7X?qKjCct>NH-uscdc- z=)x{`zunXxnIAlDJ#OpvCd|f0F(f;*hAF!~)BN9VRBp67TRab0lx%V8+{lSN=B`<< zitLtAV^0rJ3x`v?g7#SzJeIaTIAQ^5*{mwLzIC0K;5Jn}Q^mI+Mv-YB$$|I_2`=20 zWy?$*&5qB2DIl0VE@sQ-XUCn>R4W+DP60W%jHJwf{FCBk5SHgEaN`LkOdUGZHK?tw zdBbWh6C8Q6N7S6#-o}=JZH_np5>l?akTj_J|JB>MVC&{rL^TZj}FF6vUn?j%cp(?_oRywpet0B zDmhlAmwAps-&l5xKs44PNXLwT+;2u;L@jh+3ujzlia>+#Q&lThMs~hF-~0<`$-w2@ zy$)IIhjd7CMwiaAn@%go#-mAnX@L)v97x=Nj-oY_-DdKul@-~d{tvd7#(Bn9mG1Ab z5*0=2p3{|oE?*r7hji3Vo{fa|n6TBl-AtXT|94$JaBJYd2Ck`J^+$pKdh2^``B?vN zzU{BycIf6(-*4XZ*Ej9E(Y@iz*Z%{i;_u&|=0odWR=GJ3-bd%^&HeHp>qsAO)E1%Q zb+XGi2dgz|C?vplgcFfgaR>Sw^$LuFKVTXA74R2*xH z{j%yLEq;ab2kh@*3d7(_TU0Emcn~qE#9piv^Ggy$Q>O=?$%m*)e%DQ__^Uw3TNrY6 zZiz+@&UdIoN@quN4`+t5KoA9Wo~0=8RAwfZfpzmJx3$pXe5-q4Vo?h|tazW@E7)py zmIkAdNRO}se*SaR^QQ0mUyW4 z5CmU(UKh)nn3{f=B3VM&-NmjmZ(`@rSHH?F7UBsitE6LzAX(c9kfuG(>rRc@x!${? zSV)!c{@6*+jjPuG>2XCc+~16k1+tsiYT8BqenV?*FIsiZ>UZCG^_!@1qTM~+-^WiEUwaZ2@ZE(yB-z>`@hM zn}aP)cJG3+7rS*~#07RCRa5OgNJVrP;-Rixh{p?w#9TBOiE)}Fdfm%yUD(oOmo7ZC z{*|lMGU~Dqj+fkzie_bdkW4FWGZpFHgUEa&H5U#CQ>g?;VQMcXVM~);dJtXz%2jF| zv6ebF!uwfA%Asw#&~@ZPbMu8l3{uEc0>Yr4H8Y=gDDv4F z`bbpPe=_RTyYtU_I(f(%_dkj{ta$-)n!7KR{--3#+;OOstX z@V@mg|Gab{)8%A1CMWZZTYA*jiAa*eArbQo`nC~ECW@(ID1-?qW&2`#a5xmUG`Y18 z692zG@JoTd|MkYwbsxFrUtINX`Q=CTXMJqryZPG#_u%(|pxIVy8*SvN4Z4BYNd*ixGWZ~SWZVK`}>B7G+}{kn+0DiFO=Zz#lGjX zn2(@u#NB8#NG@?Q9qSbwi>-F~R?YnEA+6CzH@^E}8PSdW{w^arrRcu|i~}TbE4Pu1 zF@r1-!QGaLYtMod&w&?$oD*j=js=~)M3Z8&stg0Pb2~>;aUM*jVZ4L8QqU~Uz9W}=~tj9Vm1S?Zo^An!O zos&+xlpacuVV4YtQmI}^@^)->?`Qq`jc*>ljU=-sQDUin1}chS!X7;t8*8I7!v zW{e#1@vRw|BFXe#!wNfT9ynBMkY!k|D^R5*-Y*HIma@m;rHuG6pr}m{gM~ z;viFF;q{3E+dMp%R6uwq>BGwk)uia}+(5;@pr_~7Ix z0ISj71%^LMePqyo%tKXb&4bPfIuri&Bu9k;dwbd4q>r%wWD_W7r#*QLmQ|x`EP_== zzXR+m6KZ%Z)bwRER88X;SrjBKt4GSMooAEWYqx;ih2A;0{YuysKY?N<@DXlAIRQI~ zTdcgblo;{(d|@syemwr$+bu@cY!k^*;^W8ED=f_$N!vw;xKs zkFW^Uzyi~&#d*py5UEEv02n*$oR*q$(=cIH4}-=cFs^wx$i)N}COaAK8rk`0-2soF zL$)N55LJX%)2B$$Rzv~8h*o>f0Ty1xaH(x1Fne zFJdnM7|r_G=B2!ggj-fK#t6|zNz$S%MNmt0@~$ozIjJOX1oP%6%WKdN7o8a(UP#dc zoa;dFpt0q2YRE9LWGl`v!$FBsLP~be9g#zyE#?PfY5EZ%C*g&;r6x=_9_1||BG8Tq zz)6Bv>;~X?X8#(JT-y{KR@FawGEiYIHrWsCA$flVr0TBr0j)xB0klK9g^r`V4MP6ED| z${bZs;`Gzaq566lKcV)JLGc0GJMnvFEV={!Jo%+0%7Bt6`bve7NA?UvjiY*MK4PcXcq8KBU4A@ zZq^plTV++t*Bzo#Z6C}H`N|V>a`s#17p7Le^G-j}9d_AcZ>?=FHg|o1n&~G_!2IvG zQ{CSe=R{>~kqIb^OR20JwDx9w}RQg7vterk2oiP z16IAQ&Laj2{a1Y#`+q(Vn7`#8_dk47;M!lm`oHbH`M-XArkPSIUpjU2#OWEB;c=P*_d>Z4hSw{wU$6?bM? z3)(|qC!(Wr?3$g1@=SIoADAtNfEEx)aQQ3~^Kf?f;mL{VNhmgFGSo;Ooj##xZo-`@ zj8-JccH+(0!gf+tG)EI8IFTN~G;J-IX&DE#QmCF?bB0{9xOifHsU#T+4-5{TJ$p7- znOh02lws1#?foSEci7^_KREwoRXBA09g-*edMUe)6qR=bs2b9%#ZGE)2`#kOHU*gs z&$Ar-t$ZyxBt-gMmhf3nf$^OcIh%w*TIvG{69uhFS~91-l5Z+A;S{P4RRaomvntNXYI#X29em*| zHVF!a5D%k(X=}@NsXVIoi zuDmuPq55AGwM=*34uZL{R^-)f0;ul5WtE85X>NMwQ{B{e(j&>T6I`{TEmJ?BGU!jx zpPnMQM7}((`U!9a`lqs>lVneHC=y&E1ran0SH8;GZ(8-VJ*~8uqz{51#)&~diWT+0t|Yv=*^h@I|9pEZpxX?jgL5d1IxhZ ziQRrg9jT#H9qL6SuJs04TxJS2x`BEzN?^zX^@5sUK~1Wf6ubQ>!}ILf*TK~mPlSq; z`674$u7K!#&v5K^X1OlS?!AziJ^!U!g_ZFaAHhHO&{kH)j6<0Yc2=JKSMv-JRMhF! zAf{cTtXARhVnecx*twFAvNSJroocDE!sH@OalS9^*M0(43A0O^S|^v#ayb=d>Ee2GQphf=2GK z3Fy)&z+}n%65UMlo2=*+jtz3Y1x`kKS3}oEG?F8)22?+@UY0P049jDR;)@pqYNkGv zuHxUp2WdfWl{36Eo%v`3I574sraB{1FD*C9T?1Vg2MKni)rP#ikuH}NrV6nv zLnV?^$u7Su)f+=)mR(lD9Xn4GgPa&YI9gt`faHXy+hn?TgiJP8dh<@vQ;a=lewuG z2y^`6DS zSfWP&87r5L>ITf9drso@<@3KxwYG3z|$>Njd%O9}CB zUjs(Lp7aBCCXbGtz$a@O@7OJN(2->F;>E#Kuce{eS}?<|@c)eOb%FmeaLe5{I@h1L zc8MQLQFMMg(=Fz2@Y^xv&EdmS>Ym0$;kA)zOu^5BZI+!GEW^(^?Qn0 zN-Iz|D^D@JEd_P7a`dUH!K4pkS1hX~S>ZrZwY(de6mKsvPQRaj1M^-dhI zkWq3HmaCjC0J#k}=s9up@`Adl23gT9GlD&CPCpCVw$U__#X(D$At9Ftx@dkeC$p)5 zN*v9^I8OLnaVADLe`#zoH%txHEWVnlnc1U|>9T1PYARYrhLF>kmoiQtqwsh~D2>8*BJs}F z?&X)>_V1QgN59|cjXO5DZ(eL=*%=vo>73pCqM*n!5V~bx2#I1eF&BzOf=}6TE6(u}R&Y@f;(LeLk!p1nLIc=A z!D+9s230P-jEymIB{xNLDTvyQ6>qgp>aVI|eX@|$&$2Yw7TPk_zUTQ8HT=-^7F)!* ztMKegkgu{TJC`bZP9z2ax+uYHL)jG=q$W#V$YqP7YU-8b7cQ)J@GRK)EO;CVr3Hyt zh-+ZpcF1lQ4%wAOF9Fo+_;6!IY>68FrQ&>WHhU!FWM`)))Ur^?^26AYyYw#GWn_H7 z$=DS-kyQg`apcaT)iXhI7S}f>&;RYd+bI^i-oTk=i)TxLE<~{wPWVr&bsQzNJf-kv zdkvJf=s|f$BH!oD67t?&1V*gD#=uC{wl{0iXF&@646s|J!ap4`&v?U zE%9~LM9EY}EPEI~>2cD1D;39p`6LorV6RD?XuLYk8BQIlO+x?HFxHivAUtA0oknWU zBjIyoJhA=HIk}*4h;WHErVSKXR#ip_L`sJ2UlDkym(yn&O{jOA$Df9QiZv}3GQ@52 z^&+;Xlefhap%S5xwZ4~bm}aR&s(gC#XdG$IDzXegA#u|cm!<^WR>TxVhgB<4>i}GQ z%$=(%-=T5?LVMBQCqrpuiMK4FELku#a(cr^8kU3~&>Aq;kuDxw1`?7p{H7&GD~yVF z8l6M?In@X)1Kw#BWuTw(?h_dP+fJc=J8dV+k$>13E5eLlBibwX(qrZbgF%leo&!4m@u9nTgQ zFB2%o8R#Cmu2g%)D5Vw&RaYyk2!9#ZIXAzgUBiwkOhF8`p$npV>X%YyjH#`Sfi^xC zDIB2*IkaXqQ5+vq8iX2Ae5+7M2}4STr<=2cqeEdI7aI$BpS7RG=qG02l`UiNU623> zh)Twkc^$x?uv#3D8OBx1?09;ZS$mb%`6OnzF>MyzRYlhcs!Tgrz!}h})e7xf;6diZ zljm?c5rB0mHbnGE$nEqCG$ep8yFfzy@ZFiE>8(^TpOhLGrsfXApr!{U%P41dV%3<^ zj9D=}5dVw)(i=gwFXh#gQ6?)yDxQ#E#tasjC0miCO@$QixShjRxV>%47O1{8pu5U2 z>S4B}_B!Y%q#Ihe%fBcQ65@3xs2X4xDstk-b;e0dm5L5Sneh`H8l4sY9<@Xw?#>m$ zsYo>DM&_fzR5(T5*>tbQa|1EP%nokXsyP5~%IyJoapS}1pS_bLz~P)Nrv6{)u77;6|Q>yss8*Wc0CU5@InKJgT(!Td{dF#nPp%)du+BkJ=b z{43yj{zG&=INUKcZ7IY*(gIbHxSI?`=kn>uTq;PZDsmQjtr*xwxIEvzVY4Vi1Zv*f zF?bQW zv0t4|`{iufuk8c5LW~I-*3k=nENhL%V2FLLkB<1Gvw!Ny{-CsM2+SsO)6Q6KM$QU+ zt@a%0%}&E?NEc(FM07q@BsD8UwqlBNqqme%WBYB_=AK&(PuzXsk8hEc^NFSUp};c4 zNrHOE{+1|>(Jd+sn5Y|Q7pNN56+PsWi?y`{0R#cR6?@sxA+jhWFh&>&%?nK)-IaqJ z^8qamHPQ2idpi9htcZfuVWCR7LFRWDYaKv_T_+L`poR;ieFXPbXiNZgVxp5w(iTcr zv3s>{=AbD=4O*;fRaVxYj>szoNq%*vpnM_MNsoF&>_J#Y>aRD$E;bdzc_7ZxZH*9aXxEkFj(P^Z^Q`m@_NlRM26txw7H+q&bx-`X$X^X2v0@6X!XJ>9KEUlob>xaE8lSki{sVjf@Yg{ceQxcAP$!N3#o zWy+bK++l!mu`6qv&y`En84+?|WwCcXV~~%u0)NwH3$jhV z_i4-GQ?>q6PYSqeP1*`5>A$MO^T0AC%xySDi(&NQ_otKb+$!QZOg;1*EU}+mEOaN6j5x562j3`I?^lC!;YEU9!};1sAY;_ASC9i;m1U|9@Wd<27YYXg=1K;8A1cL)To zPQ7s&-CHgHeI0@G(I-9=xf4@;eW7{R->I#x{B6n`Ntq3)I%~qJDkDMbU=@Y`QBWeK z|K)M#0&BrQ?bdq1jepM2?gKTp_8&v%rkR(5}X-%DR} z2A$4Yr*9VfKM_qA=G{m%T1Xd@(I6aU$#|&Osz84Gf4hc_l#-*b-Tn_J`)~L!f$Oh& zEO6cO+xq(+yL$7cpX8Uf{=DHMuzutdpG%2_)O_bb9aa$%I2$ryKM-j|Yp*P6Lx*D$ z6Tm~QD36;B(5obSqYSF7iQv@4SY{lpSnZhYN>qU)Aod2P1Wv(eh&K+B|O2g*Ut0=ldr6p{TGo|6-(B+QImBt*WCiWke-=JhB4~B!G!2%{>uvocp z|C4_LXebc4aC_-cx^CPQ8S<3qAJCjRlnm?n25SiX4`pLj11vGB#N8kgh`*v=)=G18 zn4~QlGwdF%d1|d%r*U$hT zK64xrY2jqSYDw<5o^bsH?Zx)ydUtLJ@BOX%+=_O#qm%r0#14SI%l1dK(=;@W(t%ya zq9bwK#Ti`rlI?E1G%_TUQnF}DjeKXjR%vT}N7vK(U+NBB! z0O0V-YPq;(RlLhB)^`2QuiRa@`iZX&2v+HWq(KD?*m!uciiz(khuJE@qoo-c5#m{{ zGhQO;PSoQWa;}0R`$;p+6lVROp}u37C0sBDpqGUNH&qm&Kkc zduqQb_&$m!Yhdz7X7u6K3bt#^u3M$F+YO{~t9r|*Tr8CX>08bKpU6KH+h5+uGuQSH zAKUL7*fJRHKvi#4Tb(4^ufvA03s77}y6m}jqfu+CD0$ID z^r_7hP4~D4cW!pimm%q6?|Q=zxF7omte^hG=aTA#9y2HOJv*Mz)JC(w(#s#wa(1hY zN>OwRTg`Chzs{pOKA)I#Ly2$^P>u_)8uc<_u|$vbSKiURU8`mxA_@l{b&&yAa%gYd z_T(QQ6z;6`{U!L)PdxrkiZYJ)*+mcRf9*G3`}%8N6<59X`s4JWSd@wc7!SS1{3vO~ z#%o`F?djK^=@1$!dy|$&NpY=IE4YY4&gl1lyXGz`{vj(<$|b%Y zjD~xpvT5CJre>s?e*~pRol?6zqWtI6la(iafAY>iH1Nq>^AVhqV{J}J$*pc++|@R} zR@{oGT@-E7V%?OO7TlIpHN;76a0mGgSG_s}yzDeNK;#$kYHRSFR{Nx`5BM5#IXL-5 z14M%(BS%m#dK%>zA;E)uUtHY6dLSpTd8Sr_w3R8LhkUs~KjaQI`S=K-x=i93^iG!c zMWG#;a)DlQ7H;OP8ZNLNLGL0-BSF8EMW-+>%T-hRLGs_Gvqxujxf{n8b&$tPS;tAG z<^qA!{WV}FT~trOOVmP@v>*KW^c0ke9X%;BB(0C2c;;plidK1LRb7aY%t%(@YE_2Z zQP^{-Adyj@$YZA@y@o-Dg+XF0{3KHW@QRR~Ob72_4|ff8=6!YC%+an*T){_Yb7PsQ z&5i7IOYu~f`GE1eS3PA;jB@OB882L~({Q-iz6yGt>KCe){e52dpu7?PYnN9P*R4ho zcWhgE?to~tol{|+s7Hzn7c)}i&UvF`AE!LDZF_~AErfSvky=;e_1oVC(wj&k#Y3@T zG#Mnumx_jZCC1#b)h?PufBz})|9>0k`{oV*?Aluce|yW^kNv^DyAC{Y`!9a#o;%1c ze)3@Ro!SB);0VejZ7}#>Chyf&Ss`$0|yB*T23iTT*4)MqweQ=d!>0rvWx`@sIm$< z8%q_lI8|-{m*YzJ-JBU$qQvW}cFzmXUYE#=m<1Ab8O}@t)z3I%6WI|}Q&XhJ79-lU z(ASoutA>XrFgl3YIHTE_DXI7RR8Zj}yTxsGFH{uV#oPJ9CEnjhZ~OZg&i+0%Op+rt z0kcP24^-k*>uowjhCRw#n=h1@r^0nOHXoZ$rh`ei>XJRvdG6S%+0v8M$_k@QW?8Yu zL0s-x1Bm>izlJaJP~cNneNaO_B!JTeqi>>;Ug(`zBPdl9#Zl+_7WyBx1h}YBlI%_ckmbe*lOaV1_dY7D9h$7NYg1nWsftFGOon*t4@Cz00-7H;o&2u2`1LlwB*$V zF`;}4=tB9$ssO0*S{*f`B?lCF$)v{8j0{82ImRMA3VU%7CHYrx=P9CrTL!&ji*{$-u^ZPqfr`;Q zn<*WEqB9txAnf|&`v-QD=ZawMxPf#_EKPF<+J9mWLI}in+yG zN{L*)%@e=@983WMSwj7Nvav|EtD}6gE(~Z&H%mh-A6J?{y{BI3ikAky-~#OetBOjl z;UT^k$&j4KN*pooAe?0fsNIzs2*)FlgJwN-K}SHV0&SR!F-IoC3aT=N&SfFX8%j1k zKg!Og$5q(hD4{@R5Ds5}+qR6kftUFXUWI^200>qIECq^djX)7s1$!ZT6q)8y4^BT; zTw4CteW$6_I>qaomQ!sn_Jr@PoL#?EOC?qBqIK7fZDTjcieFhx#bd=7uCHhaw(ulg zuXv9c**mt{MOnRY|0lk9_nn+h7anQecPQPw+aw5Ye?GNwoB`dh%xmP55m5>*=w&R3 zY*JZbB5cX{5DpoZyz%vW+SMrDV32FYRhj4`=u&y$T8cbPK3Lv-Zn;XHr=!2u`+;@8 z`J60-1LjT^VCzn`8~B9W0Z@>tLA7ALd)I7@T7`E+Jpyx>5<4ZO7FWAy{{Pu~6TrBx z>V9}+N!DU%1`-QrA>_qrh-6En*%vzrk)^RLTZ^M5#sOm9%)F5%9?ggu$+nUh_sL6e zYQDr-8z7;SwrN;nQW`>8zT%`UZ3s?*mb9f5Xz8EQ<>UW#8x9T1>ohVydgS>hMcQu2m_fwVjG*R6^LR+wB20>-m`ZF} zowqZ+S!3;d*SYOd0^$~pfNOXW*kFaq3Zp@p%0mxKR7COMw%YoO#hpt+Ucg zjacxeI@xGVw!I0)!D311Ac5;9bff4qco-|AqX)$@3o?-}C&_`(r}?)X1)> zar$*q7>SMViQOhp+EL#GYC40DLJ}Sug&aZOhl%;=api-O0NfS`4ASTr0QXJq=);|m z20T&APU?q*Lxo;x=@aV2YSm+d{zfafgAydfNoW}KJ5_HSh5*)W{uYfYy(kGraNP_j z+mL%{htgKug%Ul;y9OTWK0|^dQp71xAsS63P|MEakHYU3jD)EBqRmXIazK@RhOVkr zitIbF@yv^EzAT!yI+p5Q)n$R;(H*fDo_JlX3&x3G{e=-vp@j|FbVl4Euw#V2+7wJp z3!?wJ~ zk516zD1`z0`!My%RQ(C)kEb<>9-Kmbjs7vqo}N66O}z+fQ6Yy@(YPhm9j?aV>w6uh zb&is{FZB@j5MtQih72S;;bbt14s)nYfm)OHWUBIDl_{8!j)bLzra)Kd@IuV3(dTu1 z=b7gvqW&H^2I_Bz%j;@z>+u}rx95a`186)}5ZY$u+yH>N&`KZn(H(w;F%f9^!|k+2JKljG=;xZ+dPNkpbi4`m7W2Bl~+ zkxck~DQ_Yka{DO;%kP~k>^W`*6<@O~QL6$DXRMJM; z<(`BEPf8z2GqV76vW#*Gb{qLR{-i7Ilks2MKnrEZqL$^%Dgvr>@ z+hgcYNgqv&P2GlQlRlWUhlIUT2yMmIMee|O-_E{%Oj`vLZo+HX*#|QFgVFpg;Q&ZHvS;j#1I#2nBH-!!G8D2T@bj9Y!C?h&ODr?yOkMm8WD94Q&EW>;vJ|ikVE=@ z8cT^%$q=eUAMArljv}k56SWV4dZ@wPgE9~5B?w0fka2gH)_RTi;f63H`hr130{c90 z69l7vFA|t+hHk73vYO;PK7Hm>SJEDnCzhhHG(w8G9$_&h(!IefSv(^W+z>X!OnJQg zBN-HtcZW1^1hg`m;j7HCMCKT(uAoGd&l*F?-KzK*%TALG4<;*NF9KbMCa~GYguQ+H z*)rY%zgTQs7#qdLLlEo$yErj5LL785Hp+v_!FWkn-Ae`@9Dl=OD2xXg8k#8ky1Ks* z%{hR5F|xOBbU*kx0AQb}>^L?$NKs>!y{m2+A8;sVJDmmd zq9MqB%vT6*L~sO}6d-oA=tc$PBEJJ?H(P%0ow0!!2}$FziP$(!N2ohEt7$5gX2M7* zLKk6LAbrrUP-cuiMJ6wOQNa6fjLMB+@c<5ABz?mqbM2U%z__P&3=j3Qm9lqy=vF{d z4&i~Z;bFLFms=lD^9ns=aiDWInuvtslH@_xF|bx|08v~v838C$4z99Frjb;7P|TD5 z--3dR?cZy=to4PKZ1cMHf7dv^ZV8u4|C|`U|Dh@3rzhKckm99iF#}5L5p!Ffy{O29 zC|2soGm*n2!W>6`A%B;peoicAVVj?ZO^?=620^apKZ4xxdC0sFvu3pNG!(*3C7=|e ztv7(rXd$8Y3|$*RM9&>yCe#-I9<(v;K{R-(SvoQ6Bd6L%NrhD-d6>(YP=nh7yoch& z@F`n6SecL($h}XO$mg$0$2^T<0zOyLc1N)Gg-#anhjW8JL>Ph5cB06NT)M2g8?BiP zrKNn<%oTi$XOWu)UN5Z$rdkXNRwtB34MaoeP>2BjPyqTd8rIolGKD!24Q;6LVM(CM z@~NWlYR`Q?d;?CD>rc+ggWPw;k_MBIyiwJ#54Ln;w3*T0uX&#}hZCD83MN+z!LgZE zx(H&G5qn}K6=}lhGnS58&?~?}HldZGRW8a)Fa{>`;$h~$LQ*;fGAj#_Pc+#qV3OYp z{xURh{@&64Aqag;z?+CM*|3io&H3YFtc2U%7(O=mfqbkBSSKB7w31j97=wgt>iz7{ zQe?CKp<(q;Dh0PUhP(p6#X)C+ruxO!=4Ukx2EH!ya9A65(}47VDhQuGv{ttSP{c^T z0TfD$SdJy?4k6f1Jz_HHp{A}rbeax9PV(41Gs{A)`g%To>3x539TPa;fymY&Fh~ak zBsIuajYF6u-cM!j;4j4?$Gko>@Nlv?`A*-FXcxj1z)IjBg;#$FZcDf)83!Fi+yQxK zvsxc9#7JH<>_FMv6R+1Z;AhazK??T8lKZbm^IYzJ(%= zhxToCOkrB6Bn2wFGH)=`0Y*?@YbFg>b$>38f(;7=G|z)NcpKzN)k!hZH@LrVTo{dw z+!mW0V#1(>i0q!7%->M410g8IeNl2kMLl9X?DqJPwhgzgJqE5i5S9a~kh1UK3<(Rl z?9%j^?;oc1IwfyFPaY8FDza9`a|@ZCTaZRRE5uN6DjrV@oywv`wsuaM@8XLMk=Cyq zXNwF0)8}3}{_W4aa<660wYPrzxo`g##Y+p{{xlEFrtoQ#)oCmR+p)6bNH!lp9E{!o zNn0MQO?g0!h7!pn>`W2AAMLnpMo*Umst{^=F-Ohd4pzfLu{3_>y9bHZQI*!Dj1J^s zpAeDUgD3(7*CU8XN*|nI`*sb~RcwQ*zA{Ow{t(Hw(1HerMj@LP?P#Ar5eTP}(MU2H z2%%D0*hBy9Ekm8UrGYBct%?nAY4prD7KyCa%h2)nV+j*kcZzwG!9$Hjs)V;%Y7)Ps z)p{?jS1jEpmtU>il)B7<^(Ug9AS%EmL@%`bKopg}u(#Jp(q({FlcdK7&V0R%^!!`o z8(|iWDMsl@5q%m&p%cX%AcXfJJ_6?u@-Xu-g>XA{{}5@}tF=;3_Ki=G;x&SR%n`DY zQi(l;$q(bbpOxCPuvzL~qI!2%X~pJaXm5p2cY*v`StdQ=7gT6~;U_zuvjkg&poLJUy5Uq22U@@UM4j6P%u8PcC$No{-dm}77FCdqa+eyHCV7KDPB}k z7yLbq$VL{ZwZIzLEq|N0Jh)nrH1?dR-OCZvO znI~Wtphnz?GC~I&1UmBIUnR`2FmrO@{vZ44sJUnHF7yjRvUwN&n1m*&eI<98v_}NR zDka9Cc9N#anhD@{=!!Us`(xDgO38Dgk68gS9&shWolY%)h!>GP0|B+1xW|KiW2{OP@wm%xXFO#B4Va_#*vz_QKQn1)sFH zUik2Z&%V4Q;Qr5E_zb)7%k+NXi^7EuUHBZ};4-XMsBP_y`mBv~cPwP45&w@7Lhi;9 z3?@JxJ$OsV{xu9{4v(Hr01b>PjK}%?6b0rFL{pL{o`O3%><;_9p+LlL%4Aun)fB~1 z+l|~UwVxUV9F9}I2R}4UnRf3J3p~?~PE$)JgL-x%2%56Fm~oifgqgIO$}dobd_`VE z!DM!o9khm;$wU0GGo;i(uA(o&_5%MKx^3{fGHP=GuoMPjVV;@>sL*G{Ir^2I@o;*E6MXBm9^lax7963u(fVL z)YpM&2Hf`rVORmG%Oq}=0Y8b9+4HC2tsbJ^c8;z7MiDmB$ly55dF| zyUk)zF(!(Te8>|;RQ5|(5@5c5_!h%r67I!FD(FTLdk2pd&@(x0XVZJDvg zE<)%Au+E_d59h4Jql$~uX{`{+Xv4{(RS)1esJN2y%>-6HBmy^=&P>A|!0kH-pMY71 zEVN1oHCQ|#?{Ym4nL2Zfm5bc=p*_P;!5?s$H3T{5+`3|Hz@xydiXmY47zO?I2_p!+ z9in*bK4JINtuSLxQCRTs(8P|hJ~pSipWNaihsw8mj9lvED4&d3So6MI9$oJCgWb;v z1L7jS%+^Vk!BlyYu8ajJq%bUbByT(wa(g@|F@j)TdzON-P^-?7?z!gS^SfYSyYAlW z(2<*p!5T_BHqbyB> zpry(VYU1-kJ`RzHo?Jkn36qmJbS`oY)1z^Zf-MPI__}l?A31&?^nwkla@e>7? z(0h&J&)5TRm%+`AnrVv{`a|sj0s)XLlM_w&C~P&$dyiWSktA|Sh>$5H&K0jmz za$dpX&%s+Zu)0SL2fSZG_^%h*t3QE&YQNWyULQW2S*Yc~R(+Q)#UA>`wUEQET|}?P zE1Adj+G9+Af8kfshs1+On3%~SM;f^kissOt&tVUVs_d%#iP*duDRB_(1ak=YqSb|I z*)@(p%85NzyO(l{N=z7(0T41Nd~pb-j)z2eul;UsFoJRxew!j#IiLz5(bg}G(hAjy z33%umXq)Nq%XJ1)PR!qdBKU|=hTMI}L0D6tzsEpQh5Lb3u&N3qS12k$NwTW+WNLul zZCRWvku~l?^9uN`Bd9It4Fr95ErlksmH=9Pvfk78(Bnanb?YxRrMLR2d65@FokhPk zoFq)BnoS>J(g`GnS@8~X8gMU+renwQVgdOoROp6u)LCg8>Vk?~_2g zZu)~dKC^=ZdarWlOnSB;Wl}odqRq=%(O@=7n@^)g!2<7wLV6_E0^I^@V91Mgu#y`H zn_iraBYKRwS0hG|E~>{(4kr;W^1(GmV*L0_L4h9_N->&}utbDUQUmA|^CA_{%8`y6 z^5CEmBXNB?TzJE3_Enroq(P%L20qLi8uHL>^nLQH!<0^gGth@PH!mBABMuT888eM> zo02-l#ps}@ z^?EEU;sBjSVz~qb9Gi%b4XsB}Zda+3s~A)LK?FEpLHMmsF*v%&2D^Y$C$BW{=Eb_{ z@TSvx9_b>e|A$y*tQabgkCnkgmAMZ}SK=XcP+Lk);<6S2w;xHK<46MblD^4xSp>RI zj7&kBh4TOn@ z^jnxS0c` zY!2S3oH~UhswlEpGRV`&zGPxQN!&^!PLhBLE&2+EfXG>dfGI*ZuP%tV6$47FZadw;Q-JYU z`U9pfW{V;(onIJdB;Y2_{smOh%_>et-6YLTJIusI)xSu^AUIky5eLB{Z&+jz^Jv27 zLto_`pu%-CJ_*p1 z8007cZvvHAvdDf~L^?YAJ&PQu3@k8eW?pe+37F1sB+U!qFmI*BPEu-_94Budbwi`Z z5Qh;%OUG9h*5wS+*qEOH*XSbbKq-;AP}sTPHg*&g1g)bWlB8fsvDgJn-yJ|f7uZ?Q zOabKu2JwAUi$RV$&UfPFF#Z4uF!sS*QnO&g>XH;;z)m5WB7w>(o+rVd`VZH?xIXIoC)bZ$KX84=^{1|vU4P_y-1UO% zORi^KPr07Hxa+0%v>F9!6sS?4Mu8dyY80qZphkfj1!@$iQJ_YF8U=oSD6sH(YUGoZ zFT?8*v`j@~iA#`yj=v6{c$^BF9+JQMR$P43*E;dX{JCDd7CyQIulWZC@%o-K2k|<0 zdJ?a>Q;7Dj+b9?C`|O=~ab)&U{QnhoDTnKXtI2t%rXMxUtpDrv`x@_W_gE-2nu2n)qyS1it z8Ulj#@$%L&!-8*Od+)Ve@Np?KoknO|uiq026k|Ius?Yd@T!b#tU8*qS1{~~GF*1WF zB6{lx5uGtSbrj1nJPndB6t!9Q)(oNunYuk18&Qz4vJnjcCdH1ZHG7B645suZLKsCd!2 zCK?a}K~anZ(8|UarIPISSaKPd3Xbyn7DA03mSb`~ZKxm}^9yq<%82v>Yc;5FAZn9N z3Q7!sl}2|pYa~+eC`lsRYm>9-4@Vc*h{t`$+_a{c+|^j=!)=}p`osOj4{xwO+`L`& zdu>VwMgZ24-&s!&--Le-h3tDXNGG){OizjJ5xE+h4*a@WT!1)<;{fY?*5OyT(kzKQ+uX%*pGg z33cPjomfuHQ?Q7j>C2in69Zr+;n5`F!4yS>gjNYpdwjrV3X2hd_3?KlDqKEm9D6tb z0M>`gH^+6kMj1U{z136__2I8=`$a-Xp|K9(F0n%T*;P;#?8E4iQ1oy){cc9Tj_bEN zwkpE8BG53C2vVl0BcWF9f19v*VhW9Cgq=g9)B;AWh5$Z|w6k0mjY%j7sbKn&C5lM7 zRRy7K^>mh!!=+xYFJyO@m_S$wee4|?p-ZYEDgExC-FY^Fup-cO)X92dVSyxldm@zyf^{X{xk!9qS+P{TH)7ZDZUkU` zwminOe$lFsyByi z@>Ik9MGv2^@Zll54L_BK)BVakRw^H$r*i@|y_gfz=PtDP@2S@NvIh0qD z?A++FJ2bc_HZ+OWN&^V#?%&0K+c_Q^+J(zVF+$f|%J$ifuH9)Rs$8jUs4gPo*|zqI zE|hIvL{hmeN8@68mnv*5r*|39@%e4)?G_kCWUkL@>q|k$y0{GxJYJi6tOZ697TvRi zMGpT;NnjVrwh+O-rQJ_YFG8B-z zWMP)SbRa8w?#Z@%TWUh<#8$ox%J}Xs!O=VN@CMrIE0mmFW1Y= zuFfJ4N;+XO3rEne0u4W=A@kXF1zCYuX?j#hErJRNNxeuEE}o>j<#n{8sBf@p+#X~B3|a(_`uJejrf^~eP(1iLdVD2= zU*psL-eQ-=(f4X6{4!Q)T?evRug(a-I(V28C@8S@Q-%U^uY4Iz)b{NTM;Fv}QhCj4 zf~IW_jt#()blcEwypF^s@j5m-A#6cTCn}hu1w6v&rZivOoVZx%iHn8aP{iiGHbGFP z_ck#xwMVX#-=wXrWnx;in|&USO?}o3!n(fXt#St;p&V^Ru}T;HxX{t{!9!_9_n3Ss zVas?yN#nPEJ8I_IV})iARt)3;`4VOrV)1+?9I9a@RvEgEgzb8bW)RkK9FyNzF(vKV z+jR`cWN*bley{un-9oG!?ynaMu~8yGeSCW>$qJ;10`>9+Z4$~$H+I7+jA)b$tJo#C z>Py;$M>UtU5sh%T3M3^UMI@b*oB5)`L7+-27iUqC*TMQv-Oj3fY-X!|Qy()mMYUHjj)i5tGx{>K|`YyC#+aLZKt?=;`j^wp;N^@rMTZ~TYGzJ|x@ z|DnEb-NSVk>Tbbp7wt#B?o_+B+)-|r{A~P;R>`D#Rf4H#3Kh_U$$-y~x|P9T2z`Rk zlSr-6>OL%?QuzG*Twz;puatGOa+C9-8-+Z36Cy;}+%$r7=Vo&Axk7I_pb9z1C6q$S zp(^{Vc=su`Et%O|G5wpOIaG+K_iXb}HbJn?r`&gn1@W-w%H%2@X?N8*8r z1o{gC*Y#Fh%?r~ERg8qAVjvk4R!#p+G@qlBl=7eJ(;O{Q+9X$h#MXxey+Y2!V_w!s{TNuZc6`kj(v zoyG8K&P5Hr*SqHJ#6T$caP_6-BvXx$oV2`*5nun9fj)g%xx#TXcWvR1Z%@4^v@lT3h8O| zzC}qr^h-@kDV4ffFqhq_H3CouQy+c^6JHg91B*kIDX^^$^bI7Dbdq?^(#Esh?p)j79>XL@0`uTK)+2 z*0L+=RRUPSlvP|jOr5e4IaabBp=)caB`w#VEHb#7HH5{1ncAPT4GTwMguT9tfEPr$^?{pX+f{u7#br0>(g&L z<)9_N2JeuYNQPm;xXK~RsUP|w9P()1n!bVYAvB5FwejTTE)6(-QDAqRn54^W#O$gf zI&VC2W2vvp;t7@*@hPFU zO7h1&(PYr;_Tkv}1?`3hl>@5KdK3w+XppwZy2+yWY^HE9P2`1gclhvOcQ!ufp3B^I zT+cx*=>yRw(QA__839;VfqdC<-SVj9o|x4cn#y$GaWv``W(UwtvIZ8!l-*(sD)fdz${Q^)Ib|11bUjabvyfcU-^bdcW(C z>-L6V{e8|K)i*o;c-??WgkEHWOCus1e= zp56G%B3|6Gke-dBk~3>@nobG&4N@UjpuaR0gY7XJCl8t3G2(>QAt+fiuoi`XENjs zCPPxhlZ^VsXwV&vkfvm}nMOIF3ZioTJ$ina$&9JaqVc@<+0}%tK#JDu=2I-Pi*avA zj>SYWNqF9%D1{=J)lkImcZb4Za1gr+WhH=BV(mV~VwV_}?~q+&WHL{s5ttWkR&8o; z#b9)TRZVkRYB_a)nSFbsTOHf?%k9Lhlq0ZY0!Vvnd+TU!9=)HWd_I?FwbW78U5!eg zMLRvJ#UN6N_Iz#*#a}zG@7g;Y8yXlI8y5EM-zf}TKOzk78}1vh@RZ5?0t(g63PaS` zXqKA&Q7@uJbqN~D;qwG+3a&*^6q<5|vhCEZj2JDn^wiiwLkvhFH;3+~RI;A+pr?L& zFdkr_(may4(Y}zHR#7#13Edh|a9z?Y3Wi8DPZa_Y35LEJ6w&{NQ@mgX9c!hqr%JqW zbmBtg{E7#lQs0Pwz$V|cz$n81z$qrJ@7K^*Hx_cMqm=svyH;0wt8#?lTG)qvL>{ju zis=vV2JEI4TVN~0$+H9s18I3s61)=cXE$rXZ;!y zg-MU6KEYLwV76P=N2jdM0~kds{Y|G>R`@H60Ij#Z6q{Jrhp2shg~l) zokQa$GdXlxhfEdp+1!do0LFQjuQ=6dl~ee%s|!!P6LLz#EBVnAOcDbgcR1>gghO^Y zLph)ditvN!x0s&0zEYR-r&*mYZgMcX>sD>&fc%;Wi*X<1{s1J} zV892@lU^pt=y>aRpO>C3m5zWlCImq}3Cdsr7xWEiL!9Y-r9lJ-z! zNB)H~EUQtFoDJweDv601938CBwaR7YXT-FcQ5~=;BUoT4dq}my z$?rPDiqEihSdg#3x=0tg1ByVl7Y01hhYk>?Xn&K~c!U)tp=IWm##j&7h)DyP~;qPz;J?P%IDYwHXu^x6KV^92A3M z85B$FdaVW(uz3`l2L&jWLCw6Dd&;g&-aIHkF%7Eo-di=9M~Q?m3(lI=kR9{UL_CCQ zAW@&&i{e$`Xvn5LqbyVfNu%%}2k#vsT)kjwentI=Ar+)R-L$oe0#l=X)ZT~Mt_=_E z7>`+48RDF}QKt!!P0Ur2%1cFYV^O^rRXPbwoJ4yh+8^<>b)k{qIBKg2t4u-R%c@-UkYS$d>-^pW2tm~TgqOA1Oc zUnJX&TY#+yAoFPR3H#|BGXldFMrI}0f2d?HOd@E0Hb=oMWMb9~NJ$py1I%DIri&>E zy$oEIx5|v;?}Lgx1)rzkz)eoWDwQEq6B>{bKyW@PNS((!IzlFMv#{&NCG??3L1==R z#8|q~ymLW&^!(u*ggL}%AqD{+G_5D5X=rX?Xr3C5N=TTW70F5tftrm8W-(kBg`np; zAu)qUE!H26iSe9xi<-4Zojh_VuT3>(5KKI&{xmC!#7Y91g5nf&l!keH*c#URr<(8b$h!%BqcEY`Rv=AWWEap59NGFpZ{yh(@#p^})smhkr2a5BvRg zXGp_{Ne3mMDoC2n@yky$nPbXGHSVpTJ%$sR)g=w9dLcI=c9ob?)OlR%loALdAv?}o zODea)LcztMjrW#R-1DcWG_ore3jY1oTPTfBmO|t?|}og1OZ9^zsxb} zaBXwWx1VcoZF6qe-umU%{+1V7E^Yom)A0JC#)XF8ZMdQSk^1+p`|-L=-M8x69i!`( zso^DWe_$t#fr(X0w9%^}R`~;V(~49^!XPO0(2ihv-~k77eo?@=YPB5VN5Gso58jyF zCg4;s@i#gSh!K|K_r&4V{cFI&Yj4$=AXvw7_gUseDu0*;5LIN$Z=ye5k4w_X*zv%i zW!-a2+udiG=cf|1)=U*oiJ~d4vn&*CX#>qJ|KW(a;m;kLjBOK=$p4`Eoao=zkMkBM zQl6F7hevk-RmI@p*)wu2R2H|7&gK~rmG_w(&|BacL>agFDM4AtT(yt zEDJei49?^#R@b?hpN4RN!fnW}x0~)_fnik8^!megqfWH5jDaY^dGFcF3FjLPo<+VAi=vWV zg_1-z&pD$*Pe16iO)noiyNU76iR}pOQG)DBOa$8^nufhis6x#?YvLUJZBf2n zs@glXV|b`v9Vf4eg;KkTU^FUu{qU;5=Io7z0%5zU%`1acXz}(%B!H#0IP#v#Gr+P5 zOA^?jvrQUr+;gnBsOKytVf6;=M#1Q}Tc=TWpJkaxHGTV2QY2FjzV)!VbR5= z#>enxxuQ-qm7MaC`;TxY{`xMwYI7lJQma2wBK!N=``9{8(=JjJ@IIwrEZJJP!G|P= zS(ZSctCXE#YdE|jKcL2vO-wcUfq_t_iF>ZzcArU#E=urK14#nju+1~h1VLXSRSUS3 zcf9|4jblJ=yspS)3LDdWo)r~>?rPK2Vu7KIVPuvDbf~Q|4`$% z+OBD9+3=GMuQYZx$o2nSf2_V?-3@h5Z1~ECk8gMgx92w8zM%`C%KhB+QC6s*@#~U_ z82JTQHWAh3x7(M>2tZ%EN_c3`M|aSaF;kxsJZ0`}r}A2rQ-nO>M8KN}`4UM9#RL#S zMIk9R_f0Sm&0bo(dydiTvWC}LWE&-VVLY-Y!|AsxI2`?8h~}3`ZpwbJN^V-J ztzA#F5rB2*$3DQkiR}4`z0Uf4b=3xZb|qI61SXLvfQnQ)sg0=7{J0)0qS;aYTl*ANcn@JQ? z0){&yW>IW@A^)BQoF^f><#UYy6hd<`?Dj`lHq-Wzt;>{_)@sI;6aFoxiq+Scwkuj7 z4R%(fyiL@YE>WNOjz_oX+#QDxso<}sF+7-x_>#zB@}z=EkKgSLBKI+ZW-)6rP%j6x zhz)Icgth2plF0%2QW`9`-KZjgn95V0^nv8Ufx<$v7t*y&+j%KKMd;l4@E%5dI+#ku zd5A(1#dPwlsE(lcCWOKwLRjFTCUqsAPs78@O`Z6B<}hkls6#Q@cws=XxqgbEnD$5T zVGr@kS3khUrkz{mKv5LnF(M9}kK-R(2YAQN1heh?e&aft3$h6*KX3(jBR%q$=nOAA-PhZZdzHrHF#hztQG4-jL) zvP-y8wg5{kLK#>Jjc|BIiFhz(-q1GyV+!t!jDXngAO%*yK%@Kp$c@0E^%T-~BD04* zq_Y4^W2Re}g~w-MmY$KJBVGAsp{pB@OC!~XM|X%RI2jpu#Aal;hspGPcmGgqRLM!c z+xjD{^r4q>nOSPG_M6HNwDe-zz1d6})Uepa@ZD!>)~IjEDtNEn&@ z2xtr0JwVL3mVjCU*Nz9+HZyE{zFo=xf7QC*b2Qx55Nmit{l7b9=N;|2wtr|lu{!|LXk9majMew0YY3`_4~0f4S*%>z`ilZhWfYr;fjOWc1lx>9?cj zSV5G^lpUL1DqYzrAy;;tlW1+_2+1klXp=K{&I&Giy;>bv?F`a|;4SA^6pn)IYhR09 zJum}EBU4XI9ox=x%qpp1%Nq7vMA9y~pG+`u=`iX?1r;waU*LRdDSpkEtJz5xlUluG}OsV(HrjyBx)aCyE zFP{`9hR1G=jZW-2FROmJJ$(W`un78U^C3Dn_+!(e%8?6%2Gd;7jn*DVGlNiAf;M3t zzwuTVc7cH(Ty!z#HMRwIpX)U+14Gxq*N7PyTr<8>3A1(Qt|fdK_f%H6)l{Q5U=P{t z&}#-^T{Xwfu_|qB)hIadWuvZJ{r0fk>Y`>4Rt%OJ&ULVzK207f1qU_EfJghWExW2P zgUuwCZKfW9zA7~dGz`LSLa-Txl@9XObC(#F?`vOsT|?LJ36*fJIiF^w;@Qf91W(ET z=9QxwT2S)Hrq9d-L7`XQp?qIPIwExLkTTObREp{r#>vAVcFE&UZzKXTjF@SCQ-Plt z>RMLeg*@?4&>v5tBvUFxWm`R{H{h|UG?xRa&U3%8W4{{rS*Ccdv5w-B=jlsndn~md z#j9e`H6FxyX%6`+P_EKSodtHJ8IHz6tER>jgw2!gez(%!b|I6VLvZ@^LSAZB%AZik zBa8f2bRB~Z#p)PPQYMTLOid98l)!&|ukv2zl64|rL$zsgQK`-#s3cy@D_$Yr#|CI6 zY`+CBCa%U$0t0bk6MJLG2ReUGpRjYhZ!$JMIyBIS?4bU!(VfVp!F3g9O-A=e>{gdF zgDAp!^OGzslNm`Bop>1|DYR6If>zaO!D=Lp^NeM9-E5y4MhFU~+)Uc~WSnT*i+>tz zm+Mq#kXY>Y0yKlL((Krirb4e|<1;fMt$B#F~%r`q`BB_%JPTVLvO$J2SbY!F*H&))cSSIMt`I$ZMW z9iJ?1q>|tKiL`boIOIACuHY*~<;CSHHfE(c1dgH*r_rEZwaAH$AHTcQFolmFq07Da zr~K$f7TWx<2X}mI-a-jp;i|pqA01cJ_c>ZFZ@zE+uEq~F{9{93v&;FP&f)sL_7AqV zwEd**mA2n)+qU6o>vOHa)~j0nPs{gP{;+9B%QGz>Y|b=~HisI<>Nl->r1>q)>zn>@ zU31-W$2V0ZUaNO`>(^KXmmDE5#Y2LPXW&KG^EFN$gdeb2cdq*y3x`=rvNuAoDS4Pd zSa+w~`ZX5K!q$*_2rkE{HBg9dw#g~XAgtKD_eFMUFkYb`Q`#r&_l0aah;#%9gcX6M zz>C*#IVyo@W{a9(>Od~veQu6%^pUE?Jy)cI*a~{KIazwpa|y}5W>o9-k;1+vH|6Wm zs8-w!g@=H9QTC>2!^nru-Nd%R#KjeCDw1ooCV6&ii5LM`S%uvB9IIr;WRgm}06uR3 z{|EhUAL_qEqINY&je+rE3dK+rM2#K`oQKqUtVn$7cyXFb2d}w_e*L){HGM%15M1sU z(q<)Sm#-=9MI!)Uoz`RLqJ#)LlodVNYHm}Xj{>JQx4#L36@!k?Gmo=jvbYel@wpUD zmQ|4Mc#es{hOcwcxZ`tHhcCY_eC`bdh8_5L$4{})`0Q)B!-MgUfPmmKG2 z*!E+-gvyOE9D6+%ApKSZ%ww)UuX#JbkPqseXdbH)`mgibN zf{K9omfM;iZhlkKe>GjX{?Pi{*F9VJ)y7|I{6gcp27moibQb&%`H?+eV~NeLQckhW zrK|~j(7KB?Ryi$yg0%!r&?F$Mh8>7j2DV)*n8?bkc!OFNle**dYKJJjX|peq1%|%n zs&{hE${&5RqIP4rmG9jZ(v5Aa-74ucUSqcezY%~=H08K$l)tLy8{xbyj!-q8lqgDS zlUo!)DZ*s8{8e@^u`{%y^8a3Y%-e_xbrCSubg14^x=Q|{F36xg3khRf(pD!{VW7wY zg6}Ub`9*&q6-H0Qs6ULxd-ldw2Bt#vy~DeFk&W`xOjNf@{PI=u(|2p;>N1#zQ&c}Z z=!ts~S{;t~qM+wmF)sn3f>5;1Z7Ks&pyHy)e4om}3MERR#c{k(kWUWxSJKvLB_7xR%N60T^S%sEFI-gjWO`&=j z0(3FzMO5@a^9(9BrqtMnTbl=cr440xR2*!QS06<2f!y)aeHO)p51`}UZnj+K3xDH} zOZs*?{w7=U>m7f?lGcj#n9lF8zq4s>incOoy59CULusz^UW+FyLAxe6|hEKujWhNcYR?+wZRf)sBhRgmg|E)cQyqB zm02%$iV1^YWgf@A$$As5WVkcj zzeZXB1EZr?5!H5lGp%zkl^nc66g%Cj#l85927Go?%=n0D48`+k zx7V`zd}PNPMLSN#qu*rF;*~r>P4v4zL5kI;n+AVQf7OFBvL#in0|G!Z8 zO^54mT`#%ra_w_n@BCo`zxN7C778_g-&NC;o=yNCCAe5^I8c%Beuq%O)6-T z4FD8PTK|bhw$h|6T}iSH|50MMm25qBJZ?r5HnJmm?d5KC%F1MNhv5f_FS0_LDHQJO znL{yT3S(ty8Qt)SC}FL-eMj}0kWo36&&>+)-26P=s6uj%mta1WhS8RqYl$nz$5})w zx#h(DEO&sES5@2@qSDFvg*ifs4@O;Dne_aENV-zUE>TSoil}xetym_W`qK6pj2Y`M>m1YOFMGYvh@>CU}V3#%q6ab@2$R-&yQ3(L7^B^CS|Ke)Ka<4T6pc(~SgN58J^iy|miV#7@4eXpsDN-ts zLtV@@;V6|`$n&BJkat+MQr6_W%&!*dM?H4Lh539MEq{Cc9=nO`W)MX*Xp;Ywg&Fk{ zKgE`$eX*=nNw1THl7aTtr5S{R&R$e!2u8c*KVi(542a5)aWW=Ya_~@AtNA0y-+DW7 z8HPH)p$PLa`Q=X9Yn&6wb@VkB<-E#VgHTx0k2>U+ucyZvn66@UmS22#$q(8aKJIX> zd)86^2hEo?-M{|*ji=W=+we`-9%rikTW!y`U9#b(*1MX2ykg;TiLDg>AjPo;JpJ3ObEeX2n=y_?4Vgg=7IZ*fYCE}fBO~*%@;3c#$n-byNAd$@7iQxq zwL-ck@kuSkzpO4<3aQmBP6YiL=IF2#pIhZpWB`ih12&&Gu&wkuu=&_j$4oY#VzYYl zmw4e$b+Ik`E_+Vi|1P4%s}a8w@Yrp?rR^~WqG$q-o%ktd93rjg5+*GZ$9Qd)u))S< zbB;|AifHiO6aW4ewyUpsRivKk3OzQ1ql`jNi5SZI6Hl@@RCa_bVYS?vqY7Tes2GIR z+BD7-K~W|{39FTxPdvf)5R+h3|Bp4COhrkbRlAK%O%SZ>qT`+~m5yz9IO@K*EE}kO z@cO2JeAB7l+N+C7mLxkvEe{jpvn478(O_Md{#JA5YD}Afur5q_?9{LH@Ke{Z)-s^0 zt^4V-YXLAEvjn4POg*O_V5Lo`Y59NyQ4CIz@*;F97JF!%nx&mpdnjlYS|f`IN2|f8 z7!(EJ5ix(z7w`n59teYfc>T|&Fc=AjZ7xhjFJS7;mAR9gY8rC|-k&W~O5DvF&p7mCKgAa)j~xwY57>}YokIo7@C{Fbw>?T2;0 z+P1OvH(T9~q2`C0?pS|G!>?9&h%8M$^bJ;^YR}kK$2;JLqA4c5S1rWJTzlrSOk-%P zygRnHPZ$#h#`^~8ePXz864laBLT$&`z?jAKG&X|@pOBx@sRdNj%*~(%u9#=P6wsw~ z9&SFI8hXQ&L>}F}Sn+3+i1daeU()aMpi5;W4p&Ifgl42-@P7Ejlk0f7@ClEnVYkMrL zJXkBMZTO<&v)}^wDQl!a9;OVE=@f0Ri0XN zod{%+RzUn_(v-%wHWQu?wmmKroo_ha#|eq7zWt4^uo9S@)1#ZJ8aWXuF3rxiFT z++noS8YaXKT} zJ{Kx#+!pdDd}s^eL!Sd*GU|rBjp!P?K^um%VHvPhpBdqyZ)_$v64NU8r;7V63@+C<@riwgTadnn2uX`5AWU6Q4!en1T!k@yXh*cT? zS>#fcO)2?%AzxhdCIg6SMrMW2?TgYR+ie+C2B!7+uZF}ak39IFM@W%L(>y|yr}$+p zk^2zK(pD-Hz;jaIf$a#`3u(!uT7UKVg)G`pAoPurOHjTs;6;;5;yN1S&+m^s_TcAP17+reW&27EURs+E)|(3Y zlksRs^7^EpI}}C#I%r?^#9;NTUIwOh6D+;;!4HiyX2C*8ltHOZ*cF(?Ym?be8bc~Y zoqGLA^oydJW&v-=W{8nSs?sp6q-w;UIBC_m6cfHQ|3E1u!Og=FC6eLbf8-*;Nk8TgkY+hg#^4i1YI^X|aIxn*5=3 zcA+5P=WcpI2Tf0~x+?pq{9h2qmPjHx-aP?l4M+`B3daH;AnwDWM!p#md8M z$08!#(`Z6EpH38(8qR#ZjRwnpNkKhJ41p zO{*A7d8o>0rVokfMEYP=Vs)0TJ@cZU2(gbSL9+W%vZ6dR5~pOQ=wB|Ho54F zL{*=OIPNjCa1T39DggnVe%99EQrBqTvS{D+aB4Mw+6;d9mLV?`d(@6;_ zjvjTDtR+P7+B45fC7Qfo;vd-wxrniWUqWZok`=l zMR=(Ze|DH9d5%)2p-PF!+Y(X6STY_+pr>d+gcmLt3J1f+))lMRVk<*bh*x|731>ca zc)={iMUQEwZ66-As5=y(pGU+=-wDq15hK2;xH_r5EA^jV$fpZ{0a{Ag8IkHSC#88Yo$0ESNK$qheP5Hkp#ad2ro<#d zO{9?9>-C|)zp*viD#%n0rb4J4{j8Fja!SAP%qOp+{nEo|v|aXIO-whQ7iYv-I5e{u zZPs1!sBowiddLsk8}diuevcRor+kzb8S+L$0iUsX!fFOq9;`C9!F)QE!ihSe?jRNO zRq|QqnNKtjRaog5l3j=@`xgpWD~Poeh6*#{K^1g4rc!`>C(dEXKrHjdqXAzy8B8Vu zQ3Qtu0!XT{cRZJeT4j=KI`fHoB1xDnl(5`G;#^;HHcjy?gW_}!qAS8>vopC$31f)% zk>T2m(1|)%IVaHS zE})RHHy93!kRZI|o2N>~USyGLQTD5t+p<8Fq0LA~!cszuh*l?Jl{{eN%#)Y06P^V=H@p$+Fxk<)eU#HzNh)kEq%?C&c7vwQv0b0ln;MWJUo+5ioy=4=KV8L`rr%;zn2U)Qm^Od%cQ>b%=ZtIgwFczkU@iVu(1q^ zlnV1m&tvpai_Lf;VnSUd!E;ur*Hy8wsYN||!_koFkH;g4sNd&CuWm$C8&hOgA-tD^ z`6}pTH5Wt@vGZ;zTXR9o=CTEME5F_7eq-a8I`!DnhT=D zIxDIIp51PuSR+ zd=*T&EYNCNR4D#`y8SFs<-cA3;rdtCPh5YGUI5>BeaH1}*Ei4;;H$3ZU0-&6-t}46 zr(I9EKI(eh^{DHt>z7<7UB_IDu7YdUHSH2z??Cs!G1ri*A3X%aF0X5=>pIufuFGAQ zy4qb$t~%#`w4ZhUi}RnHKXU%S`5otOAaxkMp2YavpH*cTPA*oP*9j=XPh%+3W0bUh90bv%~3hHaQ*bKW+ct?LTh+ z>-O)o|4IAT+y9{bciTVT{!IHP+JC+MiS|cnNVT6D1!@$iQJ_YF8U<<;s8OIsff@yB z6sS?)^-Y1VoTgC1|3bkFy#0Uo|JaYW|Ge*qRFUC75RQqr|AY82y!{m6A9(xsGxt)Z ztABgn!xRVdFQ}@Cw|_4)D?cnYIK{G16{nOGDcjN6J(P{v1 z|A4N}c>8B>$$p-wt{%k#7|Mmji`@^qw;`MJ{jN|pMzet6G ze(>BDyng@LCcJ*{nMu6<)idN>{_eRPUjOo(gx5biw;!*soTGvg-~KdV`==j2g4aKJ zawA^9^(*An|K=0##OpUc(2dtWe(W;5zWgXbzVI+T_v;T*F#1am?8WQX&W_>r#j`iy z^^eZdX#enjg7ybz4&wFq?=9f<_wJp+>kFsp_vcU3Sk9k*2c^89z746hO}oi@LC&jGxC;Zz2%zjKO+_4!k`snUl?UJ$Hg|d-}u(UO#>OQoMdbj^g#>GL7+LG6gX`B@^9$Q>HOKDZdG? zzae+v_19(k{zqk+j*rM>wfL}1lktSyg4f4cz4Z?s!ml5g$ID|hv@;5P zPvYf1!v6gEm}X?Oj*qqV8t0iFGioO1i&winuN+3f6sS?4Mu8dy{wGr4_@>sTO&uL|r`|X(#!&$-InDkZ>>rQy zO~!=Dz8%9cfvyUjt(5$gP6|V#ld-|rxG*|4DU41H4-0$8herCw_X~Ss`@7kf5ci!I zskNjq8GHLAzm}8=>FI3IwM0HW$3hVGZ}R3Tl!I2{+5z5W$Ow5ME5`F_pqM<6k)|b7 zlC+QepNEKUTKl(%iB`B5&`rbxQjQ`BsnqH#1b z!W1cQ9i}N#F4m^#B2Q7KscF;ISJ%ncvrROKAna`VJqwcd%O$2+(k`!No~WWSV+gHX z`SnekuD!NS-pZba#&mPJLYml{;nz0P6Ad5Oe5Tyn*tDsut8VFX_Rs+dkpw>7D#JG-av+JC#R`>{ni`rmZQ4|Ke3oH+ ztC(4k*h`}cKXz#~XlWB6^p6drlzI#p_4iH0I6eqNlF+m7z#)2^fa7i0a9y0w<<)~t zMPCV1vVM?Q$Wu)H;sO0AP}HJIq3UR@1Iw9`hLoRYLbN%@R^GA;LA;Jc}=Y18GG*DbX$ ze1{6?GLYx5>rA-vYbvINoZ-Msxh1UWKOp!UDR(OCBlhx6oycQpz10)DOi{A^QTX?M$2j_IpA zE?>9qZFO~<>gt;698Dc{b!0eO+EcexO%z!^M=mWTq(T%?FtZu2N7xCmF;Pfh9r4D-ZW~&)3=iNMTN902ic@BlaqwEX5)pq?f9lw z7(D+}o<_1`;XMnv#rphoyc12&yU|XuI~3}==VSo91Zu#-aw|tK7Y;JDen?L_l zPXXgeQ*x7lr;YcG_D={C(yX*lkh(#iP*m6}B2iWtjE%Ux!2n8GsMNVZ6lU^L>c-7w zhs1Jj3%$Xl7nKZ>;YcbTPP!4{wE3nR(zDY-A)lxm2&OyD2vG_iwHCT@^Jb)MCFf^u z+>H6!EFkI_>c@?n!|2@Dd(#cQ;!WBBlm&A`0l9HPVSX_q-ME=f#Ga&-$f08Zq=9W% zoKil6z9ic>-!w@{VA^^_er+~cp!i&9P^==jro`RQOCYrejUCQ_l)*?(I3SFRi#X(y z!tPvVQCo{DM*7l4o1ZAYY-7=`ep;lU7)gbq!Iak%t;Vzz!CPrsyg|&-8s}w~BqnJd zC`m8I6lqe0(e>dF0!1xzQNf<3EgkW=gQ%;Ew8uy^fSmV8x7QPP<2~T>diW>7Zsb6s zG_~QPzw3S58o^8r`@gA4+yC!hsH-5ioH5fN+x}nqBH#aIxBn+r*#3=;Z2LDh-c0@h z{M_vSMfU!-|Ms&VVg`+kjTJN6ZR%=WZdt3J8&-3`xSG|^H4a>k`x1vHHtn-8UqOYW zzH>HB+Z3GLFTC|yk3YJ7G{+7N{)aGw`aGy_L#fxM6D6KQ&42=GH?SRTjJOxvZnyrV zRWrSK$eTjn32)fvm#VS5is0GZU8^2RA|8wf17Tk>67^PNBt`Hp+DMWqe^^XLgK^Z_ zuf|A<;8i%1b;N2yp6)2*hhV7d)O8JD9@iR#2c3DGKHAb#_Mn|(%p<^L)f1&yYtFeW`HVgU%^ckZB|BVhRbyG@KB=!~ z`=q|Ue&gHz^}cs@{>xYHqYZ+;iTKj|qL6|GWNphTk@P3LzC;8`Tb^o=z6jomr1yDM znT&BLZ`cq0CfXhGc9H(y(6Gbd^tbh|_u-e?PmKaK3e+f2F$I3b)qRyCeW2qS)!bC4 z3prnGuUJD0a49Fqgq(t~dACG%q5>+jjHVL@rOalb(_4ViNU0FUj3p@VrIfa6dZ6hW z%i5&6yBUA)?ryv}$W^4b{U;wDvH9+9oJ0Po{ZloGN}gfVRZB)Z@oKR4B6usZ_F{G0 z8x2GUY!4^o52r-YEBRCYMA1nFsvZBtdSp1KhxGY2XvE*DuYA6h)0)kOm+C5dN|9hHo$ECF4_6W|9(7f=jrdLfNcX^3<{zg!?n zkJ~$w&WK5g?5so?xHO7PSvv<&R*%OtaLu~_?OL&6+FxuQl-7$T{9bPY2AZ`?+bD2o zfoIt}5aM(TVlb>qMcM$A8Kjj!6E7l#A2Acme<>`Y?%*~?F8q>76a5YISD4Q)Bv|Fx zXz)6GFgGWmH8CuT><(DSm;FBfZqFQjCn?;C@_ue%41JRo1K4a156b3HzE@(CrW!0^ zqDQ%^c{D!eOJ@FXj!>rQJj_g_1)+ClsXNKrs)qN_y5IV7}$!yW8I4 zNcWRfYl!(5b(h%w<8>`^Q-x+NuR7t(!6&SdMsIx+|)z-$QyRB{gWpDfGWAyU@e!0!>fhD*PoneUuiupyAvF=Q#@WHq= zw-86@+3Kw+FcRWe4|;rllt5qm*%d5;x6+O@FhOoj@u28{;U@|MWWXIY{&>5Kt^~VC zQiA1-2_7aXfR@^Tlm*RL!9?=R>N3T0o8fgM@<7~So9=Zh^LSGpF%_?#%wvRSSvM8R zJf;(HC9f%%gGW6IHNk1sB7`XV62U|?83>?aW)*f%5j+bO%83wcR0=O#H7^MHLqUHy zo{$pWKs9v0VtA_`O;kwcz}d*dE!mzXhDgK{2__K8)$S;!`$Upr)Srk~Wet)pWrDZj zRC)bYWr|wP3n|oU=YE_lm2IEU=5N)*qb-J}BhggcUljqk2;PdrD`jR0d#ks_B1wL?!d{Yg!#>Lf8=_z>P={m)`j{!DYH?}eN6aUm98bvRPM<4=XF$KH(aRyiDPl~;by zMyz~*))%c6ET3X~+N)|>`}z5xfF3Mc!tm+wgj8iuw|k~C5Q$;jT+#ALmQx%Ciscj5EbWL%rSmw~*+C>nZ*UJdqEu<~Qooeoyw(>`16=n!)dPWY34e>4;lt1!A^c&i-U!CAxz z#MSX&Y<~538>T^w4Pt#L5sy@3=GfRw@K!lCj3%(g(I9>>i75DL%@ktkb$F{DO>~Xx zF5ruVBAB77jm8LX^`i-{ackqY15XG=Zo;o=8;1Si(kQgtz+9 zMAkT(U|2$~MWkvg%?NMxqp=_I#(5BSO*HPW9v3jeTjgj-idy5`ghOHqr()IS#t3hf zqftjP3E_kp)Dog5a^@6?6LKlZE=Ku9FB-$YGr21!OpOjr#s-9mNt6PZ5OO=!C>0e7 z#C=H0&=!y_o6Ea}z625_lT60WG2m$237ssDz_UCvx6%XESUu#@zGs12H$X;35+}vS z&9YRiT((<46IYTQAu!M6@Euj`gB2G+XeLL9DXBzGcg54uJYF;S2O**6e}lSW7e{4p>>LVTU3o-B&qAj0ek zjB%Alq?1lHf?`CAZlNEMUy%9{%9D_gLN?Ehp6m`Xbh3Hj_d@hsNT3-G55S^`hJ&zM z3%kTjN&pq6?I$?ye|PZjEFF%Ph}0&gN&x1x*; zL2ZB=pXpq2#2y`lX_pOd4sGnEeAdlr*+Ag}UVoq)ww^$M*?G#wYbg1?hE!c}085nU zD%UvDX9H`omeS+>i2%gnDls4nywwjUxYn54fRs#1Rj~r{*)hUf^>9Lwwa!j36~$>+ zC5DRGF~VE@aMt8$pv4wKgWyzEa(DRb7~!pYIBRp9&~PB}hNH>qcp9wmRy~}EcdvTp z+0m~soM_yWM811_kmid?IY|jQY?eST zl&@iiZBV|Djzg|TnFq`z1zjO#VI~b3Tskt7jzbO}7#I*b$v-n7LH zy33q5qu#}W=I}9z>$E_!{P)8=b%s4#d87od!z>g8?ZMn@fN@e<4S7_O#s|9v!o_q+ z&DY>J(t4)54wJ_mPO$VWh(f^`GZOhKAks5sq*JlgE;IF=PxxMC-ls8r(*i<(sh-ALuZ{Rng=3rj5*i_YGL=jQ zA^`-eCERn_wbl(PhPM*iVS%9L0yQ^dTB%N&1T%teO;ku%iWFGQ21=+zvmv_>Awp6l znFO1v79ouA)s*ZRIU)>WKp6;$eveL*oS3Y+(d1=LiWo`=2jmIVr}&0CYLKiTxsvblBPFiW-y zhi`rpW!4RT>gLD}Dx7lOm{=bUhatL^O0lC*k@xVYBFL1|jUjp?IgQGELBfSd9|@yY z+RBM{uf8a($lT#D3G!5)66l2yeiQU`M|^>92n&kz#N}U#)u=)OH>o2KE|BGy&<)h4 z)GVH$O+)Z@b?u~Fshj-1@0`;Q^kaY-klJ1K)b0!jG|uBY-}&B;fvv5rNy(7K z_MwRJX?7ubLR=*+VM&$sgli%EJ@MKXPYIqI+6Y7XI?(}yC}gMDb{l5%@_d2^CdbPX zqC$Ci3QiEL^|@@ST`ZvxgE@~3YqNw+MaG+QQ_@{vESojdR+GOPM!@uK%>#tG? zSEa&)t5R7x`fvQRQ$PIM|HX>_FHr93rxu?7+aPDOQmLd6E~tbuHyD3Ql{5;qjvK(G z7k0RQ6cn}KPA+Ivzfe7Jk_a9t(e(v|KE{H)F-rRaiB_o+c)V6zB4yWqyrdpKFRx_u zaj58#$II$*rPGHWzrhhuYebOYUt;|}^5x2cwt)-H`MM6O(6Q1P%?w4A7MKO-%T>g+ z;Wy_)*Gm3+O|^jAvGsD0qp6)F@WB)VZyQHfDZog|Lx~t}Thbhg#|x+q!yF#Oz9ycP zkNV_BjU>np(=PSaLC8)Cu~^k+v#rm^j9!}k95!Vao0XE)oR41(n~ID# z`=$&sh-_=8C~nn-8A61w4v}O+w@B8HJ_WyU|1fEev`(vJw~X36s{Vo8PK-C>zSW^_ z62Xx!Yj&r%Tof8W8Wik9Fnk5kzDyXU?Q;?LMkZcxl^Wq~CwKIDDm5)>r>f%8f?a8A zSz8nSdV;BtV(P^oSC&#~?t@hoW>DPk@}jIlKud_0s`22V-eGZ$ZLIuF%KU?+jst`P z+n|)4II)Y&OT2iqvaD_RlAv&z%k5L4SB#EY3>eRcRn4G`V`ZzoEEBbP+WE4%kXx6Gl!>EEC*Ql7W0Z|qCCFPo~qvSCP z!kATRUZf8He!c>T&6%ChvH{4rIRjp}rv8vwNd zczt{7I$c#IdR-WMuBgqjq^))-iUn$bD9T0xJeW7-bcD;ZHSBJOI?WvWr^mjTDv_yN@P;Oa+=_~^@Wv0F!D&97c$&X({qbp=I#fhghl=K( zCIJpzLeLgw%RcrO$I?aTGiUgq&YW5K9xjpkQ!AB(gF18O%b`pq+gnc4q6dA2#q)E4y5zqntg{We^K=~mE(aRJ^YIt7!a}%E5|$<@$NNT zC@N@&%#d|(S>NA@LSw%AB2xL6V0$3n7}9zvK5Yw^93T?mR;5mIL`qi|c%_DR+_ zxS^q9x8V3MwTq_Fnn$93e7vkf4!NyF!5?^Kpog2ag*To!olY9+Qxp1%Xi;JufHa&w z&4+yY^vZk582AG}vtoQbPQy>1K79cpnUJTDgmzJ6il23;#T4vZ*N}B~TDxlF;N1b5 zwv2lK#=rrdsN?qk&YWFRtf4kMf-K;6oX6!fW8-C=TY`Z|?PQwE$>_|NlO46+8CP?) zi*{Ktvcw+wK0327)j{zuNk-69g=<7`y#gXG$WDc~S_lUs6BG!>^zNjAf)z$Z+X0Q! zDUs3$6+)X8uW)}2qfuC|iknOj4EdC$SxuCTa{}V7 z(uHR|RB^d$qOuZ)68twiJ^t_9+@ybSUJsO&~?Qz9ciC!bx$ zX(A;K87C&JB=ayyS7PHG5HcIc8{Z<0z6ZY1b|7l_=F$;-Tp$>WN+2L{C4+Dvr(MGU zUC{-KNXhD$%uT>hqA3f90G^HTR2ar>_+sXf%>-I8F!L*NPy4Jh@Rtrs-5k7aaijPr;7&a-b zYiSJ}62A`+j_tdIg-(GACg{=)#tfWUq=HJBC<6k&lMBXss{au-W# z9f^05ZXs%2%WJdw60||>th7i?-mkRh7E_C6#+}G`6S$+-Y5_Sl z;#KU7C8j?TN*Ag4A(5m?>TNkBt`L@9v!DUu#xh!>!D!mWJmgemOtnt7LWGLbo*vjl zJ~o6G{1A9id0+fT6H|2oz&Fl$u5*_Nf&hpa1IWa+Xm(L4nj}hpg9jp&t%g-A+WI`w zo*CUE<4vG@lzD`t2dNJb+eimWlzKm1wO?lmwX_X(a0)7sM>q zn-vR5baU}MR2$LpvMxxyJSkk!{n!s45m-F1JK)othfGvesjhTOgGSrFqd+GcsNl+Mr=>65dP+mj{bJ>cC4gnLJ%_j3U)?E_!-XO^b+exkA}^|Xg3 zF*+53C7|EE;1_Vw!uin+o7UODnX z@^3%I?(OT>uU|z_pGtEiml|5eP{nb)M7 zEb`<9jD@%zZhVff!UX0>S6Ha9IZP1^r^9hYWaT)7rK{Sss_2Afq2$#(45*dZcoU>4 zVlb-u9E}M9+~?@SyNK+i-#>CKH5%f-y*;&)tQvEY#Sv(Kyh)FSxOVL(o$0k}nVz(3 z*RGvxdkfKGmJeFt;4lleCg~HrF=_+bfYl44vL6Y>Mk`_OVq=UDtHDDD&i$`a6DwFO zcx*^kKs`N?@h2MWW)-$_TjuEoXwMt};iFf=jzCvuUz44 zaplU&_sSrl($|@aKL4-(l6yNb6}@uh%3-fXRD(FrNxvM=2P{PoHCPkwzcsr5){rsw z^u#@oI>jn1WOzWCVHG}KwJ2PCXACb6#T>#GOlA;Yx7HUlJkg*^Pr}MeMd)34FX(AC z#>l(>RYXCO@Y%)fK{zBuD$x_)8b|#Ihstxj}0iuJzeOhB}l~*kmfG|fy3r(z3eNp`tU@+zd1~n{g!lDA-L06Nv*N#g* z@0>Vsl+yAKDf6^pWhdLm-Dh z4uKp3?*<5b>bdUs6`m^W-TKH!3WZyHk3auPp>TEF)UJ+qn|D`HMha11efuuA&*3Cu z3IyJQ^Tr%+apo7&K@pv4_TQS2v6ymcLO4P8}{(2YeUAppI89y z4flTH#|uBU8^XO#*KGjHQn3%gfI|+kLFG-P@rv44l-}!Vt8El+LH09(`c{XIwT!|p z`{P)L+F6}44b!&Frd_q$Xu!Cvmuq$1tmp?rx$Geo22$JMvxr#f+Pmk@X=gvWbnTo% zz9yHqN5%zLCmAlgUguPodW)gS*r~?uQonhsyj(ohvhCKg-Tzc`zyQ7S6ae}&d#5G< znthoWoSF9+QIgb7K;G`?HC{%63i>dRDkORpHkgF!eT3~9s8 zAIc4vp}h9+p{!32Wb|S|IvvWJ6?F?WNsW?Tt5?g126D=<^9ORjAMmAFQF$JG3Av9` z(2NlJ711WqKvFo;R;>gGU>-w46B31m3T~*9MBFfJ9?bLGk$HA_Z+AFfKGRf` z=eJMT?DgFLuT1s1|3CNtbLx8T|3@;_bIS7&O5IIQ<<9;8GR8ai|G&G7K;-`a-2V?l zNn*i-Xf{*s{}1KMXA9-2{@W??{vWLSHuwJzPoFwv_amn1Sk=0?zy9z_-Mhs99~2Aa zy5f}o|M=1GDSXc}-+lLq|Kz*=&tprE-Fo!je&p+TEC2bqj2n zdsNx$Q*WTi|EZgz(t^kgK1rcVAOARK`F#B2D`cp{ z&r1F4;_ngBv5B*MKK}8KC#JY$mA0(dW}{wdRp9@q&m~AGHeM!^32L!%sR9&B&`Y(d zfi4~;vtBQwyf+GNR*FWgUev3lGAbd~&2J?RvO+3s}u~?}tyk36=`C9el1N)h& z>ly$6R2d`G7a-{DF#TD*@(Q2TE3af`D8BN_D=68HynnZej@@YGP5n~1gB_K9hRf9n z`rA}AxPU~1mY}xptm&p^*({l;HjCo?wRsd-ijOztK}*_eF4iiGMrmR1rI&xS;5487 zk%SH%g{f2RYLSu@OWNfzJkICPamO8Mq5d3*%%fYV?w*afL3o)nuincq^KriXa^}^0 z`Q?{I(H#>Qi=sQl;=H4VE?Z(>P(cW$dXMc|SaE*uk} z9y*UEZgxX$r4sbr;HYZ|piwb5*t^C|Q@Io<@7jAlT`W3Fds z=)8lbZr9M0Z!X33Xb0i(vUX5Hq19+x`Gao2D&q*|QaeciBsAW{2BO&##+)|LLc~M0 zIiK>jbOPb=vNllmHy{`-^&~B$&24#M@5&|^k|NyEf;WZf>9#2F5UF=_2)ezw$y{i2 zGqb48=H}*O%!W|M3I*+`;mh9Y26j_VmK&zujcDwZF7gE;!vDNMWy8=KC`{oIP3H7B zHh2#k8<`T{#>U2neHnrF01;vJ<~;Ubgw>35Br5s`!eZ+*d$@U%_i*!OX3Z@;bt<-p z7w54DA$lX?g-Vqla1SrO$a{G4#mtTyFTVISZ574q z(K_WE4q8K5FRE~9n7SUVJC;OJ{fC|2hdQ0eRtJzj_OYzw7#;ceGk3Ha7 zY7b?Wde$tZX#s|+fRN|+0~`oq2H@(`P8K>HN)@7c1H6gUKS@Hl%fKk<@>&;xt=h>; zIBi7OwzU`BK0aQU@F0fH9!R~UmDA3?a)2!)Aec^BWT}&wbDD&TN2AbtG8R|oGzsON zKk!M25Iyioh_pQLNrdUz-7+c+9mX)>e`A4QfM=}BZD`gaWP9zP+!q&*h0gi zHY;~uMsqurA}<>mLp(tI zIa*2)QJdt-(RD-H#&blMCZEH(#NLYREQ!+JKz*%|gYtF?u-qe$P6<4N&Z&cdMgd>I zb>HEjWosK$qZjMDfzD%A6CJ2W>eOO8;q7BPW!gSXI>2&B@Qm*+`rXLs1sXoA9Ar^J zF<%UVCRW>h_fB7{hSh%V}Kng0c0efx+_Zz042L_ zbNh}nv}fPU`H4Bvopmlix{xt$d+Y(zQs5N9=5P)=-`FUI+_c$#cu)*k3$IZb`mQl# zH$??&dti~oKRa00GRJ-u6nJ9H@V42BF_U!;=1FVl0HnZZWyeGBdTKW(`_B&vR8YBy z_zw@$Z;mWKR;^Yti+XW+(C-{Ns(Es}EJKWL#(GpKT6iu*oB~oKX~n9xrk?Y!Io^xE zc{breycd7)T*8BRFaF^9ga`3n{J{$e58}Ov2g7*6R%2nEWu$G{)V>WgKV;2?AwFU) zq!@=WBf)ZG*B))T!%>|Z^tC;y5nr2iX5Y98$S z|BpWUXN6;L;aC2XLm-Dh4uKp3Z+{5<-dY2`=%=6jKtk}qe_fi|3s8?l50LelxDGee zq~L(RO11nq8f{=6eW6*HW-W$}4iR;Gu+ zvaI~P4-jh_J?~csof8xCHD$%Arnu!IIcl{_&=la3J3D@D?Cwgugs(&wcA26P#mg-h zAspx{G(YS_@%~b^RZhG`;nm_sVYM4JbtJe7{bsaCVH;R!DY`-`I}hc!g?(DyD6qYu zs5+X&LtvIxGE`ZoI3}hJCpWGx_*6mpunu_Lu%bo_6%Z0Pga+CQ{3QYY7skk-9id5v z=j?zmz+%Ca0i&>K2qvNl%CI#?vwH+;;3TBBXK8oHGDA@<78;Ka<6fx)Z^drlDhe0; z1SV0Og1;5?+Q!*@bO-jz4XZbB{Y}6j!sN}E*u)LcXRD*sRi%xuURu=FZ}3Jwx-p0I zF!fryg^q}2K(mr`9+6FO;DvVCwO&I@KJBuDphEi|ss7%(-}i#(WMEIE7Y+PPWGv9k3-DbXe$ zI|{&)jO)`sO@6WIpC((dUanNkQrxZ!mtMVURHrk@UUf#O5~AJk=nR$p=Nu#x22Iko z$h@o<>*ZoKaq1#In#a`SnKVpv08Q{=}lX#4r0Z>OM-6BZgO@b10oM5P#eXZ-8=wx6D4zDlVXI4Wa(6q2Xk)Y z_D4$--HqS_({gUpwVyqaq%^-(~Wy_jyansPEk(?fFGz(ceR`~%MaHxd7jz{QHO z!217VuNUxN{*yx>hd>U290EB69wr2S^w9OLlCa0Y3W&rh082~*lMxWt<}n`(bQ_SE?KRowX(Kli57t^d)V}x0av!X zglSr^{@Xo!j1`?MZ<4!5el&Yh0A~+>}3P)dy^Sk|+Q!xXox+P3;!yX}J z-JfF3?uh|U%IH;2Z*Myus-e(C3p}mNDEDXM*iezvVEVKAN@O_4H_NJ+XK{?}QzF|F z-AgFjL}hX0VV3WPFw3GDjV7Ntsy~n8J2heM&7;QONm1hyhxZ*=E$)Hb;KN!$xJKS& zF&&?Kb7~Z=`w`avQ56&3AF9L1`u}_W*8={_e{u-q5Xd3$Zh^qBo#;TXTuRg{-+JZo zY0J=~@q*ARL%l3i6@5QXKD~cMr^6a#r;}N0zSHSU9k=mtG_0Csm#uQW-YS|&37BR% zltn5MV!u6k^0ZE)R4>}LC|W+5?HXPuUVoeOrm@;mxm0c#MsoE5K+@06MauEpKW~~g zR4JD$Ej>9;7oD{H4RKd3ZQs13VK*n2DB_~?9bxqVU;3p~8l&c!h z7+kJ`Y|r6xJ1`0l@DLZOfGwCl?%M5&=_*|_A0#aI@*od?fES{G+ySy{pKV> z|JTt=!chAE(MPrl#~b*S|Kt$JA@D#T@C$cdg);i|lTRg-Yy0A{8JwJv#)_(bmxVIp zJ?`iB7a1knUVW8S(N|y1EZO$ztFK9#(M%2T5=K^fPXX=1f#Rx7nS%KbEo^Pq{b@v>;5Ui68g&$DImY9zRtr|_$)HBp}z z-deEU>((~PSD{|h@ZcLZODMf+Hk(D$ly!{`$Gzg?Wo|fVIhnBGqIOx-L<$nnQ4YR+ z@Xc2EH0(x8FE)g>d$`TU$IIMo`ss4Lc;OjuPzb=5hKjhlsa;~XxGEc^R}WKv*{T%n zVyjxQ?5e1ccF4WQ#+%qX#JfOD(RH@SP`%&DgAVO|;511F@(Y*f^+TL>)7D#cy9{@C zbuO*fV&hHhHzJmyFBaKKlJ*PAsL72EwQsz2tJ`xYL2~wjwt9Q@<^^r@h1E^`x}a^W zuU@^XU0=PTUA?e+QM-KsA6~j}?ZQpG{ZVc0+UCvc=Wm_6fcntaKp#ORu3zKt8QO)V za~G~{su@nQ_$>M>vb0UpbIJ0)J3=T57PpJ4@F;f|l#5d3^Jk@{X0cYUG+VY=FO}wT z0`c)OPaq&I-^UVWy$%VpP7>zle#A-Td|y~UvNUB!VI2gMTGWR6WRdik*#Ky#rd>3s^vK|9JGEyUAKHg+|u;f_bB zEb-$DIAYN`6X8HkC#WS)-+NYzuv6_U_^I~ceq%T|^U6Sk^9-E(UquBw#18djN261+ z938Fhrxlj@e`hb=RMpXBxQOP$dOfj@V=b)wRCJ;JC=8W4`2Zo=bb@5XP( z@I6GF4a1PFnyc*pf9%LVFTC%skDq_~4$`@-%ja-q-K9*VxI`+Xko ztdILn&?fRC-q{$9N23l(6RXEA;ms>(_BHgzTRzphj5lAfdX2HyVL_;BESJzTGx)*P zD=!y~s{d14tQpHFDH{CL7k=*h-P9xd`JbNU$RgcE4{&6z%SYzAnf`0nbxCZxsJWg) z6@tU|>fs2H*FLmo<^*QBY8CCeg_fjxX%4J1K3*p63tV5P?yhHVIAY z9@h;fP#k>2l~$=}wyd&Qu9$Pt9b@BVZn(r=@-XY$fU`i{AF>J|&O9954!+L}*Y|4M}d)397zFd#Iweb4meW)_^G(tLcL+kJ_&SK%nkz>aS z$I#jP2q5tKkr@oCq96;Zflc&ZPCAQkrnbZA^)}#;MhSPV-KA`cUT@_G|MnZd^iwDQ zZpD;`a^!ik>P=3H|^mv z&%tl+I76oaC#!O|!P48XM|Y@8FD*+~G5p^qF|aJyU+ z&ff_XjvjfH!(n|A860_O-y;_X>mx?!7)xlt6F$bvV>EujS(cWyHM$8nNOA)Z{K(9` zh_i%YAFuE~r1vH@D-%`)0uWom?XicOAc0B$kPozNjyM8-z_9QdFjL$omOIEx01GPS zmK@>ReiLC|Y*i|WJ^_FyyxTrD?O+*`97&zPR z*dyYzI&iyP_gg>vMVydLs_D0W_P0c4GrC7b&UM||rDLtAraz%83T+~MJr8y4+R3xG z7M8WM7P^Qd(fcaQApHfHM8rFecCu$fN5B;oTj`1>H#-)nfQ-xY&>?y#K3zbgs38PX zLO!uQ!Va-#Ed+&=;&J%_J-uaj2ev0iVN51ygz5L%Hdf{i7kO~YYi=QXyg5?Xx5>by zf4yK2wk&j89}5aVgWrGw42nHWYKm^a=1(>s?G9)TsN)T5Jj5ys@`|jD5oqT^h9zmx2=ht&LR4nG5Ft8Mq0#^;7h+X{U(g{! z5rW(hcfmh;$)|8;XzO*^>ZAV^-v=|{J{WO!rTEM{m>x3Q#jVF(6mV+U6cr%J^l%Fp zDK10LX|-@2#X|$v8+jldZL8Q=qy}gNc`|65pbNfL01E zMrq=4XN;OGyfTi=if9k|cPc3sTGIZcSUi_Sho>aM+N!VM!V)MYbvi>7Ol9|#5{)k0 z5^Q1@FvC?tIv&ri3mc&%1^^BtefDjR@Z9pIryqb#Lz_kZW3^72v&8`Kd3=)nr2-1i2 zD$E|F3XdV&oINKlWmxz|_*x4UPDlx9Sk&NG`s2yeAe3U7Z>U{_Wub`{v_dvx4FNaA zwnwBL!E6Kj2^nSZfP?3tGh-;JH{FJkqP+ki%~zoZ@ISJ^MeDVxn<(1CvWm014MoNA zoJF+`XV@i~3^$gyFE${yAA^UFJ|P7Y+o@{jalLyI6YB|>SY4!g!^#RYwVFu_3+xI) zE4y&hqZ>p`Yn5pzYMDD;`vlxKBSJBrMl=NG zZov3S5s}xsyFJjwp>MOowb1GKdcZ1bJ|_$xFR!hw#lLgg^>A7nV?69>mtdt8YGnk1 zZL)5$Cdp#u>35h3l94J~<(nPQd4`AAAPzalFM0^aTArC7CHgE~78f1$pj8v0ipcDZi z?oM+Hh=j87Jk-DFI{mXM;S`9lF|fpW*~TQpt*_44C9C@uh%8T6D-H z50xE68HQ(Y9jp?_B+WgN)FbAw+al%!Y{kuYd1Pto-*LN5m_(Z}7xi1iriD_Uf@8?j zC-fpsg5(>-OP#a26kLs^k}(NSv(L@a{9$ZwEJ};YxzBoTACYIP2!CP#$bA#N2HU~N zuwwz-ETrL*;h207HJu#?w}SUV0+G)hz(u==ZNryBPjG-2qc5a)jE-HwX$AQT?8|2| z;El*mw;EtVci??nqJ7!8)Gc_9h?foF0a4-`aXM^1BCJs*Q!Ei;noDBZvgRM2I6E{j z2as`Ybav!L10Kno19}G*J1||aHPC46tqWJ2z!M0JeXBW!=ztU)Y4S$?6K{kTN*iJ& zoJR3r(!0~gnn8f&_t{h}-G`&YIy)Ohqf{%k?GzylwmMZdrIzAh$+)X%^G;`sxC~ey zq+gRSs()=E5fh9F_6fJOuZa;}8(Z*EKqvG0l0^(o1ObMI5Ei~^ZY;h|2oRM4K-CHK z@(5^6NTd>;GsR5lTF_VhFr7_c+(%i`!#4QgbJlPxkc$}_V3yU*4Pb_f01p0bF zVnjh=fjoj_G2w(%N#+4bZF?{i$Q3a?LmZ9k;L{KdW~A^50g#0JsY~D|5P{jz)E|?e ziY>wW1hNKkU&v;9-7Jzz-fdYxay1R;zOdG?XR!w-98hoAgCzo&f#|7F7YT2!fS}ee<4TTD{MlmbFzF!R{cC0aBBo>k2l+5}0bR zsVkVC5oJ*uT7Wq#rgviu|##&s~Zo#j*Wi{|N`HOL$JkYogRzxcTr?+66 zBSQov%CK=_5t=)YoLCTZsiD@RfDkN>P7a<-L^@y>v=$r__=aVZGo(O2_L{SAX*3VO*V>U-3HwfNuLu`CaTV- z#ZY8Wm=so00)V6h7~%tOJ5~Y@ouMSjNmhbGf>r=h!-fL7Kfoav0C4i>Jc@E>SwPxt z2`lN5i=@00E=#I^iUbv+RM1yTQD!)bX)Gg;Y)vEhogcvF}xfMqz-w) zXbix_iRSgdNx-D8LFkt3m%jzBAwnPIaBxL)SQ4y3RGC5s$6O;=@l^6@h9p_i;D1sN zZ6Gmu3)}(7EYg;H)~m3Z4Q(jG-e?hC5c@7Z1O+2r2hMmF41f%_d=(G|0=2o{0sn0A zQbpti!2wqYaAR98nev%^OOgoh2+7?-AjelJ5!wOi0F1!xM$B}yllF3FnJ*Y`nMm@; zf>_wKw!v@2r!SE;7iv4+R>NtqZb8`+pNF7*9vXlZXzp!m*kpAL_cmZz8*u86q$7e< z&OlzkDhKX>6@?^?4+2A=V&K`3(nLnL7Hr(xHkbi0L7|HT3C3$V4)MjUG0wH)xp#1)19t?oHSA5K*)d%CK&acN$O62OgxA= z8uD?;80kZdo?%s0gC<1f9~K#pcsUfRe4b6Bj*9pJ`3Jv+Ig1x)0Y||bdt+v8&`<<7 zX8mA@l#rOl;g}!unCU2I@tx`KN z&Lcv}`5&l-5%U>=B41ZLd&2ph!sN?1rgt5aFBgkI&{a?}qP7$WC0Y4-xP4jfJMY3% zgdoEq(AaiI?zRkX=JO^j)hj7O_yPnywMLH3zP85Ng0w6MdJqVF2NM#iWgB6$^T>r1 zLPB`FOd-LHl?_m628KUve4CF`{GI8v)To9kJjC-=OU0Oiya)l{4rouh002_n1|{2O zb%SXaJ+D}`JbPljL?j3uSd5Xp`34jEi26aPXtHGFV>ILsgiu}w+vvhFxK8RE1x&IPk0ydB0{#CtAXzb~hAay^ zy9!g2f)%ew3ihnS5bJ{Vk|w#a>v>z!S5M>7083|g?~!r?f#5s>#lb#=IZpvt(A5?U zsi2_OM;&<3iPK)27AXI2LY&$rdO{&g0wD9U<)?h$?Hy~@^&nmv{wilQqdkz9zv6&8r zApH$(z%)A^li%AyDv1#7SUnET4;!;_MAjJB;THy!=-zJ9g4M2n$th-BjRS2dy$RXUi6lj0)C8q8WYdYjl zhWI;lP-F*NhZGFRA;h@@>-)y;4zL#wge}U@c4a659u$tGKAv5Nz~}BDcHv_rExE8! z!Kox9P!^fs%i9jdq1~_$g~^>R@PxtNaUu4=9o-(GU{0Ui$V5E&%EAdebo)?w6u~`M zicOycp)gc{TWTAH{#w%hTn z0YV{s1sg>fNZ%!cpCER^UI3$>4U);s#rIiJzz5NKMN5fbNh^cm>6gacHc>t}sG-wt z`GgM>NF!iC0V1|WNn<*iiCqOp2DyhNsSl?NNDk3wOdsr+ zh9^aTpb3WCE=A}dU`AHKni=YpuccSb`a(cHFcy$ruEVn0wasuPq1i) z4bndm7$f8{;U|#s7BX6bLvOZhF}C=K9HuO60X-1@LkV%ffF5cSPa4dSWOk|SD9;Jb2=|X7utj{<%(y;QUk~fUnk}q!19AfNLr&T z7s<4Nzn;5;>q4O<4Xe3*2P^iVjN1^Rpqc<9ns^$QG;pk1?Y4y;j%u}cz_dKM23F|< zdUilVvQ@Q>s+HoB4A+;eiy-T`j+st;Qka8DTNEY6-d2X>0G0>i4UJj@^;_mr>x(^! z;qfwgL&Zpsf2T^73fdDUfT*+BKNFCs>VbFzo6zU0q6w=!E;U^}6#y96^Q1tl^eqTd zl*j{Oi7-^uY2(1iZDD312do)0YA;XvCZbTC0xJNcY zqEt!=B>sV+NL;5ak>1*a2afWV={Nw^A+#e0vkSdW1WuBZ5F2TGZ~(T)h-qX~BM6;+ zSJYFMl{Kle0F4V?Mj<1l!ZOn(t25QSgf|VaibMzC5tgM{GKQE9JirEh37wDw;I~>m z2av)iZ3+p#KrRIO289Vr776NWdkrpaC^mv@%K^3~0v_zUa9*-|uj}G;iC9z8_#*j4 zA*92oh?5rlMrI_^@WL!k?m|9tX%ffRSry{AAF?#}VAYmLByGn6cf}#3#2Ezy>43z& z*)mJ@)+BL<{$FT~ww^sPr4ccmf}{}m>bsP{w`{A~YR#k4t`Ppi<7E=~YS4os&VQ#( z;RqA>+JOlC%`I4$<{TTcnMl})@SKO^9xfxe=%tKD2B0yyyc8qAjT5&Bem5))6o{-6 zOtk#)e)?AjVjav`$R8(~;aNxa~ZIV1wqc znTVzdxqvocHG-MMWlw>k1FJGem!lY#)dG?IL-B-LAg-XsVH+EZtVG7)XJk(UXa;%e zn9jj&)&z}#y^tI>D2G*#Z5bvFr6<7rM`EHRNLTt)<70?a2|?^ovslnWRHbrkjz1^z zB|^#p5X6y>oi34ga_bO;5M~7f$mDp6>)x<9WL?h2ozD?IPli+s0YKptabVc6AJ`$B zQOcD>Oq3l~dc9T?E0Y|azAZT-zAg=^iscdf^omhpG%ii^VLIh6qpjrtzu$M{FK}zom{1GliJ&q zn?z(3vck>~c2Y&gNv1>U3jB|dHtBA`4CoWU>D*8u#Jx>-SfFNb_6JgL^rBg8)~j<< zZzAJmaX;nVOpa5THY@J%+>e3>9su(Tv>Bd28B0ihB{P=HD3&UaAEF%9QEniKLAmTf zuOX-+*%Y)4mWDnl5by?27#sXgM9wiXtTeEa2pcqv>Qr4teh70K_@E0vJ-7ty{85JG z+e8*Mt_TEKnsp6gH#GEU7aVe=-Eh0RP{!b!5%Mw-a^Y4NRTY%Eo&&9y5$p}fGOyUe zs>os!Vy;X~ zbO8`8aFr<=lGuGnF}wtG6#`7*oq&tXSL{f}fU-&OZsRwJ2v`J-t2iQ0q{Gw?HX$4| z6axWu4MCPmD4{}UPKq82KNOKqr>5L-!|^==U7z9}!8+)~NQDI7jqyI>t1^C;rk4mT zqfiKFa7YQ=iG4B%7P`m7sGxe_vSN-nc-{x+Sg_j3U+Ipis3z1|1XyA-elkNsEG9mu zsvgwXjVde!p&i(Sie7?H#q9I26cAQibRn2W9Zr`2_3(HPf&!*6)cU)Sp@K2WEKrDr zoQ>yL?5|#3M$T7v2lPeBt9n{A2-8%$w(CSb5E6$V&v1pinb{^nbj?=LsFaKKxgbq! zyey>AtA2wVS(JPc-LDoa2G{>T^2Fr={>y)I2;>mRA&^5Lhd>U290EB6atP!Q$RUtJ zU@8dg{lgy~qG!|7Prg5)#q+2Bn_G`h-yTMEx}0dS(4l1GV_E&3hr^o`Gdvt-wpSPq zhX*QOZx+jyQq61&d;j6GN$a) zkDi>ep%^S+q26C=JlK_|Eq&rg(41vEV!RwYLKI4y)+gTQZH9&x*yq{KzU9XhTwM_IXeS;^B=kYg`(uR5m%iirWB7%_$Q491CGU;lcELSU&LEGo;1)Q|_zo)!{itx+nr ztkVAZ4!P1F=~?oQQ~HUFmin*PON)9H z{~P)Osl0h)L`O81pn`vJ>;)YP4sBai@g)Z-*Jjm9jSA{&R!dWqYs;0tcZKqYBe$$( z-PETz^4#P5(3HPgsaYwv%X&RgC!e6TDTNb@>GhYR#g}|XJjN}f1UoDb$jw9$LrMd9 znX`+E7P6m)s3T)jpB}#glPuDS5D2Kq2$5SyhYXBgNeE3V%`r4hd&en%C~1`Ie*5Wu zxDO4>E|p~d>xAqvA!3)gAX%(d4RFuL^vq&p{!{8IFy5x$2UToEI5Xj8Tm@_BQ?@=Q zu~Rm)jA%imCR#RLw))5#=j&i5TnFPjwF|e%jh~{|qDrRC>X3K<8T$Zrt{^hCDrT#! zH>a?d=el36`*C~K8Eq2#=zb_wFz$r{WNPJR#b{W?(zJzwBLh&lA@@}oQn1a$SQB)2 zLJopck3>Mf5=7_1RO547*%3+sMNyHs;ZQ(~OOmO)b$3 z4PA2*>PpSLlZtJ$E6qmLw%YY+X?_qVA{{JYx*r=ab0>At;XJgHP584~PP+|PDJm9H zLGaNXstFE$VQ?iBs`ATqL2AWCy<{v_&4o|@$llRZjQh-`BU2}{m5PjUvZL!cB)LqB zai1!DN?;sbti1Q$Utap7ANZLSz4$ku`QX=3)z0b`@Ic{Ht6hZkQ+*~B zOM^eSi*oCz=11K;P0BR@+jR5rrQGOgAi6^-^8>iMLUpM6A!7#1K;&Z?V@ z1~jeOJfg_Y`a*_|%nqe9w~(RBF&Ylo;X5$t>S_!#cp%j5y~?%jJp zH@tEP2JiubrlD7X8mP8aTlmaVyQ$FpxmRX@rV!&Mspb^W+}&kp?(Sxi%-!AHw;?or zXPRWEf?mQ9XlXkr`zRPUY}=4)YT8Y5=7HzmVWJBDuU+%2zHKs*eHF+hjN$a@cz_y= zk^V1Tw0fe3tPll;qJ;`)0I`4u84CC5w7;TR8GEH&E7dFIDpF@Et>r<#bK;QnH#S}- z{Vn_D;C_HHv;^X1mSGE6`0YD)fuT!@MGXFY?Qv&nz8(?#W=w0odzX>)?%kCSF*`4; z)W6OzR*rm;e!j%S>h9gU8^kAZY{U?`5IB0mA&p+31GQP;gM&Edm*XXq*US>VS=L)t zz11)qRoQ0yaHka?Z{oC2!7%8}%x0aaZt{({w9!u2YM~LUkAlIaU^$l@MnU3cVnqai z^vk6Gzo&4m@Lg+^Km?lP0b6q-b(_NC1hgC(Hn` zo{j+RcBYwua8GXOiVa*mi&iUrXbsuNtk=-9kZJ&fGP?cl?m~1fv9=g~o%Ng+8d5K5 z8zURdC4pDqw6FHl4*eA2vLr@mg^8;~S~U8c`BxUbxCr`mGth?tC0c>TzA8fxYbTM6 z2-3a~!gks*J*|co&v8{-Ja(0JcDj)JELP|nl`_{qHERoRZ12678D5fQ?HB*8>BaSu zP&uTXBf{`}^V&C4h1|j$g*ODD!i!9!VW#>^ z#QZchi(W1kixhKl_7+_|?aKN_xfpt=gola~523ke@ICs1=+GK{&se~cP=H$wFDg8X z8E$MCW@w7?Y0a#t=fpBFL&<-OW+?G?V6KzH(R*c{!GCLFhH7Yr%4w}!U#^5ViW!W^ z3>BWiD67Y429stmmre1-i3w_<2~132sBijPKrW@6lLo7b34Dmqdo`M%vRq4?pdOl_ zdRi;h)#k$!gy2!<36NAAyjLlT2`Z@LgENlqpj2e>x?EfY!Y$UI0KT;MD9BA+8uAw+ zhWt0)KLfcb34J=G3z&n`+0(zkEnH;lo%odnkgu|d(Su`sP zKUdm&PYAQ4E~?L2Gl>4eQj}g6YZ`X?>B6T4JH?C4+E@iVQ26vq)HPy6LOuBb7`+u` zn4QxW+g7z%X|yUH1E#YcpFw~lMejvUheA9>^(h4*bg z_K)x<|H&bcL*N|+fzMcb-;27ltBE$ZpWAqR@6l;(w(taQje1?F!us~MXi>_DTjy;Bb zZD8%fHa7~r!)7{kWgNmP--qiT&)k2DI(Xw1ivGbEhW1n6`q}?DW^lVfy&Q=#Dw|Zu z_I3l)ES!3Aax(Tjl-Tx!BlERV( zgDxI-+Q}9(-x@c?5?;cbFk11tCX8}wx)B-^chNcAPM&SjJ}0(z)dCzxv|3?AQ+7JQ z9eeDOrLKj)AAY(BLnfM8@gnFQOPKF`>4U9|WE5h~Q`46#Xo6#usz$A*mnv{PRP<$| zioz&n8391mYQ3^pEiIR;=$>uL_bUr;uI#-p-LQOT2E9qd8-!{r19As2EPt->If34I zksS_&2MV9t->}TxEt3q(z8QKd%W@3E8M(7eipm!K@a)L`jPD9_vcH?dS(RZvC*!z3 z+JqU_e}7+?9n!))F_CZLTGHlcXinSPgR(SFZ)Fz1o0F}X30`1oe)IeGj;GVG_s^gq ziyBg)kh+7>u%9pdyr5xtkr`Z3zypP!-=BuT@i+(P*z6?i9q9wh@_vo1-2H_{1|j#4 za&`*x_b{l^X*kv9?fBY)Q+YguLm9%=)Sj=o(j=k(2SkZf9jlMP=ON<6e81f}v^jT3 z0AG^Q-$nE@rvy|I?{1*iDZ+>mTXPm|#y#h*^s-he8kxmyc;*KzZVn$;LLl6(4r+eF z&yo7bH4D)SXgvPL%j&^T(Cb8frsK>$TuAA)hUb;L(f+Ft6Imr1%8i(Ys8eanF_ z5)W6xWBY5|q&B(aJt0(MIbCg7eYZ5ZF8{mS*ImPNs7Q4Yk~U3x_WtieP}V0Gr}h$> zPD%Ns)10&VR?G64uqk#*dvF?1X+(?@oWv;*dWMb>p5fiD{p^X6eRs5kj_a=Y+G%d` zie|C)8AKa}A0%hi(jE5Ioo>LBkI&%%f#hf^yqE$##L}*;U0Id*P^wMtJsVySfZ#w$ z1z5^qnsYx)?3>XGKu1T~zO_r3OPZvAPB8@aH@4y2)rO>c;_;h^P(g%33tb(W2mrA; zb{vss9YiTCXyr-ZD8z`I%;Ar)nsS8lDp~#h*zRiO^h*>%)S2%^%9&LY&n)p038a|7 z_C#>6JIyTzTfwp29Pd)fd>HJj66~c(u=`_$_UU857|o0CztwUOn2%WhT_hC5Xk6m4 zC0wYfk5$~f+5wMEEhn^_X;1AZ)pw^q2=$GWbFPKYSv?zC8GPf2cklPnnc5qYfkF~% zP-@8wi11mOXM<>I7kY?qiNQYzXWECN&3FLysScnNTTjw9i?eL=^0t&5j0&KQC$L5Tl1*ed<$Ag3hM9z3WcJv<`iB^x{+}XH0W)rP#rZHShjc zQD;(Os=!Ps2gQ*y8|;vVLPCy@$Q#T*wDmC<3E0SzcFlFY*3wzeLKG(=xA1{I?rAYf zrY4*H+#*-w@CTqD@&J;N6qOo6&{CU?0qYXA>gLR@{ooY3Mu@-Jj}Q?n;Apn9w%3Pv z+)6)fU)t3SNU8~op8bRZ={OZ_=X{7p@*xHbG19K{zS~!1LdqWTo0xtT#HG-hAS)iY zG1$X-BsJnvq~3-UWI{lAprArPm?T1?Bwh1^0@;3%YVMT z5cqRv@B7$3{9_5p6MwgMWa=IRWsx};$_|4NA!QUwo*0m0vtbR7{nKOrEIlIm^M%g~ z>o8tqr%vF3!sk!65&plw7k9#82n8E{P$BvYSK=+W9GhEk?nYd`(!om!JsBQebtlwa zc}AvHXsAe4Pw?;x%i7GpW%348`6jg*ZNW|kx^H}}Guj2u*`~r*Do=#cID$M85J zAeRBST~r=TB6x)7UN0$3)OIK&V2I7d#!179aQ;Mu z*&ostM0X&C*-u(~&%qGqEH#m{)E`P?o(U67l=}@~Tdl_4C40%v*oRG6CqLx+>84D( z{w=#bT!Jr^ViR0@yyIIIu5m3TwI>9He|z^N@D)2tQ<)}D<|5nS2gK(It&ojFk`IDi z)H#U}4|ZA`Kzs=_r;k9`o-pYOXq^Wwg8;lOVF%Mq6m}2j$Wzpin1kXRY=0mcov}lf zTDc2^=8QXllUj2zZP7~H^%eO#p3D{tq1q)s^3wHlFk&wuos5!1TGC>VhZ6^+rww`< ztL|Gnuz?LJ8zlWKZgA6uu2<-ojvi!yt9!HJP)X{y>Gi~}L`8f!kO3`v7zT)FlgL?3Rj~*~C`OB*i5rNdPF(sS{t@@4 zsY^&-p?t!tGCYfo-*7pkz{WrM)HQ@Om(*uMhY>t347kE{LJD!*Tc_5Xgk4a%61B6? zRI^$@_r=L{s3t1w*>sJ-H#w+Hl7(Ukhh0j5;^j38Ad>aV+s? zPeJ6e=09-&M4B@WR0s#4?*0y`yfZk2GjV4Z6i1-P*)cM*cNl*HgjpnnX}U60G~ z4ZF|bCoDMW*zs6d(KkdA!#f!}dOcyN2XWYGK_0=OskjcGm0m=^fV%FY2yzs%nMWj! zRxc-I=3`hk+6)|QHT>tI*`x= zp-@_^z9j=TkY8KWc2WL~%f=yA!}dcp5@w$B`A!?9L9rRyMJidx5{W!oR3?gF%s6ah zbVkCnDTr^*<&Yq11#mq-9yPZxtkb8Ej3m^e_=_O!VrX+9#>t`6g@+kmR8bfRzew1~ zoR1|X@?sSc7Z7QI?T7;-d`EV0`~X52Hv>wi97T2FDAGlLMtA`xul0wz>7%HPH~8*9ARzZ2t)V*ReXYy zqJ#>;w!z#L|9Ejs^{YhuMCg2c2gaNMoML7Q0L*A#N;>NBwu;kjOG#wm;ryM2#yk8q zs!yE3^w%go93sk5=X(%okq{FHAsZY-R}unTDd8LhMoFFfCx#TEgC0uZBT!;bm~lgB z7PI*0BYpH6f>5W1I)so`jXOQ?=M2;oQ{6N`jle>mz@|x1!~+=;pb$DH*mdG$K*)5E z=tRr{PD&7kq?7W+xkUehZM`8nBPc{y0Z3{b$Y4DDnk#b)-MGk z$OBB`fRTeYCSV&mLmc59srgtcFpheXwPo0~77IBbA=DS$RlGq0s!V@`b3UjPQ&|9V zDF^9ENHcjWV8Dl)KY%s>vnrztDCYL64f`*A^@l>?iEx4hSVqpXG;y8+0~@Z;Rn$%L zu}FN}K?PdYWz^@2t||PDi-ZCG#y?Xybeb7IQ)k@uF4SVJ1*Iu0?Q&KUiapk=ixpk? z{~yx}_%Hv-A&^5Lhd>U290KVO_{Zn={y}P#(m#LX@u@5Smm>ueNr(!(c+*EI{Yv3i zM3fRq>A_@EZh4etdN{i@0mL*DSz;q4hFgIZ{D;VdFgKfEXy5$ggm5NVA# zT`p^^yfGqhC#vJkZJD>OA*KOfNcJ<{v>Gm=5Bu91isHu<&ABZ?q*0|P>mqz4aD9-c zgG;~B<%VnaM|yh(5Fz9ORkG_@zevN z&=ip@o#ewoaDdDfPa>vLKTi561XJH2(n$9(2WO3)Oe*oAv1TwFr}&x^0TH*yu!A_s z{rJMTk1T{;>97mO<`MDHlfE(y=0M2%T@v)B&j-)l|CE`Tc$_JIo80}MKx3(FL(FNV zI8E;UXV>8Lmoj(%`|(7%`#)Ci1iUSG|BIR@nUxh{?ua>rW#sPvP)(r#z`6V1uZEBz z?jJhPC3pX$qwf>PBa-mpftq4bn85DDn2NB%focZPv!8Ty=I;Nr(p5~x^%UEOa-YTn zt9-RT!8e?BdcNa!@`Q5t|2{Rw#6hJP9RiT&?*Dj1e1dHyz~8vpN?9wWaQ}-602BWI zV&So3y2~g3B!@r_fgA!k1ab)cba;&x;+L+F>D~WdD11S<|M4Qb z3_l(yd?9!Lvqlt-EYN)?e(wH}}Q3Y@$D zbN7E@HSZKnJa_+pXS)CUkY>Lk>i@l2IPzvL+kRUi@a5s&lMt-epA^;qqMd>N^vn!# zwW7lnif>#PdoD`yg#&A&z1%{D05dwd{c7P?H_%nU8E$E9lmxTA0^Z5)5{w55zxuWj zwoh)Mr-6O&$l8;cA*@vE3DJ&0Fzgu(Uq}vG?K;oVv#Ls59`!nXltW51X^eU0QLp<{ zlgp!C$1I=cQLld3OyHQzqh6_qv?|q>N4+A1T2ydDxNe{NC(Te{DKSj)+aL9sSG#I> z92lXThLB(KYFBr)yxNt@JPRR4UhQf!LnI~6`<+wmit_)BVr>z9mMcYB|NrxaBcK1a zYQOp93Ibo=-uuCj9pL>(j~+W#IEFt*@dWGuADOnBd!@+T+>v27Cp*Be6@E?l+VEoK zsS^LJ)K+-mD~}w1cJO=OJl?ZgR=0o$3cr@C|7m%%x%!Wcz!{Sqa`k_DQ%OpQ>ZD&N zPkNo??J5&fr6T1?ug6m|8uO&rponpv^qN>;IamKDBK&1&dQ!DlKejjN!;m`0hPu4i zHR8?_5;;VA7gsjVi(OB$wi)bhA$-f#|4BH$E7X6zTwBy(0w|eM|Nr&EkzZE|X#V$Y z0D&*tdp`s#z^aS}ID{3zU@L$ji~vEKoRd0AL-wq}!bGfXMjXIz6n;bK|9G+TApxY7 z`q%lz%8@V9&zFS$j|U3Bk?a4t{;v&3yWM@V#3DhFscb#h|8xCc2zYtaYb>rfFM5@s z5ady>;f_l|sK<9`(W~73pS%AN|K%5mQ#Rk+{hz!4?Op968mdye3~J7kR9Elaq5oHn zMZJVjE}{QFdi4J)Jn@ys|K(%<Q?RToC0bVA{J;$H6(Y|< z7nYT%J;n7#>>BQZB+O+E=1^b`!0?sgc0Qr6T2n zE;{@4T=WzlZ9!V0?gA~l>olzqx{RaZ;gH|zxg)1NT%>2H2YX*@pw2e61B|sYV6uUa zk>jPEY`VPx%4`o24d1XwcjyaPWRZG7V_}Ot^av%p`}Q4P{SsO@4k^{l?b{1MH-wpK zR=ZX$n=R9*HrtJP+>_XNnfJsf$7t3;Z@gKoS?FEgs9No|F^8SR$IIMFKz;vBzVfx= zqOMmLtM!GSTi*NO)JyWY&e7@bd^zk|pghCrFUgk*UlNxDFS6Tq;DN%IPPV-TZDyit zmMTW8RW@s;U7H63jE|Rf1cn|U)2!D(&eW2U~fiY`2Zp z{8kw9#TKSPT`Nr0XNtYID<%Lhby!V0B8~fQa zGu+q`-&iTK&URzJSoos2v3Rj^RI=uxkXE1n`>(zDH=p_7*92?E1BEXtwr0K)*jgox zt(o&c0i@_%snKZHLLnQAir|JeUlz<>Eq4uKp3IRtVD ze3u?(;5t52{?JxY1rP# zLccz%J0=t1xVO~s-2OeAGj-?|)A}|71n~FbkH? z|0@A~Ay49g!XKy^VY{H_U+0~6+xE!b(DB?cnuftr(xL{?7R({refLg(*|$0>4St9s zHYy;A9jMlU^GG9I%#E5UF+1>#<2#SZJ`mrsoVsWZ}8GcJ{)}&D9NmBh#!v1;=2w0+dg8eicP&+Y3yh<<_W_x_V+(WOvuI!Fjk?qT1h-_{z zY9H=5hJ!Qk9N3!YG#YMjVW*kp+!V9GN=X( zp*a}G}&U?u10v68NBwb`Uf3))Rv&O^VAjdH^_i}O%eO}>rc@iK2?MNhkp=iFYy z=?jucEqVp{_wQ_s#@}Ig)aeE)fPus-^7xVcD7nJo(mRA&^60N(g-ZnZ2bC z7PdD69s7tX*Yc6Vzu$X&@7S~gcU3xPidtODMys%a?Je~oIosW^ihVmv#s0&>9|{#4 zFCJMbN!|MY7L{9sZjDb0f0(LUk9G$SLZzNYz|T^p?e<6;*p}C2722^{c28)#wg-tH zO1=xZ-%Ho1p?thXH6U;L4V8Um8=*|2Ehr29j?x?KjxU%^vu-5;lFFaBPOFFb3+JA# zSuk1z>rB+c_g(043n3{9D}AV%f^C=eQr)bUjd?^ina1RJ*_uKJ#>!2cowN zwKl5x>S4{-_7=6C13k3C79iK!2BKIyxMw{eGO09e#O`Q!Y#47^Hob0%Xr7tSQ0Xr~ z!_>9(`{A{y*@s&&8$lK32%?$hR5}gj^bjx9@vy5FblHd%AOs6BzXc0ee<jUMf-Hk6Lw^Z7Ydnd7kqS!-`%JlKlO^#Js=g>tYAge z;v!yF4N|!ufLfgA$wGzk3O`}gWl#H~OP zr@EmUaWkdD44QR73%o&|BrBi?;z;jYIN-ao+YMfM3^*eU~CJII-V4wr&_;~qo)pk=&R)}CNHOLc>)&Ul}vjKNd|_gwxRT> zgkzwXj+Q;LoGv8_u_t}x4pgELy-%+VO3AZlft*rYCY1My=}2W~BGE<=2yAR(fka<~ zEi2I7u?T*fJ=|PVcG5ST#|HR<7KJy zx;dfFPkq5tmH7nPa6rvj;h?X}`|9$(bEsRmuQnT+qwZ_V#~|2>6?DShr(WtG@BoE)s^;b1+dS)hr|DiaR1kISP04sB<3Mon21Kx8g4CW_HbY~ z9o+j}6?4=F!^H=8aNlhR4(QzXfWRr1o+$~GaNAjWEl;jv|V z2f5A|pS}(uhxgpaY&HofLs)3h2rew2@V~{V_zHMkSS+Lg-CYeUZI3As&l*@wX9Rgn zEqu9x0lQt%aEJ_HB$TzR-DQne#kMhCtY?FY4zVu8fx&pTjN`?hg^YRA-9=d0x?JQ{x8K4RNv`C^O;%HikHhf*xZ0yA(Shf-#?6t8q$B9DEl_}3 z38*395mhkh8ngV%+64xr&@$@ z9S`+Pnr;^Xn`-^qYhwhvjyQOew}_*`_v}{3Ue+$sg96c6@J5I#qaUaBVlQ%8cxCtL z?)rl<)ZK0jug)I}7=*C|9tR>x0{~{Ao%N?&)>vb~*|5Tb`w9v+MsG`mRT8Ya0JaM=HHZ}E zz*dLkhapf&vbP45*jTg$@FO!zUWoWtkoEvl5T~`XlyaKio>>i20t zU1pDS+^;dAxsj5#;dC2dqxb(D;q?7&Fef@&+|1?{M7ev~4v}*r|HS=Tcz*N#S4K`} z+Xk1U=K|umD6gz^_lPAx*%kxg(RG@m(Z%;iQDV^pVh%XE zCsvs zK!jQQ%bsRlrA$CE#k?YoB5~e^gVHvMvxaoxCuY|!{MF8mxrS+*$p5YvEA_c(m$C7( zFxSw7EPjcx3gz}CL(+1gO*o3DIWMKt3Gyj&U?7<5HJBBbNE#;g5HbPWfq4=KGY7@f=VkNW>UwW+hWQBym zL#rPw9HvRSN&|R1D(d<6s=Zx@8QwF{|!-g*d&)Gd!}C9G736%eZp zNfe~LT4a@V+y|*AN*~IOQM_!Q3%c4xohs7(_dyE|1QNClQt_~F`8}T$gb_)tuV#p^ zurnv&JL#M@N~@HEZ(@<^ZSAC(kPxkJyGvK0>ceG0F{I$BA+Om28OXpx$%xf)VPS)P zq-{e;gBs&>NLe55_K*bS+#>~%h7*eZIk(@2fkWh=E^Ge0G#Y6W&JL$q(QNc3d$iSe z`@22$pd;)tYC-hKC2QP;hE5tZEPzgb%W61m%L^vG(S=H9je%NZ(&2$`x=@y&WA|Sh z!^|gCH(_9DxlJe~Y$6~bKrTe?6Gj0HH59UjZkD0806y#1XtZ_zE90TIjvZM24?kTj z)z1v4)xkF10r^D-TaG1r?V(V5IT4zL)zfx6E& zC#)Kehze3oBp>hr<#k5Pd>vgm%p6wt(8(dAFTK)9Te+j1o zV-+lYbZk^kQk=;U))BTIS-?Wt8sQlu*cPZo1YFD7OXSh*XxD70Fdw`B=kOf^Dj$QM zI_`HC`5jnkAl_}9y{46Fm6}m1!6o9~yYB!+dXsJHr11gV$oLJC*(vlsuJ=KW^T88G zj;VCMX=Hfc4IJ0?I5;^-QeRy@d;O)4YHQcdZ7%zsJ$MjccpHG4!i1=-Lg0n1p}+WP zR-r_!1kF$An3U8R%3gnvYf()E64nxqb>>ZKzSG!qdhjcA=KsuVh1yJ``4D@!T0)s5HGYW zUXsHrq_JWIsj*fAIcAz0pmc}W0w!)@Yyp8EUd7Ny!}`?%!7L$bnIr=heN3BXWhxGN z4lComh-`z%vf!X3$uF=zPO~nR@{Dzb@1>v@|37>00^P`Yoe6>j*-*D6+p(=Uj%2IU zifl3>(e-|GOKPy$Y>84o5^XOh`u zJ+scNlas7>lXzll@|@Ti?dIVe?dtz5g+%PX*l6zm*i_-$3y~}^2SF~+`i!}1bVnd}B-BDiG ziiXyapn^8LT-~oTJAj%rZ94#5zjRs`F2CFF?Iegy@-!lC_P5vYxAfdw zfDMg0v7z8YnnYWln>c(mJ0w;RJ_yN#MC6%GEcPWFsY2*DYufU%#*EkGQEY_O?GqY% zdpTMYj!cjN=l(_RzhCJ`2S4%2iBDc6L<3zE-aPXcUwrv{W($skUo(Gs@;@emHtB(h zPmXMjcEXbHJ4M?oh0Zuam(t~R$$)-z@EosV2YJ`C0>gqBu|40yT+9ca4~Qz9J&x-b z&YTh0dEGSPr@&URlY90G2C~(2AYW)6zB)bRKw6$BK)$-xdn9d)s2WM3hhJPghrrO) zdU8O2C-=ww2lUFs6)~W=IQchXRTaz}ahN}F^6Q{W1!pST4<_)y#1)(c623ciW~B%p z9PBr7&ZHwG<`z(tO-#LzPIhyF=^&4j&JI=b*Wo~o$5xSN0OwDYZ~zBRE{0v$K==qJ zbbPv#T;uGPrXVdwQiR$f&shx)Fc<=ujeJI&eAoEIT8;rg}x?Sy&P3mkCia zC!jKP-i4k)H4xT<&eqg7s_;GvLy%~+u(tpw)BO2pE16mlV8aEg6KtD6z-5gCnrQGLSaIv6&c*i{6cK}!%E;d7a44_>oNm80cb1s zh)9edj29h1KD8L+D!9bCDC&tA8ZC*@q>Zj^P90v+5#9?xuqD-`LJ#jI9#}4?1b{?L$_Bv!{n}%U z@h-;AF`DY{3v1jtdy?L1M%Ob;IVq)#dFcNHAqFN>%+m3phjAqNNpb%FaOMpU-u&Sk z{=eyekomAUsC+|yUVr-ebJ#v_z2(*goh4-Xr{=g95T(H@SP^(HN`jp(T= ze2KX)4T#g5JU4lc_eQ!X+{W3Z9w-FQaN7%+d$%YD8x={3P zO{8DrkS_WX%-euyvPY35(J5ejlaDMz{{%fV;^!cv1y3?gW8$cC3126vq7I2D4%OqG zo|4nao>LWpMvM^B7JD@7@H{h6JtPem$71P%MOX;@%c4m*k3k=0tr%QP43(wxVHFAQ z7$OfFuQ(sIn!;hqj}XcnJ%{!~As2BLy}CuduSs5S?!dM+PU;hnB4`#7y3o@x>doy~ z2|N|8R?&g#0ICOg5w;+iO^ft?1@)3A+zPO06qN!12LZk5X%4bObP0!-&1H%AxO;f^ry*0Xmj0Z;-hNeb<-i zX4D`*CkQH)ASwqX7g**oQFaC8RpN zBQBaIJryFJ#j29E82m~mg`O8LZV-G0XUF)pdtWnt$uom;kxmk0F|nq~>zZl2OyZ22 zLCVc?3dg8*Z3R(35Na$d2rWb1CDH<_&if9NCBHT!#mAg>fjg281hr^(?;S!*#jhBy z<9p+vk>;h`QQp7~@nRt&)*ieb9x@-9!R+&0#i1~V$_uX!nK+=$WLc7!|!%}n+Yk|$k4Fs|Q-87E~q}-QtUxC4@cdppUdnfN* zdZJY&;1n^cb5K1}t!`mI$NZo1cq*4?>AC5GBbIQ7(}3KF&|}y?QsoVr#BkchJK@MXpLkQLs0YSacD_`3gKHiyzgU1sg>9Mq0nnzy(GwZy zFujSylSl8{XyIr~MhptIgL11*Ppu}+PnuRr*OPk5gA zzM{!ODt%%5C)1rbHAMX{r*DcrpcRxLV%0Hlt}4Uu*7lb9fz7&%Fog%;VA)dZI(5J~unGI%B(vf9EvfG2xEtmZ)S&R<60E zGwzk#FZFHP#H$mpK0rsK5(!L<@{D0fnMt>Dh2yfBf14m_p*s_=lE>gU8~A}n@px9z z9E#O+BH`fk0VbD`4-nM7!K!+>3blf?5ljWo#HYXwLFXq=0SXe)+qekinM=gDgT*f{ z0N-;IDn~h{E@4j783{taR>u!=JK&?(*>sjZoH#H^QO#~8(ja$)j8R9Q-k`JV0NMv}b_G%ZrvBC@=b9vrdr)?em4jNWyu!kXE3N*590tyBX50}l zG6axSVAH|Tl?a%sk5MVw9%#?~c}t!_8TLf-@o_IDQ(pz5@0vVM*MrbI!wL`Zz$f-5vC5?$up7s4`g*9fXU49fbRnl~FrL)vI?W zedq_wXoQCVY!GM#n2C)vP^sf$bxn7#QBwCM) z!W{x&QaJGpuew5pX2};{=IMd^lb6WYcPeZYLxfzPCF(-#>kHceoQuC^9u5J=fIkQu zb$u3wMIr=)aeIMl0t}3ez9O;4FYqP<}P#z1W~my38M;6Co=Sk9r;DqjmDxv zq{JIWib=KJe<2f3y~%NtwQca+!FfKEI?TWL@&KpObfa%s)o zTveZ_-&pY;uXt}Zj+#{WMxSz(vSApAOewn+Bfna$9KG+J>IUfD8l`)W?z+#*l?PN5 z*nA1ib<9bXH?ZAytSs%Z=9b}jW#1cH&6DK~ta)O@MwYSMM;7vZo1s0vnkUNZs(HsU zH|%yEzrEGmE)|U;VwuJ@Tax8<)x2|+Sn=+#$Jyc(jfw;M`Ek`eS>E89J2A3A9c$!o zb_laYPC8Ujl8hA^8+0Kit&AoPh5LtnbIL~oS z`DA$mtKQaF)gDYcHy~cCd@=&Q3$*$4e?I?DWp2y7;j1@&`0x+mBJuAZUAgw{0LgtI z5#83dE&tPx3?DY{!gxc*WgKk@)E+)rZvtvqt!t+!+O2+qaOen(B#<>_EfN`yi`coV zwcP(Q=sfkQ$xn&%6fO$4i}Tdm3Wo$#g%47=G5M*{1#<~gr5IYJifN4Hz>z9%;P553 z@h-tUdP|^(gm&3?2oyMuiI^&H$d*WeuCRyhu^Ew3HX?m21H#QnmN#TG)Oxx=(G3K# z!NHbzAP^N2;1}6&D8#~|pnSTeo*%izuBp4Fu!7W`4)n48OOSMV16ypzo96ynP}H5M z+UhzZPWCa{l(7x1Qe$%5sC)k;)VM! zF0HIwkp8GHCrUdEoBCHgvw++Pm*wO41Cu6vCe5u@S$h|7z$eI>#EcOF0nJf1gq4H8 zOvM;gH%qk^$D)E+9TXuaR7ab53;R_Dz6)4F^1O7v5*9NoUKtE8{C9D|77D&7=``Av z=9-GH$+&%vr#EFoC}O;;92?~}7#S9#qtHAyJtr-ai2g48Z^HiRxHupHgE z#bi_62tPy~(rN`EmlP@ob{-14trvk#r(AXTj+m%z6-7>5;oej9z7*g`RB-5So~|7I zg~+cbt95XXma7pHd_Y3vtwd(#fDp5t1RwUCW9PwM8Yghpt=VfIy!Lh&t3Mzk6aWgQ ze3lX${Lz~yW_PuNh`4t*hSQR995D*W&a^9{HW`=j)45;h3#*;{p~)W-3K%X5H<7pF zt^c54pA`uY{|W>*@BG|F0U5>vlRvajqrf-8DvHiaILj$f3X9P)oa#jSdm34&FxRV; z-3G$vG?E_Sm*F5R?@Ux|z)wS2bvy)Rzo$hM#T`UUlJf=hE`qm~CI@2cKxG1dxZr!Q z<8ShMC!T0$&Y&r97DOE|i#PFePP@MrB4lwD6NM__p%SQH#7=*TDW-r1WP7?y1roW) z9IW1uR+08F@`+TpM2N%b);fndEkT48TMhI=uWC}#q`0au=*xl@ksl8VvM5P@hN?ft zL4v)?AyQ|QgF1+L5U&6wG#A&QiD_C1MN()d_Ia z$-yBxExCcfGy?xbcp0%ICQ2r)l@-Sie-3zf$C!Qoz1P02?;OAOk%_y9 zp5wx8WrD?n=QvtDzB&GblRqftI4%me$vGbUF$2X<{wKkxA?7$9nEb)Pb36|39d(wE zYaYBd^IuIW_51H*a!vB&vJq*an{%!KpXjy2yy{T1jEHZpD6B6ULVybs_NC-Cra`EQ@M+oo41bq&o{gU7YF|idf=c34tn6A z2M&7Rpa=HQ16S|eff;?>xaA!&sZHBzK73H8hf@Wq9h8>-l}`hD0~1Hub8a zF8fA@PuXm{o`gbuV z?r9ape1xnY7h6c*iG%D6G108lp9FKxEKDGKXGyLuY}ZixeJ<$PWePt)hro z==_5EqA-$P5EdX_IFiN!QP;5BIyx~YGkY@gb78?SKcvXBENnri8pvIQWJcuH5k?F! zK!}5so;Q69c4Oc50wCisEisKe!wq}`&}!XtY-0Iw@_JxfRsdoE*EV4CxOUUES;nBg zJt(h)K5=-TFg{jymPiNE$kOOMe)hxr$?Wn zWusz;WyiJ3_E^vzsqzL-(JotXEb`fTb7bke9zMHpe&N#ch4WHa8nYUxRA5;|8f;8n zL9j)JD#~C);^~2?0p7Amy6%nu!b+1Ka%vMSr}PbBK;%_`l<`rGQaDio$V(lk3OHhk zuYn8&{3q}e;)}KVCL9n-go@-%@46FdkAf2tTyvzO_m3Yt)`&Kc|2NvCNRucJDzL_U z5pp^Y==o8&5^DDz-K5_f~YLR1+%dwsCrfVDyL|7Rx-XL6?|C-CdP+<#ZM zccyq@#%dce0`bC}&txWs-%Y?V#tTzhYL>wE!{G2(UHccgFZSI;vQyb9p|0T~SMZhmqgDBZ}L zp6djTXWOn1uKn2;@7>9w-FGC^)pol-u|Bj7*7M>3!d?ykV(!)c4bNt?qT#q`Gd+v; zCqoHw8~@_=`v!6B8K+|=dIVYJ5tdhmQw$eyz+karm*5yZx$H(rJt9N4x~NNsNd}Y1 zpH-}HZxhWKu|l%L7GbW z?_1YE*wp{EikDEne)KMr!E$@(vN&zsq(t^RnWl<1qMhH{&w;5FV;7Tl9IAJDQo(> zo%wUr%GouwjhZiG(-Ti()@ONi&`nWzC}$6dP_iD@Q|MdiCYt?CZWd8+4}4! zj_*w39Fi2E>byUn`H{Cx44sn%yiiJ|8(D%*W+#ON#YN%htL%5Z{p5cTWJbJo;6`>b z7M-R?+~@x5T6D78P$=F;LZWnOW$}^I7gi)J zVvRDV0A*Nmt4~wi>D2Py47*x-O)cc6QEQ zq!pOW+`ucAi(`^jUFCI2s}6&S;l^P?u?$ei$suzF?r+b++z=-K=8nT(%*-s%OSTq4 z6GV!H2u^m5BmId50C)z(3j!{PU2CLCse}@yK)=^Av1#(H?N`x66_q39gH{BqCA{Z} zEPSd5hgl$rJb?SGON30pKr58vO7TXX(nLnZkYg9cJPHC^FGk)N40-AD2F}YifM4}$ z{Cl@~`HkO2<5{@d{yFq6t)?pP(%#VJE3v!l{;Z}Sm+xasLo%iQ9o(sEC`mffOOz52 zzeGxz#d-s9^{u)jU&k7IEUIm9yz=v#Pp=Eps&))8!@Tw&BDmK$%MnPCjX>ukjIOEj zR!VEH{OsnPfs;qd8sqMTxHat?Cfzs%tLWW}bDDMcVm`;`Kg-Emx@*96%!#7N_+;l3 zDWfb08jFFfYk}o^p2#?5iTMBA#HGxQrw@Pc4VB#7p}Vp#6z$bMd{!{Q6kUyV+RmC$Jj8|Jv= z6k+`EgQABFYGd)(q{{0O^jKd#k4plE1X^e|0xOGfPx~-zxNJO*Ey=Uj-n?@&tT9o~ zsq@0b&=dupG7l4*lbkthC$7RCC6Y|lwHfK&5$1Dt$*IZoJxYLc zuY*>V;ysEH>^YJrU43u#_6Kee48fKc6)WRmOYbgkVEfHDV1hRkB8erQ7}K78HoJ2p zT-u8?D?z;iYG1-4vu*UDOlJ5=i6C}%X>+y_o|QAiTni-ca+A{H3AeDCgTJ2p^})co z?2XwQc_Ipl6N-eZ+FHF9(XGOpL>yR5Vf@!^UkBaK-nh^L=SzKq(AqG;Y=Gm1lZarf zSGEw4#s_`NokMCyY@P1xv+m9fSe$qEG?iZc?h#C-sc<+F!LgC}v$>z^zxZy*-XInq zE(&iJlDyzP!xtR_9rv?0#0P$9D_&+Gt|ef^%Da`oJ#Q%rZR7~FZP+(#8`3!h<24d4 z!2dzPPK5Rq(tWc9>M#ni7hYY;C_@ct=I`Vg1TUL`%!a-``|Nk@fh2tb6FEH*-HxJ`mlVLw?)m z%$-Bf9PVoOQ?A`l&rOWtg^-A7P)PT2M0}zD96OXfBsvQhg`312d+W)si)4YUE#OA> zP98t3A@&*dLw!nWsj{`{DO*b$t9d-=*2}F!(ZHy+fb<8=Qlq++V1L|$ z-NmUCBR>cuXB?;i*j>8H>ss2tS|rr*1f7Vo1FGMzKfB8}(tB}H>^RWtu)8}Z$NwM7 zI+>gQ@r~bg=>F;Nn!1cX4*nhVz(Ei6?}2CU+c^t0?ZPd$D=Nx%_Nc4b%<#}d-&TQZ zr=!+(6Z*Awj*`vKJXGIo0FAT&8sD&mv>mjC!)Fk2QkUFkbFb`jGCG?*EA#?3Z{D}_ zoj6f;Q8C7uZ|XxrH+@66Oaa|I0~g2UHucjQyjg;Y@vHq+-0#eOr|2MD6uwRPNejL> zFe=E6=qEgo{Z4MI4a^^CH!UPcP6q4ZBhY4gc98ftdv$$hhIPV@)TXL|!z=Q@=qRV~ zh%KDS&WIM`qVP`HLYerxBQ;nS4`gR#^c?U($fg>YzV5(CY>DOqCuCWA024Asnas$* z8rfiv@!$f7z1g*9U%YweEokn&J?&PXxP5pP7_4bzA~2-gYR?AGw`AWUT8|5Lgt_J9 zUz0-oL!V-W7&o$Sxr901h%mt^6E9)(E(7t2G^ep=Z5#BSOnwjo{Fh8rcp3O-87BV7 z`2`UljvT$9Nf2qxfCj8zMn<4O^E}2>!@davF2Z0Pd?M}odoXj_m7*0GW!EWV9*zN+ zo+__PuNuxqM*WDU`RKxCOT+-npyVRqX&aHqKHEGF`BrWq*)ti_R9@5-gjiRRmkF*v zZ4m*}5Q2P{Ov@yM(sqhGK{Br}xT_2V4Xko4z;w~W{5EC5hO825EDfN_1V)9z{tQbG zeOMvtc9L*S4VA|y^gcxJCsKdy-JFLrqld(YA(BEC$H9@1DsSLW8L>G}nbcVWK0?E! z;HLA!wBI=@^6`1(3oakm`V3C|5L-Tv_ZlPl$P6UDUf!x=EQqdNW?}<$0+u5zJX(v* z*m64RF~b2-isu#q!;Ye{kesE;>*`}h8mNq$3C0v5J_A_1JcqKOJ@4cS{A)H?U?_}0#TEz^&X;e4VWFFo81h&gSFP4L{ z1?biOWvQDguWRyj$WpVtKuNnW4Q#ByWxM|D^J_bA#N1ivId^srkFc34dy;Yj&5)hF z2~uf*6XCD!aQS>G_oZEC&>ORF6f+1Hy=M^Jc;hZJ2$EY?0P3W)`*Sjluu)p8ZbdcP z2_%?=W)B6KoQuj}N^fAEA>{>lwL(cZ0aG+3+tb3dAs@Q~c_uYjw4Y=u4#;}8>Z`36 z^}rOSY0M%>`4E^T2)Qss62FdHoUegyL)I{0_c1K$)qu=B*uMaa-Q=!kxjvqiLz=$RKkGW7oI zBLycPNRSt)LJUHyBof+3@gE)(*Kjd=Q3y<2Ock7GxMw@hUbvIJNZdFNGO_}sRLn}X z-Ofuhzal8Vo@mv#Pdq4zs7SUY8PDYBV*5mlL$@A9@uQoo2->V}GTM9#wEfXMwB~Yj z3@4dd`4}RT=u|&n5hwonhCK1l8~Xf~X!-p52L2+Lm7_BjdcK4L=7A^j_4zVg8hU`> zlAe)CgyHyx)`EhadiIB`2=#^X`d;Bq!EVypI0h_nwUiH=TPH7FczAj71IwrH1#%uB z!k*3AYhitBHx$;zw@R*2D!QIG9%B1cd0o3nhvH&bF+Vz+MaU^;26LV{d%e6v$;c9m zj@*~h=<$7b93I-NV+$()e3zpyx(iv6kSvP}b@G4f$-m~9_XmVY2Y0d;PS;B~`VszC zo&-r}rIn}&6@ZqQ*zr%#L6_au=wUnxg;#1PWI5xb{XVF%;rTROJ<#3ac+M}W@&=A% z+XJdr%7t2_F4gbhJLUc$`INVIT#WvCR|79MANE8SE3@cECMPK8vx{NM0^9y6L3X{ic>M2 z_tX(i<<$dgLoCchjZRUGJcDXvjlV`fW}`-k6^v^uYQ!x{g365ZM{Ra20I}24lpGCSx+sEH6H=v~p}g zIo|Fv^^0c~jxC%$yL4{h{_{)t+raRyYN#o`MDvbN>AG`m4d z5%`4v2b>9k-k$B+p6`1Wg@5aL@HAMyZu(%V&<&f<{}U6ZGWhS{-=2Elzd641D3spY z+nWKMG{GW38F)W;A44czUn3thAI&~0b^%;W7W8MhAt(Qm(+|FtrgjKvp2f}V zqjY#XeZN{qBX8QUaTe`L5bBkpHEW)3HI9@a2t7*(m28uM01kmjochh-*0p5ieJ&kk|{+rCt2PenzIkd z#&g{b?UEUeMY5&J8@)Nkew*X#C0HBBkqb(UPO`kwn`52Xm!NhGv*dfow>K_P&{5tV znzPT*G2s5hHaa%R)=}Q*&2jfTIsk7#PLHoS$?`^TjS^gp0AL7`EYn1ahX+;6mY1qP|)^9(i7kt2cV0Cb&v;X^bdY`fA;;tT!@QQ)-FjJC!9ujAp8C_9Z(nH-}(CHysC*dBPhpb zHCWXJ92|yuve$!MYF!c~9PeV=QrqP+g{KEW9G+ey8t!fF5fH@_CofTD@&5jBqmHe2 zVRMrZ#CQ*orxE9R2ew#1Me4J*rYdIpq99J}gpB#O6;|@G}4vOBw{+US$vn*D3T= z#2COGe2l^r+xQi!grzId$!UbnV-}=9eqTehvMj#~0*@Gu_6@0j#Ay$Adkwr(3;^=m zuhHA3B|VD(1hsFZUZYyo?Uvcq=MD6W6?wW@s+7mV^^z*DOIe1qBoSPiHbNu2@&gfc z&M;;z-`lidBAtG7M|NKVVnEI>a-Y(8#7Q1?TdumjP9iET9$3g4#A5LDtVI>LjVoFi zIJExF>zt4%%kEW{;BD_NY|rxnK>(I%B1XwZsM#3url!j4nh$7JVm{Cx0!a{ei)_gZ z0hF=ISGGv@HKIyhvpqwfofh$A{#<}eW%}$#FYmk$dq=b9-toP64GsAAUCF`RXYa5O zvee!?HWN}iwSRme_pAN)kN0KYC-x6qr1pM}SJJEhzRX3HZFNn0B@FuF$0h z09)ZZ^MN_5R{Vpl%@Pd;LOU=v*d4KlBcmrJr|k$JfkbHzEmF8rF;;AUrfe(`;*(>d3shSPQQJ$)WHx zm!l$XMOud&7El46lJoV-Jl-ri1|iaY`@%V5m6% z-()Ux#XC4u;j}iuc@5KDD!TmCG zH8=`-PbL$)x>9FS3e4wozt~@a39}(`z*I@oAa;XN3wghRC)>gi5L@$%H&2n?<=HHr zn=UvacD^%i19!4vuMPom)GP~G%sB+~5$~fnd)?XjAONHFo;~utZy%l!)OTe#Xum$` zG!IbZbcmo8k(9R6KJa_}yXS-14-VBmc<2F~pg!=mQ;&$O z(6uHa`zS!1A@m{4;ZTvbLRhq!?3pyVrB(yU;-HHm%`Jw)(YF9PbmkDCdALcru4Aiw z$Cf!v(1fd72EaL%?)Y{z4wq}Hyg`Qqpz-=05~!PSpm3FP3&4xAo3L_NC(nUYDe1(Q z)FMf-RobbDQedUCr+zxaFTq%J8ce9y9|eLE{28IP*Z?&v^|~N-rF;06*W)WIC4}pe zA>$l$c?yldw?xA6*_6s8TNp?!TByD}CEBxrE5)aPjg1H}Su9Of?QI=uJk4R!Yl$in zsw7oQy$w1TC>&+Fi4zDYCH{f4)r~6nm6?|>K9h}VWq@ZMnKz1lSSlIr7*3Vx@&-;A zGC6dfD!=$?>c}=*BRHUSJy7lIC5&90HAQ4PPKJI5xgA(poV<-Rhi%5Yxd3b~Np3r9 z_G9nc`G68!VE%**kCE=y+x}5_cK8S6-S(7pYn+WGBUMK2P^K!_F9<4`J)zxK6@WiX?IPr3J``IlSm{gtQy<>dkWX z$!Zy9SjZ@p9g?hPiH;O0h%eSGHakA(Ce$j5`Tq z-{=Cw_kA9F)pza{4Vz>&gbl(XHKl-Q>QdnF%Ct!Pj z8FfU&*n6NIjr8%&rDSV3 z3t$Oxpx{oDdKd?@)OoP1_aekz%L91yBrZp}wd=lA*C^Cii59kdf+k~X&!vLLo z+M-_hhIXTGRZ)f=rr5p)@KHAq*EGDM9R-mdjt3;3DsRvRVkDFi)gS72s$V)CajIKJ zvgQYRY|4iR2iicRhFsoY5CWwWjTsbo;Pt?bq zzD7Fip<_&GfDs3+=qcImq-lx4QY^(Sda1r2}Hfht#un&3#~ zGxE{_;iZ`bOYd{h3ZX`<^N5ECO zyg}m4^V1d&ZGrvgVQnK?J0!g39ughfu&RPvR<~?oDAn`vpEhFop!s@8bL;?0rMo^D zX^?mQ#kcO1`@*xnZ*>F*hu~u!&cUHTQK`N8R|oCQJr59 z_GJQ}soh%qmQ)LbF>8R)dFY)^RdKX!*-CE656iswaSf9ygREVg&b7OGO1l|Zkd-T@ zVIY}Qu{@Tvk4~z*L4s_6o;LCxZ4I+Q$HTPi1}%>?lyQc+CdvPQD05rp(3_@j&*mqe znlSK({P*m)yzl|Y%w)bJb+DVyEDrCqqSVY3*$!*qA`vb*xC~3J@i`03JvJ2k&L~eZM1Mon|bKmotkeLvyy$2bWDWeI5-MGKLTAn z%F`tnM)Aw!h5Nzu^4O@`KWDF+FU-Se@b*r^aOoq?480u(!21c(1e#eitBT=TxDhsU zU&#Gd|4H?k>}N#(;G!@kru$n?{$+A&#hvVDj_^zYE35Qu|LD>SH(~G}yX6kWDi{xb zCi8_ShGrEEB&)l@3qm`3mZ<1zo0tNRfnsM{TOxpzT+~OYRhS^#&3Pm!Yvx+HAMf9= zm$EO3hT)=c!yhu~S==xxD2p4}muMitV~_VC1!;f?BimF^IX=-hm8vZt4Eagh(w;^| z=S%ejLNERNf-2dzQL^KAmW(a53Es7`dV~6niHA)aIy#Wjus3i_m{PZ?;%t((eHr(Z zQgt7w3wU9ba<~zl_jgN-6~eR_87}^OUyq|&=RsKzEIxYr)VnY(K7V!Ng&Q&8$;4$y z?Zne`K9d=q#y@~YD&}dA#AO5J-^a2a6C;X?8w$rohJs0<{^6tS$GQcdSa8VnYU{QK zLKyx@Qy3Xyoxm}{{=z>EKoe3=&3>}BQ->MriG(o^Y$kGD{+Km?2Ee}*qk{wG2AFFFekWb4c9s4)3>Ml}C?%97p=LX)yLof4ahlkF1*su7F2A4p0Cij z&J{s207--AfMUK=JEPJjBVEYWR@9gm$wRe2dgezFY>>CKRlfYAm!8o~KksN88xS4R zN{A+1JO|ei+>nfEm`U3FW{1{EWqpdWLNUHPT_G10NYn>*+;E9G^3owN{F-Jrg~G6)fzLGA){ z3+gzBk!`_7)2d)9ax!j&AHy&P+a_?|Fp#Z%!F4v z)yU2@#65bdZ?)8+jrtFjBPhd=l?%7Gk(orateC7?Jl4Yw!%~OoO;vUGVmcej!Wh+= ziS2HPY8Jsv=-m3cbOR7a9RLs^BnZcrgc>pkz@-E206t|%R$$3tg(ERBykJ-n#yxE& zw(hmxP00cpap_@+aZVM$(S_R;HqFvHc{bWoXyhYj*r~1Datc6X6^bh@V`bPTA@Eoll0R{r z1tP%j_-vLGC1w`alB<+9=-AeUrHCj#ni_mqSP`pIjb2Ab4}-&WN}(47VKKBrU>5eD zbt7Hg=$4o(DHVx>49Mm8FpWO<`E$KDTLp68XEk^v-yKc41vmp6KI z+!bx6x(RR`oqkt%&ssTly7%Th%wFYMMMh2QVd#yAYO1@uk=y84`x!FKn2L#1oQ^vl zBCziAMr_XBMT1@m9pCaI!zhm>b9}12fi3ZnYq}GgKWs~2Qb3Lop<^F&$}rIB*ey)c z9Tp(mQ2^o|s%+hC_9$y$3(`m;m};G2TTu!@rBw%oyK0GR(c+DeOwC5r*8Y{cba|t< zW?wwI)SQYHfeUmz`)GH0qc_Lj-{8QjWrx;SP|rL#9p#PK8r70TI*j^ZKMO{fRt+|Tl+h243Oc6Z|D{@3-C(0|h@%mz4(t`8mIP3neHM%y zVsi#z=m{aTIh)tut02!mlBFQwlGcPN3dUtL`m!hyuZRDQzhAEN4M3F$f|RPtG6g%u z9cbHR-hwa3)eygq>;jDtCTq^L$VoSwFm`Xl){TAxj34Pz$@meH9h)&sNQz2*Rna{C zF1($LyS#x~_>J&{NG865xH7dEixywTv#)rNLdK>0m&`Q*5c4&$jatT=k zMfz75<(J62DRXME^w`@0b$S-m@=Sf>Knysl>7DE|JD~JGj;3Kt?Z|wi^6U1`FGde`MHY) zzmw*H^e?(Ub!%JU+o0ga)du_%to7B?DYQ~5TH4jx<^7Z{;x6C(Y2ZuKU+r|Y8OmZm zuaaYtv-9H8!;hRgyS%udonF!wFPyz_?$q*vK#6k1vD94=%tL09Y6(gZyerTmp}Ua- zk(vin{}!pT$h-^%9iB62kj zu_Wa+?^+xZ8ql>kR7VUm<6>;}JnC4}Y~^Pba~_j;qrP1waxw{;SPi#mYAc64b90U~ z#bc!OyvEZIGjP|J(p%z}sMhUqnC&1amWH+_?LN%O@&*mFsi&eh;+CX_xl@oWlE?;1 zkH`hOhkBQmBtCc>1eOxmJ_WkC>tO$N{wT3BR; zp%XdNE-}L%nL!v9;?OhLW5h!Z5ggHe@u+wVuq6}`o?AgC1OU^$(Cctf_!gnh#c9_ix|{Vn+@CT=7O*aS zC*`ncm3(CC7|V?6E^p9`8W2>{)==BZDR3*SuhD|*9UPdFeO;SxZ_QK*0tIcP*lvmi zg#nKsA{<(Zd3$;7N+KPGOzS};t+0b`Mwb~@gU85F$w8J@&!v~e=0a?;wP-cMM~q-1wH4Yc42zxFy~$2TDq+~zXo}EIJko?Tg1Jxj9NBg8 z1oawg`@;0cygBq)M+vGc)bC;R5w&3f6$^W3k={iVLXf6t7x`SGORn@tRZ;t3&z`Y(Z{Pz=S0yEG5CNjZ0gSM}kV6NSo7-y}EpcK&k8Ok_ z)g{Ih_ZlTtmwk-U9PHnKq&9K>0%KWsO;b3ektLN=c5SOvaeWu!Y7CMpUEV-RWtguI zjo)=4I}n!?iZgAax`7!~-%<;l=QRDTMiRQxpCnM;E^}n)57V z0Atre;@cW&V#S)(yyhX~29*QecTkn+5!C5U-3m^0RHElv=u_!Z4ZfX`>KQW|3{}s~ z=qX7BK$Y#+b#agNs(M!o0SKMLLT9N`gC4t55&f>Ju`IaiJl4cVM|vUz^-+Vdqy0T@YCk=u){xH z{@F&jrsikoXsf+`q_?)g7~?Aav@(sxXYRP$`0v;G)Fe4U7>xI#2}PgmV)u$ohN*jv1KSjA<8C}sXG!ax-7rZDw&h~-nf!N;yizfm;5rAje;49O8aRW91-G!9^>9l=> zhWe%f{{I^v%Ve|9W^Ve+sSjtLz3Dsf=fS^&9ysWMZ&(jpy?otyM`puIFd@Vq(YItq zFr%5U?ui)l)3ByDw3$Vcf?&+v2)CF&Vw?B_;2ZtdxnGX=jbz9%o5p@->Su%v4Htzw zf10C(3irJ6duIOPi!T>4KlZyv?%n!l>cOd>IkRwqg^yz*w%oT(2Z>$5`b*YFd?NmU zQPR_O&_5v4HDsvcfpyw4?7*G<_@mcNm=NF5=F*smo1XcBjftxhLy~D2Cd#I^fAJT< zEt z-moH%7j;1G2t-Jmp*RE4sMYvH*DkMbfgGToERame+XD+-X2cwl*C0S0fy7AONAGUi zpCk=%s{XmLrOk4&t7BmBd`T?qsw@?q(qNniP22nt+*DF_| zC%L;u-K-tIXxZf=p^=TTm_AbF$<6vc8NsKxCFfzYa-(92+DV;hw8X7GuS zVW1pa&KCY?17>}wQKYNUw2?kfM9p?i7*eU_gu#KpWs4mr1FmksmPv_)$$LUfN(p12 zQl~_Q3#nVN-2-_KVHnxgzy`iu-ykI~o=QvYH<4K|{Spx}O%q_Ga?f;?ix9((x+m+c zObSE4!H2h_fd(n`$ z$e)Qt%X3jIhV%7pkRVp?%R{VVC8^rAo7%219SUXhNd&1!>0G5ghUiAl?NXy!gux$` zBPcZFsHS!eSP4ApGMtp|Ikt75U{bNMk@>m{swfvpJm8okz1sKm!1X-a2rLIX8yuv3 zY5Nx4@c{ds_>tQ(8wu*HcxNNtm|;`k7^WrjDfOYw`u^N!`)}pHJ@wmSE5}8)V2i-t zlVAHB1D<$W!;Pum?k13VEAQyUe&rAYmOp#-{PjznjiDqEjM<{b%nrRtTY~Zmd<;E# zzy>zvx2AqeGzJ$Z|Blpc@eHeJC;uOUaJ}c>bDMB~>bH8g$Q zY}~NF5^5+n3^%4eywF1WxH`_ajM?9SMz<{;eJfi)r(J?fP8*=Q9DAq3&8I`G1nq3S zsl6Ac?z)0qXfwFiK7_AqS8LnI0s%)IlJzvg*qL9c*T9YfOF{KXxb|TJc(8?i&!mJ* zwB|QgTgcm6pVL%d%+bdJUtgvdz+-rsJch|KVWh@hLo5I&#nDSh#=)=Wzxi8OuZ&GY zS+p%+Sx4ZKk@krr_cy>MAv7jrE{Oel#i+#IcDeUe5o3T%zp{}$P%v4L%Z*c7h`pKA zF-H5-YdAr$dI>}m0>6%oY`vvu8N;kp49g!+sZJ%&qRDeKr4ap|Jm%Z z%+!~&e}iA&6#qW{ZPy>g>P`sXn5At#^8H9lV zzathjE(&*wv&3y3hYH-7`kh!(`3CKh#_4LMf-?rpSMbA%>CBT-&cJrch+UU?Z~r~{ zOVVHMG>Iw`wa_s)+a4XPJYtrL>oQDX%4QrZtg-t=mNq9S;iWs9RzLfzSdYC(f+L2s z#_tu&5PgxdzIKVa-T=a3svXrhf&FZ=rU=dZgkDBPN`rGT*% zQ1i)5<}IIo+X(1#Fh?hiDYOA6>{m)MQtXTE9D13)dxo#_D1Z^LitC8I z7PgaJ=WnkyEcYNf^6_k^7{4pK|fr3xP@1{SWc91sC(uxme!z|F8G7rktC z!p_39eNY03sSSteyyS^YPE88!?$*KPf=m;(QW(9T{*igt0pC zt1Q2r1pbV!Cm|xfR4zNdSuyQ#@Uf)J8&XdaT`D^^y=;cqX5@ECBPV5)GK>yc6%t~B{hn%Z04-FWrx~o6}p%J7`*p#@! z0ziXxMl^ZIeoY1^n2^5mFMsdF-`n}hPkiOGf()~B#ST@Wcotzjc@RE>E7aBxcCQhe zQ)MV~M8urLjHx3#(*D;1&1BL0;vi%Ilh+hUX;`h;_3zj5bR!gZ~cx9rVCK4;=KsK@S}Cz(Efj z^uTM-124bf`gg-VcSnzy!THRm=7-NNfm}TzX3*?yng8M-%lucTzA9{VxG3BzEc1oq z&v1KB{s(d_9=Vr2Zn!`7)&2&080YeACxMkY|N1c3D-e!6^&%nI%HkuZFRU;wqHc?gA%X;cK7%OhvHMr4kMG&WUU*Gz!hux%qU z+`Z3)q=Bg84BN}o)@f}S-i9IzJ`U5l57Rk*4$okqq|L5I1~n)6EgklZ-J7B$%1AE> z7~^ELXHD;*4M^D7choy%L)cqxK7zmu*Rt~lS|CC;PQ_)*Tjp`iy8BfA%?#H8PRK~6 zMJ1RL;{R>rLyZ%m0?gy(6MusRSj7KN{;wJQcku6^2fi74;8U~LKLq&4YQhPu;A)x7 zXWuab{KFCO4{WY6yepNY5df$bJfcnQ=;HFy`J)|)8b3b>X#Xcue~i-vfr9vlRpKM&pc> zI|{T$lsHwSK0;)jVDh~J-HDPK!5br-?oZZYf$Zy7v|to6{enx!wDj^F_#cNucMZAg?l;P$Kn$U>Bwb0HkQtk!z0|gGZ41349>b z0|+!|kOLp+LYWYVo^RGm)%rZVQR0>OO$PZG*e+sR^4f(>?HuAh)&MF7_YlhE?@}}% zag&G!Er#Hk;<$a(=t;DTo)MKJ7^C=3qOH_>xQ*neq8sS(lsZTmev0)dA2pAGL%I|; zjv+sLers*(WVL+nsS8W<3xp^(=MC31L6HTVz`aK|>!OWE@4HyPf>)o8O29Ir>V|iW z9;VO&A}E1#wc~*%_)O42>B&SQ3g|}+I^jaAn{!0ILIc8tL&$3d7y{B_&QWuy;nnSC zRAYt_;6~7$jc9`+7h1rAZh&EaJH)Kzp)MoJ9oP!uOop2o^REeFWM=t55zNGLf+iUQ zJn54K38_Y`DSak}TJ|&us5zaJVEW?X6N68O&uFVgE2oNp`AfupL^GqiX#iw`m>aDG zGa(VmR5ahu+jrpuqO4ZuJMd0JFoRsF1>M<5r@r?Pvobq8im+Ol(XgEKFd6)RK_%3z7kGDm2pwolwG(2a1K( zJV9#EzBA{~T@pdP^cOKuDe!DalL_6g!ho@WLy@uzGa9)E*Ae0qyYlvkn?=G>qvYwK zTeeH%An{6<*CpZ&e~`ajO^!?G3N;D@wL#iX?mmuBmKb7ChcFR6EL5NpuQ$bCSQH!J zJxA6CT5kkShJ?CYt(EcDR(%T_0(g{IovjxI@+IWy3QQX~t zoS+zP!RV%~wLn#dVW&-v*f505M^02KjOOP?9YGdiJ40|6)+q&>LB?P|!h{22t&ZZb zz=c3YNr|06^(fwksmSwQwBr7#ffq1Un%vSz9ubh6<|$=8L{r69gH9=iAhgGR$|WvMqt(xGp77$I%nOV1xixu5d?^sm$aY_1f9wi zM9fqC7e+053V8vVoN^M1OBJ8+tb#bDy%;aUrXW?7R)R)v2@S<$0XhlTZ zAn&FIp+X7)D<;%oVuuQ~zOt0Z9!rJt8&LiRZK1V_{0y39P?82&yZF0xCsNHofUAn8q;+A2C=Q_cx=lqg(`p%~%{@(?2N0S819 zdmlQKB_x=2=xaz=y{SEk@LE8zD5ofIpm-U|MFW3W9zmL`_?=0)R!L zm@u7qj0OkI7PUris%=e(8oVESqi9AvkJ~M#Db}JH&oYW)5P9Yo>y1qb7VuymKroDF z^Z9=|^O?+zn>XAyeNVQC%h&I}YsU2^+z0n2PIiFzO7iFza-+Bp5QQOPrA6Ehtj7;x zW78JH2Dp;6WtyQXcITG{`4YZ9^>uNI!^O!z6uyKvocy`~{!%GZxH0v0hP8=lzf~hz zvWE6ukQ)-}pT~QNa~2~Of5zd(A*h2C0B2M)B!bq=APij#BtK(;Ql`r5+B!SUkg4-t zN-c^u^DG9pLuBUMIF_QK6%8mtDYor#WUES-*VO>LsclC!+YQLFg^k!WT+gyy|YW6hpxj$n>(1tdKYYjzH)W2&8zX1|&H z&0QkRzBctWF=cVlJJJj{roOgIq?vd%hlY`Oj-%4(_(V}@tRVBA9M9lA>VOnGWx8RY z7ZGzgj+on2d0q3M-$WMkz(MSk>CSoj?6rS*eJc?~cw%xgj*CPT;TsR%J#=8CYl}Fe z$M5U#PpC?Cq^J~wM5>1a<9V=e!?zF=~C)-}*V7moEPgGlWKJ-w20}k!rMpfcpES^hJd!okD z07cNZm9n+l;5fPt^?zY=6RJ+5N%kJ8D=pSHp?``#SDlF#^Ws%QIfHmXZ#K`8(1Yl6 zyg5IZ-I=>y#|p4|$hMQ2>vxZ`0we`+Y-pW%Ff7%JQN6>U`fIsg+hqa#+0>s2;f9Oe z!VNd3{_Me45&CMRJx)=m=!O-XP9DTjthrF6!vS=4_@PzT?`h|?UDpq7pfdMQ62Kc* zM|ndEto=0ryit)6j&0|)ljVIQ8sJorqc|#$W6R(X=qRtN0sT}5UN3NS!Ye!HS+m#Q zaD5Z&7x+A&_>BP%f#LNFt+;DJ0PAnj`^FwOUxfN&kTC)x%7uv8XzmRx(U$fQl>@Y%7@o_D;j`F$& zyPtlrzXtf85qbXj8jvins{#FHt89QAYaXFGY#gwnZf}H*bv2x$Yx0$#7+QV_Nzk3K z$dgogT@CCUp#UbmBsS)Vn2$u=$`P5cg+bcWej2Bt;Avh@=l9w35LY4#2}K>xGokB^ zVM|DrH?Rk+I5)>3mPk1J8>Tns3jF_c<_9u2|MMGv^T-cRy@<=#!@n2mFRnpQ)^E9U za&mcc@@+!3#;?iDiEsJX`-WF6EMKVBhW0S4!t>fvt@?BbO8GTyd0CsWU}zyjB51?6 zPe^CW0_fpc?P$O`14`w2oM&>osvgs8(`zhA>7sC_=*5C7H0{D+VG)4oH>}YE(`ye9 zzjPS}z@-i0A{5@QM;;;_uSxzc*ye<3Pbq4o-fnR-NMk1((l(wInq+rz;#28T6Gq1+ zsMGKbFwup$Eu2f#UirAajniyHKrSbO@E4uwoUhK-o$u3s1-hu<9OVNkwOjg`Q>iZQi zkEp#6ZNw*RT*p}e)uQ9XsRoX3v}J0KB<-iN^3wX4=w{v;rNI-WHLI|bH>8J!%2OXy zqcXN&Wfs~4Jk5zJHfZ6CjvpZ$Xbhq#RbH1UGJMd%ufagNwter>gjq%CMvz3dJ_kF= zOK*DdgD~zrPD>t{;U1ZsB;AOYd?xeBa0KI?@x@7g%I%*M6-vf8qY_y+~VI&7_CviE4Ap} zqa4NA1sj#r1Z^5bFxJs`WW->50WWN7YA22(~0%h8xL@BvO*OQ8_ z51#U%0#>-OD1xc-x|U|Ap47H@rcn;N8f*Dgo`XYgaV#ocs=U{@>OsjbdFEIIB3C_G z-jG#~XQZ4z%bO4cS;LwyMsQIzqEZ9{4tsZ-tyQpSO7}eJN zh-VA(hG%O$S*7z5`zrps0*4elPjEm$>!?&4&{9$>k3ASv3tmX=Rj;%Vxvb@;tW>JJ zw3*uZz%?8wW8x>-&W(KX69*sZdR~to!A*1a+4&dyGdX=^1b$dc+Rpn?&wV!cbNz+> zqtlNH#SRxI{|}+qz40XYa6yXu3U3RzG5u&9DB=c$_|Zwo*K6chtu$KI?PEk&rp=tH z5{?Ob2a?i&3spp7TmZ+p76B!&g+uJ@J9%exEpQ4tc3=iLHP|j#2EjF_$A8v!V8G z-|Vo`{e158gROMa%hSuEM{!ZOL#oOu0!MC_+_AVny^PK@wKL0S78JF8Yio4TTBhY~ zS|yyo#*+iHySyP6d7rTb)Z6tf9ottxgKnjV_W6r1&S7Yukopl6qlA8Rtvb9P$ugz4 zK^%#i@O^fki3mWa7Vrt}QdC;oL|Wa|D=Ag!%eg=3ziQ^D=foJ};-}G;3|mSr&}LtvbmjvnmE8PoTZPlL%LH!974bmK!M~Z zeZ92`L$^$r(AtVk>I{;Aj@~Vi&)56u^)y>0=A*5|M@WMRB_6x1OCDeRPJ}wd$D3Fs zBI(M<02cJJ?J*A_;W!wNp-uv%zri^o4+`>JFbBvFP&ZrgIRuD0kV3UK#7ENq?}OMA z4$MID|NTnl#%sBm?5~KyIrw?d0|!0upH&a+yzj*(Hiu>}d)fT;w~eqlAT~e(V|v=l zI`@Xfs74Srj@(P_4zK23-9-&(PB+CCfs4TwGdwWe>^5;p~-|LJ{#f_uwlXfOjQv`Jhnaz zFh5bULNXJO9$N>hvTcisH<_+YsC{@C*>xIK%B7+km{A$AYGW}@b(PnprWqEp>+~>A z37%ZaqJw?X)n`BY_=}scPW4`3FL@)R=|KLSfh(-jBAuL^sTH;>tMv5d^rl#0xEQ>` z@WAxu2rEn&Sh0}UG(32{!CX9~<%%>tT32n0YM)s=1E;E^8-TOdA~00Zi*~)x0-cuUlzf=$5xE{UL@)XHU2u z$dUmS-Du17i{a+_{HaDgEZ2Yzr-`088Fl#-1T+Q!HOutC5r{;M7Ki{KKFqw~`tZ0q zILVv3WzQk1(Dh8mbuEwXSi$T^FTc0};lkc7n7%u_U73&HJ~4bMZOa#Y^!?mj#L(V8 z+O^$3Dbez;a{sFT(QadULr4`|43;W*V0xpERH6L`#wOUW8mww0JX;K$7O_CIxAKXG zpMjA)0tids!n==!*hZDxhPKosMyv03*-yM+aL6DvSiS&_4bVGFi10}SN-^jgvj`do zaP(5nv;~aq+jCkF7aGsg(KktKj=EV6;8z$&+@nLAZAW=sE3Ly!3{v#iojz*Kk%tcP z=cOW8@XgW~q+7bYuA2AT-s8ScoWl3(9_7#%;nM7$nY{an!+WbJqCK`bFatXywmUcw z@pA}=sq_cSKniIt$xBXukOkPF3{XEn00@p8-S$0S{s`v4S?W8M>%>18|35YL-)3&Q z4Y~jeRiv)>Z>8t!4T0gYT$`4&A-^I62QUUbIq4fnI z+Zh{<_($S?ufPi2lpskumJ{r3BcyOIM3!st+EB=MU~4n5L?aBFu;i=4+aDrCYWW5+)G_AaOlsFq-XkGOTVt3(N z++>e&o<8MCUc@Pe^k!(s$%tIM60x_adRQUQ7KNQ6(ikpEDmL8S4w1>AOhJn9ztBvj zk53_3e!ad9$5AtZK$0DlIx#Xcg7^l4X16)YOD(cvTX2oScGx_I*dD_*A#Q%{YW*e3 zggSo<7I@b&2)7SkogUVC>8Mi>bnVA6{`1<(+An?lG6D*!n;#01K|A*^bN{;k3U>}U zVuj5yQ9!;9FwY@8aL8eg9x?^t;OijAsc!2&7)dBds52A{^h<6YF=4hJcmdpe zzU9tdd-F?o;^cRK&nEAjIDB>J45)PICc`cKwPCdxqRpoeER1}buy9lx`2Tt%+@KEF zjJCpB?x%B~@81D;9=cO>04`2`O%Ng$>}PmOIQiGY@68^(LwMlOovDG}6)aK?%VpcE z1ff$Jk2AKryn%wKjdMw^ZLw_Nm@mRlk8q&U+FA%uFjfL2u!y^@z-q)=Jg)`BiP9;r zgmBIoJ_GWn%DsOc?)_Oohd>xdfnSW@fp}mFGJ)JVPs7nRn98*zthn;nz>(xq&R~;c3>zAL1w6fL>B(w-I{Lkw55x| zW(hnn-RfhOkW%>)dRbb0NJb+tUW^y@{+O+u$nS!|WBh18a|D>%=N!jV<_M~hm?8?l zC-@B{Xtloy!g1%wYay(r?O8XnCJ~h?<-jl^+b@mBO4(iBzy(YuO9|*7wdSxY`e6ka zDgz>T3_4J{ysnx9XW!ets&-BJdqgXxjGv*|xCbjG-2Wcgws zLubxix-iSymQ=dqSw1h2+tP{;17W$|f;TV*r_!S0T@51$Hir$wjshjSc>hWo4N0xs zDy=p};Cj^9K4y8aZ0WSKbP+t=sqQeRliF}(T_~+qnN?T-IRw_FT`%Qz+gH7O!iISs zoLt@YQg;T{3pT0Ore3mFV8QRMm%7tYuVcp`jG;ys0f*5r!Vq^w3QaOBsCeKQ12Trr zRYk-f!&k{FH56o0zw_Em6NY;_4FCjO6*^FShT3gTKv56!4w5v5;BXTRQyT2jl;vxb z$zdCY4oT6YvGPtwWBX4IR3}x5^Y<_Io}inn2#>CA#&fh*udlbZjv@C?UE z*FxRlT4*zZ>j+aWYBcJN?&%fRs=b^rlHijFWS4<*3)IJZm{_iFLX!8ISn^JfUTSwz zM|Fa{(Q^d%UM-yWQ;S`=I`Yo&)p7F3PbS2HasrPo4n!xU z$pG)Pdx?$z`0hpWUmPL;a>U#=M=x!dIv6+?hId@Jyt=s zyT=x;?hIdrA|l%m=2inZ3THg7kjMndhA1J!rGykFF17aa!)qL(U($quG>fRm?19w< z;8yPJ5Je!ItIx+ZR&^Ow`>}g;o!HH7o$G?F7?B3(5E#mWzCyC2W~uFNG=Rp8%+vkuXQ#yvd3oOgB81rt@&0a&_lIlzsrD8C0%3&us31u6*W-6u0r+v%2@jt% z73&{$A)=)_^9puMd3AKwKQm;zP& z|5E12)YNCPf1159v&2^3(SBSz^?gs>p4o6ZqmE$3N80VHH}1S+cyy!*L=;;LO>GI` zP}`w1#RiA?Yf-QoIl<&85zdaaSe8W>WJjK>Px=?<)Lhy^+vciNQzT$4C2X1(3 z`B9MH!j*#@)G;xVKqn=F@Q)^{gFsfq)B*R4!(e!n%!SLF$d}99-uDyl6p^B8$uD4- z&#EtIGw13^e*&AW;D$Vo7#vsuxd3cHYgOz}dM4Xt3H^7dF zbFeBBlv-f=q+{>7>S_yDC}0tJh!K-cG^C2j3N{dtFdTD)iL*d$MSx8JoL${veZ@d9 zUS3-udngRvaL8Q-(=4s~#}Iu;jesi$2p5c=;o@Wi|pzP9-@f6uad7 zJ2Dfq%EZ;zy8*&fcrxJt5=L)$KeeT1sa1xfU}ov5t-AJZ1l*94K?uCoD!edX&V70C zEYAI1?(cXO(?#J7yA)0fJk8@a!WV-I~}o-mB+bpje>=yQQRXWO$^PrQ5{O?*e2 ze~7{Z#X^OLZD_(efR&`P=?w9YZBs?oKtd1t_S~=LzS`HbL=6_r!9~nQ2k$QZQ*3m+ zDCx=Em)W&u1{f`$C<0zw`S`n;BA|@}$YmyE^*=E`f``!4S1UHZ_3h(;i&%Nj0UAw(-&$V~b#U!_k?i~6FjssX^ z-9w!NKvzH#NT{I%V3goUte_B7a9ELW6qi)i0LVq@3%a;)j#n#U2W5N#4F~(nX~o1l z%gQ!L{vj`-C*jo99!6Z)l`Z(L)F#9{A0o2O2wax~gsB#-En&WhDK;*KwXHSnbO;zV zM?FNuw;?w-5mi7$&T6-lobDpt4lKPQ`N2X1A%*ny(i-a0@#TxB&uJGVPY1uB+AjI@ zFz*EGbQ0Mezag&SG6Zj@Rb0J6?V0K~0{W6YN*$Mq;=^t#^Ar(G&&TnE?BV{1Ih8-L6AZzgPlTRMI zIdb`eXKR*T?#oxr7;`r2AU_T)o;2Mx@18D1Y|X-1qyl!yc%ez0L|aqsB!eN0c5;hY0?qO& zF*9Bup?(P}l-wR@f2Elb(F1}Zu|$={p2dOdJbSSwXvTLeBup>*4E0nz?Zicfqq#DJ zp`z^ujOtEuN)fR7W*Au&b1aUqRC(R*Bp=4e9&mk@l)##Mx{FY79rhBNoxMh0*8|KT z%Roed>p+wmCN@V4G35bZ3XWms0(C_@LkBPM2)T!d#*A{xoC+ac=sU^cnzTfr6e24Cd|EN%i>f`>ks$`{ zsy!B!S*nJ_H#b zAz?}P=O8m+G!(j1+={>PAb+D>w^4zFxP>jdkTK~R zx?A;r$Pbm&dRUgF7HVMwfyv&gy479uqdHYx673llOSZ9-KoUD7V1`U)mwdvQB!I~- z7y>LG{NXVPj|rOzagxanBw_MN^4VlJj}Mb%XZQR6pL1{BdUSP_RQ3ka4OZW-d+XeD z{^y+k`9FXEbTXQck_1u&RpH8WdfMA-VG_-8ca3nDwtRL=-h{U*{q-t}fGjFkU~(rc zc8IJrgZ}ZlqXM3GuVCBTWp58yjEWjT#%vSd;@AJU445ixD2`Lil%gqO76(DJw)T1? zns=yqzmExQ|E$TnAD@ETgj+%}yk%&KiNn$YxA=0La*b1<9J^JcGsqsdO~Su2dRmz+ z9DJMERk|m6o=HyFeJ-1liMXKELd;13-%rIeu`DPdF>(R~?r#dMKN_FP##uj+7$0yP zX#D^1mg3NLe{tPww;vmQbmYq;^5^Ey04eb9+n&4*wdGC;@@oMz9D4BQMtfIVVo{qr zYOEuul{1TLODi}Tjth3N>M3&q5H$ST!@u2Ku^joyk)PBfRW7=lM|fc5C*Saf2Tq(g z!SUVnMzaW6jE7+4%Qc^!%+`UXu6obHKq^u`1Aa`fs$U+5ub6&&8^*lDehbzj{6<7X zl|lWlnOEtX$=7d+m6Hg^|swPq~>?N!7RP8{5<-rv$ zh*ZE0Phpm25IRI`dY;BP0gXuzV}}SfrBezGPhlZO&Yw~tiRxTa zp?lFbQJ6gak!6JNFR?T79ovvnC7O}sVM_*EUdf`u>oU@8WsCmKE9a$XSD>k8a(K(r z7{+QuYD#IW5SVq25jdcgbU+C^zFMKM3q3akJHzS8!oMFFPmV}g%J*XjI)sH!5|+*4 zQ6l-h*O|ruC|Csyu;@}W$BSe^ld2amF43aDBxzr0;_LU2)vP%aV6Ii9FqWD9z&0sp zeP!t{X0t`0<q1kcDO*Kr^O@Vz=3|gDOw`p`^u%eWLtY( z1(leeRiOtz(3g>DI+Z0jGZ{%FVx0Mu22N3~#LqcSPNXwaM5_@xmB}Qsgq5bk7w>v< z7{lQ09plh@Hw?zmJFQ_*&G(`O${Z2vyy_1B?(lclHJpt+KJvIZkGRNP53(9z=DB1} zkKu!VFXppbpVMV3PmVk;gT>M+Il5vQyqJCRD*C@?_nwZa1HC2)(SHNZU=CR6dSQMI zuG78mkB&TQ`p!l7vy=x$9@V}_DZzvf2$OX9;yq7prSo^J)A?SlvP1$|t1NbBah`b8 z?_~&=MlP8laFM&s7-Vx9L;l>h?V1B%$j<{KmvpTWOiU!%L_8jT-1+HuU_rRO;|Sh0 z+p}SrAsG0XWd9?0$H+U(2)O9JfOuf!9W%x*a2Ty zibDbyF*>8qdS(zKnx350BeO`zN0|fxiwmma3)Q4J5jbf;7@v@uUCR6n%uLdv&6wvE z08Mh9Ch-2u$vMKeqrVMS zK8;1TOOHKp)aEXWHCnpUx!3kP+U){$2RR!SMFOzrpF-nm{*c?;&HN$~&N|&ZQ!a=T z=|JcU&xB5h{wQJ;s0(gQeR78u-M7)jswi9wmC_oMbJ=V=6?J0~0YNUf&LFT>+uQ5P zwv&w{`j$X&>e@(+Kf+xt^e5BZbSNFzzu&D3YpPAM&kH3B7?Pia2;nm2_MLHc4 zJTUThGIVWq$CKNSU;SDxH-9!Mut|Y`!W6hvd-5(XJ+CcK z_R>vTdX{!$aRZc(9ltYBehb=PwQ@m_Qzbu7ZB4=Y7+>#_Ge7c~k{|Uz8@W9AtM72{psIh^nOUF6@R5=u=d>csDinO8@qE!u6$da9#JZODT1J8mr!f+AZa*{88-e%x zGDlL%q$G>!%ICz6B+%YVHIgI+N62?~3TY>jAHYc3+v_$GouFX(r)#&LJQWf*c)WGB zotqbkc7dQ)6-styXk2}ju%Kl4K)~QC6)}urRx1NVfvn|FMQ18>RPuksJgY#~hYy6# zoSk{##OdQF4$V%5a%TyW!kp>9x9>F(OS&MKJ8r&6af|`1iMIB-Q8Jn&Tf|UOnIm>4 z!@qFuXa z%CXT1j`yurtV5 z$|<+7u;?!5>(#l*2P)MS3C5|mX(}62_34qP4OO}5PE{TldAhTv(z!Foqh7v{ZBj`0a$bgQd#MACU59_Pc8RKu!O>+`Pn;eC8~ud^h?HA}!$ z4Nhgkk8OYQCfzEi(Jfl&owJWs`cOl&K{XU-Ae=50dJt-%h5BBF$`Drj(2BQ_2G)@6{K-;SH_t<`d7hZ+m52J=!7h5T&N>TDb>dkLi>tCBVdE zz0}w#xH2{O%*qw9$9HoZBxb;OWcx|zoEp7s+=0mqo)8BSK^(?CfzJfv7;u+RM0Rg| zMIGdgMh_35(IN}YZ?4C?_(0*r`!=n52C1c$(r8 zUUdJ4#r8(NG4c&vp=K307D7}CUCS*$w75f|Yq>x2jSUK28!};{PpOL`d~x+j37kIE zfew=dPWP^HCEF`~pR2&xaQ7{SW~$BQj=wVel?_g`uaB5`>JDV!R#!4`f8^_U40J1i-{i^`h}T3bRJtz231qs63%%Eia+BPaZ{X7 z-b7F=IbH;P|JU{PpRbL4&9EgdJYc39b6dWp?g?S*BitDI+Uc2dM-PN%ryraKUFU*V zMDalAjQAfyuI7l~kOx3I;Yy856q6%8OF+k}UJv}=eQyfaE#*N&cfq49Osy=> z?Yrl$@)FT3)xzETHdGchwzRe%0luv9z_tC!w)VQtfdGp%+XVVvMX6XMRmeI{jEjL- zn%dgyIs(aTAIJ#uS*$YPv<*V~6p94fYZ(Dnlz^=)?nkb8tEhb+#G-5mZyzMRePFWM z;;2+ae^8v`$J0;VkCbw%qm=Tb+lS7avISlTJ2~NTy2;|BDS` z>$SDlGVN-C^Kw?0vbKf0c^+}Bem|c_{c?Zhoenuj1s8#QK%A$ky{=1eP`uMgQKu+Y z9E>Fv-r3Y%%LoR=J5|Gz$Sv4sI;r~qHCH__blvG|-?Dw*HUH}B5Aet4&n5*nDX>X_ z%cj7k!%v+dTpZp|#J6Ay)Pwd6hZajg#3tY8^O@lNCE|oe`4E~p7GveaiZP@W|}14+0_cV?m}7m zl&>%1r@`Uzjp1*uKf-%Q?=>Uj;wm5I{2u}#&!gNKz4u%&B~p`DB`(ExAK@4x%6(CN z4rFP3=i#3K`MyqQ?|!V@;@!X#RbM1P(39H*pk1>!syv<-Gz9X7aNXdl02xS-R(y7510$bbbDyIa5{eES{r1m_P1*#b}<;rEm_V!wOzM-0Oc_T<9 zoJb@;h!j>cf?#{yMnIU6r)U{A1Qa~z6(Hs&;uMd^Y{8DqQi={JD(^G)W}5twNG6p{ zrjo=dQKI0T>8FmPTzB54KlUSAW_xBsHntxZK>xe+_~>!7OS#yVi=J?dXWaq-UAmtolE1NsADkDrL5)nPwdOBQBoq2YyO9H5GBq|hR5seo#J1I!_7l)w zE&%J0G6&(ld-MbK=UukmoR8snOvJI|mIe}#)7DXmYu97G)$KZ?NTsJF#foSS-8$(+Bb0;0@QX`N9b@aL_tc0% zTN>W8J_?#}z?sR%cp@=_QOzWkiDb;@@$e&4 zPYp5PnPwn3Q>bazBl~;zlfsbnMDH@-(D<=KGir(RhW(qvzuDbgIyy8uWX8@#Zr{U3 zim`F1UOs_Rg8QRGw68#**14KrmXr*zY}o&O9|f@4NV=3tma@fxcuv~dYgx8U<^nz0 z%#Jg&3k*z(WlQeawa{SeH9tBudXRrMe>N$wNr6oYY*Jv80xuQ?9=q>nwxIRj*3kN? zIX?cD-YcHPsIncD5h~QY!pmJ*tSsdfhVl>Amw_&hUNmw57rEW0z}Za)zZVdN zxG{S1NToo+E>3u@*hdJmmkBE|-wHP&{o5JR-?dYkMsM zLbJBpp0_Zw=*O~pgCa`S3+;m;cWOk!ZX!UOji7P z@+C@yzDcgTLhwlAvWYeAJ$(5KD_JT;K>p3g^0DF|0N2{vYgt&$n<)!KV@qg;)zn*Q zZ^6@8m+6M}uVI+zdq<(p7t?7sTg*ob1JRD#+G`njG#1EyiUqhx-wKkxsZ?|_5jMgA ztbJ|m_1N=J?npgP9t7A!Gc~}CD<1djdom<0DCHIs`D`jbkYe|3?X?W4X%z-^K7Ryu z6&?eZ$!xRLy`wO5~7#3;GH{bPzI9Hrzm7Gn{$OsGJ>IXn%J)(#$IlCHr44cbv&smUkXhh}*Vfb{mI;+L-Cb;wsj54crcdu-8} zBRX9$D>vwv3EP#-*Gwwz{|_@XEw|M|6} zJy+)d70>8dM#~C~D{z=v>A}A0Y z#K9rK-4DD)0wb&vWb05&g}hz}%Go05UxYz8WYu3V?27jQ_-b&%G;7pZya3c$$Q6)B zDa5(5W>Jw>9H5uNjU1}W_LjPCKAuVy+)OGu5Z_H(d)@d^G}fj~0*-dHhHfHgB_&@v zx5JAD320CX1S7?Sn4dX1J2Pu84g9A+sj7A>##|_0o|Du#$)!}yo&{jPZGHgy$mg&HQAL;`>I0Caqrm!|f*&P%$# zjTE=@qEKpv4>r+52zY_nqAE2Ev6+-uxduh9QYoFuCI@27QE~;_>qf3@8$e-Kwv(8W zN@$=K2bjBEMTH7EwLU<~Ob1f>mOj7=So(FX$Ow?Hm>Homa?F|`us~wU=AiU9w`8gM zWG4QOvSIQuVi7psfgAS|%46kMnJykHKLmUWj7Mfpq$G}c3Z)5>rtNcE8^r1fQ`Cb9 z9C3#dJ@!#hF9D{8SvKn6*jPZGSIp%=R~l!Veyvz_ND~g+SMW#b1f1stUai!nI+CIv z!*W5sqKirs=(*^YRs-J?vVoAkN}(hfqB4-+H=v?L=QOB})YAff1mIlp|6jFj@6hNs zhUc%|&Bf-=CIvPrU?}j&>U;kMN=L0zIMeJSZ|psf0M{rw{s!y4-8O|46M~9R5}p zb#upqJ03Js%tdaeS*W`X{-bgCsoE}&?0E2g7feBpDRItmIz*!(KfU&T31wAuWtN-V zJZscmEml6u;X1FKD>(kaZ2Iaf6B0XHFBd1x-=6Mq6kKX*h;lFRUGL^B7>9rq>sdSN zu24<&fE{}1aHV>|@t!+ZyWlK4a*y+Q!D+tv22hTAOeCuZFXgyiFFBwjk|5@#!N5K!!NGM+-mqN|w~#0Kk4D?BSi2-dRb8B5$JeD`scS20hGU z5E}mM@R!y#QtWu;j#rvh!-cnMb|3tkM#O_WvE!9e>oDYdDgEj1e`jaiv`f-KggUGP z(V5%Y>$bBq{>Jv^$os7&6bCiFL?+@!W5q!v|0iX9P3?6XpQ3v=jFhnm@tmY|W}@MD zP5$gjJ+W?Y0~gEQ^q$xCzRc42lXRI;uMe3L+wsxG@(s9V(FaN2zG|EbK*H$Gpg&OHq%s#;6GpW<9~MPLsAFkls!0q0vii^HKl_L_~q*rI+zY=spLG zTl6ImoKo5bA5$vmn47Qa=UDEN+HRl$VDzYOL=&i2uRncsc6vr?v{NdDK2V671P4>C z1X)?X45FTAen;AXErcsimb0q*q9b_9!}JV0Z;(S3c4J6zIzY!Q7k6 zB914c6X`US<7INgIvxYjYfHMA*;3<`mV#QOcD7#&rdXy#EmlFrWnwr~f}zIW0zi3* zi45foy+)fl=rBL!6--~+s6MYgahZzabutexsC2f7uJwfv#>}baEJ=Co`zrIx90k}f zfm&gGG6~7Z3iVq-$c%Y!>(pTjWeh1mz(O4b#ja8*VHLK2Q8)^s0?WdRn3F^?z2BgJ z-(KxVDxWT8ia_KN)PLo6m{ePPEzBz#har0a5LXf7!(#xW-Z5nJN&D| z>wDC9zHjIIQ~;5StHw;7cDdg9KHV;f2GFHq^pRQf@gJCs#5W zOQkd6$0we?Nt2rW(FDSqe`3#Q&zbMM#b#}H9?$b#@b-7Ucc;N`m5bc9$3Jr8L*Ksl z6$k%Di)yKSCO3Azw_%M8#xU0|U+l-J8%f6##YnLj9|W>mdwX5ET-3Ml`?;N-a1tD< zM6~*mu0iYc(%Dv>P32LmbB)?U|v%lX>10OGlo(u`zzXkA zs$eE5+C%_glA!ijf+B#~cr+G%?C$p#8E$~t4*NLmLr)C%jOR*zrcKZ!cY3)@Nsy`| z9i)2KkJjO~|EUXi+VRIb{@B_1mr&*g(RkxE)!BfV|^9 zn`Xh(^zCRKAhE0&2_so`>($}^IQ$>ix2Ao1$EVE-=EBPx&PBg#R&da$#{C_iJ_5?M zQ~-3O3NY}(%i@X?qk?Ce&1NDtI6`$i(gD1`jk-8jK`UJLk}8fC>JET}K%S!zQrp&; z31;gB!T@NIH6PJtcxXkHdNvE?66BH*NonFEU==%6wIkR-a8zIo4P-ZYNTT$(h9{Pa zWrCj|>aVxGr0dpj+`ArRf|e`_^uBwJP>WbXkc>N$n!RGcqMBs*oeS@cF~P6vRR7@a zA9H#S^vY%phg!Evn}z3ZEzS13!@s+MljY+(K5k~83!i^wKd+3ssT$7?9@z2mrh*5@ zK&O}Tw>lF-Mca!8+K|{Wd=rKVw6djm{mKK1h&dHHv8phxGD}pMRO^j~TghA*rUyW* zjS(@0Gw{)`cz$a?-b$EhbJL{OV{0iCh;9%!x!6yPZ6^iZrYtWr`%A_x)Oa19tDauB zhTV-y1lniV6)@adHAUVG$CUNP_$8(}I#DrIIVVC{>4N^(ct7L`ZK*M4;R@zSdC)sXdSCd~*9DAq z3IQjROu4B+M76fJ*TPX%Lh=rSKw%=49^z8b(ewXbef3>K*B;saQ^Pl3b0e3VKbsWT zq`)QxHYu zf_!WEg>}W#YbUOqPyt0QaxXIqRWAN{9nQi3{%y4fse&aBTsvXn^3zoPh-U!x318aw z^w|~}+w)a}-ngarfyFXrVBqovWo#e4@!8=|tUHLE-`x349fVwX;SDc4_WDAe@Mm8UaGhTA;Dq)e|h4gB~*@2W;D>8Jh#$3WWykzS2((e+cEo%0XQ(b6ofy5xwLY!a0*pKB7uS@E~NF|bpv|gXc zw&AXQ=#Z_7>2zoIJ-!^`9it5!M;VgWG0_-T|9`wV8Rz#+v{-zy5+Li(`}ul$D&W)(ri8tr1?A!opE=s3v?aEQd8vck?Uvwqc=bxv}%<&9ysFUst-A$R`F< zX;{~8u)TiPE}$8yOe`C-|HN_d$Ea`{P2-O<|D?pemYPbW;*@%}|JeBdp)U_@du;2| zTYia)@6Vr$Km2dsj41vi0a4r&SsBo1wpS-|)0=&PA+mc87c!gWiCX1lN;B+*)XCsaH7$e|8MwW<=;ja-iZ!@=m&@T&@{-s zvcaPbFV*;ij+U~WB|Y;#q~qq0^9?I8ULUzWVg|-Vw~%vr@cPJo^*qw3i`R(KoR|^) zw^}7cK#5U806(Aq`L`l{-`Nx}8*t3^EC^(xX3R+fv#RqB7)MkTs&Ih@6nfxL#Y znFMhHC|Nijk}<*wKvzuyWgAO}-*@5Pq!?>9P`{|*mHWtC?+O<A+ft6X$fA9>)~Pux|*t%26Cw&>oyZ`FO<>SU1!Ohu4dKA`zX zWUIS(ip}3cV^%%mltX@Q6_a#zp?24PY2+SXpsg?7bJt?|GD?CaOHKr2;7GohN*cWL z7A~3yxX9vKiYRoi0RF6o?gto)NRcWC(27PyD{1lDP){u~f$3QEA6c@5+flJptkPtX zQDqoV1U|c1S8sL|j~~qo}K|yYUdKQ}E-|i9$*|6|wzMdFzn3WZ-}= z{#!)NU-vEXUWbC8lccGQhNQ~m}WelOi)JMe@vhGV#1A2*A zgNX9&yo%EUdP(A?cuDf5cuDG|cuBh3O9r*Ngt5Hn6EA!PcV_3+6&uXzg4K3;$>oqs z`1fV>t>NL0edp4za0Jk^4H?n&JT(C%%!7;tr%riq%XJ8fLg)pVgXk0N<0AQTG$MqN zl)}j&e*CIyYFy~sF@7wVga|K++ir zY*H0@xyW5({lJNbb$AE=+PDyfOUeD0O{xhag@FQfHysQA#KJE~-KW}aQb`-ohc*fR zJv(|fN+hU!uLFs}+(aYoo=SR_%u&MQ6vIWWYt=w1>F*BzAM1|x`Y&JqWn+lqB6rI} z;^zKWx$Jj!*tsDydi8qClh=RwL?hIZb5PYHVjxYjywMbeG*W-vU|>s@pa3mV0&ot? zk(vmE`yO4&6CJ~ywt zeNF6SqS2DrD9;MUi#})%Y{%qMYFm;}Ie}5)f&{^Z$|gF{2Gr3j&9fv6vU8@T1Xqur zkT5@jxtGeT)V?xNb|&l65wJ1d+5Q-21%xs3U(Nf#77nCf`Z5Mu^z{4@D z)R(S2!!h9|(uE9`H`f_N_;RGRy%r+|6WXxF#2S93zCE+R_S5rXq)^P}2ZA`<)?Q1` zn`6ckZ8h0JeG>V^tYxv=DQ0xWmn^I%E6*TeCAB*Ff~#xQE!r^&Qe|I+wUtk2lWt-lIZir5!S-5asA+8xK-!w> z^Mz;HCn%cqCTN`0;U(C?>Z|;ZP zdyaS5J&0g07Q6q_^4*q?R-SfcpU)p5%uMg(OwDa-rcXscR ziWbin29sP36K-m++m^gyc3+C5(xpggFbVDSys5pGo^P`I&^%1=?tL42guS?ZVb3IO z6qCjDV89Yu+iRJjD`WTF*nT=14Xgei%}A_gY$9v?|HDILLp#1a{KPenZ+(8t?+^V~ z{v5h^@}$O7!w#0u@*$eu?Q+;O>XD*{P|^_I7&ZTeFRpy( z2KBHurDa=XrjJUTjK`*Vn&E`TgMiMeuQW#YJL`|`sa;R$;kAp4-1RbyKYwiZ!S4mf z!JS=C*>OxIg{-@!K#b0_2V-DteHc-s^ zNNr7IZK~WlQAs~D{4?th^fkL)V+P7aE@YIky$An03F)Y3X2Q6$>oq!1^6b-oaV08O z5CcKxJ%y{Y5%aG}xsL^lT4ckI=YHvqmT@+`=kL0HORv!2jMHk|oujXQZusZcALkvr z?l9xzB6p*aK5`iot?Oa(o8j`nt~(Ab0*U77cqV7cZ+qI*ycLbn!0t?=hkCHdWKH1= zRE%E<4i{9Nyeq!wC2E4mR}NPz%Mangt_a4EL_ABV3UVJC2QavrBmnYt5Jb^k{p3G^ z;r1Gst|v05E>xNHLQY|u(N`^1K{TJ6bZcYa3 zC3r@&$#m}lPKh+d84NmJpkBh!x2;q{S)5a|#QWb*_Nww}--PzH;jeX1_`G55hBe*X za*+$!5d5sMqj~ASVu6wSH>~*?37P05hk5k=axG7kh1tv6mmkVzjQSF^VG zeozwgU)M1N=-s_TjV6*AABW&1z+i=iTBF3louS%N1u#ZaUrl;kt=DR#>;Fy{yV}eD z_~j;DUoLXj7~5zrZmo#H3heU0%m4Tsb=QS8*`R1Fmuj5SO3Dq)D$i^nJS++#S0s}9 z&cpA)f{+LwfJ?dHY2^u-0QMQ@lyR?6*AdUics6oJXu3XudFqbPo0h{~I%_4bnV+ia z+bmFwPeoEej|$=&-4G)L43W&vg5*=X#R=1J;BDv2wKCQ`W27_H2ZX1>Dy_Fn5afiv zb{gfq{yRu!oVXY0>+(k@Rh{N;&}Tr%Hu%#&J!^)n&wOaY~gP&?DU1 z{`U5|@f51Fv>HS_8Mt%3N`T6xHbIf-&hjD@JaLFfbH3(IE|G1&x;9m< z?_V%y^rSP%iCUXqz)(Dyj7%=Dq)`j>{k)SZpK{0lGt!YomKM8^R}F8)sWB=-s{EO~wj3jiWaL+e&`pLf{{HSiS+$UJNXW|kemJQ>hIFwrlVilu_Qpj+88B%ZE1MaokO zk|b@IClRM)Kb_&}${gVA^P!`Xnyw6ire*tKohN=(64OH^*DP82Or^OC^W}oE+qbqL zSc*t$gaF_<27MPIxW%c^v2wMxy0~Uw9;7y=cn|1+Nr+d*Nq-Ud1owRkC%Hgdde6%V zR&^i+y{QE$vgm-3n2pQaQ`quDp1(kHxpv%&$Iog z9AHo~h@^BKo&|+*!DF-A&5quFj{cZkBoePG=pK7+qqk0Ty$algMmHaVwNz|jm}#&F z3eW$V-Rs*gw@g(wkuN%tqT^B!b`YXeTYKHu9@aXK?HSc6F{SZu51i-1_GuZyr8;_1|3e33JSE{<}$m9~cTea{NODMC_Xd zS?18ztr&j->DrI(?Zc);8BIAN4YG`yv}%%As>oL_4F9RG$xA@8;86)+jxgKWu0PuK zN5)LRMOWw;d2-hu-L-O$fK_V?K71~*#HG-<6aWc}KEDK{x_@kls2iyL!*ONKwQ=`t zJSah70?&)Ioz?Qn67+me-vVDM5ldzhv4oS2l4N=1N@RO`mh;`CMauTC7->g9g4AC{ zdA$R_{5GcYWQTm1p$nL{dQA>VrYvYA6!9~D#_w|q*i0&+!=PH9CrI8vT6=QNhU((( z@9qAcPO@C&?lAi&*FjyB`@6rFHV(~YM44($K!Z7HPgek}$Ky_!d7ZGf9vPmWosygq zvK3>Rc7nOHQ@RO>*9di_HKsM~1nS-Q;Z>+N(@?gz_{#R%DNfik^%7Z|-=Cx)S)pD; z_831@pn9A_X4~krqerKk_3bYVf1$gexO;W?sv#g3J92kDtRxIpGM6WIueK`MjaNg$ zGYCiZIqY9vHzd#BMFu*G2u1E{Av8@iq?EK+GrBlYD)9*EoZgR6v;CuJaw?Tg1b)Jo zUh&~0Q1exdcppDyd2;A2TP|L`p{Kz@W6`L!U3k z(ckZ$moeq*i&R*^ZqY4eYuDfI`dh00PIv`UzOOzO(B)rsrIE$!589&Ta#l+Ld24#$+DY z^&RbhG=)27B9RC`cI$`!CF}9_j=g{Uc+UZ7Ny?cTO|X$m*2ftBaMvH2F>sN){>=(K zn@gH89Q=Fncij4%83PaO`a_V)q!O1h4y$TNa0mydR>Z4GDM}5w(h%s%@&yNTw$vO$ zohUYHj`{k#5$dI$7-eY*e-P!QW($N7U?do9o|(XVRJ+SrYAh|b6YD(dH7jX9a`+k( z{?XT;oe51JJ$=sn+4=(SOOlgBG@0a$*-DC9sD;`oI#%Ayv0kltU-y6aYpzbk3Ixih z3Nd#4Kp@B3+UusFaHKYAC<0MRt$FZe9v}ITL>AsHw$2mHg4k;petcUW8_X7|@F4z3 z1CqQ_wLBg@^?E&aY{KIU!!L9{bas7tmkA$~i|(Qs5A6DK%e$fxW|K(r;3+QZv%%ft z*dZkdixbB?P>hx3zGbdtDxaYUG4RSs>;_jZbG5hEZ7$a}v57`*!Xq^vt3a6^HYzJw zq!`flWXFliO8zWK(g9G0q#%%QY0bk#uS>z*0&s)X3U<&YnklJ5=PR0QSy`5Sh0+OMBfWFq&>EYmEyz zZQwSw{@>RBZD{o7k=G4}xY+#Jq`>zN1)g}zN7LB7U)NA&eCUj==Zkg;jOvo3LYz)1JH^>#4Chn6P!M<&uIdvWgRm8*i4x0HO>@$ht5^ zVZE_eC&>~|z8V)+^3~|XD)63h$ z50fWh`6KZBs*KnpxcD3Z2v%2zM?{@hod-FqxeF3Qxl$)*T~Pdd>#A9eGYE9aHBKEx`g{6k;wo~8Og>Yl*~dkCJrs|5pigE zKETy;fu$9rHt}?w1L|q#w9<}?zO!t{ponx8d=ZQajF{B7K&;W=GXRn zEhgXGdRk&DXE`yKSG@`oHtxKhK{>?t1oibjpic8h(p_ zqxg|KdbXga;t?amh(?L~NmB*{rGWq@QhlY2u7zep-I6FAf+2}(#9AhTphWhlu8Avf zPO5_szcBot*L5wAeQ@l9D&)vT?lzO#oy+8O3Uk}=7~nQgSw|ii`yjr>^O)iUd+oqo z7Hw^|AXQd@|ANh6Sr?rEE})T4(-nZYmg!tJBav;9thdhY@(_%USA<`P^s(67!mKOC zx%-hnmuXwRE1_|*wgw1$Z~o$8sZEdicf3rSTxeKje6snAf@z_0n*azWNL&Xw(0%rm zNT5p{r?2-|;#4f_B{FuIyepcs_m3GNevAt*jyM-FbJpY|kq5@!e~k__O%epoo(wqc zsb_bqfZ9|G$%@(+!#&&48L2HbXqM?lD^%8M=M_rrob^}e&yM}9S)p8XHL#EIz}U|= zR_K97HNU2ndZ5SE>8%k^PXuZ@83{jf?%5lHTinJ=TGBl--TM}&zPV9THs0bMpntb5 z{;lC}txv$G#-3`9pB&?p+$;X}3qSSd@xRNZ>|WoZ$warAz0Lz;PaUZg@OWY8kwBCy zQ0SATSiy;9K|Rk8BJnxd)?U|>usweR{C?RH9-2)u7JhW**=v~B6Ak4P&OKzO^|8Bq z4-7$}wWy)!Y)-l6z_t&UtN7`#8gapY3)J&!D4@U5rCiw9JICH>Rz4R8|IWs{+WO{Z zp13jgPQNa_n8d7CMIufKimor3=v89tC7%b+=d2hG*oC$>o>Vw03D%+aJ@I!c-k~23 zbZ6)!mcu2?nRSyCB;ToO+-l%UHeA&I))lOmOd{*LrA#57E@lTHuqWHv>$YBE5#MR0 zY!fu(L?#lCCbE=bj%B3+GFZRKXf~Bef>07qgD1sD5k87$2$YP)Q{adu!k2FRSe4Vn z4H$s@V40KsoF++ongq;0(_mF#_(^f&kn<5VKZDVa#!gnhi>o?mCd%|&R8JjH7$tl z#HAEJwwtcsW^-F%4*~h^hkLf`q@on^(zujJ=w!WG|Kcx5-@OW$FLXiJ9os#&+jO0a z+^7}SVrHfee$UL5837NB?QTk`QA8M#pblVLud>B8wm~pQt$e@{M}9AY(511D-H3b; z7-ztMb#bQWfJX*uOX(#$4)nY0&(V!zH=2QRaaGO>@ed{qjd5q}#*=lj6(ww4O!Z=v zM+in5B`8UP@VO-@7M}6?Jh4Awt3Fh9^4zKws^t~pmWsgMEE418M?Q!}k)jb~u~<{r1H)W&7MH(fRp-WK6cT*D``;{l8u6@${c_Q`1wD{3hW_hzL$mlbCcl zc=jC=*@P{}GZEESZqkjQ`hR31o7VXMYqpe!uDk!*ckFy_M{4VR{IU5ncnVy6%d>Cf z(D90eHESGw$Pw|B^-~8Gjw>h@Hul2U3oTj&pLEwMcwp=WBM=BnMeW92@_)VI+0)40 zSu1-t5AfoD+0(mD6;F21sXSAO3Pp3|vv&uvAN%^)*IS0gC*6m|17lwo=e3;Uau@}$ z)3Bdb$=@@%m~u!tc|2)Gj>h{OsDWcWux#Trz|S@b-vF!KOU5PDvL*DG7pSvbUgtk` zSVE;Ry6AU#KhBymRZlt5Y!I_y-G>kwIo6DG-a8ZzxpNZTOp5b&9{zbhO3ID^HUawS zq52${;ih%v6JXjSun5E*r$jWVrCp5)S`*$#+cN#JK?3G<27*0Ch=3&EibaM?!UP)K zkw8m%L<_5-r$|86g8pIqYm?>(Lm>DXvzDi^NMeEj*I}MUjj^U_1yr|Rl$N19;R71G zEFsEnji_bF;{}10i9kmfX@r59aWG06msu5>u9OK0Fx{%nmscz#-%`1VZQMR&tQ%{g zlCva&hCXbcTSW!qNQ7ohbz~&e?Se^3)4&MR{yg-nFe2&t(i)Hti~=dMZQr#JeeuQw;XihNL{ytGnf!c3~26C#w2+{d*gWIyj4&0%bzab2m){JSJM zC?@N&9m;|AmT9cQzSn9-_DZj7_1rvC5@ya*{7d!fvNIw0a)91SR^!o?G8yS+d}l{{rWI|F2}1*3(cby%{f2niDJ-?@WM*P4nOZ8&%K{ydM#nZas^YBaLkoarmaAnDOH4n?HIhXYkXnat24IHYMh~AusdLQKsHT}T(ANcxGBq-7 zJF`nqkS*!2j1ztw)CMfBnYkHe(GZS(&QENx&(r(eO?h2v&H3-D>#P z$+AS_kCUx5X_czbVMI`h>7b6mu}?AG^(BA{=$mxK;-%6Ufnac8Nx&v*UpvF;C!e3< zeB-=hjmy!copGuH^c2DxBWGTmUx%lqHvKYDU=poDC>ev|US%OfBpCU`;-4U+Z*k*7A zLK{TG-@o)fK6?+^<7AWe=mohv(t8AZDo!4am=L@O_F$==a#c3M24c?V#y)5CNG`e? z)p=m-bLRqiKVI4d)b!vwOzOiSJ+BVS&d1;>6t!Ek2A)V+6m>bJCRFJ_Ps9Z25cb!k zSsmEF|H6d}Q_fPk2D5Q-eoYahy}wl5AB_>T)&UWr>oe_~_V2Ta*Ak>8=Fuz}QDcAUYJ9v5+!|lUU>>cFH^Ro7Q@b zrRy$FVP!$ubEe=>`w`k5M7_GZ-=YX63z=f95FzZQ5FJR#*tYh%SrG!ZaHF-Q@&7Yt z>1-Ho_6PovB5WI3tJA3p$3Bh1BbgfvD>OcHVNqTr$-oXe ze6d~-^%~*fO>Vsd$eq~Pds>zvHdtL>zvHRSR+#WLe=l^kP00Js!ylLx)EQ){vg|=w zjCev8>nOSG?Zr?gs6>yiw-U`NZYba)k3l+LS!hVt{@YM01hd@$1waWwXQ4=-ni!VZ z7$OkSMiotsDGMm){jFm_mg}J$a4QNuKaoA-=y(4A`9DxRu3|UIKR+Gkrlq_9DS0Wd#TE_e9 zEfq6&)K!4UlDo}+0{z80vKglGNdW1Hy9CoHlo$&PbIYuz&*}Av)MA%`$(&kS0RO;@?uhW$!7`hf#&#(Qwv{!sneC@c z02x9oK$deXVF|K5(!EK2jY^rj0e+(7^cOYc6)WK+yb%>ngJ6-o5K9=6lsv4W+;Jh~ z$KMwbt6in&uspoiz{6xI6p(bDt{FF1p#m=AN`+-4yusKXWcJ0%%%ldklxWYBs-jMX z9+U)b*%%I1RZcn5m+-tvl$?IIQdpprhiJESSw4|RbyGEV|GN86y3b@axV3!1zAMUf z=}H7(i;*bPR=&LAQrvdM3|xJ8ZFVA`(_(7%pL zGZr25Ue12CM@#)HGXJGq3}AYZDao2%p2yv5jNweEHdL3=z0xC&EeB($n6{8tg66IX zY(WBw<`JDKuY=J>=VU%=9CWKP3h4{e1QT>zvC^uE4L)kYa`P3!AxUNvgajW@r~?gTVwC$WiHHa zlNS?0ENu5QB9T2%^jq*jsbM5FW28McC8HN6h@B6&iFIY27GmkE?9)n0v26-UuYG8i z?8JG~AqiHK8q9CSj#+ah@(n+TmjYX<3-_kKhv8^q)7F(#TdkvIEYEQw6t$}+K0*k= z3WRW)S1SGoJ&^1k$H5{}kqDD&DHIoz7`-48?0Z$YXlUG>nw!!=>X3!UtUBmMi_QWx zHg_N3HLTPcAA8LS2CV?{>bEU*e9;?j)IrG?rbs3Op(f|Lm*g}i=0v4psFiX~3G?p$*Jc1ukB^6*!u^BS~%bXrm zs?zg()mc$iI$vjU=ZHLET35)sh5tE=vVxSjI(?#M%!B7Er>rl5%b3NGK;0+dtjec_ z@3UZhvdJ^5O_0;JXe3lwOxhhO26;p+)#X*bFOR}PCFKoZU0FyD3l)yPM8=HxO+>$x zGe!l*8gnGROI4S=SRJIEiK2g*G!)&@t=w6y_tDEwg_xM--7YfEzs~x)8={ zf%nukWQ_7u<-~%nkxPY&!XaxpG~s^px+EPdbYe+gEK^ZzPGyfkuU2W@jIbfadkR$v z$YcPG=Q-1jPEayQz08e7U>;XFNCWR#q!u11mC#zsU(i@7#ocD$3$IAwJUO z&4EfCj>{JYELV z;>>pndfahbdbJYa~8@> z%sGKJs5xA{$yr&E--O1?uS0yhQVQ$gQY`~5!C>ZSLIijYOuJ%&x`H=n9B({OveJ$> zZm6LQmb1iCD(@D=KBi7YC@d3-{JX+gCqjVG46Vlz2RRl_f=-08L_L`0D$SZ>j&R+m zzeKTksnx^2!cpo-Q-__!1!n3&8y^w{d~-4y$G(S9DGl4@WWP6Go|`wKidXEzl9)q? z2pY~mqma57&^I$@syX(BWF`ik`SV7A~H!;Qln9OM8L(&+D3Bl zRdiVys$5z5%LrObWDRSZ1o(_UpnQ=NdQLpnh;s^j#?X=KpxhbaYq0grt^xfdVo}h3 z)rcP8L1RZ==GjxoE|v3yE4)b#{t8wEY|2)m(&Han{z9W68IB4ByuG~0LQ(pgvdvX! zPU^(6n7fTgrW+R7vsPI~iuavB4S)aoYx(5}IXGNUI_CYI%nPj9LB3?z58GZIJrQ7#@WVOXprL3c z#;!ae5!|?yL-%vMz`xG0|FNL5hlJtKQjh@hx7hFHfUs;&vYLeXur-W5J0x}*k>Fu* zK50ad&x^d+u*VoX4T8HL;v?ZCR(m|P1|=Mc?+9AW1IGT=p7DD5sA0f27AnI~u_b=uj+nDpo;S85^Q`G= zgYx1;;8Z8~64jhXMD!5ABzp?6eyf%9Y!`8jQYmHO0zK9!4Wt4z306cwlLh%U?D`{O$E7ce)v3j6u;Q~ZqOnG0 zYP}G!hWWq>9G)ypWETOi66h||PxK!?*`_^;Xoe_TRi%+-?#Hj1btxQE^m%z#v(Z;P zsZ-XXCmRMfxXQjj_htzqtJRfJS~u5QaeRqFZ8~dn zBEAtrOomXHFFeTXRL*hT#bTSOVKTB3uUKXBE|Lm@tWnZMkygWG&rbMO^a)@F<1#Qj8kU4>_;5=b<@bq&z8`$$kST0pD zqf^tzD&TBh_id&Qat&<*my#g8OS|xA@gj%lCJnI|q;)Uwn@3dMk-4rR z3$YlWy)Q<|3W5Gkafy^Asl8E>P|c%axRh^5_@-t1a1^(i7mi{F0>I}ALo*&X_ieZU z)JVQq5z`6`2uC1NGM)vD3>Yz(YQsbGu2UB?JIxzgoEY6Llf=xUNslV8sw-HmTT7VI z>?*SMDzkviB&_3l?r%@8!?4odM+~dixa}ar%3K!1Iy;XhJ790&xsHrV_7G|_%9R9v z+ap*MPRh9enJmHgMn^IW0>d?3V>5{sr2Eg0AeO)8ICW8|3q5-^}rod{v*LCW%oE!?hXFGE9vjHbN)5q>Yh z5)}RsnI)*wt3V+P2|K;o=&YezcP!FGf!%^>LXK@xl(TIkMuYOCI4livh}({wTt*Ls zliq8$EgAD>XOmr8b~T_@Hlkm*h`?A7JcLn+b5jU34Oc+hZ)wjvM9w%GgKO^|$0%F0 z$RRWVp_oMGivjzNK4Zr9jIeSZsHqoVk&Nk?J+S24mbvqFYqRl~x6m(|jKy_r*n3uC zRYh2oV-=@;naP|Wo>Hr)2wn+tuVsvIelhTC{D>V&VEwh72S7a<71)ms32>%h-lXSC z4mh(}VRp4{5VO(Xt+37l84`GTi)(}=2SR4}ObG7TpM-mxupRl-pJD%q=)@e?=O61Z z$IL%b=Gb)pi5aF3H>8%}=w{13i7g#bMpipk0G}iEX2A_Cr3YnKnZ?p+GJ4G;xpHPM zuA~=%mp6n>eSxQ%iDV&4v&~Vn5~?3h)GR)pAq3EK-mo_jA;?~0Z=%-_T5(7`CE}*X zbSqnzmeC2($jVaD^k!**+DZ0_EoTn5Qb8XDMc1)$eOEb@Uzv> znabiC!ZNl^^9tciD*D>9!!vhjSd@fjL0V;g^8z%BAWDH)ggpHpN-f12@S_cGE@^_#y;;=+x5uVRq(TPYr1uKC3LN9d2 zIm6aHv$q=F=wn{Z!KyNPmQjzH$l)XWUk9eDwDfHef`l5TW=~}`qYnt}$I*@np~23L ziP@LA<%A|`1tcSV8&&jFh znX_y4hlF&?R^pTy6X~9Vq>Y)&L180=Le@t=cqk9zUebcp-2sX3zD? z#OpZZkmt8d}iHw?rg*aJrMfiAnUO6 z><=J2hb`MQC&UDeK`A@xE;%$s#PQ;Jwx_TPneKH_wv{Kzsy`*WuLzGR6D8IldEYdyd#T zO_=UEnysEF>7xs^yY@>XQjRdR{~pS&Se(DR%1d*hTD5TZz71i+y+o^$69Km?k}rZw zu6(wIFD8Hm^VnisD-?z9trI@H8oD3J>%8Q^Oc(<>t)%7n$HWWDfyADP@lDFw%!}&C zQIC^x*+>*rtrb(994ll=qvQJ{@$fM(dnj(+aV&OD%TVH(z)%$KKJ-S3Rz?O}!4qoS zGW0%bMj==Y!BLz+1VhlaBQSt(fGQownR-S?^2XT#i~@kKQZZd}5|Gmrq3SjYMzsH) z(0vuDrMVos4>!`X`%q&jG2-!qLqJLrfIJoIi2A48rbIvKB;>1=1;j;JdY&3$@bJuc znnxxGk^U#WF6X9oFNMG+FX(Z5K(M%2?uTE0dYWKHB*C+Uy-KRRx5_&&c3p3iz-jO! zkwu8dK2S(4^jg*-rqfc11Fab6OW z1=eX5rw8rWFyzeTZnYg zY(RaRb?lmumbgo2_qQ$)3HA_!{DMj(hLub{izDuENPL( z)n!ZCj$)h12U<2)Q>0Np04gP8r0P!Uvr>x;K8Nb%J8i?^?PRwsp|F^Z$GH4)aD!D`=7XSZ+p)D`$ERWngy#4AgUiIJ)k`dsa?N}at z=-CzE`1kL|Zg6Pp)@GgZoi~qOyt-$@K_-Y%OP)p0v8>(?F@XH(x|W05*k6tPl~E|U z=x#dTfw8~BROgomJVzvF6FjXJC{fs>%MZp$C1Tm4Qz{fPrL;4EV4U{$y4nQdZDrd@ zt^f)70Fi>~ue9)?p+-S4#1+M-6-!L54Qkh|>*rJXH5ZKe+GE9QK&EWk{>w*^=v2geL>>%Zdh4%Ui$&w4t(ujjcD7#~ z%6a>i-WOkzd}C8%DNr|S)+sxcJ4q1)gb8quYAy zjo8B2^7)RNb61a4G8IoHGfD3spmnJo?*FMbCb03O;)!U& z`zIE@bm-$nsC^<(qYP^A-nw<`kbCD)Kh%zRl{W&^KH`+A9-t!g%o2$@&1K0pELFd! zxTmPQUoO0=<4vXN<;I@kiGE7eFP|?vg5Kcu?PQrC%eor3v)L(@Vmgt5jU?ik454lj z3fHGH@kBBn!$QVt731m@>ok^(rn8x3DjH?UUi?s)Pap6->w)-AF*i-0-YKcyOBaNOJ z!!w=%t?7~pKXKp3cX5Io+WjgGPij6v-u6o-;Mx1O#!Cz~<#@In=0st4nIJ z{x+}y@siICcZ*Znvulqjoh27t?dkHso?X+5WxG;-{@;VP@ch3EJ^#$=^UnZOS(w@!rgieMU%Gu`+^p5qo_$G}yPipMk0KO>pET-EBJ{D2lkApJ)h25K9+ zq$X^%M+vt$Mku!64Sw{1aulec2Z1I%Z-0xl;=*nkVUW zMUZ_IZJ*F!uPuo;AXyO1E1_yj9Fxa${2IMf{xHbn&VG)CUXI4Gh~`l@7Q0=1h^BxUatYU;mtc!O+K2WapI3vuP|#$ zqIw7*XHY^{gTF>iAx%8t%1x$)a97Au zZrF3fEb)iL?b#YRd-$Yl=%YNa=Z14+0GlcznxWt>E4$EiwMK%nVE>7PAdW9`)w~<_ zVYrSU2Ki~$;ze%Yj+?ZKT6+cLcJ^|>gd-xPfZXL}J{VTwaTNT~;)650e1R_n;~4wo zAEyyDU9C_-?|@@;8RGw& zKbsWTq`)QxHYxA}PJ#D~{MxzOhL$c~zx#Gyv-7PpLmzx&9|nUI>64=DqE9H8snqbG zbOM;7^C7CPj3*?t2W6LJ%+)(V7FxsJGCN-eWeHH+%JQVv@FBNX6~HRD0W+B-RTG2a z@2zW4-1FOee%t88T;#T!*}CE2KbSh&#%#l#J->Yd$x9JQ6mUURF)bw~GL}gO5Jg%A zbFCyP04gXo27QGnB@ZU)=u)0?Luvs*6i_TXMHJc}GsP3NdMk(I+C@!$ZoJ;Y=aC~@ zDfwV}gq#)0cqIv0BO&#siSCk!G7xJdr?yh^rJ26#DWxKbVk|>!Niknc48nrj)?POY zZY-MgqPi}(=b1<{QW}Wu+4MZnUQ5rT$w00+xBM2Ud8O$_RmnHreo)PjlPf;}4X^I-EBM5wI za}XlhLKXp*)@aKXZfpd6qL?VZAufEWVb-!eX$to1+$w(N zNL?qO?ot&+p3+v#XWsW4EZ*lM94F^VwUncZH=R6ndo&u!7CZDEW65b#R8O+_rSe?c zqG+kR=NkS}+YfC^<;AI$`IUp^;@!zO=Kp>7oTfzfd6~UNr}|FgPeqFHjFTxA^SHs@ zx-z%#p8gX%S)!)WE{n9Sy{??05l!sv{h3AAmh?+c#o~!bB9=^2J`um&M3mB&nOHWR zN!uHliFA4@ol0ht=|m!xiDVL4_5W`j`q0ppzu=#Lx<8i=eR3G<;ogpQGB0i0a(9o; z>~tiNwgT(PdbR$=Uy#)b-UjKW?(hr4-(6Scy!r8)A6J=EE^@<0)XYU6R+1h3`;z{s z=qV4}{J8LIMgOAo0-%PlHS@cKt)?U}BjmAq5V5v|H>caVdUXMSCm(82*#h{4MNU|R zQF2+unq=V~P z#Od9*a>zGtcIf=CyGCEzBN0~>Y`i@u>r^z`Az2Siqq2uJG;#-HVHIQiB z;olm5VSTDzck^|Is$Aq=X{eY>7^>#3`P(o2)SJiu&QO&HZoaPJ5ZC$%-X_@aP_mUg zTNvk&vfKX6<{aKo)JyT1^eVM;kYStyNbNw#1=n$plOLr|JFCc%c2lIZZprSjX{Vm}nK6yedoo#D1bINPPeJP(}MHK`4V!hA%I=5r^G96e1L ziWB_7ta4z>d4`o@M(&RP74p_Je9rHcOhh*gmSEQ<8JaWDI4Nb!V|kH*|grZ5PDR?=;4uWc0taBqMcxNL?r zU0KRw{uLh520+xt%$kKT@2Goi`%-Ow&}Un0Rl=VdJa3~fdPnbuZ}682Zy>j~|2GI1 ziSxyKy)Cp+*Ss@KzL@CeiyqbFi^+bz=*bFwf6FwJ!B94$h9{wI_=?~} zrTcn?HwqbkCN$ee=YrqN>Niz6RQ$il1gXc@qQG9W?JGmq-mv4F+yBkz{Kyo4Z2oLg zV3PvhR}^?6|EYgLu@Tpvo_Ra=>Li$X$yehM zOTLV$8c4Yw0j=_w01=b!R-h?w6x>&*?CN|t*mq(j?K9kNSQUjw+u)S`y ziN+Nk($DHikRy@E#&86r6XZ%{$TNw@rZSl{2@=^vJe7)O@gIQKm`z47na5&yP-4+& z_)_XqVJygRY;c(^!$Vs%M`H4gB$^EOXhDX_cxHH?$DE~9Jl4~DQJdT~O5$SH7Qvh% ze9f%pbHkt8fYm&6%QJ@6a50?A7#_1#CixaVx#bz3xn!b~ETO2e)35)2Qy|Q^SzwNY z9mM_r2!D>Jrs9yy|Bt{*?7e|!QqffS(*Ec6K)Hhr$_@J|I=2t?o{g7gX4=zB&QU34 z&Vg1-{buLfvgejPhFDzWl6xfe>HSUFIr79Ud-};U3G~LeBJe?E5;4|OEESI?Gl>cC zYBR(oWU`5LJe5h{p@_!PQ;JDRXo~*C!v^&9a-U@2 zYf+F%LX+>qd8=Lv@^gq(I#&UXU7*#g@Jd~A)C6$mmfhj641Z;V1^2RBUS?>>MeYuJ zwq@*9l5(aG8wW7ndHXJzt_4;qapzi4@DIKO21M?)E>B1>?i)4^2(lK&1GSR7IG!@Ur6Ny-gTdDA4Z~f#5lGJTY zuEs4m%eKL z6ZDmPT;P#t?;)}heql}@$+;`n9FCsDBzRF%f}l;QxmsSRQl4U5eYl$It_*dVlCq1# zpBw%U>pIVG{rs(;H$&v&;6HvGky}6C;x)elA(n`dQYl`H5dh;3LWpf^ zuj@|DCOlKGk;PI87JNEJ_3U^unT-ps9^zS?$jS`)zsYnemdZ?IBP{t?IvQnPBqFJF zI(+f;ufLHs`l<$l7a`U%_@OOW^H*0SKCC6SsNsGzfQo650DZCIn3nLB!)u-zFr<4C zO!E8d&fMM?_P(GqCl{l+yYAPiGmKq6+WUg;XwB1M^<>NeVE&y*M##ty{A3U=W550& zM}9DMnIqqfD1PyWdJgP>H`v@|yY23;OYx-2@|qEWn@{=|hF|D@((nD&-fx*y&;I%t>tMRE4n{qZ9OgGV+v_@Dp?Sx=)Zj zTYq7^Z}0mI#kjcf;9r|5mv8UogT3!lKA(h%ds4FehGB{Dj4T+LLTY~1rv(e(RU-a1 zf_zkJ9vZqh+xuEb#*EZVvk`%%t<bK^tbKK_v#byVEnThuH{i#$Bhh(qOsm1lJ7S1AUHqgU$}H$5T6kHsHq zYedP3Yik_?xr!QJa;5B(PJMz>QgQ4#u}Jud#ZTV>k=zD%Z@^Ow{p57d$*5@07M>z> z7XPxO2zKP{ZK)21yZ`3!Z>>+mJNDjTmI4=7-FWc-HB?l#zL$^o-of6mQJo@rNJu5+ zZaqU3VuKLR$Z}fln#dbJiaMIj+K|(1HbtuRDTtDcp$sSE)WsEn#zMB*xc?IMB{hau zq#p5rR;(l_Ifqs2*C*7}vp*pQk>Fw9M>5C-DHzU6(;5gQI=A=IguFBpzI^F1#T2+D zCz?+?gNfB{Yp>gx)W!WM!~|Oe0*5u+Pl_cw=gEuJy1*(znTnuH~1fzwDv!$0GQza$E95z!)4nlqHb5On0m1!LqDw&24M4Te8gyhMcN8)m>I~RlBN7aytxe zNtO*L7!s0|xi|ffp_>xtAnf2v#No;f4erUTWmu9AwIsoUk&=~LhN&NuFFkN@54Srf}R%K4t+tyYY#`s~P;RwO((efuT@|0@@h zHz}?DvB}K0RgEzjFxm_yLsHhmXFpI$#F~pXThbhg97bZc#fDd%X;0d;$M;4JS#l!0 z8kA6}ne$E|W}RNj8H5~Mt$^G^Q;@iA9REu`?|+YanRjRO-MddHu{$OP2vy0i&;Zk4 zyk%V+{tiv>Uf^!>`_#YRNf4eD>gt7faFAjq5EF(=K^jMcGbe5>5T~?Dk>i>&&%_*< zFf%5Pgxwr5ph}4iA}g#|nX`n+Z^#gBjuI`dI{J=rG;9kTM`$5r2E}7W^b+|B!A8Jm zc;BdtqWQw{?QxshZiR1o4|GIQg81L#tF8Gp{sy$Zr*G|rl}W`CF|dX#+n!h`Uv@-5 zTYW7wNC{>q>gmuRcf>}SY|^3zXBLX(lPr(IL@=I;ghNJGkQ~dT#*#_3|8ER@Cve@^ zwJ+It!<9FTOkMG&4c5>{0R+fC(TeqY!X61pKHD zLR8jyxza`nmGZx*?Ko(nj=l70_rIt3(E_=m6g;A=jp`%Nw;Um<3NpZ&QTm8X+CuleBWc!%zrO>fai5NPIoP)J}C_0-H< zU|=SEF`5edKB48Q-`}T-I8RmKN#WxtV8(l7iZhtMj3O>5`WK7*zCtM_08%mb-ZHYh zBD4GIeXri9BOw4Y1ZwrAbC z5yRT+@j29cCp>kF_CmXmwXlL)wULjH{OQU)xboFk&g6(XsVrc@8CAJ55*0@iA%dY- z^Y!EnqY_CKnoK>ejoS5(qKNs<6Q-9GxKcZn4x|0%e-`cXn?C&zi`J(alTJBGq&`fq z=}gp_8lyw%WO|jka&=>$9r@!GJG%LW%`fOw$wfCSt9-xt1+y>{EJL5JOmzFviG)vk z3Kt~7Bfy(Be$t`0o%-}7{l8JbbBz*BR;JVccfY3RqmjHbPNW?6QmZ6g%@PV-ERFov zE*XP1KeyQ^_T^&aRj%qso|ZeCpX;ACMk992O67B@JUjF9J#&(6^>w3-KJOC`tnVnH zb2(h<4H~~<5;h68`ErxOXJ(*blZ(NOeD$^Tpo#nN?J&0o?Q<5D3?uHGX#z!=GeajK`@q5o zyYk9U$GfpBy*k~b(~i@Pq@r@&NDo^%8-VM6*_F*7+x#&@`MH?9*{~}&>FFh3ZT{Hm z?27wl?JX9xWIEFLuaox?zEgba+8dd}6s29(WK+i`#ki^C!9O-5> z5NdC%1fLrD{gn^J_ilc#85%AoU!});U~*K=5I4n6xjS;HJlp!KYATE^8Xb> zO!IVfv2Qp`*QWtS(#7gkjp`pT^+?nlB_GS-ALta1m|wwa~bxV>TM`%>S3# zaw`^355`DjTJEc_Ys#&usJUYlL$jVP{|8 z+xxzD+?M><#FwzIpV|71QuVD|OuodJTqa}BDOK9_PhvfP?3+r}rNGu_E@L~}*?c~g zNexC}!qRH0ulodD=61Go87mEV{~*{!*%VFnb#3|OZf84BMu+5JaO4>S$xmnpst!F zCvm|g?Bow_HJY}qTy%9qlmc5n=;n5g;BtE!GoEqxbUXwwjEOiIWfRDr0iEnF` zv5vjzAD*6`9yhNLk2zA- zpmfB{fDh5A;J0fOoC!U9fPCknj!iRzLx6`r2*ISS@x?AAI+raKXtTu+l%nXr{Fw$6Gg z;imYZ{gq0dd^Es8(VP=y9O-pO(G2y(s!3!Z=>f?2u)~{J*>+OgnBDWP?9Mi`f)aeF zPXeM}#3OTakB=yMYMh(;k-Eb=* zjSc}7c^tV=BP;BmEWc(omT6R@I*7;AB3|wieVC)`1<9VULL>L{oh~c^LOTp4!NO%6 zIP8uKNY%6%e_)F^IYuYKO%XAnGrOJ_U&l9g*ouUs^&TOFN!M|!AqJ_Tu4p!>`c0|L z3u|?=Zhourhuq4=;6KUmM_d|Vd+}I|5WX}aeF*%b{DuigC&)e%!->?y|8E$&B`|c$RiD^& zc*Fl#|2LgQ-+!NXpFH{*iFe#C3#=`P-a8)Jc(QlFz{EQm6M0JxJ&&??&7!yU*{vq5 zQ7*b0$tke)*-I1HEZd6ZqS--&@2aTTRA0-1J6Q4FDv%T{ml%Y?+_cx* zVlrRAQZxX=jK~8`^>u6cWy=FuVl5H{dtj@jslIM4_sIi#fDnoiC%v1>_kmxUH0x_7^wiAf zuDvBtanm!R@My$wgBCHgJlrE;BbT1z4dvs!IzTZrADF*2@>|` zdue=*P*@yY?m;>giGy5X!aw)!`?T%gwu6SWa54E(Riz%hVb?zyC95h`rO38}1oGsA z`>lGpd*as~i(z{0+$-Ib1CW4g8D1*FtpE7o-sNWr@p2Viq(HRr9Ul+ghwD*r`av08B6|p1L8KkI zIP%3Kq;1K$e)UeSfNj@ryWR{c7rVY;goW$mQTYbI1ABb2GOp3(jxenF&5m+t6Yd|0 zcrs^2M{1L^j9v9GGbbqnCsN z3%S{vNlsu_7q_Rw7#PA)Oc5Xs?c7|h82#GjySBLBC>(uD%Y%{e#5ma6PLriIJv9?^ zhU7IRQO#+B3T7p8!fEf31A96*w>(SkLBhmP@NLi0;!>q@vc9k#O9}8Cv2mE3?a6q1 z3WY7c0?j>We)FaFB#x@c>5575;q|1~kq7agXx0d+Pg+Ob{ieCy`WnW)mq91PrxQSO zIctMZ{S3SYa?wu`cnyjX>g;#w45NTaTJXkN-_7ZI4+pz1X3Ar zX;PV3Bn;j~I_lv6jSSrp*!15<-n`*&H@s?ndiXehuKlb!0_Se{@)frRDo4dfumMk_ zhh1PfbLP!`oOa;in$ynppr0X@6f_!W+1=s{9!cZgPsYZuo^=Ir4YxRR@DgF|8;!S^*KJ8JrHO74X=mBpFD_*YdvA z5Q$_K#EPgDjV5ygapr5QuN#*L!7#yydM+nmgU~`^(m+|y_QGX`7;6}wR5T8vjC_To zP*hThr${6Yz6=Niq2(X_LKzWLfr}a;*k)z);ny62+j5{IOgMf^PeJshV=}9G7lf#>KF1-JXo0OBi zodUO)OuumPi)lo{*(<(Kyg5+GbnMsJp`HVw=vcz9)okgP(yGQ%?9!d$?M2faE+(&Z z0#2jPX?J%0gLtan@|&hR6u7PNpnLrBziMsHO|y z+QI90ZCh?pZ7yp=x$urbU&Q01ZVmFrMu}p%;MD9d?R%fQ#ivV9 z5Xrnsq`l;55I9zQp2mWnrE!x`m5kI4C?MlN_zWrUaBa|rxUubYcsdXEunw!dl?)+L883?JRU`Vc-<^@j=Of8NCWpxc z-;c|;_O#d6v85a zIh>CL5&Zv+>;5)y?H^t9vsb@q)5OO0BcEIUx5NLFTWddSBk*r=1kMD$2U;G+PbBgV z;(5=w!Vz#~jk`C3oeS-FUXyKm5KZcqF zkh!kwoyfJgwzPqrxnaz|*CmX3$8$SO%&S~XzQU}#$@Fd#K>ppuru>>xV8?TYwL=-> zb19Tq-gp9^{)R7NdBDRi!x&>aAKYCj z6;HvKf&JHtviSO@q&C_&2S{}?7EOXJl#E0&Z0zs^ zy2fzay^o?wus~5wCR4F^G80RuLuVp?QD$GCX!33mli<3*J()h7lX;m3H{tV$+*^k^ zBgcgWE0wE&K~}Yk)fUM4&y9SpyIwl_-RO5!?2!x4Jy}+?+=zbnK_85#-zk|8WARPy z+y)&qa{FRZ2_r3<-;jgIM1$;c#W03ReM)`<5&@gvsnD6Ne}PALWxCU#jrZY3DudR+ zrQ1nSVjS#e?7oNVucLo$hKq~l;o?U0uU8u`pc}CycyBkWi~J8^>|?P+I+a4pEbiHI zY=p%UfgPHYP1K;|f5-qSjSV`A!&NF4I(PRAVMyoAGEyzL2;+e#rhCUmXF;P|cMzU6 zJXq%6bAppzB` z_*u40P2uXNO7^1&%iz>jD<><3C9;uUvXX_sH6Smeb|R6>4uV>>)z_6;#k`2d8+AcR zAWj1G;BbbFA|w#e#M4f`2b1O@HI|OzqX&`Agvlp@V?*f7jbGW$zKb>OI}=H9_!a%^ zyGSzAfEn@JMW)G!-Lly}JM!7?v}yd;$A4WHmt1(8ZSo4kjma97FUEg;dX-(L@79q? zV3lu*dw`JR$l=i_C>6UeOmw1;ZAnE#XC}V#S_a4Gq6e2^Qmxz@>vM1#IMv?Z?1w6# z!#q@HbrW<{G$}8<4fvUn&#W>~zdHV_W}vv3Oc)!)tA}-jxHJB%_Y+;xosfG?xcF<* zhKs*ZbioKF$PL=~5leP>0#DP%55!4wVfb&6oF?++8Y8x^!*bGSfS#R?ICeWMrxWA= zMbUi3@ENM)^M>n>M*e7(;i`?-%y4nhaOw;gu3krtFUD)Fv@5ZKnYFnwW}&4fVsUcy zByfYxMBZ4Y= z_yPW@;?1)82)?3KKyJ(95_(!d`(NIyM=n5jw!&JEd}ZV--Ot>Ee|^vhPIA%J#YGAn z{ObdDb)KL`%((FDh#wNcTnKh($$l~n1kpI4?8?=v*svx2cWq823OUJr(9{#beTd4z z1&qXGC_w%=O*(^0^(02^1t+7oE1JoZQpi;7sWGM)joo$?>$58=?B&kkdYKG3?w$SI znOUqaE&}|#=-xcQ&3mkBsaCDec@d#^bMv4@d~tQw@C<~6M3Dt0SVkO~LTB$={_!i2 z@LtnVId*neAIdS%yc}WJryP@By85s$k9>1QA#eZr{pVNEhsjqR^en^uw*<3E`B_ZIXjjg0KRj3ecc2tpIu%j3@`jxnhXUA^BX=GFMRJ$z1iVb z==?Ry%ZJ#yTRQ4{-}aiGu{QB=bHbi{rf->4c4?)IlJhHFa1AG)pL|}KV7cgO@74m( z@6j#Ma3Gn(;%5?57+(u-lelZX@5xPM^YK(7p2&r*_&^M@ZS{4VT!N=uZ$qyKjy^yg zW+V@X;?tY-4-%4XGDbk6Kpq}dd~+Fmtl8K#`FEyNIYrhRsF;u^O)VD87H7pU$bxec%n3tfmNCk+faFL}8;%x_pawvaPR>cTP2X zro>2)4xJxfUcP(99r4ry8+%OyB|D<&FcT|C^N#rTiezr`4=4Z7>~@`z{dG2 z{*U$larpgQuKlcyz`vLgSbod$N5}%avbDZftsXjOj(8^>Yj4*2&yW1q6)E?FFL}`9 z{FMvWD(hM6|IwGMOA0*r64{jPS&!TAfH>NcEID-MiscXAzz|p>cR3CV4TE(bMm^c| zCT5-BGL3=rqWprR4`3~xs@BUpf^qCcqS=%jr7CkZ!vDV1g=N40hWl^OvrH~raqEXC zhs;pOi6~#(e}j^zIQni9L6h?}nT%$l5rHc~QI7Q>5k)hZ0X`NLFL&Y+hX$=mh0&si z&c1c|{Wmcb2Ra4aJaq1wp7~fJSu;(s6{BcWL8MmYu84ipi&kk#dtc;A8QWFF&3k|T z-k;b0%Z1zj$;@-QmE7=s_1};J_x?P_TLyZnIiazh8F;7a>QZVLEu(a@v!iVL??>;Jt}oG zUwGo>LxzbgqWl)LZikDM5#k^RVu0!;_mHGy(qK&SVGg@zxx9xkOHrHC5`6_(kpy)( zII4_o#+ci}h-;-fz7G1Qmcv5EJEW+rmuQsbAfWrvROpH1@-Mv}5%m!#nbrvfFL1J5 z2F|~%_bl{LfN{LYjAP=8j(EJURD8?=DxPxf+L|qG#1X|`zpaNKRlEG?^$PPLk zvYcR@Q)=YYso7n{pO>Y$$Xaw48t>W)@DTB@Iy;W*zb|)3-wv^Mu8_}#Bl$Q)U;sQ5 zPV_DHb>*3&4G2nCz;XWVlspM6rO*{hy^z9*vy2HjB`z$J5M-tHTS(>vS|(E&+&7Ym za6A_J@oSfV{wm1VJ`uxPG-#=NfBL%KV~Uun=1i?qB_N?l8Y44&0FP`dZ%m(V0M4q~ zvLja=xk|~GTy!O0QsBr{Cywl!*>f~#(hMEMGee|Hw-sZ-19n-~da;0?E^_NsDQhh~ zcJbHBz!kIRM1WNsGuEPbsM`P+LVDR1LU)|dY}`y1t7KCx6N+fub`RE3&=vFK!Zv?9 zZ5Zv?mXOdK1ST?m`d-1VL4_!zq%ASd?zLdY8iF%e`~XWdiMTQ33-T5Y@WnFz=wufy zmZ%>W9O6|_6-w%Kd8H{WyG;8cJIf-4x1E#og}@lpiV$jN>nfSW&5NClK(2eUy`m+y zy?E-|IYdA9ptVACrEbp^LE7X_hn@^%fyd9^Ob3lx#PMCu6&&jAM}s7Qhd3#jc2*A= z)5>|Ma;<2MnX$rA0+j;9hg`?A_*<3GdNLdu3N6p_4IQ1A;q~fgJjj7Tc#W&(tfIXY zMJE$L6svma-&YZ}t32YJzzn*q8V0d!R35wv-!{-K^UlDFHnm!pnsjVX!lL=mR`6Wa z&O&W9#z*F1zL+16#28-jxi!+b2km)MaUZU*i6FR;SHSH`<5P1a z8g^;sK1w(`VQ+{|&jCMRUPXHxWw3vsPcs@dZ{Qd$Xr>uwfCvaa-~=hT_APHDcy>N!lj3G}W8goLz*LIs!?+Q+(C3eG8w;>(4( zVyPnOvstbvp7F8ay#Iicf{shTWb^&uoqoFos_fRlNur-J`I+o6;{6DnezXkZL{j80^+6b(T zz}g7>8y$i7T(|s@H{Bel)ouo|WV-@J4WURfz!cj)kn2JGupg}uTwN4!4#$6YW==%X z$i;>q-u3rpN>mt@TMxde=}k?4@J1&?Cvk_B1qqQAalx?qA`ihyjLNYt zXv)Gl=&cY^$D+qQyBdtXEsDu-I3Kn%q(})D1_DLeR$o_%HtgY-xaiIOisYsPRyLVS zSc3sekOA@6*R2CSd$%_Qjz~T&UfRh_&@8y42wx?@*$6~XIU#7Kw`n1mTjGu(u=jAu ztjwD5OrnFSAizmDffvCqD+0BfFj8o85d0>B4~YDct7F8cTn6aFVd@DRD3-BaSsqp8-Oqb;ut7YGaRH#xV znmf7n@yN1XiHfbz5|W=wa5T%-&mWTbkpi>A-aCvoe7nj>W%96BK@u0?OQ09>6Ha3t zS#(~8M4FSWXyyTtTxC$47J$hx=L(_{Xe1*c8phfJtgRGeP#R;!S5+J4712bPRB4J{ zaDNdVntzPwi7+DXkiFN4u61Voxbt%PRz+1uPr#e!t+Fe+<6t9Da3XIwQgp#kpT)Uq zr9L|cLPHQ4WU*3RqQlH2Z+7S2n-zV7vg4#=(hjTG&+t}go-o;69;uWO93n~coY4kE zlH*c~X?d-Pkd0)3-l8C}`b?qp*^DcCS6VKjg$O?cG9j5TGj89Vsb4u^Jt8_v*ddM1CoY6OVdr++A~b@B<qa~YZF1cm2($;l;RB~Get;2RIDm2--CtUg-K_}n13c{_sk9wU<#L0_ z(IJOVbA7$`_r7{@e$gH$`7bIS_Sh)u08w_qScuMt*nJ@}t!K(5O)#-g>A0OQLM;zH)@HW*%E;GY_E5WF=X0%G!YRtxod1dZPpAwc7n47124*t-xL)k~ ze@#TTN+ePs{}a6o#ufkrDZA0A#idrss$@)a&e2XT58$L=4Fo7l%I*`) z8$evyxESGtM-+BRzA?I5(<%9S3Zrg2+caH&Q(sU(vyHp^I+bFl@)a{ zrF})C@;7`3DQ~R2(LBTSqd8SmI0#0t^o&pr8cLKP{ht>$QnF;3x7HUV^iylKaycxu z4UP>Bycjw#pP-60I(2EA10B3V7e#sQu-Wtv=GSMs*Tq80c35d9AV2Zq<3D@nb{X`$ zG+S$gG=(6xdg*Efgc9WKXcUZB=fA{QItEasS0s`Sy=TkvZy&!UP+Pun0K$G;@_mZy z%qqfu0@3>c0H}mxzMoyRyNZN1272fMyd)L_mH*Sd$p3Hn!W+JzdrvM}2CjYO=|5f5ahyuGD1y8fQe%GDF`PpEt zn%lW~)$m8nsao4E`Z`OL61DCBO!9vckF|JYEM?^XD~EOkhIU=|(rYtU{fA9o+4Rzp zkqv)2Kr!&&a#e5Jvit{IMZ_KPiMXCkE%44)^qxu!5!Z=|P5dvDa6gzg*@^R9Ol~q0 z_0nB_?{)bm|G_oU7S|dD0}`XinrJJ|Sg!PbX`-!1fgMWhAkkuEQ&R8Z#5gaGua+8%V3+7nnjb~hayxW7LB`+3x8iNoWH2uXygw3L=))aiM z)niLEK4=yau7$?<9^?0$CjCS*98JaKUm_=f7y?d+aO+ei&c8_s^CFnrd@ui!_3%~8 zU%eI2V?V~(h->=qCu=o{e=-i7kiotlMV<3HTjEhsNEtM2t2U>KHnc3{CZ4lLzB=;N zJ+8t-bxo}vzvWxYx2m`=7hRo?r9k=Cj_*{>b}|EIneRuygOU@tY7^$0iX_R=0Ty^V z0sNWoCmuR~#qt-gWPEn|Vr;ze2|RUrXnfVf-RuW)>bSXtq2e`xgFH-5==(emLNhYe zSuy&RC5y{9R#ZTqeCp&=Ix2E8d6U5kautwG5hYUKMb?ol{V8XRtl;jVIPTg+%Ams=HOfh4O0Hr!Ur7k>%# zh{v2vSq&b~1&V}Zxw-2N(m(FRI4cM3CA(&BsCLp^X6q$foM-)Cy5{gG+Dn;NaV>8s zOZ%lv$tc<0lECZb;?_U{quc81HuOG_e4}F&htPy1N{xn=_b&h0FnLdQHt=yJEqmYT zYlQw77%g_|-eMKk>Kdv!&&T@yY0)|3U|q?98nAMV^vU6q!)6z7v2pT_&nZs+qywF$ z`gbXEa##a}B6K1xn?4>|-m(0r57LnxjgAO}n%9wDbJPd{HL+re%jw6%UwZgU+7G#K zv(enRPCFpC9{!RNFo|-)G)H!jCvIH+{3tYOw$XmvwE|B2pL}f(?ph8_A_m3nz|hcx3CqbxC3;rfh~T1JT9txYCe(Kt25loGjPG?4ia4Lr=5_ zMG0Sl<~a0bf(RF>oH0xKkpt43@9u>3;C4r1J@V>vo1jw|L59L}+pi^0TLJ%r#I z_aD=$3F9~(VQYn>vO1TKFMoa;yUS{SuJ8E_cXNC*_l)j4VGDHIEf<%c|53J`4-}cRoL|a(4l6I}{4R{#`K_+kqF-$>wffolqzUcB<|4If(neBgD%e>DJ+{mHAA z|LOG%V?{!BiCPwz?Zz?k_C(Lr3kYN{Iq6$1zxDM8JA-e_SCcmygxSeE9@lZ%_5b;zyQRQeU*9*W1Ka_-Bw*9o>_A|(+w1E} z>Kcwhu3+N+dmO^ygapaJNhp!nid|b(uHM>IrA1HOb1yV+%n~2%UKADdqB)(;`|6Vd#s&B}5Hk$)H!0#LJ5=o=){N!NETOW7r-3Y)M% z2r;9TB<@cBCHrX0csb5@4Ie=nTPM&*vc6@&{R}O?;mmvAbW@=A$jyN3kHba`4=Xn@ zJUko-Ob0f;YE^pex@`;GxM3$;ukU-MOM92f7M=mPFKFx(g3pmUOkb`jiF@&fj3lE; z&-AOt_TxB1Y8aKI=P4JfO5FlazlqQF+myhWKln{m_(|l7ZtdXXQzwK#Yu%F0r*f&t z@&n7?xQip{)+UrImthKQtgPBahhIvAr|v>U>?fMa0Q$_4_6t8qNXg2%>=y1?xJ$bs z7n8R*BHIpMa%uTu;Vwh7(-SGI`3xp$zZyRrv619NG}XA1$%LM`dHL&mAg8GY^tSJ~ zeR5~d$*ZCyTr}q`xo#Kni!Prmwj8Y@{D{Zr$RBqBz^GiTT-2V*#pKoI#JIjmcPQUf zE(-j1!{^d-CG|un2^zrXm2Ib?qq6zDENa9K;FYmN09+9ryL`hXAO#L~9?Q<9TYXdD zL@ttxq;i>LHba)p%SWbaudjsyHz8AH8lrE%lB0Q1K8IUMVQ>xi*Vnb-9`N@@S;OE8 zBREFK$WZ;n%a*^sd*u}x>T87>SO&6on-z-pY7_I<+Y0?;<&$QGaE*WcYD z86|I3`cmPW$|q%oHrA!%hE7KCmDVL+^|mbgM;p}1O-6E{HfIJAKGI%ax5@Pb(p}QB z1Y9a=TZzn|_ES@REiGRONbD+ImvPo*CWEFgbndOoUzc1rD^Skf^PNIDU4GtOmzPF4 zpQ}7))+HB{>kZ|6sf!_G)+OImp6j?SukjY9OZpnCagdae+O1WPD#wJ1XnNKu)v)fy z{}l&Nb-Q#F91VC3&iFCq_CW-Z01m_l(RfgfxRkudG&C)ZJGO5>efso-Mc{uPd?Ye* zPE@M1+Y8n0prdZ)!P3snzWqCSH77X{ja=yT>IA&1i5OI`+cI3*C)~f%kue zk5V#o*_D==BK+f{H`KD2SUS3t%%>4A(IA>x=-5a;ii z6U->s{RY(9j^^kM0qU_9Yj3mw@3Cud1beO4Rk;^<@7;XNs?f{HR~l*jmAn4QCzhLH z{N}Vz1V_=J#6u{;N~O+6PERC1lZjZVXf9HSp^h1VgxOYK%Y-ven~C+3(EFX66P}>v zo>}Cinj(%lIAfLO?KwRM66uLF0E_7i^P2>YQD7KJ8sq%M5dq2$`5lROi|QXS3MWF# zZ#?t95mZUFL8y{If|SUDRa8k2f>jN`_^d<_gfnF7B6W?ckLspNdNT0zlb$X~{@~-* z<Tb@PK>h;{p0O`zV$i444VJ7;Z#LbnD{zz|-fwF3KN# zoT`GpE>fpM#fj%{YgrxM)#p6ujqjRDWBooB6 zIYXPCKF8(t+l)P!OY?cqROjzyBBH&dVz-xUM-29Z*^V&-E4WH8_ge6_tX7%GsB|+C z?r9>=2A)3aO{Dz6$F0lX$EfKewYq&|t*&d#WV80V-L6Ftr1a^UG@ zuZ!{rAGa=lA7k1_snyrVz`*)wLef^5#n;il$B4p|X^h6`BhGNW92}1ao_^fxqx`|g zt;^rXXiVl&YIXbgBWK?GR{B`!bU5zold3v-=vL|DJ#ucSnMH_dDjMynhi?r${Z_As z@&_MNldpfEGi(2-)9qjO%zNL`)<1^<+|zIW4EMiE|7Pau<;S#t@i=Cr)kvyCPu~)F z`YqRQn;iD3d%0sirbd51;{X+D)owR)XWsi}x_P?OG#>7^n?3P32U)7Y<5uxu?P@ed zd%%qCWwE|F@bsI#sgytXG-~sAGn$g=lzN?hiv54X&<_Q!`R-MpzH;~Qtz7>5{yDet z?0?Fks@tK4wif9&aPD-^sycjyo$ZTZ+BnAIRKxHe0~oTn03a+nB@h~Ci{Lbje65R7 zG4SPY@iEI_sN8U_+)gc0(_y;`?CFy0A8=ZL zUqF>tB+$L}MeOd{3=yc(1#E(My<do5ir}AH=?O z%Wpc1L5lDhEmT9nJN=>ji}s_7<6sIa@^YnohooSWJYzN?{Y?cm=Kr*cm3N5omG7qw z9K0Ref6RxihC6$;_TuBeeuopj?*8Mr_-`#|YYRI%{C=cfS=_PT@xk30+%MZBh(|~n zMNqXQ=nO^ABHZC|Q>|8V%&WxRWKxePkS;#stHhi3L5+v_7+-u=GQrh?d9xSr|08Wc zwg2Hbe(_fTUTPrLxqH+J=yo?M`?OZC0*th%0C(o4bsYS1Wb=KLJ$SfM200h-TG@+Q z;ckc61TX%g?C?hc?n67Tx{l`Ez0x4>v4EA5*LA49hKt)$ZG1OgHdKECcyR22~euVznhXa51VM8_ba`Gh()r>u-N9eA9`ldRF8mg&9 zct8=+)G0_&N)YU2@-_58RK)B)8-o@8S8h&6&Qy2l6Q1CL4LZ*eBLkQS&ccY5f-@pj z7^{@rz-y{l$s79VE@9^+l!H!yH2EhX1O*jdk;8ch9twh^FF+fWI^JW!(K*fF;VmTZ zJd{U88sndouLe1-#jS>_?h&_er~*!G0v3kP6YZJrT$3=7viVF+6eWp7^_0cd&vMSr z+B;w;>;*Ur8oF3~n62802*&$O+y@z2@fRdG#(*@sK|?J1JO{X78)7>w z0;H|O&lAEjs8vxOpSNUH%Pp7K_y<6h3cNP5QnR%l8IB#n9|J7Wv{}6Fq-6}on>*Gj z0@6ymte5-Rn)_H*q~3wUSyVPf|E`?|y6xe{;3;z>Op1xwNMK%$X%O$ZSD#(pp(#;r zCa**b&-!D1S!6OXM+4+oWE$*haMXbgvKQ@2wSsk%bU7tR5rFd~A2lgaJbrd{Yt3{2 zCGgyTF*{N(yIX6t2oFTU9kS-gV(8wu0a$M$Q9BW}Qsj6`4?>xrYpt(UnV*g}l=;y_ zQzF9-06?8?MPd^qRPs=QQnApvYtDR5eA~Bc0+Qy1lDhZY%X?;L$=BjQ0=bsEeL&7v z3D8oS>}DNVeHA?OjleVCFsnc>yRQN*!UG-Cb-?iG{s(jtvL?AZ+)y&NZTm_=_fn!P zpx#o#rP4D%E){EYPErQRlK?YkAoV5Ngo7b!(p(_OkhMd?V5vZspK@8jf<+i7Fr&x0 z%F0O^UIEX@5j=<@DG)^%tmUf31s`;l`eijl$q?N%?DW=c6qZwUFc^#o*ugPX=gm-a+UFrB7B@FfO&&?oRQzcADT9p zF-c9N6RAi%>im`=3JX|AI37+%lEgYD2-cct6rgY_^yHy)KmA(dyBj;w%XjSCxV)j) z6_j>^^38~eTm%bR0YbH_{$%K?*YYvrp_kpqLyPdhYIW6z;pDzIonZTIGA6Xgf(BS zSvjBeKqhcXN62#9If`Y1Tzcg@M4BMGfTQtsN|ATa#9!kPZI$w1%;xP=AXw0sat*#- z_A44+Ykh} zzhAVzFFyX0U=E|YK%L+SEFz>!oi=JBd0>%qD_22nibJ#U&34+Y4>Oc5UaqU5vKw&3 z+HdkPTHfpLmrP?$3wB?8mZ~P zO14WK-Iy7+*1?xYFb|O|5Q(ZtfMH`oR4Jz(;^u|4o}iCdu)g5N@Y98ke%!%k)fj>A|d&KWKvNFfA=ecM?wfs*#q z+upj>$5QEujJx6GPAs&%``o*>b0FN+>0nbEBZxEilUps z#ffqEi?DT)^rFGf_02e0iG&rk3WR;L8Wzg4*w`)yH!#swUpL0d7uThy5P?znGs#j_ z`F}WI1vY#)V6FQp9j3wlI=B7Y-`~R7Wyw-+<$Ydv_GIs8S31mb@8f?_Zciu8|=PhPe=wX$ z8OcdF{^ayRUxPZ|q@PKcGtW~s_r21RRwSN}g{?v%H4qlPt-fw6E#2&8o`~Z+417Z} zK}a(Z&8#^=ihPwATk;wZb=N}737CKtON}0@7oSfh*NQ4x%>_G!saKTxUi5Z)D<2ijy# z7DmSO+nld%m&QDN8@h6=WIZOT&QfsdF$tJ@xB^pPI03NzO@1t+dR23Sb1F+8WDum4 zV*-^RT$PvO0I?Z(1<8FuhC=Xi_Q`eY7tT!n#g89QaxtgPgl!jWFEFR&I$La|_$^vVGEkSR|x3e1vR9^pi` zyOfm#MFhKP;F}Dx$oI7%SpI-Tzz;ffLBrudz<|R^g;irL+>;E!9RB{2=f$Lik7ndC z)YE$3(e}cXfQyA7`krgfJ@Yb%aZS-m&Bkg(Z@j-U)N|-gO5g^S7_Wp@nt&z>KuFap zE;i@mP^v5nbF|pw1aQEqtPIXF^s=AiWA>X~cE%|+#rQqll7$2OMAYPJCe#I^{!Wdh zGR=tI$4N1c3DtrvUBUoKD&$7fT{igcN*=s9{Ekq|6bt?WEXCu@!@YG_Y~4qq0B93m zh(aX!6|0SZeNYU(jTG$G@d{ zwZ$=ZXws=^g>g-42l^XVXCU{$h?~)jM&bY67kR_!YfYnQYK%}Tw@D-)#Kzyl7?Ouu zasjeZy!8|uC2Ys5%6lp9ck?8Q^OuW_#R+{ebKQAyr3Nwx>9Ke!-8yd_2SEr`JT;h6 zNR6e!k=D0%9EDUO(RCEkgBS&DqiUcLTAc9e218Sgw>kR~~eS`|K>rd_)4 zqIg-}Spf%v8VgTm0cO?nFSrj)41t-PV;Hv&+psP2oeaKr0y+AWieoKtIJtb|L@{O+ z5~X@h!6>x^!m9!A#gQS03$dd1xG+q@4<2_9VU92)Me#a}h8jKZSCC4^EIdBIkjx|s zu>p8|wAa^7kW#du?RWXH2#DX5E;^1bh>qgK9E~dOX#`jE1R&6$3+QiwLG5rWl9?d< zIF*#RYksFq{Qrib#lTe`-dI{cJzV2*?dJzP0%sq4;&-lv3txU&CwtIa&%Cu~m&tS{ zopRwo9JJ{suw-X%?X^Wp^K_uo7)JzvL;Y7gm}R3Y@qnpU7lhwZe-KEH> z&DsrCUeCtwbUGP#jo2uXeOmTR3T*#-EU8VZHEkm3cq8j|DItZ0Y?Fj&EX4Gbo*Y8=ZY z^crSlqhrxj%GDfC<~a6YdV35;47m*Ljf@oD zx$a$BY!%R&1kL!709TDiqWgwn<7bhNj{E^NlGGgVPd5!7O>NH!&4f)-8`{K zQq0#+;z+co!fTr)k3LBYX$lgDs8_v|0_`b453%yl9H_1XO%TCej48=9SusR{7@tOM z8yZ2;NJ!FeMvD1cs4R%$KzloFR0XgiVdeCU-UAq*bDlEoX?N(_paLfvMfKSO#lmd8fByrQTcD|N{guB~$0 z2*j$$)YW34D6JQTUhw4o!Kpn)p$1@N!>g7nal}T`9gW3E;bVTsu#bW6>H81w+Z|85 z>mf+wY$p$$m-Z!H0$p zI*w6#*_~u+5gzdEycJur*Nl0d@FZ6Z@BkQ5ZrVY0pOQsuKgzCcF!63+MBmJOB#}>s zZ95~u{DWZT+v@Aa3q-;mw7edgsni65MdJs9D&RZ7gEf9oU8DeF@&AOLI{L(!ovfdS zIsq@;b788F^%IT8jP}+&V)vc6@2D;kRB@HXEZZ$eyb|jOv*%pVMA|q&Osk)@Q#*&I zcAB$RFS{=sEy4qfp?WUJ2+nt5;*iQ5iHn7oJ&+= zY+lxW+Y&k|CSUc&fE@sP;QS-x!Yy!q=@WEf4zrGXa=NeF z{eyiau~Y6F`{uEe(M&8Cjbu|{Yap<8?e%rrS4nSMc^z;Gg!`{52b|>9-6CF_A~?Mu zKgZ+8t^IYUn6nvn1vV-~s5*8k)>Z^RO#%XKK#W~iAdX)N{_NkxpD3g)I~&f%!P?3z zooeYngrX4^5{YYAh@mO*2|sL8OcVg|i3V&F7*FZ3ba(%Eel@9__2ajdaTvy ze)R!)*Z9!8#?64}W%mKmB0SL9>Haaq1UP7@?KsP$K*K? zI8|x4P_2k>m?}T^k#{t>P#1lb=x%V*62~9)!bYYL^$OyL=ulM0Dhe{K*pnBg(8dzZ z4WNq4J?`bsVNv3F`Aqk7XNK76Mbd3}T>k-X-h&#qR;|x@$wKeu=0R&dTd&T_9D}f* z@a3-r9YCy#6LEja5N?rwujy7Q^r6`KpNO&`mWLe=po|~9H}L#S&xtN^+eoI%=A3k_f#2E-7$Vopl@{Z1bSO^=xx!x74%BhEb4A@K}MqE5{H`) z@dcmB+a6bvHJNh29j-9{n#e6JLa9SmT_ijMHQ+aPI)3*J1Dj0oVTsNSM$;%h;q}P{ zgg(mX?~XJ1s_JyrdFnt`6JlUig}Fb00y)g$z&VHN{O?mIAM{g#oQ{26@&>5~kYxmM zRrY1^5OeJDi-Kfse2DP4M-eXVac%aphEa;J`3iOQ@G}~ec?4r|rjt0bxr$Lpx*8X$ zKW|q5?$V5pp ziZN2?rKs3F(!x4ySkD}_IZnm+sLSSG(BGo&7cwAWG%g7iU6;gBi1tlvGo5@9#hte{ zrzDFPiptAGZ0a5|lsx#!_eacO?D&fqSKtOsHru@>v;p!&YpJv)7i@UMK`c)$*^4W0Cil=h8*AD~*q^-Udbx(8rYuG~pX5Go#MWL8p1f+_^Cu_uq$StlMYzU(@$B zZ`XhQ-mV?IT6OOWeenxxjsvu~H~bs+c#RP+mxx=r$RI)o@px^iuN$Som$j8eSi$4f z-GuJH_h}+x@pD1Fqk-;#kJ{*Z6ysQEvm?&PLBT;UQ8p3=-;fIZ5-YAQR3torn|n8I zGVh9wmh9u=Hzk-OmqF1<{G5;2VK5*_eLetItgXIoW{^pkHd4A{ zA^HIPx>Km}tVws#ep|8kTW&YWhrKZV$#6by#|rUmIz5nlvF-J>tTuIBcheC0LeJg) zURn?0;gpq(=LeBUNqf*#UrP^~q%Mr*t#s)Udl1QoBe}%jdf>0GYY*a{pM>#676ga1 zIITrZ{6C=oBS(jRX!y588}RS^=ZP&({_b`(Hs@ z9syWzjC9*L<7V;k_3O4)HI3AUzW(ccjB-mayDPV}2oI=_GTxQq{#z5IVhE&gHVch* zka*i@SDmj4qQ4AUvta9>_Q{H8C?U>*q*I;o95fxDP^qd*c@9z`_$X#ATu&dCU{(u% zP`@VG_zDxJrOm43a+W$tJ8kKy`9%K|kpnTr`8$FhQCmg|0S5>j*Q;ZsH5WcXAUSi2 zx`Vo_h6gF$)--_cw1E>i!3ju=hK@t7ol_BKt;VoPbkbwuujTY`!Q?i8=Mcr#l0G9M zqg%Utt)>LKfL|{rB@q{Kas_o;4Nj_;Yctq@w341kjJ4Z)LQnqCQ$Lkrolc33( z8u1eGy*)OxJk;wtjm1a;r|T5|Ibbu$YP`=vO>Q_P^lP4>rVhXu$TBZ>L19_9>Hp-T z3)Nh%pNtzTjGKa6tuf|1ek;VbVyzi=jA;``aamctlUar6uEjZQv>Ti6f`TUmh%IHz za}q|yLNu#Ss%>m#ldB9ki01#`e1idW_9b4jr9+J3kXK<2@rokpjBr*VPx8I522p&!WY!U(G zBo0RrdiU6qzZ1GS@JO){+atU3>W+uNcSAx5=(;go}0V)@$!~j%ubQRyJiczovRsVRKo5gPs?491pvCc1B181pB&nK%za7Uq$d;4=QE(K zgBN7{U@sFdtF6AaLG$HK^}((8aR|Bdt*^?)bKy+b9)xt?R$oigo2h2Xm3(+o=B7A-+aJm*@Z z_7j36mUrL{Ys%({)T+_Xe?Ic(d%8wH4{x}YkFtB_va9yM6yf*k?dYEyDx^s!pU4p8 z63Go>%e2+kx@A(4#+Hf3Jp}RKXoF2Ynp z*Y8tX8_^lTN^BvH*?SZWBSKHdGVuFqO$n()C5f4Ga}|)b1@lkjD}fZ8SpbVxZp>CI z^#%3(1aSsd5|0n(-#A8?StM@x6YY!B4uZ}Zo=AFoIJrF{uQIX16cC9`{UTjum8AfP zf^jU$7C&TiL|iuSmW+5=fp&v=1%pOZ3y1I-Aeh@EQOZCGnfi1*bY}5wpMUwSxW+0d zZ!1#i@<<=Jv zH@-X4J0LtEZ%G>AN66nzY#yvEdrjQ$nuYIP&5uBYEx3>#n`ojHF(6A4x63 z11q`|5-jR!V2$Pc0fo(c01J4iw!0Dgcy}3^d;Z^{w#a>@LS=kvr&pF<~~$w<`2pv&n%J zKtF^-kkq{Z#ZWTkA9f;!AvIVU1+={;z@4a>q;A0|0C$nUT#YX+@y1F@00O^QG?4D6 z0l3%t^-)K4Y?{bJjdJ1!3xZay-P?K^6}{MDWp=bG=89%lf=hU4N;1I;$mdXPUX1)^ zw9Tii5&!|TkMX9P=#hZ#qKgZ*1vI-35Hq3+MSL_Nx1AT!9JsR*-z+p&h`xem0Gp|H z13Id1&^k`4ftST2(y^U@Qpe011EqYz=t@8M8MZNFxpo0$4^kDx?PY$$WD;CMda^Zn6J#F>1 zFg;Bw0Y}?~3S5aa0Zr*>IGq9647f0?fN=q;;3}NRpl=}wCybB)TmW*%*&78EIGhYU zIrG#{rQwTw=7y1mx#7Za&yL>_u{IbOZ}gg%Z*BO^b(?;EIr&PXzMM=wr(FE5 zfAWQZ@V)sQXL~mS8!&FkPQe7E`~iTx1QUq20&7{m130B*fs-N|j0fEy23gYPj^oSh ztt=yhLsDc94al~UN*W;Re}3CWCJZ-~ObkRr!x~FA*Vk<&ckv?be^070B8g8#JUkGE zO=yE-5c2ScUNw{qPYHAF4un6M&Qy% z;B5NBhlg(o%-?o1cIoZI!&`<;UBklxuFir3H?pc-S|Y3j+LCA}W#vf+O=^~WrG~1S zxHfVNyPA*xJo2AC8<+d#@D0O!?t`@<;0iFSs<~l)pSYhK%-~kT{d!JlebbI)+)l-l z*;F>3$`2x&M|*uOw4=$S)28>kMihUuOO+ae_et5`pngm=g@+=Dr7{!#=+HFC&++Cv zWCJ~S|Al8~Zw|~KxcL&QLK4+V3iho%5zcUt*F@d~wOl&9NnLLg^N=0sfnA<5Wf@GH=|~ zTpcC;a&ZoRem_w$2t7=#mu`!x-oNMQezOiys)=GP8V{X~UwGyabm7Jo=)zDBIn123 zMb;xn#6M)8vfM=^DGr$vd*pK?f7-r|UiSR(%bxeIBfY^rJ_Di&7S0m+NFtigCkK$> zCmC<8uXU+5*#aV+oTpuyU{qZ&{nav3NWkO~DnU5)7oK?~6ZhtuU)4$zpzKeEdO;m?Ck~V|A?T!xkT}8`OQkttd;!C@8cG6S>Mn{p5DHW3}yxaSgE?mxi_lc<$y=QOWEx4->MMl{D3UkZ5UP+uD~jJj%Nd_W;4`u4u<}BO(5*2-b@`l_*JOg&Mu+ zLo{%|8-CeO@@ZP5a>IONnYsm4cR{v2iF8wl5z)gJ7aB{Jy`t%1gIgb|R~C01KC)ZT z2FxESzq%5tI(3Tr5I+v7&K?J$R8%&ofo2sLbxb4Z(aE7XtKh~i+8ov~nj3UhNWrGk zgXW($QMYZWlM4m43N>4-@%imw;aWuc*X`|&n?y36OIoo)%w|#s;u76fU+daRU@mo! zLsgJ;4r{x#o{&Z(oy$RDFF%|^N2aO1mYy_eccPINhmVFN$!^)bbYHzzD_Ze{OBmdL zo0b{wvrsV6_oDs7Rb&<&v#9M~Ok)iWEvH}VGlSo;~!2)yIRF8s~}ywlAc<*D~rz4K1-gl9}vfyxtwjqLQ>BcE^Q zgl?S}zIDQX%IFR5@ws#1u7xepjCDtFuT2&?fkzT}8Um$_c}elaxq(I$XE1!-5n)sV zDsbT2#D^9MVFK?l?5nCZy~o@q`8t@r;J@UBe&q3}#nz!ZcYR-WBGTI%0i6YFJCBwY zTyuRv^NSyFvZqN%ST7C0pG`B7Y>}w1`FXWW3GHgMs#}2^GLrW^U_Rz~dAxrj5la(^ z6)q%52|ExX(N>>BBs6yjiTGTp^&YFVgy89j-odH-ToKWADR?ZJxr~malPPj14Z^QA zsU7jxw?an_06t!uL%PPWhzNRo&RVc8y%*$V&7#jvrBc>FrlUiB5`55@hmMMaOK-o7 z8X0OLagwYL;>>BQZ-rS{NoR1GJ+Z`Pb0B_zx}Gxr`c~-4UR$%Fp!Yaduhv;vdr_ld z$CZt-eL;<8Bw4{t3&T}BPHqau8}~Wl0}zrk;Z&4x4-R}n>f#e5awn}$B9X+BMmWF| zH(dCSuR_o`*-_AV^41=_iHx8TCAE)=&P3>}AUoeJnEaAj)-JCsF@JO9&)d(5SG;QY z6|eH26MBPteAG3+pgFCKFhCKWkr~H~hlz4Zq-DpL&CPe0IB;B1A!h znmkE3qX4_qjN6R*B9Q2a*L!{^W;Gl0uV_;&)e5<|Qt~tn$0wsud{nbk;5Q&KVY2*% zr)lllZgH5H6Qz>C1eu&Kj)#kbPh(zXQb!Q*kIQl62bgXmf|Hq4ESZigS~v5Pj7_Bc zz>TTU@@*GBOu~3H7Hx`oVO57hJ=;_ewjG;8x`Rd45J50d#;TyI$ zO@Q3sVs1NKY9zXKDdO-A>-jXbTyB`pF=wwR`)St(M5XMEok^rq31a&OqN#4JuRE2(AGbyG z(r` z;3~HV-hQG73|~XRV3EDJ??a@)a!Jx+z4}NU-Sz*~iCk@s3~!D2$(7#V9-n=g;68M| z8p3}7_40xz_S8IUy9m-8&(r7u>ec!Br{5QR-KRcEF0;p+0Mf1HY;9r3?mCB4Ie6gW z#|cH6w;yvil>4+iUb*y+09%u96cr{60M{w)vj49Qyy zrlHapYXNxYQ@KxlwDPI=l})uNX7`usI2G4&0xld0A3r3jXmQL8-eb?hvQ5E8Ui?J$q}ySCafhqhLV7vL z7N({@myBux)o6@B03cB#iDc-h#D(W4*k7;hxW9gUsh|B7bqt=ey@3CyR}p_a#@F3v zFLc~z6T@4Zw0B$OhWYfd&!*b;+1QFZ#~nFmlkHx4kNN93Y|n9u1z&gZF*fZz>>fxuJO^=w#1+ixfbh+&%8*FBm= zf(HD(Y>#wQ<-GdH@T-sb4`;o>Jw9Ubo2{b)&Q(NOC6gL3;*D9R^J)P9~zv( z*8-k&ESM|d-4B#G;LwT{Pl-h;LB^lAeoz_|utu;25;|u`1~S>L^|em6C`~-8a0g>x z-=}6=-Uw<)B9YAwtOx%3T6)l=14_3UgMG_YCE>JM{?eJy@~ba=%2r`r9X0*JItrj( z(hwUa5>#oUniL<17C+6LwJM926f{^>|kgEXtU)6vgpwp3s20dAbMZ<~0KsHcoecd+DK=2CV^2T)BvZ9H>oLH^(we+Cr z$nDUB78)R@RV0DtF>LVvt{nP!;Oci?_2=u}JiK-NZ(jNOp^uMj`j;&KuC;A>_tRf} z4GFGZ^>TbN4fxy0kOwmr*qCvt!HQm31~Dy~NF`E^VF^WRnV4fqM=Gj##D7B3JyO^j z7e4&m*YMH6D|0!y#Z1dhlL3=FUTQL5@mnc68H!NDHh#+y^e0OkLAUw@t#w0z0I>q{ z(=)e}iY2^A0qupS)ONc9z@pa`my!;LzQ@N;)kEJ4{OlofTN*5xv``$UQ=zlhT=@D) zj-U<=rKx96^sL!Vqjh!dc%577A9Sy!+rKls{X71aZvRf;J=5GXADlTv>^W``Cr?WF z-8gFP;ovwqM~0+KI3qxKVKSp1*Lk%_lp)xNRf&fe!I?}ynykKryGCxYLPb)UuaX54 zb_0Bj))JRkKoIAaYGk6f$`U!s=_U$H{*o`<910fU2xPaH+&*{!svDWO(+cxQoM;)_ zkQiP%w8tV((vnFCF1D5&?j6P4glmRPiaR-U3*3@(hcCQ%dc_$zKhrZ)kO94|`;5FW z@ShL(f!|a9>A! z3p(l9(OVHPUd}D)4I-}br7Yud)ePCJMQ)GQoX@FJ~OMhREs;DF}a9W zwY=Fez=%_9CkN`w+35H}XHo^50E2-bhKetAQ++Mlq)BG%D~~p=|V(eV+$JowHcktVA*zv10?F&aL%z>vE>eirPxrGEopqm9j0r=ECQ$ zRyIpb-ffcp>giA&b5Y8nYJy6#f>!Fqk#DshmfJ4)_u#e*!|uoBvcMpKreK_(zwmqv zim`%a>&JRN)v;{3qCP&Vy;`jM+ma#!u7y$KZtFPNujx{40K($(-8P(dt1Ja813op3_!|HJE^3tahg8sDX>>a%k7KZb{>Oxx-^TkDL2|BJHI3#a|4Tj8~(? zc2|hyBR^8ky~nj+IMqSR!m$wusp`dNa~Ge@Uwl@u(s=sW#Y$073QI`*q7)*qRh|$O zC9Cdbt9DW55e3HX+#&q~uBh%drx zXHij>Bxk$i?=t7AYztFwESnjKuidU8kIgY8jm3XK{=nd^;K*laN+XMG3O? zLIt>g@f&t>d`sI^!-a@kFD<$P@t&jiPwyR%WB_bKb46Bc1^T}V(2obP<}HHGzCwd$76{8V z;AGBHYHS#C`mlZEYvWOOOf<3cB*GB{L?PP;HC+q2=A6Hs7ms#q0BGNeaKIMvy+UGu zf%#*Av?Z>Se8(Dyabgp@%Lm*=7L^1R7t5SpZpL~D6%kv2sA2mAim~i0Hd*G{7sAa^ zF>8iJP##GNVelH%N@_B_O5PqfiC@QxmQX{3M?!`l%&?4_73|zxsoV2nI9A6@ZShbE zCy0{cA0caFR&rB#3uMfUgMeHXp%AoRS}xuZgvGG2#L!zOsLlxhxTh>(^tIr@N^L&!irkNlX0`(8OfEQGq9}j^ zoZ~`sWhJ{a1uP8_oWUB)h;U6Ad97MVU>Vxl$eTi~66L_ApbI7#)N%Ka1W+=oGN{s& zS{+?~>9n;3gd_;c4J1veeP*c)V6E^gRJgAMGS0(%r8jR zCkDX-`j{%^tjB=up@}p0DIi81^h?@5RU#$=0Ucs5CyIiB9)PU^u*X{~($AXLPZ>&M z)X)f%8Ed}IBAT^UVhxzrQM* za+3u(Z8l8g|7Y(@;G?SU{qL;j-np}|$YwyUAWI0k8g!KE-Evhibf`nBHc_(FQL^!bB%uCW$phKUNZkm zyT{EG{^Yy}$N;98K0%6JAsVL@JRe z30Ep?q(d<9#weVTQ<08VOxPH4;4An#6Kl{D@IdTF!b*lBTt^z=DQL#%O_CiA>ji}R z;tNZdam#|GWu*aF$b$Z2GV#OG+H)5Xr2YzjL2*$@F{Z;nSy2V@bNOGkTrIhO<$8ua z=D64XN81yYtF3qaj}ij^7j@PcwCjttkY|_mSoK&Wi#R|^hZXAB%32}M79-|1Ofn+e zk}x%6*%NArHfXc36$!!b8$wgD^2JIAwp}jdn#S^DFMR&7*8Y#RV&TK#%rPR$>L@Es z;w?^9E8Y!NK!=t}do&^PZ zx0qoB=@FL>3y;&KI~rmbaY2OH7j%hd31s({Ce}piF^Lv=Dd&Pk(!jcLrB$(3!Mc`yTS=<_|Tq3au zmXMGMpbwyW8oDzOYWd=_f?{~pb|(h&5PzVexW_+#?iSmw z8|yI|3TZT?J-{;YxGx*^Wky3u5Wx(3Dn5yAQ`qXBs?QI4*w+sk(l6KBU#=HJfWxB? z0iFc~ra{mq;kGjtnLef+QDfl$YA)iZ@I@^}cbPh7Mz4%b5GnK5L`blj(tv1XxX(}K z#(`xi>^JAp1sbOnQr!rFB7V|gFQ;|HW=xAkaXM&#j@F*FEKj?rBh-k9YVDmQNzjpJ z{&$W0($=Z~LFDzD*C+-zDslxV!V(P!-er`Mg{Zbq)wPi|ndKpQe~>VO6*-#8qbO~M zt)h^+Xm+>nZ-3EiQGH$A9IU3lEWt2ECYnx&W}M=OBN;s}XVDOPutl{D;WgllLnm+2 zypMPqrNywaBcMhQaW(RS6$K?F!D2+$sHiBz$(x8+J7U*f(h{9H1h(xyTA~S+U6scZ zR@7wZC5W}q>pPf5gD@4_e>)ej^0hHbTd=_l^I{}EhJPEhD971)P!=7VO}@0u{!&_5 z#NpAu5uODF=JGQsY1t3miWzzU7WTAK0x}r76Aj@6k@g0x>bN{f0Sm0^2z z-4tO15Qanr{Vj&S5q2F^V4(18{+Fa1s8737$|`cVjN1A5#qcLMe9+m;Hy)=4QgKnB zxLC~frP^U*&c4oGKg8|9e&gr(uZKT@NDzPL;5k!KcsoK2CGQH@b?{C}pbG|tq5?jY zJmelxm(*B1@*^Ucf=`l6O!EqYHPV{3jdVc#Hti&Xi`Q60)z7Faj?@(C!_B6sfux9- zjSHidZvnkU`Zxg zO&J7IKaQv`4U`qrv1fD-fu+j|ih8C%TAi}{g^`d}=N?9SsV@BzXR8(CWY0ivYiE5& zGbScsPpRr?qa|B$&!y{!?8B;~9*^j_{YLyJ-UNq7ots5&D$u*#yz~iUy!}4+cp6{l zz|a*e!Exb5C1s^x)0oH*6uY#z1TMqnfudkB;%ViBnN{c3b!fj3&O47TR&%qIyvRKh5BRD?v@6}EkdZrFaA3^?RXaC>eDDz z;|rpx1`JJld7MyC(?Dh~sX$0_{)+%>0jv=b&7=g{P5Lb+7p7oAcMi%)dXek)&x3%! z9kL*t2V()2U42)B$EI57hmOz>#fanZ=v3obP$0b; zw;dc+z3V3cU^FTPf!*{ z)PSaj{#e=YC+JyUpC{FkrIFZy@Q_h^?8C`@1U%_p9WC_W-!R={Wget)^~glz*oEQHX)Tw_dnYG+WYLA zAhrPYNhvAMy?o`hKOKWf_lPWU^6^e3#1X{`(x29_e|e60t0VW;G)E*j^Axd4pIJVW zgPGRbUUN-vyIm|6b14h{%W}jlM~tKj59MGpzWjkh2uy&@p73BeTz!2$$1F!Y^t=mN z81&>|{qYKV*4O719D$_^Aq2vIfW$N|{}1r)k$k`P{mi$|_mJ-fU%T%DU#&0b8|(9U z|LA?w`<(YdWXS%@QXor#ECsR@$WkCnfh+~G6v$E_OMxr}vJ}Wt;J<j!NaDGI!x+_&2gI)?5?*Cj{41!{Mt||73vtgX;9A+vm&wP zXh-YdO}?I~>7EQSI&ISAszm-Gc)^5m{BsQ3GJJZQO&W(&p@Y!HEK+dzG#P0Fo| zh2S;=2N*gfEp@7Hu}L+wtE3U3x>v#X0}m*Akbh<*8Y7F+(6CJ^?(XF*IzGBF(cT^z zu)-!yScoG8lJT^;abP7Hz`@L`a2|EK(ZP8=J5280u&kYQnoTOq)R?3#dh0?S_Ld|& z8YS_P+C8c8{acnf$MKrP(^O6v$E_OM(Au6fo3*Y}nYb)~<8fLk+RWQg~Lw zPnleFdO(X(RbO4Xv|3wQIcov_W-@6LT^jz8L$-en1v@uuIdPp&9;@HIy z!(#EW>h5;1)g86+qORPsLC#?{W33V<^vK%OMVK}tD-lovp3%5oNzJE;v(n$=!s5~| z@v&i}M_aq9GgL$ffF#dEz+yX;f|TBaen+NHl5!sT_91jQE;95gWwy|ZdiB(7hTJ{q zh6eJq?lP|2zyRm4>d{9f8-D~rG=dg8J~Wv=HhqDY4I4JhYIJbY@kaR{i?tWYcv_lV zhZ$(vqWYSJmGvuV5Q*Wz{dbpEpM`I`jS z_uZOWZQ=yljW8ikn_z}ZBpg{w`&gr)3At$wz@7G!E9um#9^HX0a3$?wF`1EQyfw7; zFsbzIi|!n*!>dEFj>sW{0&zAFoTELuj_;p6yh>2IXL>JUbNf6|8XJ(K zG#wD;(ccNgvEikg^ywqk59xRM_^(6KBaO|6c}NThY(q}2IwX5KY(!>^W#T?W8dt&x z9A4#pZj$S3&m=^3Fh@Wi4nVPgaW-%F`0d3CdyJ`GA9@Y#sYykm68Ih~tM#Tbbe|de+<#4>csCpiJY+ zSOgn@dQNQJb*<$4{;{;{-4=!MfZs%qmfBl7S{vdaMBUBwD4h$ewyjefP<51hD|=55 zW?5{NjKousmE9AwV9b4Qn}uE6{$Ht-NWS-cFTnbLt#7sO9N!#Yz;}wz=KaL`3-8n3 z>%EtH!`>?IIIqX^SI^Hp&wB3n7@ii-d{3$8WRKJRv3tM!LHCXB%iOK*I`??DOZ`-R zQ+;0jj`|JtO0`oxUoBIIt9I8XuAjN?a~ZBC*L+u*%c1;M`ML6}a=&tw5?1D+3)z2J z3S=per9hSfSqfw+kfp#^mI4FsJkKGG8X}p&DHaDyDu&sqz$^I6=}mVox%PC|G=Bq_Q_Zr9DZ}9Lz+B9ngeqXb}M#w zzPzHW;O6NLX~kd(CsNQJ+bA`>Nw)-8xDUDo8BgTeZ50EJ;yq?6A@*wg*BwjiYD>@Dg@)v$dtAiCv+g1k@U&< zuV3Pjrsr63|L__8WdUprlRg=K(;9~~c7%0d0>RuMaBItJK;hETV(IOHHGnuyJ?6+s>XYYBygVVgp@|IWSGLwg)?~r zWr5*)S{%~2Vb^TQ%gQf1~ii-#CsqK?3 zP%>b5pij2)fxC@&NVjOvxvvURp*$7Kj2->T&me*)=`H{qnOAy+jB0T)+ z!XuDl>cFd6p9k;<2kh9`yOSlw19zY!JwH7JK+C=ABD{!@j%VpzRYJ z(y$TMc@ccgi~VIqMJ1A+vwfUH@`EdMAS@BS9`PNJBnZL;hiyL%wT+OLBvwZeW`v*p zf^>gH(Znmx1$!7JozVgla#KiaK)i;tL!B74l`&X_Tku&dMx=J^+N>CO#UX>YV&Jw@ z`gGl2ddjxpc=I{dGbyxTYkp-cvKF@HND>W}1WN!jB1c-%^4yhcLW{wzu#eWkL)(vXSP4s z-nG5vj5^Qvj_}$&|Dl{>z0WnnRqUGR`_z82-D@wh?zZ0IO}V!!xz3GjH@kve$~xGE zY$aRDYS;``%qFr?_9yHQ+Hbe-v0r8Hauz!$s<*3q)vMJl>Lu2ftoy8wT0gSBXS3VB zVY|+@&9>3`ANE$?Li;%9W6t|MA9#N0c;Cq!UpPLo|J^ZI{=WRU{D6F$;|<4;9p866 z?s&j)n{Bb<21l;r6x$rzR9lg4ob6z->p+dP-L zYMi5-gVgur(|zw+|K{E5UGG@qh&e)z<=&OvWe!;`@%+T|L(gjGJjdzQUwA%oE^(Bo zuX|#)Z>qKSH{E;OSG$(7m)Jh*E%uXb8*T0EQTqXQpK_(=Df@Hm7RB&guB`D!?M1#b zeH)!0JO9o3y7Oh{e%p%*bIx;4cLtmjoFknBoleK+j!!(L@+b29@*DDxKowAo!x*uJZL;2GdyL?Pu(<$&^>Ym{q{?-#y1-2d)9!&~Vs_l~u- zxF5EE;hUwD_{x2G${^PjzTc~ls}I;)-5qQobJ)GU{qC^sT=z`*bJz9GTb$Q<#>&e) zBV>#Qd8GUA>dWqT-M>&Cmj}2W@I36fTeiEO^LizT4^Zn3mcf=e0`38vE8uj%*&Nzd z0xl5ne84jVJP&X_hprz1&J?L3z*+$>09?qS{4aphMQRwZjzdQW;8X!qfKvpF0|o_b z1*{OT1+ZK|s<%wQJit=>bCN?+>=vsvZ%~_MIY*O$mT@!*XerNaOCa|W0b_vm0R*dKs!XJN*utfLHKj+qc0l#)ur3BlR5K+*wG}I9diYnxmyar*O0cXcR~F zKqEyx+fn#jL6^lyJz1m<1{@*a0Knk_`T&Os=mi`qphvpFGDJWXsV6zxC1-ljNH;rt z7G1VmEY@b#vYxlS(7w}h2}frlcPB?}YMx~+ufqPS!)s~fP^m-Vm`ME@QZMAtu^g#U z6M8Kz9IE%CE`>waLx3``c7r;}Vx+sG%t5k~=TIa-!FJ^z1KN42{4$_Tz_ox@4yE0W zVU|rCI%<$AUWEP6()H3md8++Sfd3Hi6TrU<_%YxY0)7Pexq!a~{0{-w1O83G?+!lC za$CCMM}Th?$=?RNg+uvz`*zEX0$yeR!16T?ZIhT{xmLi5fV=oJPnE8-T)`7v(ttl$ zws5GPXgy)-O1}`$ zfz;Oov;+R!gkI@q0@{%Js(@C&p9&~BT+&bEWzw$0_3ghgjrUGjgpPinL-|I){T#A? z0`8Nql-y?jc(Oz}o)PeCfKLm!7w{Bg^PLct*S)}TKo77tA)WcMqN#dMty*f#{6myH!vQC|}k%LZk(gp>~ zX$yOqDeKh-B$p_|Z?3g}a4`p~?H{b;pxypKCkH9}2Wxpb+j2E;jX?Ek-fDsB)VvOX zYSp}UfflHFDfLrna;8s5MZA#uZ8a~>k-SIEYZa(d&5OBb_UdRt&AX6yE3W26IcQb$ zS~!TQdCeTGQuCTPxKPcDa1d4V8r|XUcg-;ATEc1r|7}o1{5Pat;O;Qn;wg%HzWeH4 zDYAO5Y`0>@zDGUB{jijCgy-U=9qO6x=X#a4tIOQ~E=@Q>p`OXS0-L(XQz`{}rXM%v z6}Z(J&sh>?bo}E9jp|%Zjtksx&f(x3_nXz8yQP!*)+=7g6W#}Aaisjv_iUwjC7YOS zra%U>oi5NuW}6|yq(4ue9jcEgXLi{zmHTJ4bO)Yu`DNgEQ%7zX zDf9ha8hwu_9z1I=DdfoZ3 zcHbV~RlY9YT3@TL0W#%6UlmRTDD;i@<;XVYtGGw&Yn4)12~#ojh=#Cx`Pk+<4AO`hs4mc7o0y%XgT-cjB`>c6c^>*0I+-ZJvnd9Qh{pu4l1lj=WQ@_DuB@ zdB%B8c0T3tu@~iwJa+fr+#k8$bN|Bql6#-~QTKgvk^2_+4el%5hI@@W<_@`+yBD}; zK}V7A9_t?A_POoq-_(!P_tamgKUROBeouW!y#u;|9qJ~;EJ&yk^<1@Hou|%V3AIF> zsGgz@Qkm;>L@{{Z^}6dN*FM*yuKVQElv&QVUEgr+c5QQQa3x*MuJc@rU2|MhTm{Y- zTw`2AU2d18{FR--u91JFOlA}0&)Mn9V1>yK%TGf?aSywRJtBWBzbC)O!pz2eEQf7& z{tmGbex>|G`Jpmec~W^;xktH4xyJdavRPTDB-ojVm#{*qJ<2Q3-pW!SOMxr}{&!M< zFWZNI0tJPTsK(y|{mk7iyAA8|w;xn3ckv8^-}63Vxl^^4oZ&O zIkx{}E$}x)dhXwVZx*=lcfem4*uMt&CV@}-(07StufU@VfcFSI)Nb2mxj|sZX!PcK zj&Wckv`o82`h@Mi9Tp)awatL;M94#&a7e7WlxLu`QGL=6MTXql+%Hc{ z!&}`iPZc@5k3bT=f@AxKl>2#s-(KU}Al<_2v%fV`trzI!dKJoHG>1dt)x3mAEPYt5 z6@~n_qJkd?>{^C5$2hkAc>vO%Nn#LM_L3Ut+q@%|tMk=7L1D|~0gwZN1!!Q2Oi)*f3@g399Zpfl*)_@x z%V`2HI~8@jE%3bafPWv+o)#lJ7c*A@1e< zkZyZOT`p3;KHu?6OEF(jZ#-8nEaE7!UuFdY?UNaF^WZp%XJnSgh1&SNY8_9CkCv`e zI9hd?Z->wTud;bRmGduU_0r88HeCStbq*Wv1a(gra3|ml z-qQK6stY+d>k?I1Ma~+4A~*4T%ZI{3kjLTT8!^rVvsm;?l*UMeIk1*A=@#CEnTBzR13qEzrNRFRFNvX|JLBukpmG&)6OVwUDv&i-9?(@Y{ip@GAdB zz~2IXkHdn80Kdy&{)2#z2>4CF?+BOze3(B-zEi~~h0aZiLwEg|fHA;NO}Jb7tAJ6Y z{>6m5rGFQ&1*v~F;cn?q0yZJ_k0#tLeZt|yA~gFg4kw%hT210`{M|@>U%brR2Dep+v zxq0F#&mi$m4oAI)I$sg+29zJnvyN)?eKtiTjziWvI2<_wSq}(E7L-98=8&@V#{ymk zt``t+E1+LMFFwSv9FBMuqoG?^XXs>skE2($@5)R7!Eyo zxUKRIxF7TFa0qncz?`uH?HQOeMxYx8=7>?~zJ6ei=7HmX$oit>`_%Ub-@p0Z^!>#5 zL*LWB@A~fd-Ql|l@c^&z8NNB;zEQp*J`X$t{_g#E@9(_t zdSCY*@ILQ-%KM1-KJRVbz20lQmw7jOS9@E%jox#-_1+rq>E1GLzV|e5j(3n(@k*Xg zJ%8}L=Xt~P3T)m_d%laPg139V=Go=B!n4V9iKoL8^MpO;c$Of};4Db{0Z*>yRL^kF zK#%OPK-T}G`#0`)+;6yFasR9PS@#p}hu!zNZ*}i=?{sg2#J|p+bYBRW|13l#oa3J6 zE_Ua-N4tl*J&^i8SO28`R()4}L;Z>Rg8Gd57$pC@)SJ{@>gDQ2wL@J6pM^8kg=&>r zp%$oP5xdZf=!O3Q$^Qe_FI_)z{m}K4>pQM{xzxWM@eJ3x;;u&53Rj)0+BMbXcTIqu ze6UMV{;B*$`JHkQQ4U{3oWntX8AmMiCiO}E|@v2VrC1cc5X+!@sAT0VpN(ZBpkHt}KX?Ao`JwYI=TDt4 zIG=Vt;`}D;^4B}BbapvAoe5{ed5&|DbB=Qw`~@aDPjQ~)R2=_w{KfG*$2*SK94|Tc z!}H-m#~qHZId(d>IyN{u;K2}fob6cTnB$n{@H-|rMmYv!`2ExV7yIw*@7Q0nzhvKU ze;i&Ici8vZci1=EFScJ~Z?>OjUt+JZpKdR;Pqv?GA7=N!=i_g-k8SVU-n6}9`+@CW zY~QxsZTq_ITKHvLYFllK*&1wT+3MhFG2K>Tn`}GPHq7R+*{q*g|6qOB`Wl9?BpV?l z*l0y38y9eh1)XfH^kYIyZni=N+Sz+B~#@U2m31`L% zLa>87jk6$Pz`pJ@&IEw@-DxZbfN|exECYaT-)SrbfN7r@OQ=#<_L)&n2!?%TEG7iI zJ~I{(f?1y#b%fx2z>Hc#@Ka#MLPBsSV8#MM@N;0s8HC{Gz>N8X;N`%K8X#JQ%EmlA z4PS&ZV=fY{aF}4m976D-U`90%v3F+7rZo6aFrx~H*dH@y0TBaYMkOKeA7;!1BL4|y zoDM`Q4ra_CgarpPrUQ}l1T&@q(K3P=Q-R2Jf*Df?!E=HcK|*kxU`7QY_)RdQoDke5 zm{CTEKV~T*I8De#2|WlcA7!H$P@*LlGXl7ugZYaYenObOm{9~Y91{RD3JHP#GoyeI z*grG!fyh~c8F@go{9(pqAaa#p#v~w`=9!TTM2-^7m`DhI63m!D2yPP07*7aZ63iG! z2u>2RaT@iI*00PMi^LpEpv)KpL>>~%I2DNIdZ(dbD8N6$X^aMddxX-Hi1{#GW12YBzjpStq0?{5YW27-f2x5Z0nhZyF3dXI5#kz^FR1DFrE0H4XzDLC;kV7G~$0YI5sf-EP;@ACLy>rFnu{8 zcr`G6nLxO^ln}Tu)0Ysk65>n{9t})ij5J!;GM$(pEnAsROpunUOeZEd0;^A^6B8VP z#V6B=2@c1qkLkn&X-&s;VuG~5VtNe_t)yg~m>?IlWqmFnm!f5T4ndNKWxX1Zi@;1L zK1eNS+H!Cq`)J4_HCybxJEI1h)mImjRJr#B^eWBo{Hggb>6crWX@}R3z&G zbc>7JO!p&^WENR3LLwJ*nNEz5+!dHkjL-^i1zFFh+a%>Ooj9QcUj?QUCnQ$|rV}TW z;Hkj$TtaYEU^?f7@Kazqal$c>QJ7AgkOUK^6DJ%6xr6Da0S(8(oatkMhGK!u^f3ah zm-SQ8u$`0_OxKV|QZ3U*6M|67^izOHre*plAQDxXJ`#w06PTU@MDiumPX?kDFVl$~ zlElpP;XouXGkq8kxg{`tC?R+yFrC<;6;26ECw53a2}~z;I0E7e(}^9DM*`D{9g;%= z(}^8Q@JC=eu|o;&2(nJ>&_cQdS*LXd*LpCW_#ycs$hwL|2kC5>P7INxYNiuIl;DWK zbYh4S{1BMV2*C}3>BJ8ucp)&I_#rtVFrE0J1Rn&Zqdx0!$V*JeCu1dXiQ%9yAV^D2 zUBaXQ{{!bn{KEUdxdFd$K48QN$@hQ}BP7Agc`@$5^T4?dzi>QocH$R)2hO$lh1&rm z{zqO1jM$$IP6v#*pREpnn4b+U2aI^14IT$_k{+E@F7ibjLF2-R^$myICMS@@)lZB# zA2}N^VtnLlz=-e3a5Z4W_DG}Pyb$dt@EgT1{0y8e_=TH+vl+keGH^EG7fuGw2!7#X z;B3S%TnyweHB7oCM+4MJVbu}BPlM{X06!s>fw^%VljD5+Dk{Ue&SHV;$Z;-yWz`9m zMxF&uFf9bfm;lsojz!36Q=Q;l7HD}`Eu}*P=LF-jKpEo%+p<6x!_L4BQns=A1fXAY)S#qW zb6 zM3XNg-Xz0$fDvnw;X5Et0|6bRbCjoY1eGHr&O~YiMvRI41{m=r1#Sb3vn6;9Fycyf zI1MmjO5`)Zh$oTD03()UfyaPM9EmGD88IXa`~_GM0BOe2#DWGx;%3Bw21DRxV*%U{ zci9*MkapRr1R(4(Vm>76GU7d?(PG4UNKfS)1xmv=z&R4Xa1C(g;1`|&PFjJ%F~B(j zzwirS#BYW}Kf#FI42ODx5w{r*?Swo81mLPg`6P~@S(FD8B4r{YW_nRuQm``OEu;fr#9Bz#NGmd{3=aSqv$B<|N*OU0vj0Q=m*#mi$@drEZ+&n3Ud1T@ zPx-#%yVv&(-)`S_$o^}6abKhFY~LcB3NQ`l0!;Lc_6>#PZ}WcU{n-1V_bu;Fy)WRD zfbT-?ztww#_bTru?>gB0o4n^i>YwYK=Jk8Wdq+a%mp%XR{Mqws&s*?vf8O&io^N~Z z_T1#z>DdZtKZ)}M&WEf&&ojeQ;+cdFW&dRHb$w5u-A|08H{L|zv(vjK7Jx%U%6D036 zXBP>u*dNHcNJTarUTUn1WLR=iV_hV~l8+keA}N+!)L0j($Y>iO>mo6heAQSNSCL^? zBx9z!fXf}+?bIBBL6mKTts(iycnc0Bkwk5B!I}djTxjeBi}Y=v;xsCRA$70XcH6=0(oVlnP^SEaI(=vkX+$pBSMfo;bfzcAUVRx1}V~P zkLNng}=0rmjY z`l_J?DE3YAo$4Fz^TGT7@7_N_3-C+tE8ZV?zvq3(dk1X)JD>yT^u}>&;91^<-dWfw zp65N)JJhSf>i-wdZ#{2&UiG}-d5U&?cWVGH@-)HPzsOVVnc^w*oaPzf@p^3T&)k2& z4)NFAFT%$EUBoB&hWk3$_cyxR-BI`Xh&wRPJ>4B}Pe9Cpfo>-(`=6-q!><2h_4~97 zUA;}c0Vfa|>KZi$oBncmyUkQf)k*4T^(0ks{loQV*RNe~!J_}X>wB&TUAMWecU|Gy z=t{wh{~TEJt6b%-$*$3`QnW=5FUIV3@n%`!Ol*gtZ&KAH!dF!q^Sp4^N&Gwr==- zOloq%)D7Q{Nl^usZmcJ#-3qS>1-5RE;fNu_+Kt7>v|DRcC(PaO37LduYv|d$zH^2Z$Mrx>`H*hD{S8OkL`aFHgEgKHdw34vV^qtX`A=QwgFBZwk6A? z_*qUed0Qq$>z!orwoGbS>?DJ?Wm3};VehuRZIgw)d;DF}jSTi~JnR+r*M+&;c16KM z4CZc1voT@qwmEDzVePg#C|^F^h3|ndcH^m#Mm8p!G$3CXy9eakq_na7#_@LvW4HZv zs)g)KKn|IV-8QQmMs;EBMg)eP!rBdVjj(o0JEdL1+6{y>TGUI|P#W2rfOa~`*lij9 zV5<|hZkRfUKPbc04dT9BKm6Ci)*Zh$K3dqi&wur-ON6catV_;+)d^d-#oFlkt}u0D z(ExIi?MYrQZ&YCF#!KF@RoZc>0%La?Z&G0HPUFoA4BlzHL4nCTjdcY^?=(g|Sk#Mp z3|Ih7yj~&Gw@BZjknLOGE(OMK!drN|s)@HMuz#o1(FeuE=!0xx^Z`aFQ5JoGtx90@ z0q;*>^Z_n_0;3Or0;64eqtcGeyj_cl(XM3TP0B_SZcsLuP*>KQaHDdG2@M4+e^K3f zWt|DPD4izkQr2>~iP~FZ!mY|`6K+;IOt?X5H=(YiOt?{j*&I!v219|}T)_28n+dll z2@`fHaSpqvwN?{uRbnRGq^vUGX5~T?ZcvDkN;^L-J-x8FJPClh{H?q zX()9j+@!!Rj|@oNtPrE+aDzg8mP1_un-y@QGT(%TQe(pP3jB&hhAj%`wNzP`!ddN( zjr45QJOkiXWwr@7DOD!itPr!6DDMV^crAyz0#+-ap`32Q^~wwrZc(P2uuFjvA9*)W zYp~)AxK){A!c9uhgqxKL6Y5I22{$TbCNz{%6RuZEOt?iUHer_nvp$+wPp$b)xK$}K z;U=ZfgqxKD6K+uQO{gn*Cfuk@Hld+RGT{~_*MwclL=G>Z)+U&6t1{k%o0M@T+^n2t z!VSt;6Y9zs6K+&aHKCzsCS0#Ty@Cfq6I&FhR|M>0$$S%OmU=JhZ3BdJE2WF3&;d`CXoLGkMtpV>Pzk&F@4AUC<4cy7?|L_~Qi}wHj z#<5j$-0Qf-_X=dm`<=Hr_c(VrH_QK!pO?Qa-vzn#8hHym&}-#{bBs^%4fg(1u8_yb z`LbIc=KK)8;cq*B>v+}ig5xR2!?K0_j{TMWOkN>3vhD0vc0Jsl8l5YgwazN%I@)D` z-S0BA2z9=xz6m}*_7U6zJ;Qa_XQ2DmAkskCw*tQEW8^B|8}gHoZ-+VE-gmIW;4kbT z`w@GVJ<9I)J@0$c_b}^#fBSjPg#2gu*Uk!OzVAKxE$@@wE1`in53vWn<^7qr!>hwL zA?h9C&G)h$8T~`+oOx*l%z-v=48&*SlA^OWl=jhkK#>BKIilEQq)Vs_&>zsy~Ca z;RQq$xI_Jx`UiCn_7YTM2ip*Ju^LtL)u5`Yry>I4vxpyX6Cwz_4;{oKuD`qPadogYSmtVVUE`YO+UzQH$;zwBN6I&pca+avLzE|!=au`FPNiB|shom+12JWnGFhom zwy>d0fgV6|zT*78^HImOj;(Alo6XAQSH4Qi{%l{e6v$HGC=_sG=}XF6NW;=^#08g& zrC%cm40e`Gl0M{M(q!oaz8#E2I!Zhr1&wIUVkf#N>3iJCc*r;qFLKPKUcANjV+v zjzr~jxI2=S)8Xz&SeAaugKI%rmVUw!#AWFfjvy~f2RMSjEd7`xNX*j9oJ5dDNoak^ zynsk5y~sD};tnL#AMyNDG4CKoOONyRAxBG(2^6hI#5;N%NYc`G1!`K7-cn1lbb3oI3DeTU;;loP zrv2Jj%8)pn-tkKEG;NcnR0w40Xm=!0OAm-th}5)8nleD9P6xXqp*kJxj-+Zc*d4^` zbg(;;tEIbnF%qn$yZDoH$vVBkl|<|G23C@-(_1`AxK8iYBFQns|07lW9c-h)kYc6tvs3EI;2 zVo-2NTiTtu*o2+B^ucl&e6w_I=3;}iD|4YsJ2Mv>rE4-5hIDo20;}xI#TMzR%te=U zW%`0-ZfSewVykpT=3o3mWE$cG4t22#B5MP_Y zTi0ap=G7Uzp(BI!_6**b%3vdz!Rs%|;4N(#+?7boZ;H|A0yeXE!n<*j%JtOjO zxG;nDXa;X=$zY>7gV$5kigej66t#jd3Fj2GB8|6FOocSwL{Tf!cr!(1Z(WhWo6gGM&1Yut1`3Qob)xLXWf^Qx z)Qfcb`Xw2>r9OkZ7N;=@?29sZQ(Xpc2KVIkAkT({8LThJ;Efc-g4#kJgF;uN@p=l) zk;Yr*WpLNrG$zq~P6ltS&frb6Gk9}V25*>^!Fpu|8#6O_{plIJWkv>fO;2MI;-_Ws zR*L^Y{Y3hvDH*&un8A8Q25&6SV52O9*OzASmXZwaDo$e(=K~qM)t|weiZXa}VFqs~ z$Y4D`gE!`7urWD`#z!1#j^r0dn&_n*j!4WuIgR8ON0{g(5siQ(eG!d-ME#-suKbex z;t+u#?4OiI*1aM;1Bv^CcpAz3A|wI{{32!mN&F&a0Ezq}Xa>prB3=Xu{ccefQh$0w zKg51lI?cUD#1J9DU&H|9l0U!8MSmVN5VF5RL}%DrW9Ros`nPdJ;=dI)tqRHi9(J;1 zv;9D_{lI&sYt>O!sM%Xt3S=qp6{WzIx?N9<9Ei?cwru6(pwyw~j*!M~T-p-R8Y8J_ zb6iWcB-W&~kd{isBCT<)EtzPF#v)pxNn4aej>bs5U7H^YU(^vvX;m%JWGJk~5{XsO zc(c}?SQAP%rnGj{*3{A7k&F~*^CDU_rKLKO$wWuIG190tbZV){>PRva(^8$S4T)Gv zOGesIH7ce`T97>yZjUD7sVV42q$8O~XUx+=sEPWB&QP{!e03tWI?_sAipF`f(Rh0@ z(b&PuQ#R^KHB}LcH}W!c(H05eIoqPiXglh}jgU4c8HtBmw5C|7Iny2V7S*;;UmK%g zEu4rYI+Ce8E!v)n#G157YeOU!i>6wTZ%wqlg*R3|hk6-8B~1~kGXkpchUpQBdf`qG z1)XmUwS$7xdOXw`(LzZODxQiY+eNEp$KSnlPYMKXP84YLl3MYAt)b*9luT)B&^-N8 z-p)uU$?MdbqC^d}O3C7-7I<7#IGl*ad3}kF_DE7o61f{AZP9SMsKX!7QthE+swd$% zt%xiIfucabLYNK=EqBwSum5DZei z6~X*OGTI!Chhhb5A`NXV?d@%;DTRfRctO0QHHy9#gcGfW;ZS=B6zVwMI{g(z1sAq8 zhhh!UcuQ54Hfu$GZB_n~O0)WKG7@T!u8yGYR*b@eM6$Us77a)6c2b26o%!)_ekxR0 zQczUb7>P6%MBXKATdh_LgKMqRk0KlaWrXrlv+~i1JLtjzjI>@0b)i zQsPl4KXD{<3%r{;*A|T>+O;L2aHz2(8Pcjk4K%6J9m<=2xuv}+BK_BD}6Tw4%LH6%j3mij0s^L+F=noQ3>k;Y~|Plc1wHliFJ zJcJql-Aiv+T3@-mddZTSN^N$XR=IS+exr72O;w$?WZ44DIR)CRNG!32x0t2_brLgP zcTK2cQCN3=E44$36Juq9#^ktKreS`V&be$g$uO#^R-#^HB0L>kE>Vb z`%IZt^>v_R?Od&Hj<$4OwYH>g+0uDL)JmeMId!)22MxtAc{Vkb1&V@^aIh#GC@3p0 zD-9ME`%i50JZ7!w>2pyc-iEOj)fPpP9j&1lpGc2$3hg<0cAd8CsWtf4C8JUwJXxBa z(kJBN3ZpKxDyl7wV5rhK;jgwe+SnM2cwDuSHjMN&`2O25WN~wLWOXRs97;ya2Zx8E-6!GbNZ2BV-x)Yp(`Z>ItnUwr-4qee zD0b(;JMPDSeO|YCoZe3yC@L>EUv!)vx3J9L6b^@qBSqoTrcj`uC|FYFFDnY1*jqk& zmFZVJI~tFGOH_tiLdnh$`TsNNKFKpc{hjLv?1253mOtR~EBViucKxQ|ka7z3b55Tu zk(5K{9#n&Qc0^)Y9p1V&FVqsR#7j*^8xkEPqX@njiqjm>y_|0fVFkZB6vNt;7;6tX zraMbd9yX?`vbJ(|<(O_ROso6?kqACeRE(u^DZYJ3EGds`UY~JbzV9%`eq*SxtfZ-; zqA6Tj<`0)OloV7H1uM#e{uBJHk5Om(jW0~Zv0875#x`HL`vnpcM{kXc76c?QaY08| zThP%NUR$X(M-t7+5VGR4&{{)nH07NcNzok31+KOTBrKX}=|k!vZx9uu@i?Y1OsTjd zzCNt-F$a-+WKNwVtBAR_Cw&82^|JapAyKwPlF`<-1Wk_#$diIWh>i#$FE8^NAue!< z^W95t#FTOq1S$v(C)|i>cxjc)mM?&J6D%&x8w?hi73uFCIpmobi zB)FN?9r0;01W0!(6!#m7B&lMU9(1?oYQk%GdmJbK*cJAcv`AJFVJ&Iajdxzb1=$+N+tgCKrj@p2p30! zWl(1pL8IwE!L|CaDoxXhEYgn1Kzlt;Ls4<4Ash;n6_l2i zmsS*&mz~&9I##9qPo&MOuDz)=!#~rOl6z1{j;6QQXor#ECsR@=no2X z&EA$bNGg;JM|5(lK4gXNA?17xlxFpz_^SL_Snon3-#G_XGB`kB5w<1{wHgVt$q@Vy zpcI_9P+QzVmZj=gbX^E$rWRPb;CldtA9P{xS}?UxbE8T4f}q4)vcGfdUWn`G8nv2a z1ll*)wW6V9C{K$;nxTn@%LKWU6jU#$IlFRJ_0oC!9<8a__vq|u{Fz%{x$n{X>bd(K zol`TL(&lLU9);S!epVkPR+8k&kqp&VC!T2A7vTbc9KPk?Z zz()WbflCWrp(vEa^Z<#*^fU94WUoUiWr3-$y~Px&l8Md`^pg1<@n~U1dGG{fs6%Q= zPyF#v68*u8BHdpKXZP&ykMWSL9rYXL}+BMMFoj z>ym93&^t9IETeb2OjmN?=kVYAPRT}In`n0-1fTT6 zP%<2eMdJyr7V{|i@M)E?)=0E5v=mdwqKtb(3XU$Z#wjpet%jj01uIavB?6B%ttpX& z7ONTBE6m8L6b#;TC`)4kj(%jf#IzcLn~XUt^(~(#tl^lm;QeVjQ^E%@z6x_YO?GR@ zF@!uZQw8kVix$pt0gtglrEcf>r0OqvUt?4cuFa3atd*F}-5$w-1y6Yf(Q1AN=E|y2 zGL}ebHI%xfjg}uU0Mp%AqzV2wrjsXGb;XA;e_3U%R#jQQpl%6D)mN|3W>;&~OBPk` zzoydTA_iDdwC~YAl<3_QZ{2LqBvJ&%Q&P7EDo$`&(6fU68LJ*gfmCjPU-I7Vy}&yR zarv&mX?sQX_dP=qeeVhEZ=a~Xt^QPf4)OHvS8u@?d0W+saXMa&I$bTq*?7ZL)%8!r z(fiQxrsG4$pIvV{*0^?JH@k%M?!KusC?n(pIL9vTxJDkweu;DGhBrOYXFpDe zX4=Fm_ykSS%1g&-RULV7m>Q>@4Zjs!)<>+SjZRAVDlzqC-j>&E(is%Y=BeyK>_`S``=cUyh+?~41S((0?Kz{p=$A*6xBvTMlV0-nAGMr5h{y->#WTISYp{8zdi%D~{X)#@E8aW5e=55Cl_C98(PcM| z>X(Xqmt9w3lg8EdSP%@o?7H&9PmA8IPvzRAv5?_u^I&r#)>yseJB#|IAJtpFk>4*B zoxWvf02SE|GkK+1WqQ@qz0&FR#dAiz`CljWOJ8Phe#(oAJU#o;dtNxc#mvyn->JbH zsp3mAttZEa5`0F#bhUc()#vq7MaK00sc6&R`iD6W-9#+maLY~d|F=o6N=lH-FjLz@|Mt!d zUdkyv(=G^YX0*Stq!UZ~R&0@~@MDWqk$+l9!#1*}>0^%B*C<^0u!Xg>G1yoE{aiz1 zaY+g7gdHT4yXWeN0m#-k#6#6z%&ldRs?tCKe(? z9GSm~aNX@J!nS>Uep9r4_h>cz!^Ufc6+V*cB<*!&EV345l8D-nSe0n%jI1_0_@((p znZKgE0sD~P>E6`P5B%cL`ugw-e{orcUj#~mCco%@0`n_68b*dv@*;m^Ht_~py{tVc2v;PsQg!~|Ge z!6!g8eAxBK^GBNle{TP|m;(W3juq>Xkuxm<@Hr4S>_0#99Qc)(^|+Zcz44FFYkV)J z`DGptn>NQ8#w{ufuhRO~hN+V*fnq}AEIJJHA?-y>X!SJFc3Ve}KHd*E^Y_a%MiW#c z6xmUDR`GcR+yBLuOf1|wVlZj8kgpZRj)~JB?5LayTPLZPh~lT=NTH<*c1u zgT4Ly5$Oqq2^nrpV((z8JrQ2j+5Mo$LtvBTfWSR_$|qJ@A!MjYq93IksrOCjd{Z*f zDxP3`ydl*#^%&2A#VPGkr2q!}5lP)2Np|=DOEVSh#;z!83P&o+B8~mQR1U4L4^#1% z{tuldzr+M-u40clL7GD;J$qr6s2~GEQ4#<9Uoa#0YA~1?Hs(xe{(f2M46i-ZP#VO} z{)VDZKg>;s*4Jkk9cgZI(%j@P^+PfXCZF|KBI6JCz&ctDTS9TCKxz`9J8N zu^4((?AVbE8}%BICUT@vor`)nt8!nAg^89>Yb&g5%WJfWvmh#AK~z?pTcA}Y5n84l z8>bO&#pJ8t@)Su7xjFk;m`EnDw1~skCXq~u4ea&s^NeX#yCkCO4r8@fYmdA zhp`A6>0VSF2dA5_3{^|90ngu5jI~}cSXPFx8Nrf@U`fe|Ie`hP9;wPSRTo7X5pWI$ zr+8TG#yd{B_9W_-YN+-HV~}=D?NSnwaR#>M_8qL`P}~$vrrP1AWk%*((UHR7g3zPY zq*_9&;Q6%#R=E)LP>~5RUiTP$X6OY9Kft}4gi-({7V!BW#b}(4=`KHp7Bsv~h?%(6 z6b(l)uHhEe+(CLJ%1yT+g~BY}IYq0EH&c|MJb0y&;tQn_FAxz$5Cdsxs5L4?=Y^qI zsI!2A-Bd1GR$r-ou=}C+w|(RNn{Lq#KCt)T15Y1(V9&t^uRQp`bq61~mjnDY4nFV@ zuqH~?)mI~^&%Bx?T5a9ZY7M^&swsxh((2mT)%Cb_W*xi}>lQ4itY3oA8}lk_>K9hl zdR(*WD(h!cgq^Cog$rvCZ>O%dnsQLevikb!+Nu?x9`6`$q8n;jA1e28@5%j=P}t*N(`NjBsQ*=T6|pO0y@O+E;LUtzLcuKhc**mU z_*e&#n`m2rAcxCqYB9>HmsBmAT}Pt@@ksE=)GWbp%F{~7{SU#Kmd!$x5B=F&A-{&t#zoX0g6N+UE%p}OE6QGzWMC|8H@ zWDQu0AGJ;M)q)}L$HJQ}FD@%D_7_Eh4dwoVlG2i*^5PTSgnP_d`}4&bw(a*cW0SHJ z#sB7H&L{9$n2(|Q3TXiNpMp5$X^TRsmX0O%T@za>XRGnjx+VHRF$KGvugbtDjI74Nji0{1Xmu}q$q$Eio0gr*(RH)C!RCRYU3 z1OI}?6yFuOLB|`R8&8jm0&NK#!MQ020n;c%BDPOe#l(iKi3ki^np?2%Hm&rK+OZu= zTU1|%skd4~M7%|nD|oECS=E*G)%99kE%+zq>DeLx-m-->Q_rbcUJXCXKHhBb#k$(rb(rAi)YbFCbL*B@*Vp2LYQto|sPg}{cdapQT-SLV z*IsG0E6ER`R-M>msj{?MEgwS;A9n17%jHVcK236^NJd%=$>A;~F1g`D^7;{FR!-9d z4G^P2T@-~|8&Ykhbt~Ag zXIHk{4gsx}T=MeXbI-l^+;hJ3o#_+U&hZiA*6aAVeGp_bB#}S{!an>DgMxaYf4Tj` zqCQZ2hv)-(uLt{Oe6wskVW@oQD+T{*Y;PI_aUu4AY6j|TvoON$5;sn zZqRgl$*c{-dmY9-M3HgGBdRG!9a_r08s+O?G|n<87O{YHl%)3D9i-2K=EYGR2Rp}o zII5e!mr0*&Y9~cZC=Oqor%ablsq@RYs1<9?m+Q^vVFfEJFT*)Btu8)}=j@Xp;R{4)dYoNGdNs;LyvP{L z<{Q<9P7QMXM91wc$Aeq`L%6x`4WaLif%$%!X32fH5^yEpO2CzXD*;ympH~U2Joq~= z-a+?d0saq_+f*?z-PFJ`JsZo!CX(VYJQ?h_8Co_oDFfeLy7@d3N^y%;P9s;cR)+<| zb4v~TX`I*5aIwwB-0VUbiitq@V?7t_;(NF*{GrTxRyyc!{u=k>J3cF!K6_H7DrZU2v0J%mD zyuO|fpC#AAyUfe*F1!tw;f`R=hgaZKcn2@Pf}d~vY~{n(M7SGX6Y=aaz2U)2wf%=UCK_nuf z23{P#cV57S-7b3iJdE{bcRwJUl%;wq5jb$cH0F?7uV<^9>D2hno!qJMTguZ!g8NTwr%h zFlF$nNSv72^8LhZgE|W2ZL2cnUZjiU5tWJsR+pmEm|p;T6)0wih7_|}N2^A)Ac!3SQaId{EdI{qm4!Bw z;(9tgJ-VO950YGjXhsv0aQh@rB2qIgP9`&nR4g->O5hxc9Y;VW0f!HYMkG_>@#J(m z12<6o$Xp5@n8``_!DH#GSB@n!u_l6WG&sJ zBW(n6Vsf=O^U>IjTVqMv9Vtp!@&nuzhM!&zgdK)pdNsP1cV@8fFNJ|y#)ZCL_T9B3 zw*8sGzZv*XRI@*Rt9R=Yw~TLj@pFF`xgB&R;7Y)iz-KA}Esr!>Ld$4G^+S~g?!|xO zz(t@g1FAt$i9~jG!&EU!BRv4bG!A|gE1?^gei$*%9>R05Fc+bTj02+;gaw2wmzRA? zw&2g>(iQX}u;sL1OwU&Nkr7`;)UkxL8qy#--pWhb=$_|ZP z%Rtv|wPT=rkpgPQp~2zwtC-MO3051TVq{w&1rd=nvLN{U8l^SF0|5r29Wtg4goZG} z5GRlj7jPC7Xm5h|^`w%Uo9M3yQBt{2{LqF#ia`T>5H~mhq)Mc*skK#A5)U2}yZtbR z$*X&S8p$EKk+p%2>6k&nyV+Y_`DYV)3oxFfL?Zz|c<>5PGC#=5{fJ4!-{HJMWtTQP z##BMdJcHP!H3nT|bC_g1M3#(q9qO#+hhRpNpQfgw+9nkr-6M&=`2BCwzdcmj1_mtN zPBmoeAUMHJ!qt>Ep9UZRRE38W6_r(4B~qZlP_f8p0u##{yWZbE@dsKBZ>tFZ%!c`Y z{KuW(ciDk4(yqZD!2J|aR8)Auc;WN;zm^AOz^Ajr%Y{%jD@7!KNY2VWj}Pt)Uu45a zS+`a@mfs904Q{}eA{Qb7Dd(5es6UUANg?bgzJSwni|>iu+Uyw9!(dlvO&*S|8)k<9 zL*Q_mG|ytzM8^<@!Rug7%Olz?n{+Pu{m`!s?dy6A9sPX(^byqGZ~#9b@ki*t#R^;y zy2+>S;xHM2iiu4pW8y*4{LMH!E$4gKAx5da3EsHf*^wY>@AD_l>NDlfpBeSEU zJzHi6hSkcW_51y19&NkCjFh;xNx0F|iFq{A>(-t}J%`JWDUZW5S7q=;R=shA%^u1W zs#W4T&Fgau-#R9c=ogUl1D`12JE^X2O&k{e;$rhs9!YQrFdPWu&s3L?)It%n2xYO? z!DlLVwt4^Fh=hc1BozgGlCFKykSVWEssM5!oR#HZFc&ElHX}o9k=$|)ISdFEpz^1PjT3n6^(D}2*I*nR)CP8_28?V&`Hfx2_}|*jr?3_S zMnCx0(7r>^DwNG-lQ{-H1ghseU&JlLzP`G>Z>Y=q+?ehFO_$3nf$(POPFs66-SI~v zt?g85(U=$`kdXY}+FTIr%d;WNT~~{Bj@L>7?x8EBrPF{q*O05g)Y9Lv`59en+u9v` zRS;h_MObSvQ9yTZ+!w9c;ZH&TgFW>h?la4|fowipqOpW^frL6FZ(9}!R--~amWw$+ zM~6o~t3-UNKeAcs-qxN?-P;cji}k>_C^|N}3#I+kMW_)*7o#JG*p^fnXkaWy^>{;o zlDkOM7VA%sg>UMRbp!bn7Kz+*k)Q-hnHyvxycpP)+V!A}`vjuZ@R`+`muM#mM7mDA zlLZp;MRPLB5G$LsK-$||Z-GREcH@fHM=yD_$>N5sfzL``LOu0m5?1$U^AeCSWtKvU zA_H)MBNyURRvTawB8rNz`X;cU!N?D_wYQ$ypaS4pdUKs}xv}cQ^8cgKA$YnEg(E|Q zTmDEG=sP29`O=Qa_Sd)j2UiB3-S%hw&-5?%o!R;?TjS&(a38J&TnV@ma3$bMz?Hye zNI=`GJw!2s-P9PO*?aMy9?do)0yT#H^n&CBwS|MZprnM5y$+%Ve;6!6&f*w7+T<~V zlnR6cvaxYpIj8M5d&y%-dSt`sr5VZzgu@YMooa8w9$ney7cP*DKF<&Beyzp=R#ba_ z{eV?^5?RaB$)m9@u+Ulwz*~Zfpq8{VakjN!m!`Hwt5Q$BBu?Jbv^q}^X#fZa$AU1G zF}G$*;i$u@ZEL~amt9(v0_1E3PN&T)TOQ$ebv2Zt(4NCv9G+)GIYF z*K)rc0CYFvBjX?NrABR5Sw#B!Oj+Gn!YsP>1oieacxdz5h$$NE8vBI3=a^{BDbqI% zxezT#1)nTMqCO?+3CmI-h}2|<3blTlT*6?Ez@|Y^HnpnDcRD_D{W;0y+(>&`GKM;Q z-9yc1BZ#y|d z$D}A*wk^^z>vrl8ht=LhYYA}#;7!^Wsk>CB)aY&!oJF*S77fRL!ey`#Medne9m zcT*qO=3$78h1@%OfP-nHkU`djy$9Nu_G=7iai2vF*08@K&Q~jxMp12)S-J)zh+owC z#6htIY?fZ?n8oK+WR4iAE5yaR);Jsj158O`9A2)X1WAS-!G} z)6n}k0_9%6$LG!C*!HO9m3!Vkew%QwpzR|w1dHM;j|#$MBPUKamUEBA#6@N45a?hZ zs~bW>dL9=pO295u&gu-Z37{zeC?tn&88}xgYldPW?)EHVUto~+NMZu?SmNYl7lE1z z7YsQqy4&7_AuL21z=#H>Myj!ZFz#ZdTvkBEZ^+DeuGV#+i(2!5+ZVZoiYHfD^lB4t z-?dYCNC@m67WTsW@k70*%qpUFlo3@Q7c-1Rzmi@moJy&?er>(+-5$X7jyI+eVOc zP(ZYSx2Vw+pCE>p@ztnRQStQmzd4AE0+M<{O~H6wiX45tC1nU8<<{p?Crm zgVRXKPtKrI z^P(j9|2R6l?Sw&V82IjOHhn z8z55j{L@Q+{?W@n_~_Nw0aDGxrop%hcC;xf{mnSz4~l-+M8Ejf3&0=-@Ro#U^h9bp z(QA@I0gz3HeNk13_+`lx4WdMN*eMsEId9!s~QL0G)yUZq=1uIf;}9D(;m_kB@dQf1DFW9&+PcPckcOHW4Gn(a9LtYbTLWjq>AW9r7t~%wY?Nje*D(oTcn-$hV%( z%pkKGZzKbF7Rl9JrpK@{LXs>Ma=DNcQGB6*M-D|II3XQw+r1j)lLN}&5-1)~dhGm8 zGGK@jfNvp3nwLs2Gm&mzC(BKe#n@;nISJ83f;7mfnRqG|Phxzl7yks+6b;f=5l@M- zbu^J0i;eZv$w0sw~TYyH`qThmzulw z9GmZGm$_!Vk!1dbA`VTTwifuH$ABHHfGDzb23x*qnHvYQVGpi#lfg9xvOtxw?D9xC zXQjwqDP8GfLOh4tAT78rfp$EO6+|~bc9^EYe=HuDW@ZX5eu+ge_AL$(Hv~zOh_74p z1(;;9`tH^jx9;BZL%h*_xDs$B;7Y)ifGYu40{=TCpbdX; zfZ`<;>h7GL6l#rC=tLAC0Edmm?5di0U{4yCRS+VJ1y)aVk4a}h1+`F_vJ5^0DX`Jl z3Iaq?cexz!6PwBhg}HDO%%3<8mr;QRNH zeZMl8)9-xN1m$9ucn{b`hXusU)Y%6>u?KgiPH#Zgyh()s-vu-KDX;-r1d2@TVb_E@ z$|vJ}xGeN0MBovPgN)^Z1vk3>+T{wMG?<@O^#)Mg$(e(_y$QSAwEch0)RBce;gsq` z4CR!i5ekQ)_=lv1g1L|q@a2?%C+ZKN{DspCea}{TM=hwKT|Z6ObWh)F?!NYQdVL@M z@ds1A5zG_#akRc`Up3bo=twB8+7+9Ea-_9l$qR3kLsWyc0X~8%FZ33^}nN-66&=hS+of|tfPoedlMa1w-m^Q5kGZmQBVH0TaUL4h7oU zT&W4WKzF@;mu=ak*ur@9Ew+_E7)7xo3<(eYb$y?-5K3_mA!rt-=fo+v%w`kmnKWuc zHN-fof)dvx&`)9pg}9Mim=|Z&TBSz!|GupUgdMxLA07DKwx4dh9jN~U>}%W~t^`~O zxDs$B;7Y)ifGdIj*AmcTA3sSJWlSCx0=N`V6<0F`MMRwlrc+=FEZ>#09gKcF2E9)!}>;+#ju!fHYH#>qVA5MYPTrb?9GdYk?b@^J-z`zK_bc33m%xEv;X^ z3A2G9KA{?{C5)+0vkb|C02{#+D!>lbQKGN5P+Y=DfpS3ZKdR5`KqAl&BJ00K_2>aL zqUx4pUh23_T^`^S0l{KkBn&L*dUW8cMM@OMo;y63NF%IEv`u>O8s#{zzJ z;n`~CG}Z(P$w{EYs8Q|ZS{HpMm1&W0RZmC#nMY4!LUlvv8pRPE6RhR_0a;x` z!bGjLpa8-JT07o+0Vt|`MPEcrUjV$CFQLK%haNE1T6=KDR-xA!#+1vVc+?XI_%As& z(`&Fm6l{FoKogc#$L{}Io)fnJ{r261`v)H0c5Lgv;i>y@CE!ZHm4GV&R|2jCTnT(e z5?Gnlo;lUZYI{QS?gOUwGs$Xe!5)B=&P9A-H5XAMg%B!mM2VKcVH!g3X1TF8MG0vD zwWC(Z@&+NczoC8qRvoCU3=5C4+L6c{Gt&VLi?&!U<4&bt*$)BLPSwn^YW*x-_JLcc z`#e#n8gF5j{`Su>Ux4lb0D^sPI*Gzxi8P_v$LA8MlY~*H(q7CxGCczfJF>*=Altce z5#{ty=M3m*6u7D{=pWKOCgn;E7gqX|-FE`wjBGxVQ-cLn&PP2#Uo_$mOAe#8hC8KO zqkM`IwHh$pv(-vL%W2xAuD3(DJ|GTCo)(MVvfDzhd`u4Z#^s_4<^q=Wh$)B_kP)UZ zX%j9S0C>vAr0k;ZDVeB}S0P#nIpolxWNpB5d(iTlc9e~C|BW7}k#>5$19gbPXbse4 zk6`YV@-JCHS&L&HADuWy)0wUo#q?Qa8JRf^WX&yzQ_6yZ5@2B3TRnW!cDcr^Sj;wQL(jKnl`Ec1MDOQIO(Obr0B`+Apjg9NU zq2=Du3O8~#l`%q_d-EWLSs$8eMTNSDS-Zv5&Ct-*E7mYFYAnjXj%eUP+uRs(G9y-C zb8rZlZEwPA?pKJ-AtpR=UGd{t1`c2}7k~sHluQ}5oSO+XRhTM5^SM5lFn)}?`3Iwu z$#_h(j++MEd&psjw;Ril(S&8l=l2rP15yzloWW#rq6f>!+QY|s$t<0$fipMgl@&>y zYpMeO#BvGM-64t^(J{0L8;I5g{6kBq72%_{gj>=$N49a0S=rkLs zSEF3OoJT=>;>yX}z@zYWZLqa1*@zU51F?g_XNi)IRJL8aTi^&{RWSD_F!r|=s?M+g z2AUvI(hwWNk;LR!A|;N-GRbr%CPM9Vi@g*PtO*;AVN(;9g}f5s#0z~74hw!xyf6g? zfRcz4NLDL}G32#1e_TB+g7u6Pg4Qw91YH#RI%G^Ly7!{_hpCD8E}ww&Vs7flT#A0p kym#3)HY 2011 >>\r\nR ELF INC.','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'150th anniversary of the unification of Italy','/photos/italie/61c7465cb4ac27.18683276-original.webp','https://en.numista.com/catalogue/photos/italie/61c7465cb4ac27.18683276-180.jpg','Numista',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(22038,NULL,NULL,'Bust of King Rama IX facing left within circle','ภูมิพลอดุลยเดช รัชกาลที่ ๙',NULL,NULL,'Bhumibol Adulyadej Rama IX','/photos/thailande/1884-original.webp','https://en.numista.com/catalogue/photos/thailande/1884-180.jpg','gef',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(22544,NULL,NULL,'Royal crown','२०५८',NULL,NULL,'2058','/photos/nepal/396-original.webp','https://en.numista.com/catalogue/photos/nepal/396-180.jpg','Ben Dettweiler',NULL,'CC BY','https://creativecommons.org/licenses/by/4.0/deed.en'); -INSERT INTO Obverse VALUES(22652,NULL,NULL,'Representation of SPUTNIK 1 the first artificial satellite launched by the U.S.S.R.',replace(replace('SPUTNIK 1\r\n1957','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/france/62c7ffaa1d19e0.57834511-original.webp','https://en.numista.com/catalogue/photos/france/62c7ffaa1d19e0.57834511-180.jpg','PLH28',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(24276,NULL,NULL,'Representation of the "JUPITER" rocket which placed in orbit the first American satellite.',replace(replace('WERNHER VON BRAUN\r\nJUPITER C 1958','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/france/62c801bb9f44d2.91016543-original.webp','https://en.numista.com/catalogue/photos/france/62c801bb9f44d2.91016543-180.jpg','PLH28',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(25746,'Ian Rank-Broadley',NULL,'Fourth crowned portrait of HM Queen Elizabeth II right, wearing the Girls of Great Britain and Ireland tiara, legend around.',replace(replace('ELIZABETH·II·D·G REG·F·D·2011\r\nIRB','\r',char(13)),'\n',char(10)),'[object Object]','Elizabeth II Dei Gratia Regina Fidei Defensatrix','Elizabeth the Second by the Grace of God Queen Defender of the Faith','/photos/royaume-uni/5541-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/5541-180.jpg','Monéphil',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(25766,'Ian Rank-Broadley',NULL,'Fourth crowned portrait of HM Queen Elizabeth II right, wearing the Girls of Great Britain and Ireland tiara, legend around.',replace(replace('ELIZABETH·II·D·G REG·F·D·2012\r\nIRB','\r',char(13)),'\n',char(10)),'[object Object]','Elizabeth II Dei Gratia Regina Fidei Defensatrix','Elizabeth the Second by the Grace of God Queen Defender of the Faith','/photos/royaume-uni/5537-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/5537-180.jpg','Monéphil',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(26208,NULL,NULL,'Royal Crown of King of Nepal',NULL,NULL,NULL,replace(replace('Sri Gyanendra Bir Bikram Shahdev\r\nNepal','\r',char(13)),'\n',char(10)),'/photos/nepal/958-original.webp','https://en.numista.com/catalogue/photos/nepal/958-180.jpg','Ulmo',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(26791,NULL,NULL,'Central Circle: Trident Inside the Square: King''s Name (Gyanendra Bir Bikram Shah Dev) Outside the Square: Hinduism Icons; Clockwise from Top Left : Chakra (Wheel), Shank (Conch), Gadha (Mace) & Padma (Lotus) Top of the square: Crescent, Symbol Sri (श्री), Sun. Bottom of the Square: Year',NULL,NULL,NULL,NULL,'/photos/nepal/956-original.webp','https://en.numista.com/catalogue/photos/nepal/956-180.jpg','Ulmo',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(26792,NULL,NULL,'Trident within center circle. Nepali characters around, with date below.',replace(replace('श्री श्री \r\nश्री ५ वीरेन्द्र\r\nवीर विक्रम\r\nशाह देव\r\n२०५३','\r',char(13)),'\n',char(10)),NULL,NULL,replace(replace('Shree Birendra Bir Bikram Shah Dev\r\n2053','\r',char(13)),'\n',char(10)),'/photos/nepal/950-original.webp','https://en.numista.com/catalogue/photos/nepal/950-180.jpg','Ulmo',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(27352,NULL,NULL,'Head 3/4 left, lettering surrounding.',replace(replace('المملكة المغربية\r\nمحمد السادس','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Kingdom of Morocco\r\nMohammed VI','\r',char(13)),'\n',char(10)),'/photos/maroc/1346-original.webp','https://en.numista.com/catalogue/photos/maroc/1346-180.jpg','Dario Silva Collection',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(27395,NULL,NULL,'Head Mohammed VI left',replace(replace('المملكة المغربية\r\nمحمد السادس','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/maroc/1413-original.webp','https://en.numista.com/catalogue/photos/maroc/1413-180.jpg','Essor Prof',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(27528,NULL,NULL,'Sun of May within the Logo of Bicentenario for the celebration of the Bicentenary of the Revolution of May in 2010.',replace(replace('REPÚBLICA ARGENTINA\r\nEN UNIÓN Y LIBERTAD','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Republic of Argentina\r\nIn unity and liberty','\r',char(13)),'\n',char(10)),'/photos/argentine/1072-original.webp','https://en.numista.com/catalogue/photos/argentine/1072-180.jpg','nalaberong',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(28191,'Helmut Andexlinger',NULL,'Coin features the world in the form of a euro symbol in the centre, showing how the euro has become a true global player over the last ten years. The surrounding elements symbolise the importance of the euro to ordinary people (represented by a family group), to the financial world (the Eurotower), to trade (a ship), to industry (a factory), and to the energy sector and research and development (two wind turbines). The designer’s initials, “A.H.”, can be found (if you look very carefully) between the ship and the Eurotower. Along the upper and lower edges of the inner part of the coin are, respectively, the country of issue and the years “2002 – 2012”. The coin will be issued by all euro area countries. The coin’s outer ring depicts the 12 stars of the European Union.',replace(replace('REPUBLIK ÖSTERREICH\r\nA.H.\r\n€\r\n2002 2012','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/autriche/2665-original.webp','https://en.numista.com/catalogue/photos/autriche/2665-180.jpg','nalaberong',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(28330,'Helmut Andexlinger',NULL,'The world in the form of a euro symbol in the center, showing how the euro has become a truly global player over the last ten years. The surrounding elements symbolize the importance of the euro to ordinary people (represented by a family group), to the financial world (the Eurotower), to trade (a ship), to industry (a factory), and to the energy sector and research and development (two wind turbines). The designer’s initials, “A.H.”, can be found (if you look very carefully) between the ship and the Eurotower. Along the upper and lower edges of the inner part of the coin are, respectively, the country of issue and the years “2002 – 2012”. The coin will be issued by all euro area countries. The coin’s outer ring depicts the 12 stars of the European Union.',replace(replace('RÉPUBLIQUE FRANÇAISE\r\nA.H.\r\n€\r\n2002 2012','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Republic of France\r\nA.H.\r\nEuro\r\n2002 2012','\r',char(13)),'\n',char(10)),'/photos/france/4095-original.webp','https://en.numista.com/catalogue/photos/france/4095-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Obverse VALUES(28608,'Petar Stoikov, Vladimir Yossifov',NULL,'Madara horseman facing right and the country name at the top','БЪЛГАРИЯ','[object Object]',NULL,'Bulgaria','/photos/bulgarie/1519-original.webp','https://en.numista.com/catalogue/photos/bulgarie/1519-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(28610,'Petar Stoikov, Vladimir Yossifov',NULL,'Madara horseman facing right with the country name above','БЪЛГАРИЯ','[object Object]',NULL,'Bulgaria','/photos/bulgarie/1506-original.webp','https://en.numista.com/catalogue/photos/bulgarie/1506-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(28611,'Petar Stoikov, Vladimir Yossifov',NULL,'Madara horseman facing right with the country name above','БЪЛГАРИЯ','[object Object]',NULL,'Bulgaria','/photos/bulgarie/1537-original.webp','https://en.numista.com/catalogue/photos/bulgarie/1537-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(28734,NULL,'István Kósa, István Bartos','Saker Falcon to left, date below. This falcon (Falco cherrug) has an important population in Hungary. It is probably associated with the mythical Turul, important bird for the Hungarian people.',replace(replace('·MAGYARORSZÁG·\r\n2012','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Hungary','/photos/hongrie/62daed56996946.67565968-original.webp','https://en.numista.com/catalogue/photos/hongrie/62daed56996946.67565968-180.jpg','Máté Bikfalvi',NULL,'CC0','https://creativecommons.org/publicdomain/zero/1.0/deed.en'); -INSERT INTO Obverse VALUES(32604,'Susan Taylor','Susanna Blunt','Head of Queen Elizabeth II, as at 77 years of age, bare headed, wearing necklace and earrings, facing right.',replace(replace('ELIZABETH II D·G·REGINA\r\n2012\r\nSB','\r',char(13)),'\n',char(10)),'[object Object]','ELIZABETH II DEI GRATIA REGINA',replace('Elizabeth II Queen by the grace of God\n','\n',char(10)),'/photos/canada/3228-original.webp','https://en.numista.com/catalogue/photos/canada/3228-180.jpg','Monéphil',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(36732,NULL,NULL,'Bust of Nurhaci Emperor','1616 - 1626',NULL,NULL,NULL,'/photos/chine/606231d4e994d3.74372623-original.webp','https://en.numista.com/catalogue/photos/chine/606231d4e994d3.74372623-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36733,NULL,NULL,'Bust of Hong Taiji Emperor','1627 -1643',NULL,NULL,NULL,'/photos/chine/606231d76e8e00.74202044-original.webp','https://en.numista.com/catalogue/photos/chine/606231d76e8e00.74202044-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36734,NULL,NULL,'Bust of Shunzi Emperor','1644 - 1661',NULL,NULL,NULL,'/photos/chine/606231d9c1f135.59604933-original.webp','https://en.numista.com/catalogue/photos/chine/606231d9c1f135.59604933-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36735,NULL,NULL,'Bust of Kangxi Emperor',replace(replace('帝皇熙康清大\r\n1662 - 1722','\r',char(13)),'\n',char(10)),NULL,NULL,NULL,'/photos/chine/606231dc05d215.51318411-original.webp','https://en.numista.com/catalogue/photos/chine/606231dc05d215.51318411-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36736,NULL,NULL,'Bust of Yongzhen Emperor','1723 - 1735',NULL,NULL,NULL,'/photos/chine/606231de6464a4.68391610-original.webp','https://en.numista.com/catalogue/photos/chine/606231de6464a4.68391610-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36737,NULL,NULL,'Bust of Qianlong Emperor',NULL,NULL,NULL,NULL,'/photos/chine/606231e0bfdd47.88634228-original.webp','https://en.numista.com/catalogue/photos/chine/606231e0bfdd47.88634228-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36738,NULL,NULL,'Bust of Jiaqing Emperor','1796 - 1820',NULL,NULL,NULL,'/photos/chine/606231e2f28b11.88656580-original.webp','https://en.numista.com/catalogue/photos/chine/606231e2f28b11.88656580-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36739,NULL,NULL,'Bust of Daoguang Emperor','1821 - 1850',NULL,NULL,NULL,'/photos/chine/606231e55d66b3.24946684-original.webp','https://en.numista.com/catalogue/photos/chine/606231e55d66b3.24946684-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36740,NULL,NULL,'Bust of Xianfeng Emperor','1851 - 1861',NULL,NULL,NULL,'/photos/chine/606231e7a15974.04430050-original.webp','https://en.numista.com/catalogue/photos/chine/606231e7a15974.04430050-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36741,NULL,NULL,'Bust of Tongxhi Emperor','1862 -1874',NULL,NULL,NULL,'/photos/chine/606231ea00cf51.47598134-original.webp','https://en.numista.com/catalogue/photos/chine/606231ea00cf51.47598134-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36742,NULL,NULL,'Bust of Guanxu Emperor','1875 - 1908',NULL,NULL,NULL,'/photos/chine/606231ec454af0.23645790-original.webp','https://en.numista.com/catalogue/photos/chine/606231ec454af0.23645790-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(36743,NULL,NULL,'Bust of Xuantong Emperor','1909 - 1911',NULL,NULL,NULL,'/photos/chine/606231ee890585.62943757-original.webp','https://en.numista.com/catalogue/photos/chine/606231ee890585.62943757-180.jpg','baggasuresh',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(40522,NULL,NULL,'Denomination in Arabic characters surrounded by the country name',replace(replace('الامارات العربية المتحدة\r\n١\r\nدرهمـ\r\nUNITED ARAB EMIRATES','\r',char(13)),'\n',char(10)),'[object Object], [object Object]',NULL,replace(replace('United Arab Emirates\r\n1\r\nDirham\r\nUnited Arab Emirates','\r',char(13)),'\n',char(10)),'/photos/emirats_arabes_unis/284-original.webp','https://en.numista.com/catalogue/photos/emirats_arabes_unis/284-180.jpg','Joseph Kunnappally',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(41904,'Stefanie Lindner, Yves Sampo, Alina Hoyer, Sneschana Russewa-Hoyer',NULL,'The coin, which was designed by Yves Sampo (Monnaie de Paris), Stefanie Lindner (Berlin State Mint), Alina Hoyer (Berlin) and Sneschana Russewa-Hoyer (Berlin), depicts stylised portraits of the signatories to the Élysée Treaty (Konrad Adenauer, then Chancellor of the Federal Republic of Germany, and Charles de Gaulle, former President of the French Republic) above their respective signatures on either side of the words “50 ANS JAHRE” and the year “2013” in the centre. The words “TRAITÉ DE L’ÉLYSÉE” and “ÉLYSÉE-VERTRAG” are centred along the top and bottom edge, respectively, of the inner part of the coin. On the right-hand inner edge below the portrait of Adenauer, the inner part also features the “fleurette” (hallmark of the engraving workshop) and the letters “RF” to denote the issuing country, while the mint mark is located on the coin’s left-hand inner edge below the portrait of de Gaulle. The coin’s outer ring bears the 12 stars of the European Union.',replace(replace('TRAITÉ\r\nDE L''ÉLYSÉE\r\n50\r\nANS\r\nJAHRE\r\n2013\r\nÉLYSÉE-\r\nVERTRAG\r\nRF','\r',char(13)),'\n',char(10)),'[object Object]','République française',replace(replace('Élysée Treaty\r\n50 Years','\r',char(13)),'\n',char(10)),'/photos/france/5145-original.webp','https://en.numista.com/catalogue/photos/france/5145-180.jpg','bofried',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(42976,'Alfonso Morales Múnoz',NULL,'The inner part of the coin depicts a view of the San Lorenzo del Escorial Monastery. On the upper side, in circular sense and with capital letters, the name of the issuing country ‘ESPAÑA’. At the right hand side, the year of issuance ‘2013’ and the mint mark. The coin’s outer ring depicts the 12 stars of the European flag.',replace(replace('ESPAÑA 2013 \r\nM','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/espagne/5fcdb9bc0513c0.46243429-original.webp','https://en.numista.com/catalogue/photos/espagne/5fcdb9bc0513c0.46243429-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(49339,'Peter Denayer',NULL,'The obverse of the coin displays in its centre the number 100 with the first zero encircling the abbreviations ‘KMI’ and ‘IRM’ and the second zero representing a sun. Isobars, raindrops and snowflakes are depicted to the left of the sun. The year ‘2013’ is displayed in the upper rays of the sun and the nationality ‘BE’ is indicated in the lower rays. The mark of the mint master and the mark of the Brussels mint, a helmeted profile of the Archangel Michael, are displayed under the ‘1’ of the number ‘100’. The coin’s outer ring bears the 12 stars of the European Union.',replace(replace('2013\r\n100\r\nKMI\r\nIRM\r\nBE','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/belgique/2320-original.webp','https://en.numista.com/catalogue/photos/belgique/2320-180.jpg','kevin4430',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(54956,'Erwin Olaf',NULL,'King Willem-Alexander of the Netherlands facing right',replace(replace('Willem-Alexander Koning der Nederlanden\r\n2014','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Willem-Alexander, King of the Netherlands\r\n2014','\r',char(13)),'\n',char(10)),'/photos/pays-bas/63c250f7cc3e64.39706022-original.webp','https://en.numista.com/catalogue/photos/pays-bas/63c250f7cc3e64.39706022-180.jpg','brismike',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(56030,'Luc Luycx',NULL,'Right profile portrait of King Phillipe is encircled by the twelve stars of Europe. Between the head and the band of stars is his Crowned monogram: Crown above capital "FP". The mint marks appear on either side of the year of issuance.',replace(replace('FP\r\nBE \r\n2014','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/belgique/61f94d99ab5967.97108825-original.webp','https://en.numista.com/catalogue/photos/belgique/61f94d99ab5967.97108825-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(56035,'Luc Luycx',NULL,'Bust of King Philippe facing right, date below, crowned monogram at left',replace(replace('FP\r\nBE\r\n2015','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/belgique/605d6f24575a33.43979441-original.webp','https://en.numista.com/catalogue/photos/belgique/605d6f24575a33.43979441-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(61644,NULL,'Sebastian Mikołajczak','Polish eagle (state emblem) with stylized rings intersecting at top and split at bottom by date.',replace(replace('mw\r\nRZECZPOSPOLITA POLSKA\r\n2017','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Republic of Poland','/photos/pologne/6226-original.webp','https://en.numista.com/catalogue/photos/pologne/6226-180.jpg','Narodowy Bank Polski','http://www.nbp.pl',NULL,NULL); -INSERT INTO Obverse VALUES(67631,'Antanas Žukauskas',NULL,'The coin features the Coat of arms of the Republic of Lithuania, with the year 2015 on the right and the inscription LIETUVA below it. The coin''s outer ring bears the 12 stars of the European Union.',replace(replace('2015\r\nLMK \r\nLIETUVA','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/lituanie/881-original.webp','https://en.numista.com/catalogue/photos/lituanie/881-180.jpg','Ulmo',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(68395,'Jordi Puy',NULL,'Coat of arms of Andorra and around twelve five-pointed stars representing the European Union.',replace(replace('VIRTVS VNITA FORTIOR\r\nANDORRA\r\n2014','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace('United virtue is stronger\nAndorra','\n',char(10)),'/photos/andorre/467-original.webp','https://en.numista.com/catalogue/photos/andorre/467-180.jpg','kevin4430',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(69263,'Heinz Hoyer',NULL,'A classic perspective on St. Paul’s Church in Frankfurt (the ‘Paulskirche'', the seat of Germany’s first freely elected legislative body in 1849 and is regarded as the cradle of German democracy) and is the perspective possessing the greatest recognition value. The design incisively brings out the tension between the dominant tower and the elliptical structure of the church. The slightly exaggerated flight of steps has an inviting quality while simultaneously offering support to the subjacent inscription ‘HESSEN’ (the Federal State of Hessen in which St. Paul’s Church is situated). The inner part also features the date and mintmark to the left and the engraver’s mark (the initials ‘HH’ — Heinz Hoyer) to the right. The coin’s outer ring depicts the 12 stars of the European flag.',replace(replace('2015 D\r\nF HH\r\nHESSEN','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('2015 D\r\nF HH\r\nHESSEN','\r',char(13)),'\n',char(10)),'/photos/allemagne/628dc1f8e2a6d4.68325415-original.webp','https://en.numista.com/catalogue/photos/allemagne/628dc1f8e2a6d4.68325415-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(69264,'Bernd Wendhut',NULL,'The people in the foreground, who embody a new beginning and the advance towards a better future, are standing in front of the Brandenburg Gate, a symbol of German unity. The rendering of the statement Wir sind ein Volk (‘we are one people’) — a collective expression of will by German citizens – represents the path forwards towards German reunification. The inner part also features the mint mark of the respective mint (‘A’, ‘D’, ‘F’, ‘G’ or ‘J’) as well as the issuing country’s country code ‘D’ and the engraver’s mark (the initials ‘BW’ — Bernd Wendhut). The coin’s outer ring bears the 12 stars of the European Union.',replace(replace('25 JAHRE DEUTSCHE\r\nEINHEIT 2015\r\nD\r\nWIR SIND EIN VOLK\r\nWIR SIND EIN VOLK\r\nWIR SIND EIN VOLK\r\nA BW','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('25 Years of German \r\nUnity 2015\r\nD\r\nWe are One People\r\nWe are One People\r\nWe are One People\r\nA BW','\r',char(13)),'\n',char(10)),'/photos/allemagne/628c8560e54b00.37523665-original.webp','https://en.numista.com/catalogue/photos/allemagne/628c8560e54b00.37523665-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(69469,'Luis José Díaz Salas',NULL,'A portrait of King Felipe VI is encircled by the lettering "ESPAÑA" (Spain), the Madrid Mint mintmark and the twelve stars of Europe',replace(replace('ESPAÑA 2015\r\nM','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/espagne/6054c8a150bb33.06767620-original.webp','https://en.numista.com/catalogue/photos/espagne/6054c8a150bb33.06767620-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(70547,NULL,'Jody Clark','Fifth crowned portrait of Queen Elizabeth II right, wearing the George IV State Diadem, legend around.',replace(replace('ELIZABETH II∙DEI∙GRA∙REG∙FID∙DEF∙2020∙\r\nJ.C','\r',char(13)),'\n',char(10)),'[object Object]','Elizabeth II Dei Gratia Regina Fidei Defensatrix','Elizabeth the Second by the Grace of God Queen Defender of the Faith','/photos/royaume-uni/5f25a703bc92b8.92049342-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/5f25a703bc92b8.92049342-180.jpg','The Royal Mint, 2020',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(80926,'Herbert Wähner',NULL,replace(replace('The Österreichische Nationalbank was started in 1816 by Johann Philipp Stadion, Count von Warthausen in the reign of Francis I (Franz I.), the first Emperor of Austria. The foundation of this bank followed a period of high currency devaluation in Austria during the war times when paper money was issued by the Habsburg state.\r\n\r\nThe design depicts two gods of Roman mythology featured in the carved relief above the entrance to the main building of the Oesterreichische Nationalbank.\r\n\r\nTo the left, Mercury, the messenger of the gods and the god of merchants and commerce; to the right, Fortuna, the goddess of fate and prosperity, who is portrayed with a horn of plenty. The background picture, running from the left to the right edges of the core, shows the OeNB’s main premises. An ornamental band hugging the bottom of the coin centre evokes the red-white-red pattern of the Austrian national flag, with hatched vertical lines symbolizing the colour red, as laid down in the rules of heraldic design.\r\n\r\nThe years ‘1816’ and ‘2016’ to the left of Mercury refer to the OeNB’s founding year and its bicentennial. The inscriptions are running along the edges of the gold-coloured centre.','\r',char(13)),'\n',char(10)),replace(replace('REPUBLIK ÖSTERREICH\r\n1816\r\n2016\r\n200 JAHRE OESTERREICHISCHE NATIONALBANK','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/autriche/65abd18234a2f3.81856797-original.webp','https://en.numista.com/catalogue/photos/autriche/65abd18234a2f3.81856797-180.jpg','brismike',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(81058,'Begona Castellanos García',NULL,'The Roman aqueduct of Segovia, probably built c. A.D. 50, name of the country issuer (ESPAÑA) and date of issue. The coin’s outer ring depicts the 12 stars of the European flag.',replace(replace('ESPAÑA\r\n2016 M','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Spain','/photos/espagne/5fcdbd58d76613.96858381-original.webp','https://en.numista.com/catalogue/photos/espagne/5fcdbd58d76613.96858381-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(82237,'Joaquin Jimenez',NULL,'The European Football Championship 2016 will be held in France between 10 June and 10 July. It will be the fifteenth European tournament, where 24 national teams will be competing. The design shows, among other figures, a football and the trophy of the European Cup in relief.',replace(replace('UEFA EURO 2016 FRANCE\r\nRF','\r',char(13)),'\n',char(10)),'[object Object]','République française',NULL,'/photos/france/7445-original.webp','https://en.numista.com/catalogue/photos/france/7445-180.jpg','Iwantallcoins',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(84061,'Joana Vasconcelos',NULL,'The design shows an image based on the well-known artwork ‘Heart of Viana’, signed by the author Joana Vasconcelos, which was inspired by traditional jewelry from the north of Portugal (the area around the city of Viana do Castelo). It symbolizes the Portuguese people’s support for the national team on the occasion of the Olympics. At the left and the right, in a semi-circle, are the inscriptions ‘JOANA VASCONCELOS’ and ‘EQUIPA OLÍMPICA DE PORTUGAL 2016’, respectively. At the bottom is the mintmark ‘INCM’. The coin’s outer ring bears the 12 stars of the European Union.',replace(replace('JOANA VASCONCELOS\r\nEQUIPA OLÍMPICA DE PORTUGAL 2016','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Portuguese Olympic Team 2016','/photos/portugal/6280886e36b042.73539075-original.webp','https://en.numista.com/catalogue/photos/portugal/6280886e36b042.73539075-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(87329,'José Aurélio',NULL,'The design depicts the image of the bridge. At the top right is the inscription ‘PORTUGAL’. At the bottom right are the inscriptions ‘PONTE’, ‘25 DE ABRIL’, ‘1966’, and ‘2016’, one below the other. At the bottom left is the mintmark ‘INCM’ and at the bottom center is the name of the designer ‘JOSÉ AURÉLIO’. The coin’s outer ring bears the 12 stars of the European Union.',replace(replace('PORTUGAL\r\nPONTE \r\n25 DE ABRIL\r\n1966\r\n2016\r\nINCM \r\nJOSÉ AURÉLIO','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Portugal\r\nBridge\r\nApril 25\r\n1966\r\n2016\r\nINCM\r\nJosé Aurélio','\r',char(13)),'\n',char(10)),'/photos/portugal/62807eb168ace0.21389257-original.webp','https://en.numista.com/catalogue/photos/portugal/62807eb168ace0.21389257-180.jpg','Mike Bentley',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(88649,'Ernst Nordin',NULL,'King Carl XVI Gustaf in profile left separating date.',replace(replace('CARL XVI GUSTAF\r\n2016\r\nSVERIGES KONUNG\r\nEN','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'King of Sweden','/photos/suede/2789-original.webp','https://en.numista.com/catalogue/photos/suede/2789-180.jpg','Ngdawa',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(89870,NULL,NULL,'It has in the nucleus on top, the Phrygian cap, a symbol of freedom, sustained by pica, representation of homeland defense. Completing the allegory clasped hands, an expression of unity and brotherhood of the peoples of the Rio de la Plata United Provinces. On the upper field, in heraldic language, patriotic colors by horizontal stripes, light blue and white, with the lower flat field. On the ring falls "ARGENTINA REPUBLIC" in the upper arch, and in the lower arch "INDEPENDENCE * 1816 * 2016 " referring to the Bicentennial of Independence of Argentina.',replace(replace('REPÚBLICA ARGENTINA\r\n1816 ° INDEPENDENCIA ° 2016','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('ARGENTINA REPUBLIC\r\n1816 ° INDEPENDENCE ° 2016','\r',char(13)),'\n',char(10)),'/photos/argentine/1259-original.webp','https://en.numista.com/catalogue/photos/argentine/1259-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(91431,NULL,NULL,'The design shows a profile of a pensive François Mitterrand. Adjacent is his personal emblem of a half oak/half olive tree. Above are the dates marking the centenary of his birth (''1916'' and ''2016'') and his name. At the bottom, the indication of the issuing country ''RF''.',replace(replace('1916 FRANÇOIS MITTERRAND\r\n2016\r\nRF','\r',char(13)),'\n',char(10)),'[object Object]','République française',NULL,'/photos/france/5fc9e4063f4e15.02498679-original.webp','https://en.numista.com/catalogue/photos/france/5fc9e4063f4e15.02498679-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(100658,NULL,'Jody Clark','Fifth crowned portrait of Queen Elizabeth II right, wearing the George IV State Diadem, with holographic image below and denomination as incuse micro-legend around the edge.',replace(replace('ONE POUND·ONE POUND\r\n2017·ELIZABETH II·D·G·REG·F·D\r\nJ.C\r\n£ / 1','\r',char(13)),'\n',char(10)),'[object Object]','Elizabeth II Dei Gratia Regina Fidei Defensatrix','Elizabeth the Second by the Grace of God Queen Defender of the Faith','/photos/royaume-uni/639dfa233d9e73.32275043-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/639dfa233d9e73.32275043-180.jpg','The Royal Mint, 2017',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(102445,'Chocola Frantisek',NULL,'The Porta Nigra in Trier which is probably the best-preserved Roman city gate north of the Alps. The inner part also features the name ''RHEINLAND-PFALZ'' and the mintmark to the left and the date at the top along with the initials of the designer ''CH'' (Chocola Frantisek) to the right and the coin''s outer ring depicts the 12 stars of the European flag.',replace(replace('2017\r\nA\r\nch\r\nRHEINLAND-PFALZ\r\nD','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/allemagne/5fc9e4fece4342.96011398-original.webp','https://en.numista.com/catalogue/photos/allemagne/5fc9e4fece4342.96011398-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(105040,'José de Guimarães',NULL,'The design shows human figures and buildings, symbolic representations of citizens and cities, where public security is mainly assured, and the simplified police symbol. The legends include the year ‘1867’ and the year of issue ‘2017’, the country of issue ‘PORTUGAL’, the subject of commemoration (‘SEGURANÇA PÚBLICA’ – Public Security), the three main issues related to citizenship (‘DIREITOS’, ‘LIBERDADES’ e ‘GARANTIAS’ – Rights, Freedoms, and Warranties), and the author’s name JOSÉ DE GUIMARÃES. The coin’s outer ring depicts the 12 stars of the European flag.',replace(replace('1867 - 2017 SEGURANÇA PÚBLICA\r\nPSP\r\nDIREITOS\r\nLIBERDADES\r\nGARANTIAS\r\nINCM JOSÉ DE GUIMARÃES\r\nPORTUGAL','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('1867-2017 Public Security\r\nPSP\r\nRights\r\nFreedoms\r\nWarranties\r\nINCM José de Guimarães\r\nPortugal','\r',char(13)),'\n',char(10)),'/photos/portugal/628067f6b04e37.49883028-original.webp','https://en.numista.com/catalogue/photos/portugal/628067f6b04e37.49883028-180.jpg','Mike Bentley',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(122665,NULL,NULL,'Denomination (''٢٥٠'') above a cedar tree, the issuer name (''مصرف لبنان'') on top of denomination, and year of issue in Arab digits.',replace(replace('مصرف لبنان\r\n٢٥٠ ليرة\r\n٢٠١٤','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace('Bank of Lebanon\n250 Līrah\n2014','\n',char(10)),'/photos/liban/312-original.webp','https://en.numista.com/catalogue/photos/liban/312-180.jpg','Doc_man',NULL,'CC BY','https://creativecommons.org/licenses/by/4.0/deed.en'); -INSERT INTO Obverse VALUES(122799,NULL,NULL,'A woman''s bust symbolically protected by a hand and the ribbon surrounded, at the right side, by the inscription ''25e ANNIVERSAIRE DU RUBAN ROSE'' and the years''1992 - 2017'' to the right along with the indication of the issuing country ''RF'' and the mintmark. The coin''s outer ring depicts the 12 stars of the European flag.',replace(replace('25e ANNIVERSAIRE DU RUBAN ROSE\r\n1992\r\n2017\r\nRF','\r',char(13)),'\n',char(10)),'[object Object]','République française',replace(replace('25th Anniversary of the Pink Ribbon\r\n1992\r\n2017\r\nRF','\r',char(13)),'\n',char(10)),'/photos/france/5fc9e4a9b3d3e6.24412218-original.webp','https://en.numista.com/catalogue/photos/france/5fc9e4a9b3d3e6.24412218-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(133815,NULL,NULL,'National arms flanked by stars. With the crown on the head of the eagle on Romania Coat of Arms.',replace(replace('ROMANIA \r\n2018','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/roumanie/5f6ba061e744a7.80024463-original.webp','https://en.numista.com/catalogue/photos/roumanie/5f6ba061e744a7.80024463-180.jpg','Ben-jamin',NULL,'CC0','https://creativecommons.org/publicdomain/zero/1.0/deed.en'); -INSERT INTO Obverse VALUES(133816,NULL,NULL,'National arms flanked by stars with the crown on the head of the eagle.',replace(replace('ROMANIA \r\n2018','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/roumanie/6264503d0ac5f0.84750965-original.webp','https://en.numista.com/catalogue/photos/roumanie/6264503d0ac5f0.84750965-180.jpg','Máté Bikfalvi',NULL,'CC0','https://creativecommons.org/publicdomain/zero/1.0/deed.en'); -INSERT INTO Obverse VALUES(134685,'Joaquin Jimenez',NULL,'The design features the cornflower in the center of the coin. It is surrounded by the words ‘Le Bleuet de France, fleur de mémoire et de solidarité’ (Bleuet of France, flower of remembrance and solidarity). The dates ‘1918-2018’ as well as the letters RF for République Française (French Republic) and the mint marks are also included in the design.',replace(replace('Le Bleuet de France, fleur de mémoire et de solidarité \r\n1918 - 2018\r\nR F','\r',char(13)),'\n',char(10)),'[object Object]','République française','Blue cornflower of France, the flower of memory and solidarity 1918-2018','/photos/france/11131-original.webp','https://en.numista.com/catalogue/photos/france/11131-180.jpg','Ulmo',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(157845,'Júlio Pomar',NULL,replace(replace('The event, known as the first Portuguese territorial discovery, marked a historic milestone in\r\nthe consolidation of Portugal as a maritime power and gave rise to the Portuguese Age of Discoveries (1418-1522).\r\nThe design depicts the Madeira Archipelago and the island of Porto Santo. In semicircle are the inscriptions ‘600 anos do\r\nDescobrimento da Madeira e de Porto Santo’ and ‘PORTUGAL 2019’.\r\nThe coin’s outer ring depicts the 12 stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('600 anos do Descobrimento da Madeira e de Porto Santo\r\nPortugal 2019\r\nINCM','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/portugal/6280854e4fec30.51739855-original.webp','https://en.numista.com/catalogue/photos/portugal/6280854e4fec30.51739855-180.jpg','Mike Bentley',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(192990,'Joaquin Jimenez',NULL,replace(replace('The design represents two profiles of Charles de Gaulle at two different times. The profile in the background shows Charles de Gaulle in army general is uniform during the call to arms of the 18th June 1940 or during the liberation of Paris. The profile in the foreground represents Charles de Gaulle during his second presidential term of office. Finally, the mention RF is semi-integrated in a Lorraine cross, symbol of free France chosen by General de Gaulle in 1940. His dates of birth and death as well as the year date are also inscribed in the Lorraine cross.\r\nThe coin’s outer ring depicts the 12 stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('1890\r\n1970\r\n2020\r\nRF\r\nCharles de Gaulle','\r',char(13)),'\n',char(10)),'[object Object]','République française',NULL,'/photos/france/5e3c18092fdd72.83644869-original.webp','https://en.numista.com/catalogue/photos/france/5e3c18092fdd72.83644869-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(197919,'André Letria',NULL,replace('The design depicts the UN logo. At the top is the year of issuance ‘2020’, the name of the\nissuing country ‘PORTUGAL’ and the inscription ‘UN 75 YEARS’. Under the words ‘UN’ and ‘YEARS’ is their translation in\nPortuguese ‘ONU’ and ‘ANOS’. At the left side is the name of the mint ‘CASA DA MOEDA’ and at the right side is the\nengraver’s name ‘ANDRÉ LETRIA’.\nThe coin’s outer ring depicts the 12 stars of the European flag.','\n',char(10)),replace(replace('2020\r\nPORTUGAL\r\nUN\r\nONU\r\n75 \r\nYEARS\r\nANOS\r\nCASA DA MOEDA\r\nANDRÉ LETRIA','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/portugal/606f1d114f4f79.77067044-original.webp','https://en.numista.com/catalogue/photos/portugal/606f1d114f4f79.77067044-180.jpg','Ponpandi Perumal',NULL,'CC BY','https://creativecommons.org/licenses/by/4.0/deed.en'); -INSERT INTO Obverse VALUES(201619,NULL,NULL,NULL,replace(replace('ÖTSZÁZ FORINT\r\nA Bankjegyhamisítást a törvény bünteti\r\nMagyar Nemzeti Bank','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Five hundred forints\r\nBanknote counterfeiting is punishable by law\r\nHungarian National Bank','\r',char(13)),'\n',char(10)),'/photos/hongrie/65315b24b06056.50382015-original.webp','https://en.numista.com/catalogue/photos/hongrie/65315b24b06056.50382015-180.jpg','masterguru',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(201624,NULL,NULL,'Blue-turquoise. Portrait of Queen Elizabeth II at right, Bank of England in centre, transparent window at left. Signature Victoria Cleland (2015).',replace(replace('£ 5 Bank of England \r\nI PROMISE TO PAY THE BEARER ON DEMAND THE SUM OF FIVE POUNDS 5\r\n£ 5\r\nBANK OF ENGLAND\r\nLONDON\r\nFOR THE GOVERNOR AND COMPANY \r\nOF THE BANK OF ENGLAND\r\nVictoria Cleland\r\nCHIEF CASHIER\r\nFIVE\r\n£ 5 BANK OF ENGLAND £ 5 BANK OF ENGLAND\r\nFIVEPOUNDS\r\n5 \r\n5POUNDS\r\nFive \r\nPounds FIVE\r\nBANK OF ENGLAND\r\nFive Pounds\r\n© THE GOVERNOR AND COMPANY OF THE BANK OF ENGLAND 2015\r\n£ 5','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/england/5e96799173dfa5.97124594-original.webp','https://en.numista.com/catalogue/photos/england/5e96799173dfa5.97124594-180.jpg','BCNumismatics',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(201676,NULL,'Kiril Gogov','Violet and pink on light blue underprint. Paisii Hilendarski at left, holographic strip at left.',replace(replace('Два Лева\r\nБългарска Народна Банка\r\nПаисий Хилендарски 1722-1773','\r',char(13)),'\n',char(10)),NULL,NULL,replace(replace('Two Leva\r\nBulgarian National Bank\r\nPaisius of Hilendar 1722-1773','\r',char(13)),'\n',char(10)),'/photos/bulgarie/63ee095707bf35.20829527-original.webp','https://en.numista.com/catalogue/photos/bulgarie/63ee095707bf35.20829527-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(201959,NULL,NULL,'King Birendra Bir Bikram, Pashupatinath temple',NULL,NULL,NULL,NULL,'/photos/nepal/62736243e0cfd0.36206755-original.webp','https://en.numista.com/catalogue/photos/nepal/62736243e0cfd0.36206755-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(202243,NULL,NULL,'Admiral Gago Coutinho at right.',replace(replace('Banco de Portugal \r\nCh.9\r\nVINTE ESCUDOS\r\nOURO\r\nLISBOA, 4 DE OUTUBRO DE 1978\r\nAlmirante Gago Coutinho','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Bank of Portugal\r\nPlate 9\r\nTwenty Escudos\r\nGold\r\nLisbon, 4th of October 1978\r\nAlmirante Gago Coutinho','\r',char(13)),'\n',char(10)),'/photos/portugal/627367310e9b71.45407376-original.webp','https://en.numista.com/catalogue/photos/portugal/627367310e9b71.45407376-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(202244,NULL,NULL,replace(replace('Portrait of the first president Yusof bin Ishak.\r\nSingapore''s coat of arms on the top left corner.\r\nLettering of "Singapore" in the four official languages of the country: English, Mandarin Chinese, Tamil and Malay.','\r',char(13)),'\n',char(10)),replace(replace('SINGAPURA 新加坡 சிங்கப்பூர் SINGAPORE\r\nTHIS NOTE IS LEGAL TENDER\r\nTWO\r\nDOLLARS\r\nCHAIRMAN\r\nBOARD OF COMMISSIONERS\r\nOF CURRENCY\r\nSINGAPORE\r\nSINGAPORE Yusof bin Ishak','\r',char(13)),'\n',char(10)),'[object Object], [object Object], [object Object]',NULL,replace(replace('Singapore (in Malay, Chinese, Tamil and English)\r\nThis note is legal tender\r\nTwo dollars\r\nChairman\r\nMonetary Authority of Singapore\r\nSingapore\r\nYusof bin Ishak','\r',char(13)),'\n',char(10)),'/photos/singapour/626c1e69574431.97909339-original.webp','https://en.numista.com/catalogue/photos/singapour/626c1e69574431.97909339-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(202279,NULL,NULL,'Portrait of King Mohammed VI (Born 1963). Architectural detail inspired from Moroccan doors. The Royal Crown. Coat of arms.',NULL,NULL,NULL,NULL,'/photos/maroc/5e961f34cb9966.09948944-original.webp','https://en.numista.com/catalogue/photos/maroc/5e961f34cb9966.09948944-180.jpg','Pedro Branco',NULL,'CC BY','https://creativecommons.org/licenses/by/4.0/deed.en'); -INSERT INTO Obverse VALUES(202287,NULL,NULL,'Portrait of King Mohammed VI (Born 1963). Architectural detail inspired from Moroccan doors. The Royal Crown. Coat of arms.',NULL,NULL,NULL,NULL,'/photos/maroc/63df88824cfea0.57603429-original.webp','https://en.numista.com/catalogue/photos/maroc/63df88824cfea0.57603429-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(202397,'Bureau of Engraving, Printing',NULL,replace(replace('Portrait of Abraham Lincoln at center.\r\nTreasurer''s signature and Federal Reserve Seal at left.\r\nSecretary''s signature and Treasury Seal to right.','\r',char(13)),'\n',char(10)),replace(replace('FEDERAL RESERVE NOTE\r\nTHE UNITED STATES OF AMERICA\r\nTHIS NOTE IS LEGAL TENDER\r\nFOR ALL DEBTS, PUBLIC AND PRIVATE\r\nFIVE DOLLARS','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/etats-unis/5e99c87bee01f9.75140243-original.webp','https://en.numista.com/catalogue/photos/etats-unis/5e99c87bee01f9.75140243-180.jpg','glorkar',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(202523,NULL,NULL,'Queen Elizabeth II at right, image of tower over clear window at left centre, hologram image below.',replace(replace('Bank of England\r\nI PROMISE TO PAY THE BEARER ON DEMAND THE SUM OF TEN POUNDS\r\nTen Pounds\r\nLONDON\r\nFOR THE GOVERNOR AND COMPANY\r\nOF THE BANK OF ENGLAND','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/england/641809f7659599.02187626-original.webp','https://en.numista.com/catalogue/photos/england/641809f7659599.02187626-180.jpg','GarlicMonster',NULL,'CC0','https://creativecommons.org/publicdomain/zero/1.0/deed.en'); -INSERT INTO Obverse VALUES(204590,NULL,NULL,'Portrait of King Birendra in Plumed Crown (L.), Bajrayogini Temple (C.), Watermark Window - watermark of Crown (R.)','2',NULL,NULL,NULL,'/photos/nepal/629a2559df2079.59310163-original.webp','https://en.numista.com/catalogue/photos/nepal/629a2559df2079.59310163-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(204777,NULL,NULL,'H.T. Teixieira de Sousa',replace(replace('BANCO DE CABO VERDE\r\n200 ESCUDOS\r\nO GOVERNADOR\r\nO ADMINISTRADOR\r\n5 DE JULHO DE 2014\r\nHENRIQUE TEIXEIRA DE SOUZA\r\nA LEI PUNE O CONTRAFACTOR','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('BANK OF CAPE VERDE\r\n200 ESCUDOS\r\nGOVERNOR\r\nADMINISTRATOR\r\nJULY 5 2014\r\nHENRIQUE TEIXEIRA DE SOUZA\r\nTHE LAW PUNISH THE COUNTERFACTOR','\r',char(13)),'\n',char(10)),'/photos/cap-vert/65009d720b5054.75858176-original.webp','https://en.numista.com/catalogue/photos/cap-vert/65009d720b5054.75858176-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(205413,NULL,NULL,'Roberto Duarte Silva at bottom.',replace(replace('BANCO DE CABO VERDE\r\nO GOVERNADOR\r\nO ADMINISTRADOR\r\nQUINHENTOS ESCUDOS\r\nROBERTO DUARTE SILVA','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('BANK OF CAPE VERDE\r\nGOVERNOR\r\nADMINISTRATOR\r\nFIVE HUNDRED ESCUDOS\r\nROBERTO DUARTE SILVA','\r',char(13)),'\n',char(10)),'/photos/cap-vert/5e9dcdc32f1cb6.30965117-original.webp','https://en.numista.com/catalogue/photos/cap-vert/5e9dcdc32f1cb6.30965117-180.jpg','alexmusat',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(205902,NULL,NULL,'Guanaco, flower',replace(replace('VEINTE PESOS\r\nBANCO CENTRAL DE LA REPÚBLICA ARGENTINA\r\nGUANACO','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Twenty Pesos\r\nCentral Bank of the Argentine Republic\r\nGuanaco','\r',char(13)),'\n',char(10)),'/photos/argentine/63220614c07d59.62735767-original.webp','https://en.numista.com/catalogue/photos/argentine/63220614c07d59.62735767-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(206382,NULL,NULL,'A portrait of President Mustafa Kemal Atatürk',replace(replace('TÜRKİYE CUMHURİYET MERKEZ BANKASI\r\n\r\n5\r\nBEŞ\r\nTÜRK LİRASI\r\n\r\nTÜRKİYE CUMHURİYET. MERKEZ BANKASI BANKNOT MATBAASI 2009','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Central Bank of the Republic of Turkey, Five Turkish Lira, Republic of Türkiye Central Bank, Banknote Printing House 2009','/photos/turquie/6299fbf2156168.63152135-original.webp','https://en.numista.com/catalogue/photos/turquie/6299fbf2156168.63152135-180.jpg','ngdawa',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(206385,NULL,NULL,'A portrait of President Mustafa Kemal Atatürk',replace(replace('TÜRKİYE CUMHURİYET MERKEZ BANKASI\r\n\r\n10\r\nON\r\nTÜRK LİRASI\r\n\r\nTÜRKİYE CUMHURİYET. MERKEZ BANKASI BANKNOT MATBAASI 2009','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Central Bank of the Republic of Turkey, Ten Turkish Lira, Republic of Türkiye Central Bank, Banknote Printing House 2009','/photos/turquie/6299fc0bb03942.58660627-original.webp','https://en.numista.com/catalogue/photos/turquie/6299fc0bb03942.58660627-180.jpg','ngdawa',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(206387,NULL,NULL,'A portrait of President Mustafa Kemal Atatürk',replace(replace('TÜRKİYE CUMHURİYET MERKEZ BANKASI\r\n\r\n20\r\nYİRMİ\r\nTÜRK LİRASI\r\n\r\nTÜRKİYE CUMHURİYET. MERKEZ BANKASI BANKNOT MATBAASI 2009','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Central Bank of the Republic of Turkey, Twenty Turkish Lira, Republic of Türkiye Central Bank, Banknote Printing House 2009','/photos/turquie/6299fc239063f2.79819586-original.webp','https://en.numista.com/catalogue/photos/turquie/6299fc239063f2.79819586-180.jpg','ngdawa',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(206732,NULL,NULL,'Taruca (North Andean deer), flower',replace(replace('CIEN PESOS\r\nBANCO CENTRAL DE LA REPÚBLICA ARGENTINA\r\nTARUCA\r\nMONUMENTO NATURAL NACIONAL','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('One hundred Pesos\r\nCentral Bank of the Argentine Republic\r\nTaruca\r\nNatural national monument','\r',char(13)),'\n',char(10)),'/photos/argentine/632209e67e18c1.11141757-original.webp','https://en.numista.com/catalogue/photos/argentine/632209e67e18c1.11141757-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(207353,NULL,NULL,'Farhat Hached',replace(replace('البنك المركزي التونسي\r\nعشرون دينارا','\r',char(13)),'\n',char(10)),NULL,NULL,replace(replace('Central Bank Of Tunisia\r\nTwenty Dinars','\r',char(13)),'\n',char(10)),'/photos/tunisie/63c9055abca179.49493896-original.webp','https://en.numista.com/catalogue/photos/tunisie/63c9055abca179.49493896-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(208875,NULL,NULL,'Dr. Tawhida Ben Cheikh',replace(replace('البنك المركزي التونسي\r\nعشرة دنانير','\r',char(13)),'\n',char(10)),NULL,NULL,replace(replace('CENTRAL BANK OF TUNISIA\r\nTEN DINARS','\r',char(13)),'\n',char(10)),'/photos/tunisie/623c47fd98d946.81708170-original.webp','https://en.numista.com/catalogue/photos/tunisie/623c47fd98d946.81708170-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(209271,NULL,NULL,'Aboul-Qacem Echebbi (Tunisian poet).',replace(replace('البنك المركزي التونسي\r\nعشرة دنانير','\r',char(13)),'\n',char(10)),NULL,NULL,replace(replace('Central Bank Of Tunisia\r\nTen Dinars','\r',char(13)),'\n',char(10)),'/photos/tunisie/62f28b4a96cdd9.68334642-original.webp','https://en.numista.com/catalogue/photos/tunisie/62f28b4a96cdd9.68334642-180.jpg','gyoschak',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(211537,NULL,NULL,'Head of King Matthias Corvinus',replace(replace('1000 EZER FORINT\r\nMAGYAR NEMZETI BANK','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('1000 Forint\r\nHungarian National Bank','\r',char(13)),'\n',char(10)),'/photos/hongrie/5eb29113190ab7.03389600-original.webp','https://en.numista.com/catalogue/photos/hongrie/5eb29113190ab7.03389600-180.jpg','Akhetaton',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(257573,NULL,NULL,'Coat of arms of Tunisia, olive branches with (2x9) 18 leaves, Islamic and Gregorian year of production.',replace(replace('الجمهورية التونسية\r\n2020-1441','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Republic of Tunisia\r\n2020-1441','\r',char(13)),'\n',char(10)),'/photos/tunisie/613c81f9a01dc4.32446848-original.webp','https://en.numista.com/catalogue/photos/tunisie/613c81f9a01dc4.32446848-180.jpg',NULL,NULL,'CC0','https://creativecommons.org/publicdomain/zero/1.0/deed.en'); -INSERT INTO Obverse VALUES(258832,NULL,'Eduardo Aires',replace(replace('The design depicts the representation of the link between the capital of Portugal and the others European capitals and thereby draw a map, within the lettering ‘PRESIDÊNCIA DO CONSELHO DA UNIÃO EUROPEIA PORTUGAL 2021’ (English – PRESIDENCY OF THE COUNCIL OF THE EUROPEAN UNION PORTUGAL 2021).\r\nThe coin’s outer ring depicts the 12 stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('PRESIDÊNCIA \r\nDO CONSELHO DA \r\nUNIÃO EUROPEIA \r\nPORTUGAL 2021\r\nCASA DA MOEDA\r\nEDUARDO AIRES','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/portugal/60150add0c1f12.04625506-original.webp','https://en.numista.com/catalogue/photos/portugal/60150add0c1f12.04625506-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(264789,NULL,NULL,'Depicts a view of the Puerta del Sol and a detail of Synagogue of El Tránsito, both buildings built in the 14th century in Mudejar style. On the left side in capital letters the country name and date, on the right side top the logo of the Royal Spanish Mint (crowned letter M). Surrounded by the twelve stars of Europe.',replace(replace('M\r\nESPAÑA\r\n2021','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('M\r\nSpain\r\n2021','\r',char(13)),'\n',char(10)),'/photos/espagne/605254496a33f0.64039108-original.webp','https://en.numista.com/catalogue/photos/espagne/605254496a33f0.64039108-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(274850,'E.Fernandes','Francisco Providência','Depicts the official logo of the Olympic Committee of Portugal surrounded by the inscription "Portugal at the 2020 Tokyo Olympics". Engraver''s name on the left and mint name on the right. Around the outer ring the 12 stars of the European Union.',replace(replace('PORTUGAL NOS JOGOS OLIMPICOS DE TOQUIO''20 2021\r\nCASA DA MOEDA - F. PROVIDENCIA','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'PORTUGAL AT THE TOKYO''20 2021 OLYMPIC GAMES','/photos/portugal/629fa708579307.87083194-original.webp','https://en.numista.com/catalogue/photos/portugal/629fa708579307.87083194-180.jpg','adinumismatics',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(275891,NULL,NULL,replace(replace('The design shows an allegory of the work of ‘UNICEF’ where the hands are a key element. One after the other they support the globe and are the link between the different areas of the Earth. The mention of the 75th anniversary as well as the laurels crown the ensemble accompanied by the acronym RF. On the upper rim, the name ‘UNICEF’ is inserted along with the relevant dates as well as the UNICEF motto ‘For each child’.\r\nThe coin’s outer ring depicts the 12 stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('UNICEF \r\n1946 – 2021 \r\nPOUR CHAQUE ENFANT\r\n75 ANS\r\nRF','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('For each child\r\n75 years','\r',char(13)),'\n',char(10)),'/photos/france/62ba04a89f8033.99285774-original.webp','https://en.numista.com/catalogue/photos/france/62ba04a89f8033.99285774-180.jpg','adinumismatics',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(302331,NULL,'Kiril Gogov','A portrait of Ivan Milev , a hologram stripe with alternating images of a flower, the figure “5” and the text “ЛЕВА”',replace(replace('Българска Народна Банка\r\nПет Лева\r\nИван Милев 1897-1927','\r',char(13)),'\n',char(10)),'[object Object]',NULL,replace(replace('Bulgarian National Bank\r\nFive Leva\r\nIvan Milev 1897-1927','\r',char(13)),'\n',char(10)),'/photos/bulgarie/62349fe0bf7207.72164828-original.webp','https://en.numista.com/catalogue/photos/bulgarie/62349fe0bf7207.72164828-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(314709,NULL,'Olaf Stoy','Angled side view of Castle Wartburg with keep.',replace(replace('2022\r\nA\r\nOS\r\nTHÜRINGEN\r\nD','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Thuringia','/photos/allemagne/624da35d5ea805.20654987-original.webp','https://en.numista.com/catalogue/photos/allemagne/624da35d5ea805.20654987-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(314962,'Joaquin Jimenez',NULL,'Depicts a tree with leaves and fruits of the oak and the olive tree. In the background is the hexagon, which symbolizes the outline of the map of France, in the upper three leaves the republican motto "Freedom, Equality, Fraternity". Below the monogram "RF" of the French Republic, on the left the year of issue "2022" and on the lower edge of the hexagon next to the trunk the mint mark of the mint on the left, the mint mark of the engraver general on the right and this name above. The twelve stars of the European flag are depicted on the outer ring.',replace(replace('LIBERTÉ ÉGALITÉ FRATERNITÉ\r\n2022 RF\r\nJ. JIMENEZ','\r',char(13)),'\n',char(10)),'[object Object]','République française',NULL,'/photos/france/630397ad1088f5.70305062-original.webp','https://en.numista.com/catalogue/photos/france/630397ad1088f5.70305062-180.jpg','adinumismatics',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(318748,NULL,NULL,replace(replace('The design shows a solemn profile of President Jacques Chirac looking towards the future. He is surrounded by several symbols representing his actions: a euro symbol, as sign of his involvement in the introduction of the Euro and his European spirit, and a French flag represented in heraldic colours, itself embellished with the RF as a reference to his presidency. His dates and name are inserted in the Euro’s logo. The mintmarks as well as the year date fit into the design.\r\nThe coin’s outer ring depicts the 12 stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('2022\r\nJACQUES CHIRAC\r\n1932\r\n2019\r\nRF\r\n€','\r',char(13)),'\n',char(10)),'[object Object]','République française',NULL,'/photos/france/621747efb14c78.99193289-original.webp','https://en.numista.com/catalogue/photos/france/621747efb14c78.99193289-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(319351,NULL,NULL,replace(replace('Janaki Temple in the middle\r\nNepal written in Devangari on top and name of the temple below.\r\nIn the botton the year written in the Vikram Samvat calender','\r',char(13)),'\n',char(10)),replace(replace('नेपाल \r\nजानकी मन्दिर \r\n२०७७','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Nepal Janaki Temple 2077','/photos/nepal/61fcca3e0c5fa2.09461602-original.webp','https://en.numista.com/catalogue/photos/nepal/61fcca3e0c5fa2.09461602-180.jpg','Dinesh Acharya',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(321378,NULL,'José João de Brito',replace(replace('This crossing was achieved by using only internal means of navigation: a modified sextant and a course corrector. The design shows the representation of the Lusitânia seaplane, one of the three Fairey III biplanes that were used by the commander and pilot Sacadura Cabral and the navigator Gago Coutinho, accomplish the flight between Lisboa and Rio de Janeiro. The edge inscription reads ‘TRAVESSIA DO ATLÂNTICO SUL’. Below the plane, the inscription ‘PORTUGAL 1922-2022’. The Mintmark will be ‘CASA DA MOEDA’, the Portuguese name of the Mint.\r\n\r\nThe coin’s outer ring depicts the 12 stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('TRAVESSIA DO ATLÂNTICO SUL\r\nPORTUGAL 1922 – 2022\r\nEsc. JJ BRITO \r\nCASA DA MOEDA','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'CROSSING OF THE SOUTH ATLANTIC','/photos/portugal/62ff6209ec90c2.67659031-original.webp','https://en.numista.com/catalogue/photos/portugal/62ff6209ec90c2.67659031-180.jpg','Ponpandi Perumal',NULL,'CC BY','https://creativecommons.org/licenses/by/4.0/deed.en'); -INSERT INTO Obverse VALUES(327288,NULL,NULL,'Coat of arms of Tunisia',replace(replace('الجمهورية التونسية\r\n2021-1443','\r',char(13)),'\n',char(10)),'[object Object], [object Object]',NULL,replace(replace('Republic of Tunisia\r\n1443-2021','\r',char(13)),'\n',char(10)),'/photos/tunisie/65c0b6adedcca2.39163394-original.webp','https://en.numista.com/catalogue/photos/tunisie/65c0b6adedcca2.39163394-180.jpg','aslankz',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Obverse VALUES(331445,NULL,'Joaquin Jimenez',replace(replace('The design is a mix of two major elements of the Erasmus programme: the original intellectual inspiration, Erasmus himself, and the allegory of its influence over Europe. The first one is symbolised by one of the most known depiction of Erasmus. The second one is symbolised by a beam of links going across the coin from a beacon to another, representing the numerous intellectual and human exchanges between the European students. As a reference to Europe, some of these links form other stars, born from the synergy between the countries. The figure 35, for 35th anniversary comes out from the stars in a contemporary graphical style.\r\nThe outer ring depicts the twelve stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('35\r\nRI\r\n1987-2022\r\nERASMUS\r\nPROGRAMME\r\nJ.J.\r\nR','\r',char(13)),'\n',char(10)),'[object Object]','Repubblica italiana',NULL,'/photos/italie/62cd12754ae4a8.06394735-original.webp','https://en.numista.com/catalogue/photos/italie/62cd12754ae4a8.06394735-180.jpg','liege-numismatique',NULL,NULL,NULL); -INSERT INTO Obverse VALUES(338338,NULL,'Stjepan Pranjković','Silhouette design of a marten on the Croatian checkerboard',replace(replace('HRVATSKA\r\n2023.','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Croatia','/photos/croatie/64172b0259ca18.80145294-original.webp','https://en.numista.com/catalogue/photos/croatie/64172b0259ca18.80145294-180.jpg','papilio',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(338339,NULL,'Ivan Šivak','Silhouette map of Croatia on the Croatian checkerboard',replace(replace('2023.\r\nHRVATSKA','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'Croatia','/photos/croatie/641729ab6ac473.15894037-original.webp','https://en.numista.com/catalogue/photos/croatie/641729ab6ac473.15894037-180.jpg','papilio',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(352712,NULL,'Michael Otto',replace(replace('The design shows the Elbphilharmonie concert hall, Hamburg’s newest landmark. The impressive and detailed representation of the concert building against the background of the maritime urban landscape represents the Land of Hamburg in an exceptionally convincing manner. The left half of the coin’s inner section includes Germany’s issuing country code, ‘D’, the year ‘2023’ and the mintmark of the respective mint (‘A’, ‘D’, ‘F’, ‘G’ or ‘J’). The right half features the artist’s initials, and the lower part features the inscription ‘HAMBURG’.\r\nThe coin’s outer ring depicts the 12 stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('D\r\n2023\r\nD\r\nMO\r\nHAMBURG','\r',char(13)),'\n',char(10)),'[object Object]',NULL,NULL,'/photos/allemagne/63ea2517213c54.31340621-original.webp','https://en.numista.com/catalogue/photos/allemagne/63ea2517213c54.31340621-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(368994,NULL,'João Duarte',replace(replace('In the superior ring, it is written "Jornada Mundial da Juventude Lisboa 2023". In the down left there is a representation of the portuguese shield. In the center, it is written "Portugal". In the right, it is written "Casa da Moeda" and the indication of the author João Duarte. At the center of the coin, there is the pilgrim cross. Several figures sugest the shape of a globe. At the bottom, there are two hands hugging the figures.\r\nThe coin’s outer ring depicts the 12 stars of the European flag.','\r',char(13)),'\n',char(10)),replace(replace('JORNADA MUNDIAL DA JUVENTUDE\r\nLISBOA 2023\r\nPORTUGAL\r\nCASA DA MOEDA - JOÃO DUARTE','\r',char(13)),'\n',char(10)),'[object Object]',NULL,'World Youth Day - Lisbon 2023','/photos/portugal/64f2077e0e1bf6.00806096-original.webp','https://en.numista.com/catalogue/photos/portugal/64f2077e0e1bf6.00806096-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(369820,NULL,NULL,'Depicts a stylized portrayal of a rugby player sprinting with the rugby ball amidst the goalposts positioned at both ends of the field. The field itself is represented by a stylized globe, serving as a symbol for the global nature of the event. Positioned above the image is the caption "2023 Rugby World Cup in France". In the lower left corner, the official Rugby Union logo, while the lower right corner features the monogram "RF" (French Republic) along with the mintmarks of the mint and engraver. The twelve stars of the European flag are shown on the outer ring of the coin.',replace(replace('COUPE DU MONDE RUGBY FRANCE 2023\r\nCOUPE DU MONDE RUGBY FRANCE 2023\r\nRF','\r',char(13)),'\n',char(10)),'[object Object]','République Française',NULL,'/photos/france/64b808231b6164.48548152-original.webp','https://en.numista.com/catalogue/photos/france/64b808231b6164.48548152-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Obverse VALUES(377368,'Susan Taylor','Susanna Blunt','Head of Queen Elizabeth II, as at 77 years of age, bare headed, wearing necklace and earrings, facing right.',replace(replace('ELIZABETH II D·G·REGINA\r\nP','\r',char(13)),'\n',char(10)),'[object Object]','ELIZABETH II DEI GRATIA REGINA','Elizabeth II Queen by the grace of God','/photos/canada/64f88fc50504b4.07420667-original.webp','https://en.numista.com/catalogue/photos/canada/64f88fc50504b4.07420667-180.jpg','Monéphil',NULL,NULL,NULL); -CREATE TABLE Edge ( - id INTEGER NOT NULL PRIMARY KEY, - engravers TEXT, - designers TEXT, - description TEXT, - lettering TEXT, - lettering_scripts TEXT, - unabridged_legend TEXT, - lettering_translation TEXT, - picture TEXT, - thumbnail TEXT, - picture_copyright TEXT, - picture_copyright_url TEXT, - picture_license_name TEXT, - picture_license_url TEXT -); -INSERT INTO Edge VALUES(3,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/france/7491-original.webp','https://en.numista.com/catalogue/photos/france/7491-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(4,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/france/7492-original.webp','https://en.numista.com/catalogue/photos/france/7492-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(5,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/france/7493-original.webp','https://en.numista.com/catalogue/photos/france/7493-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(8,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/france/7498-original.webp','https://en.numista.com/catalogue/photos/france/7498-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(9,NULL,NULL,'5 groups of reeds',NULL,NULL,NULL,NULL,'/photos/france/7499-original.webp','https://en.numista.com/catalogue/photos/france/7499-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(12,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/france/6157694a45aa84.62297514-original.webp','https://en.numista.com/catalogue/photos/france/6157694a45aa84.62297514-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(42,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/etats-unis/3289-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3289-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(43,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/etats-unis/3151-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3151-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(44,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/etats-unis/3162-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3162-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(53,NULL,NULL,'Reeded (118 reeds)',NULL,NULL,NULL,NULL,'/photos/etats-unis/3290-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3290-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(55,NULL,NULL,'Reeded (119 reeds)',NULL,NULL,NULL,NULL,'/photos/etats-unis/3174-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3174-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(57,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/autriche/3024-original.webp','https://en.numista.com/catalogue/photos/autriche/3024-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(58,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/autriche/3268-original.webp','https://en.numista.com/catalogue/photos/autriche/3268-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(59,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/autriche/3023-original.webp','https://en.numista.com/catalogue/photos/autriche/3023-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(73,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/belgique/2710-original.webp','https://en.numista.com/catalogue/photos/belgique/2710-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(74,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/belgique/2706-original.webp','https://en.numista.com/catalogue/photos/belgique/2706-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(75,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/belgique/3062-original.webp','https://en.numista.com/catalogue/photos/belgique/3062-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(77,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/belgique/2693-original.webp','https://en.numista.com/catalogue/photos/belgique/2693-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(78,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/belgique/3057-original.webp','https://en.numista.com/catalogue/photos/belgique/3057-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(79,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/belgique/3064-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(81,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/espagne/3370-original.webp','https://en.numista.com/catalogue/photos/espagne/3370-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(82,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/espagne/4249-original.webp','https://en.numista.com/catalogue/photos/espagne/4249-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(83,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/espagne/3369-original.webp','https://en.numista.com/catalogue/photos/espagne/3369-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(84,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/espagne/4252-original.webp','https://en.numista.com/catalogue/photos/espagne/4252-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(85,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/espagne/4265-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(87,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/espagne/3363-original.webp','https://en.numista.com/catalogue/photos/espagne/3363-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(88,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 * * " alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/espagne/3386-original.webp','https://en.numista.com/catalogue/photos/espagne/3386-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(91,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/finlande/1253-original.webp','https://en.numista.com/catalogue/photos/finlande/1253-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(96,NULL,NULL,'Reeded with incuse lettering: "SUOMI FINLAND" and three lion''s heads','SUOMI FINLAND','[object Object]',NULL,'FINLAND FINLAND','/photos/finlande/1260-original.webp','https://en.numista.com/catalogue/photos/finlande/1260-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(97,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/france/7449-original.webp','https://en.numista.com/catalogue/photos/france/7449-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(98,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/france/8643-original.webp','https://en.numista.com/catalogue/photos/france/8643-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(99,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/france/7450-original.webp','https://en.numista.com/catalogue/photos/france/7450-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(100,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/france/8645-original.webp','https://en.numista.com/catalogue/photos/france/8645-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(103,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/france/8650-original.webp','https://en.numista.com/catalogue/photos/france/8650-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(105,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/allemagne/2009-original.webp','https://en.numista.com/catalogue/photos/allemagne/2009-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(106,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin.',NULL,NULL,NULL,NULL,'/photos/allemagne/2233-original.webp','https://en.numista.com/catalogue/photos/allemagne/2233-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(107,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/allemagne/2010-original.webp','https://en.numista.com/catalogue/photos/allemagne/2010-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(108,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/allemagne/2235-original.webp','https://en.numista.com/catalogue/photos/allemagne/2235-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(109,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/allemagne/2237-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(110,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/allemagne/2011-original.webp','https://en.numista.com/catalogue/photos/allemagne/2011-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(111,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/allemagne/2238-original.webp','https://en.numista.com/catalogue/photos/allemagne/2238-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(112,NULL,NULL,'Reeded with incuse lettering.','EINIGKEIT UND RECHT UND FREIHEIT',NULL,NULL,'Unity and Justice and Freedom','/photos/allemagne/2021-original.webp','https://en.numista.com/catalogue/photos/allemagne/2021-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(115,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/grece/1282-original.webp','https://en.numista.com/catalogue/photos/grece/1282-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(116,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/grece/1617-original.webp','https://en.numista.com/catalogue/photos/grece/1617-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(118,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/grece/1279-original.webp','https://en.numista.com/catalogue/photos/grece/1279-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(120,NULL,NULL,'Reeded with inscription','ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ','[object Object]',NULL,'Hellenic Republic','/photos/grece/1283-original.webp','https://en.numista.com/catalogue/photos/grece/1283-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(121,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/irlande/852-original.webp','https://en.numista.com/catalogue/photos/irlande/852-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(122,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin.',NULL,NULL,NULL,NULL,'/photos/irlande/1025-original.webp','https://en.numista.com/catalogue/photos/irlande/1025-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(125,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/irlande/1029-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(126,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/irlande/857-original.webp','https://en.numista.com/catalogue/photos/irlande/857-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(129,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/italie/2318-original.webp','https://en.numista.com/catalogue/photos/italie/2318-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(130,NULL,NULL,'Grooved',NULL,NULL,NULL,NULL,'/photos/italie/2578-original.webp','https://en.numista.com/catalogue/photos/italie/2578-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(131,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/italie/2319-original.webp','https://en.numista.com/catalogue/photos/italie/2319-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(132,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/italie/2580-original.webp','https://en.numista.com/catalogue/photos/italie/2580-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(133,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/italie/2582-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(136,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 * * " alternately upright and inverted','2 * 2 * 2 * 2 * 2 * 2 *',NULL,NULL,NULL,'/photos/italie/2330-original.webp','https://en.numista.com/catalogue/photos/italie/2330-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(137,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/luxembourg/1290-original.webp','https://en.numista.com/catalogue/photos/luxembourg/1290-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(138,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/luxembourg/1775-original.webp','https://en.numista.com/catalogue/photos/luxembourg/1775-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(139,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/luxembourg/1289-original.webp','https://en.numista.com/catalogue/photos/luxembourg/1289-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(144,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 * * " alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/luxembourg/1305-original.webp','https://en.numista.com/catalogue/photos/luxembourg/1305-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(145,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/pays-bas/2010-original.webp','https://en.numista.com/catalogue/photos/pays-bas/2010-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(146,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/pays-bas/2294-original.webp','https://en.numista.com/catalogue/photos/pays-bas/2294-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(147,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/pays-bas/2008-original.webp','https://en.numista.com/catalogue/photos/pays-bas/2008-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(149,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/pays-bas/2298-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(150,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/pays-bas/2003-original.webp','https://en.numista.com/catalogue/photos/pays-bas/2003-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(152,NULL,NULL,'Reeded with inscription','GOD * ZIJ * MET * ONS *',NULL,NULL,'God Be With Us','/photos/pays-bas/680-original.webp','https://en.numista.com/catalogue/photos/pays-bas/680-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(153,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/portugal/3778-original.webp','https://en.numista.com/catalogue/photos/portugal/3778-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(154,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/portugal/3777-original.webp','https://en.numista.com/catalogue/photos/portugal/3777-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(155,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/portugal/3776-original.webp','https://en.numista.com/catalogue/photos/portugal/3776-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(156,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/portugal/5418-original.webp','https://en.numista.com/catalogue/photos/portugal/5418-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(159,NULL,NULL,'Segmented reeding. 3 segments with 28 or 29 reeds.',NULL,NULL,NULL,NULL,'/photos/portugal/3773-original.webp','https://en.numista.com/catalogue/photos/portugal/3773-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(171,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/suisse/5f9f2db8d69809.66838809-original.webp','https://en.numista.com/catalogue/photos/suisse/5f9f2db8d69809.66838809-180.jpg','stratocaster',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(173,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/suisse/5f9f2f052890a9.75234060-original.webp','https://en.numista.com/catalogue/photos/suisse/5f9f2f052890a9.75234060-180.jpg','stratocaster',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(178,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/suisse/1534-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(185,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(189,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/suisse/61f5e74c42a6d0.74417960-original.webp','https://en.numista.com/catalogue/photos/suisse/61f5e74c42a6d0.74417960-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(242,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/slovenie/798-original.webp','https://en.numista.com/catalogue/photos/slovenie/798-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(243,NULL,NULL,'Reeded with inscription','SLOVENIJA','[object Object]',NULL,NULL,'/photos/slovenie/810-original.webp','https://en.numista.com/catalogue/photos/slovenie/810-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(377,NULL,NULL,'Milled',NULL,NULL,NULL,NULL,'/photos/canada/5125-original.webp','https://en.numista.com/catalogue/photos/canada/5125-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(403,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/canada/614e00bddee690.26293339-original.webp','https://en.numista.com/catalogue/photos/canada/614e00bddee690.26293339-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(465,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/canada/5115-original.webp','https://en.numista.com/catalogue/photos/canada/5115-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(524,NULL,NULL,'Milled and plain alternately (four each)',NULL,NULL,NULL,NULL,'/photos/pologne/5ebaafe3b09d51.21122552-original.webp','https://en.numista.com/catalogue/photos/pologne/5ebaafe3b09d51.21122552-180.jpg','Narodowy Bank Polski','http://www.nbp.pl',NULL,NULL); -INSERT INTO Edge VALUES(573,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(589,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/mexique/3688-original.webp','https://en.numista.com/catalogue/photos/mexique/3688-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(591,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/mexique/3670-original.webp','https://en.numista.com/catalogue/photos/mexique/3670-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(596,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(614,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/etats-unis/3170-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3170-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(648,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/etats-unis/3196-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3196-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(649,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/etats-unis/3195-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3195-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(664,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/royaume-uni/6238a9846c69f5.38108830-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/6238a9846c69f5.38108830-180.jpg','Worldwide collection',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Edge VALUES(665,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(666,NULL,NULL,'Smooth and inscripted','* ORDEM E PROGRESSO * BRASIL','[object Object]',NULL,'Order and Progress Brazil','/photos/bresil/1500-original.webp','https://en.numista.com/catalogue/photos/bresil/1500-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(681,NULL,NULL,'Designs in relief',NULL,NULL,NULL,NULL,'/photos/france/8654-original.webp','https://en.numista.com/catalogue/photos/france/8654-180.jpg','smy77',NULL,'CC BY','https://creativecommons.org/licenses/by/4.0/deed.en'); -INSERT INTO Edge VALUES(734,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/pays-bas/2880-original.webp','https://en.numista.com/catalogue/photos/pays-bas/2880-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(766,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/ancienne_urss/1127-original.webp','https://en.numista.com/catalogue/photos/ancienne_urss/1127-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(768,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/portugal/1602-180.jpg','ADRIARTH',NULL,NULL,NULL); -INSERT INTO Edge VALUES(770,NULL,NULL,'Coarsely reeded.',NULL,NULL,NULL,NULL,'/photos/portugal/1154-original.webp','https://en.numista.com/catalogue/photos/portugal/1154-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(771,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/614c77991f3926.22246940-original.webp','https://en.numista.com/catalogue/photos/portugal/614c77991f3926.22246940-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(772,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/5fb22df77aae26.20008971-original.webp','https://en.numista.com/catalogue/photos/portugal/5fb22df77aae26.20008971-180.jpg','Fireberg',NULL,NULL,NULL); -INSERT INTO Edge VALUES(773,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/614c781cd3c2f8.86195487-original.webp','https://en.numista.com/catalogue/photos/portugal/614c781cd3c2f8.86195487-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(774,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/614c7a879a48a4.48356386-original.webp','https://en.numista.com/catalogue/photos/portugal/614c7a879a48a4.48356386-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(775,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/portugal/614c7995a53d81.50600554-original.webp','https://en.numista.com/catalogue/photos/portugal/614c7995a53d81.50600554-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(776,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/portugal/6111-original.webp','https://en.numista.com/catalogue/photos/portugal/6111-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(779,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3403-original.webp','https://en.numista.com/catalogue/photos/espagne/3403-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(781,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/espagne/5f9f4f25d423a8.55672097-original.webp','https://en.numista.com/catalogue/photos/espagne/5f9f4f25d423a8.55672097-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(782,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/espagne/5f9f50451e8940.33466524-original.webp','https://en.numista.com/catalogue/photos/espagne/5f9f50451e8940.33466524-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(783,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3394-original.webp','https://en.numista.com/catalogue/photos/espagne/3394-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(784,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3392-original.webp','https://en.numista.com/catalogue/photos/espagne/3392-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(787,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/espagne/5f9f4a12184be9.80826467-original.webp','https://en.numista.com/catalogue/photos/espagne/5f9f4a12184be9.80826467-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(808,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/hongrie/61581e3443ea40.79387642-original.webp','https://en.numista.com/catalogue/photos/hongrie/61581e3443ea40.79387642-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(810,NULL,NULL,'7 reeded segments with 10 reeds each.',NULL,NULL,NULL,NULL,'/photos/hongrie/522-original.webp','https://en.numista.com/catalogue/photos/hongrie/522-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(844,NULL,NULL,replace(replace('Smooth with the inscription of the German motto\r\n\r\nThere are two variants for the edge text:\r\n1. text readable with obverse face up\r\n2. text readable upside down','\r',char(13)),'\n',char(10)),'EINIGKEIT UND RECHT UND FREIHEIT',NULL,NULL,'Unity and Justice and Freedom','/photos/allemagne/2036-original.webp','https://en.numista.com/catalogue/photos/allemagne/2036-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(846,NULL,NULL,'Smooth with imprints','~*~ ~·~ ~*~ ~·~ ~*~ ~·~',NULL,NULL,NULL,'/photos/allemagne/1818-original.webp','https://en.numista.com/catalogue/photos/allemagne/1818-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(847,NULL,NULL,replace(replace('Reeded (1950-1971)\r\nSmooth (1972-2001)','\r',char(13)),'\n',char(10)),NULL,NULL,NULL,NULL,'/photos/allemagne/1462-original.webp','https://en.numista.com/catalogue/photos/allemagne/1462-180.jpg','Monéphil',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Edge VALUES(850,NULL,NULL,'Smooth with the brass plating partly stretched over a steel core',NULL,NULL,NULL,NULL,'/photos/allemagne/2042-original.webp','https://en.numista.com/catalogue/photos/allemagne/2042-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(854,NULL,NULL,'Smooth with copper plating partly stretched over a steel core.',NULL,NULL,NULL,NULL,'/photos/allemagne/2038-original.webp','https://en.numista.com/catalogue/photos/allemagne/2038-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(861,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(862,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(863,NULL,NULL,replace(replace('Milled with incuse lettering\r\n\r\nNote: errors reported with missing apostrophe ('')','\r',char(13)),'\n',char(10)),'PLEIDIOL WYF I''M GWLAD','[object Object]',NULL,'True am I to my country','/photos/royaume-uni/2046-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/2046-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(864,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(865,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(867,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(868,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(875,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(876,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/royaume-uni/10227-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/10227-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(879,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/royaume-uni/615ae685136833.67761440-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/615ae685136833.67761440-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(907,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/portugal/60b00daee86183.96365123-180.jpg','Bulgaria1999',NULL,NULL,NULL); -INSERT INTO Edge VALUES(908,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/etats-unis/3287-original.webp','https://en.numista.com/catalogue/photos/etats-unis/3287-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(941,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(946,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/espagne/615d6e80d93a95.98222494-original.webp','https://en.numista.com/catalogue/photos/espagne/615d6e80d93a95.98222494-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(991,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/5f9f5135199fb8.56552492-original.webp','https://en.numista.com/catalogue/photos/portugal/5f9f5135199fb8.56552492-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1051,NULL,NULL,'Smooth with inscription','MOTIVO QUIMBAYA *** 200 PESOS ***','[object Object]',NULL,'Quimbayan motif *** 200 Pesos ***','/photos/colombie/291-original.webp','https://en.numista.com/catalogue/photos/colombie/291-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1073,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(1149,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3391-original.webp','https://en.numista.com/catalogue/photos/espagne/3391-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1202,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(1205,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(1206,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(1236,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/portugal/614c7ab2a95433.54286164-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1237,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/portugal/614c7a98c2f269.83493094-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1238,NULL,NULL,'Smooth and reeded (7 sections each).',NULL,NULL,NULL,NULL,'/photos/portugal/1229-original.webp','https://en.numista.com/catalogue/photos/portugal/1229-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1241,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/614c7854220351.57373325-original.webp','https://en.numista.com/catalogue/photos/portugal/614c7854220351.57373325-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1242,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/portugal/1087-original.webp','https://en.numista.com/catalogue/photos/portugal/1087-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1243,NULL,NULL,'Coarse reeded.',NULL,NULL,NULL,NULL,'/photos/portugal/1088-original.webp','https://en.numista.com/catalogue/photos/portugal/1088-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1258,NULL,NULL,replace('22 incuse fleurs-de-lis in a plain field.\n\nThere are two edge varieties: fleurs-de-lis up and fleurs-de-lis down. The first step to mint these coins was pressing the edge design into the flan. Then, the blanks with their edge already pressed entered randomly between the dies, causing the two orientations of the fleurs-de-lis. It is estimated that there is a 50% chance of each variety.','\n',char(10)),NULL,NULL,NULL,NULL,'/photos/espagne/1225-original.webp','https://en.numista.com/catalogue/photos/espagne/1225-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1262,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3389-original.webp','https://en.numista.com/catalogue/photos/espagne/3389-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1263,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3390-original.webp','https://en.numista.com/catalogue/photos/espagne/3390-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1264,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3406-original.webp','https://en.numista.com/catalogue/photos/espagne/3406-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1266,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3393-original.webp','https://en.numista.com/catalogue/photos/espagne/3393-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1267,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/615d6f54a30df3.95865827-original.webp','https://en.numista.com/catalogue/photos/espagne/615d6f54a30df3.95865827-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(1324,NULL,NULL,'Milled with incuse lettering','STANDING ON THE SHOULDERS OF GIANTS',NULL,NULL,NULL,'/photos/royaume-uni/1915-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/1915-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1353,NULL,NULL,'Embossed lettering','UNA GRANDE LIBRE','[object Object]',NULL,'One, great and free','/photos/espagne/988-original.webp','https://en.numista.com/catalogue/photos/espagne/988-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1366,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/portugal/614c79cb686492.11627966-original.webp','https://en.numista.com/catalogue/photos/portugal/614c79cb686492.11627966-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1376,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(1384,NULL,NULL,'Milled with incuse lettering','DECUS ET TUTAMEN','[object Object]',NULL,'An ornament and a safeguard','/photos/royaume-uni/2052-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/2052-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1389,NULL,NULL,'Milled with incuse lettering','DECUS ET TUTAMEN','[object Object]',NULL,'An ornament and a safeguard','/photos/royaume-uni/2044-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/2044-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1390,NULL,NULL,'Milled with incuse lettering','DECUS ET TUTAMEN','[object Object]',NULL,'An ornament and a safeguard','/photos/royaume-uni/2058-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/2058-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1395,NULL,NULL,'Milled with incuse lettering','DECUS ET TUTAMEN','[object Object]',NULL,'An ornament and a safeguard','/photos/royaume-uni/9962-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/9962-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1397,NULL,NULL,'Milled with incuse lettering','DECUS ET TUTAMEN','[object Object]',NULL,'An ornament and a safeguard','/photos/royaume-uni/2060-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/2060-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1571,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(1589,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/japon/602a20502c8d55.93340745-original.webp','https://en.numista.com/catalogue/photos/japon/602a20502c8d55.93340745-180.jpg','Griffin S',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Edge VALUES(1643,NULL,NULL,'Segmented reeding, 5 reeds on each section',NULL,NULL,NULL,NULL,'/photos/thailande/1248-original.webp','https://en.numista.com/catalogue/photos/thailande/1248-180.jpg','ADRIARTH',NULL,NULL,NULL); -INSERT INTO Edge VALUES(1702,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/australie/9337-original.webp','https://en.numista.com/catalogue/photos/australie/9337-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Edge VALUES(1703,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/australie/8348-original.webp','https://en.numista.com/catalogue/photos/australie/8348-180.jpg','Mike Bentley',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Edge VALUES(1998,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/hongrie/4173-original.webp','https://en.numista.com/catalogue/photos/hongrie/4173-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(2047,NULL,NULL,'Alternating plain and milled sections (7 each)',NULL,NULL,NULL,NULL,'/photos/portugal/2585-original.webp','https://en.numista.com/catalogue/photos/portugal/2585-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2168,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 * * " alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/espagne/3385-original.webp','https://en.numista.com/catalogue/photos/espagne/3385-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2169,NULL,NULL,'Reeded with inscription','EINIGKEIT UND RECHT UND FREIHEIT',NULL,NULL,'Unity and justice and freedom','/photos/allemagne/2031-original.webp','https://en.numista.com/catalogue/photos/allemagne/2031-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2173,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/chypre/644-original.webp','https://en.numista.com/catalogue/photos/chypre/644-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2175,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/chypre/645-original.webp','https://en.numista.com/catalogue/photos/chypre/645-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2178,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/chypre/646-original.webp','https://en.numista.com/catalogue/photos/chypre/646-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2180,NULL,NULL,'Reeded with inscription.','2 ΕΥΡΩ 2 EURO 2 ΕΥΡΩ 2 EURO',NULL,NULL,NULL,'/photos/chypre/651-original.webp','https://en.numista.com/catalogue/photos/chypre/651-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2183,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/malte/446-original.webp','https://en.numista.com/catalogue/photos/malte/446-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2190,NULL,NULL,replace(replace('Reeded with lettering.\r\nMay be upsidedown.','\r',char(13)),'\n',char(10)),'ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ','[object Object]',NULL,'HELLENIC REPUBLIC','/photos/grece/650c599e134c75.91964708-original.webp','https://en.numista.com/catalogue/photos/grece/650c599e134c75.91964708-180.jpg','Xymelin',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(2199,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 * * " alternately upright and inverted','2 * 2 * 2 * 2 * 2 * 2 *','[object Object]',NULL,NULL,'/photos/italie/2333-original.webp','https://en.numista.com/catalogue/photos/italie/2333-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2201,NULL,NULL,'Reeded with inscription.','EINIGKEIT UND RECHT UND FREIHEIT',NULL,NULL,'Unity and Justice and Freedom','/photos/allemagne/2029-original.webp','https://en.numista.com/catalogue/photos/allemagne/2029-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2204,NULL,NULL,'Finely ribbed with seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/3794-original.webp','https://en.numista.com/catalogue/photos/portugal/3794-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2217,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/argentine/1203-original.webp','https://en.numista.com/catalogue/photos/argentine/1203-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2236,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/royaume-uni/615ae6de952c86.89464836-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/615ae6de952c86.89464836-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2252,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2253,NULL,NULL,replace(replace('Reeded.\r\nNOTE: data in SCWC concerning issues of KM#649.2 to have plain/smooth edge are wrong. All issues seem to have reeding.','\r',char(13)),'\n',char(10)),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2254,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3401-original.webp','https://en.numista.com/catalogue/photos/espagne/3401-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2255,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/espagne/3402-original.webp','https://en.numista.com/catalogue/photos/espagne/3402-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2304,NULL,NULL,'Incuse pattern: 22 fleurs-de-lis in two varieties: fleurs-de-lis up and down',NULL,NULL,NULL,NULL,'/photos/espagne/3411-original.webp','https://en.numista.com/catalogue/photos/espagne/3411-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2374,NULL,NULL,'Embossed lettering','UNA GRANDE LIBRE','[object Object]',NULL,'One, great and free','/photos/espagne/3410-original.webp','https://en.numista.com/catalogue/photos/espagne/3410-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2375,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2376,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2383,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/614c795207c587.26586632-original.webp','https://en.numista.com/catalogue/photos/portugal/614c795207c587.26586632-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2384,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/614c78f3e40dc5.10356404-original.webp','https://en.numista.com/catalogue/photos/portugal/614c78f3e40dc5.10356404-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2432,NULL,NULL,'Segmented (8 milled, 8 smooth)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2433,NULL,NULL,replace(replace('Two times the value, between two milled sections.\r\nVarieties exist with letters up or down when the obverse faces up.\r\nUntil 1995, three varieties of letter-size exist (small, medium or large letters), while coins after 1995 all have large letters.','\r',char(13)),'\n',char(10)),'CIEN PESOS ||||||||||||||||| CIEN PESOS |||||||||||||||||',NULL,NULL,'100 Pesos 100 Pesos','/photos/colombie/650-original.webp','https://en.numista.com/catalogue/photos/colombie/650-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2504,NULL,NULL,'5 reeded segments',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2560,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2736,NULL,NULL,'Embossed lettering','UNA GRANDE LIBRE','[object Object]',NULL,'One, great and free','/photos/espagne/986-original.webp','https://en.numista.com/catalogue/photos/espagne/986-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2763,NULL,NULL,'Milled with a decorative pattern symbolising bridges and pathways',NULL,NULL,NULL,NULL,'/photos/royaume-uni/4467-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/4467-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2842,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(2903,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/afrique_du_sud/1732-original.webp','https://en.numista.com/catalogue/photos/afrique_du_sud/1732-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2986,NULL,NULL,'Incuse pattern: 22 fleurs-de-lis in two varieties: fleurs-de-lis up and down',NULL,NULL,NULL,NULL,'/photos/espagne/5f82d6770f5d03.15333843-original.webp','https://en.numista.com/catalogue/photos/espagne/5f82d6770f5d03.15333843-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(2994,NULL,NULL,'Reeded with inscription','EINIGKEIT UND RECHT UND FREIHEIT','[object Object]',NULL,'Unity and Justice and Freedom','/photos/allemagne/2027-original.webp','https://en.numista.com/catalogue/photos/allemagne/2027-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(3002,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(3044,NULL,NULL,'Alternating smooth and milled segments (8 each)',NULL,NULL,NULL,NULL,'/photos/turquie/635-original.webp','https://en.numista.com/catalogue/photos/turquie/635-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(3200,NULL,NULL,'Embossed lettering','UNA GRANDE LIBRE','[object Object]',NULL,'One, great and free','/photos/espagne/3409-original.webp','https://en.numista.com/catalogue/photos/espagne/3409-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(3223,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(3224,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(3225,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(3228,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(3256,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/argentine/5f0a0fa91c9105.96404192-original.webp','https://en.numista.com/catalogue/photos/argentine/5f0a0fa91c9105.96404192-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(3282,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/portugal/5ea87a0fa66508.03935394-original.webp','https://en.numista.com/catalogue/photos/portugal/5ea87a0fa66508.03935394-180.jpg','ADRIARTH',NULL,NULL,NULL); -INSERT INTO Edge VALUES(3372,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/espagne/4251-original.webp','https://en.numista.com/catalogue/photos/espagne/4251-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(3510,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/france/8644-original.webp','https://en.numista.com/catalogue/photos/france/8644-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(3818,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/maroc/341-original.webp','https://en.numista.com/catalogue/photos/maroc/341-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(3888,NULL,NULL,'Incuse pattern: 22 fleurs-de-lis in two varieties: fleurs-de-lis up and down',NULL,NULL,NULL,NULL,'/photos/espagne/3802-original.webp','https://en.numista.com/catalogue/photos/espagne/3802-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(3932,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/espagne/615d6ed1ebcf30.46584283-original.webp','https://en.numista.com/catalogue/photos/espagne/615d6ed1ebcf30.46584283-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(4038,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(4039,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(4141,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(4546,NULL,NULL,'Spanish flower',NULL,NULL,NULL,NULL,'/photos/espagne/607c41c62cdea8.82654283-original.webp','https://en.numista.com/catalogue/photos/espagne/607c41c62cdea8.82654283-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(4580,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/russie/5357-original.webp','https://en.numista.com/catalogue/photos/russie/5357-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(4729,NULL,NULL,'Segmented in smooth and milled parts',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(4901,NULL,NULL,replace(replace('KM#182a.1: plain\r\nKM#182a.2: reeded','\r',char(13)),'\n',char(10)),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(4902,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(5010,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(5012,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(5063,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 * * " alternately upright and inverted.','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/7465-original.webp','https://en.numista.com/catalogue/photos/france/7465-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(5086,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/slovaquie/584-original.webp','https://en.numista.com/catalogue/photos/slovaquie/584-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(5090,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/slovaquie/582-original.webp','https://en.numista.com/catalogue/photos/slovaquie/582-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(5091,NULL,NULL,'Reeded with the inscription (the country name in the Slovak language with two stars and a linden leaf in the middle).','★ SLOVENSKÁ REPUBLIKA ★','[object Object]',NULL,'Republic of Slovakia','/photos/slovaquie/576-original.webp','https://en.numista.com/catalogue/photos/slovaquie/576-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(5109,NULL,NULL,'Alternating smooth and reeded segments (8 each)',NULL,NULL,NULL,NULL,'/photos/bulgarie/598-original.webp','https://en.numista.com/catalogue/photos/bulgarie/598-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(5444,NULL,NULL,'Smooth with inscription','ESPERANÇA FRATERNIDADE CONFIANÇA',NULL,NULL,NULL,'/photos/portugal/3800-original.webp','https://en.numista.com/catalogue/photos/portugal/3800-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(5492,NULL,NULL,'Milled',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(5624,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(5628,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(5737,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/nepal/1707-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(5786,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(6071,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(6163,NULL,NULL,replace('Smooth with repeated imprints and inscriptions\nof letters "T.C." and tulip figure\n\nNote: variation exist up or down text on edge','\n',char(10)),'||||| T.C. ||||| ~ ||||| T.C. ||||| ~ ||||| T.C. ||||| ~',NULL,NULL,NULL,'/photos/turquie/1922-original.webp','https://en.numista.com/catalogue/photos/turquie/1922-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6164,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/turquie/60b653bd690f64.48018107-original.webp','https://en.numista.com/catalogue/photos/turquie/60b653bd690f64.48018107-180.jpg',NULL,NULL,'CC BY','https://creativecommons.org/licenses/by/4.0/deed.en'); -INSERT INTO Edge VALUES(6165,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/turquie/2935-original.webp','https://en.numista.com/catalogue/photos/turquie/2935-180.jpg','AvrAlex (Belgorod, Russia)',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6185,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(6258,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(6278,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(6290,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/belgique/3065-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6293,NULL,NULL,'Finely reeded with edge lettering: six times the sequence "2 * *" or "* * 2" alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/belgique/2742-original.webp','https://en.numista.com/catalogue/photos/belgique/2742-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6298,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/belgique/2711-original.webp','https://en.numista.com/catalogue/photos/belgique/2711-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6307,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/belgique/2698-original.webp','https://en.numista.com/catalogue/photos/belgique/2698-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6319,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/allemagne/2236-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6329,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/irlande/1026-original.webp','https://en.numista.com/catalogue/photos/irlande/1026-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6333,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/irlande/855-original.webp','https://en.numista.com/catalogue/photos/irlande/855-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6334,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 * * " alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/irlande/860-original.webp','https://en.numista.com/catalogue/photos/irlande/860-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6350,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/grece/1618-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6361,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/espagne/4264-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6373,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/france/8646-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6374,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/france/8649-original.webp','https://en.numista.com/catalogue/photos/france/8649-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6376,NULL,NULL,'Finely ribbed with edge lettering: three times the sequence "2 * *" upright and the sequence "* * 2" inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/7467-original.webp','https://en.numista.com/catalogue/photos/france/7467-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6383,NULL,NULL,'Alternating segments: three smooth, three finely ribbed',NULL,NULL,NULL,NULL,'/photos/italie/2323-original.webp','https://en.numista.com/catalogue/photos/italie/2323-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6384,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 *" alternately upright and inverted','2 * 2 * 2 * 2 * 2 * 2 *','[object Object]',NULL,NULL,'/photos/italie/2335-original.webp','https://en.numista.com/catalogue/photos/italie/2335-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6418,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/luxembourg/1780-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6419,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/luxembourg/1287-original.webp','https://en.numista.com/catalogue/photos/luxembourg/1287-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6499,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(6500,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(6541,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(6612,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/royaume-uni/9727-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/9727-180.jpg','G-REMXD',NULL,NULL,NULL); -INSERT INTO Edge VALUES(6926,NULL,NULL,'Smooth and reeded alternating: 4 reeded segments with 8 grooves each.',NULL,NULL,NULL,NULL,'/photos/suede/1885-original.webp','https://en.numista.com/catalogue/photos/suede/1885-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(7047,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/turquie/3195-original.webp','https://en.numista.com/catalogue/photos/turquie/3195-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(7048,NULL,NULL,'Coarsely reeded',NULL,NULL,NULL,NULL,'/photos/turquie/602-original.webp','https://en.numista.com/catalogue/photos/turquie/602-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(7130,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7184,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7193,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7337,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7338,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/portugal/614c7921421453.27458907-original.webp','https://en.numista.com/catalogue/photos/portugal/614c7921421453.27458907-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(7398,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7461,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7524,NULL,NULL,'Reeded with inscription','CULTURA SINU MIL PESOS',NULL,NULL,'Sinu Culture One Thousand Pesos',NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7576,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7639,NULL,NULL,'Finely ribbed with seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/3779-original.webp','https://en.numista.com/catalogue/photos/portugal/3779-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(7641,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/hongrie/653-original.webp','https://en.numista.com/catalogue/photos/hongrie/653-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(7872,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(7905,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/autriche/3019-original.webp','https://en.numista.com/catalogue/photos/autriche/3019-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(8862,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(8884,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/cap-vert/200-original.webp','https://en.numista.com/catalogue/photos/cap-vert/200-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(8896,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/bresil/1540-original.webp','https://en.numista.com/catalogue/photos/bresil/1540-180.jpg','nalaberong',NULL,NULL,NULL); -INSERT INTO Edge VALUES(8925,NULL,NULL,'Plain-reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(9285,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(9638,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/cap-vert/622e64c6a30ca3.91324335-original.webp','https://en.numista.com/catalogue/photos/cap-vert/622e64c6a30ca3.91324335-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(9761,NULL,NULL,'Finely ribbed with edge lettering: four times the sequence of the text "2 EURO" and three stars alternately upright and inverted','2 EURO *** 2 EURO *** 2 EURO *** 2 EURO ***','[object Object]',NULL,NULL,'/photos/autriche/3034-original.webp','https://en.numista.com/catalogue/photos/autriche/3034-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(9826,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,'/photos/portugal/3263-original.webp','https://en.numista.com/catalogue/photos/portugal/3263-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(9828,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(9831,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(9834,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(9894,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/portugal/3795-original.webp','https://en.numista.com/catalogue/photos/portugal/3795-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(9895,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/portugal/5417-original.webp','https://en.numista.com/catalogue/photos/portugal/5417-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(9896,NULL,NULL,'Smooth with seven indentations ("Spanish flower")',NULL,NULL,NULL,NULL,'/photos/allemagne/2236-original.webp','https://en.numista.com/catalogue/photos/portugal/5419-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(9897,NULL,NULL,'Finely ribbed with seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/3793-original.webp','https://en.numista.com/catalogue/photos/portugal/3793-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(10056,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/cap-vert/5f0b9f488f5209.78321189-original.webp','https://en.numista.com/catalogue/photos/cap-vert/5f0b9f488f5209.78321189-180.jpg','Renato Lima',NULL,NULL,NULL); -INSERT INTO Edge VALUES(10126,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(10288,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(10854,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/espagne/3368-original.webp','https://en.numista.com/catalogue/photos/espagne/3368-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(10856,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/espagne/3371-original.webp','https://en.numista.com/catalogue/photos/espagne/3371-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(10857,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/espagne/4248-original.webp','https://en.numista.com/catalogue/photos/espagne/4248-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(10860,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/espagne/3367-original.webp','https://en.numista.com/catalogue/photos/espagne/3367-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(10861,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/espagne/3364-original.webp','https://en.numista.com/catalogue/photos/espagne/3364-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(10862,NULL,NULL,'Reeded with 2''s','2 ** 2 ** 2 ** 2 ** 2 ** 2 **','[object Object]',NULL,NULL,'/photos/espagne/1257-original.webp','https://en.numista.com/catalogue/photos/espagne/1257-180.jpg','Numista',NULL,NULL,NULL); -INSERT INTO Edge VALUES(11526,NULL,NULL,'Reeded with inscription','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/7464-original.webp','https://en.numista.com/catalogue/photos/france/7464-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(11635,NULL,NULL,'Seven plain and seven reeded sections.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(11691,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(11695,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(11952,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/portugal/614c78992ed9b0.28408186-original.webp','https://en.numista.com/catalogue/photos/portugal/614c78992ed9b0.28408186-180.jpg','Walter_Scott',NULL,NULL,NULL); -INSERT INTO Edge VALUES(13034,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(13038,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(13820,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(15296,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(15575,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(16586,NULL,NULL,'Smooth with a groove running circumferentially around the edge of the coin',NULL,NULL,NULL,NULL,'/photos/estonie/363-original.webp','https://en.numista.com/catalogue/photos/estonie/363-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(16588,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/estonie/366-original.webp','https://en.numista.com/catalogue/photos/estonie/366-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(18054,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(18666,NULL,NULL,'Reeded with inscription','EINIGKEIT UND RECHT UND FREIHEIT','[object Object]',NULL,'Unity and Justice and Freedom','/photos/allemagne/2023-original.webp','https://en.numista.com/catalogue/photos/allemagne/2023-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(19979,NULL,NULL,'Reeded with inscription','2**2**2**2**2**2**',NULL,NULL,NULL,'/photos/espagne/3382-original.webp','https://en.numista.com/catalogue/photos/espagne/3382-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(20700,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(20892,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 *" alternately upright and inverted','2 * 2 * 2 * 2 * 2 * 2 *',NULL,NULL,NULL,'/photos/italie/2340-original.webp','https://en.numista.com/catalogue/photos/italie/2340-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(22038,NULL,NULL,'Segmented reeding; 5 reeds each 15 sections',NULL,NULL,NULL,NULL,'/photos/thailande/2860-original.webp','https://en.numista.com/catalogue/photos/thailande/2860-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(22544,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(22652,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/france/62c7fface50b13.17829022-original.webp','https://en.numista.com/catalogue/photos/france/62c7fface50b13.17829022-180.jpg','PLH28',NULL,NULL,NULL); -INSERT INTO Edge VALUES(24276,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/france/62c801be3a34f7.86937799-original.webp','https://en.numista.com/catalogue/photos/france/62c801be3a34f7.86937799-180.jpg','PLH28',NULL,NULL,NULL); -INSERT INTO Edge VALUES(25746,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/royaume-uni/10221-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/10221-180.jpg','CyrusPamelaOne',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(25766,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,'/photos/royaume-uni/6367-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/6367-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(26208,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(26791,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(26792,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/nepal/1674-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(27352,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(27395,NULL,NULL,'Reeded with Stars Inscription',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(27528,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/argentine/834-original.webp','https://en.numista.com/catalogue/photos/argentine/834-180.jpg','Phil59',NULL,NULL,NULL); -INSERT INTO Edge VALUES(28191,NULL,NULL,'Reeded with inscription. Combination of 2 EURO and *** repeated four times.','2 EURO *** 2 EURO *** 2 EURO *** 2 EURO ***','[object Object]',NULL,NULL,'/photos/autriche/3032-original.webp','https://en.numista.com/catalogue/photos/autriche/3032-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(28330,NULL,NULL,'Finely ribbed with edge lettering: three times the sequence "2 * *" upright and the sequence "* * 2" inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/7461-original.webp','https://en.numista.com/catalogue/photos/france/7461-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(28608,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/bulgarie/1521-original.webp','https://en.numista.com/catalogue/photos/bulgarie/1521-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(28610,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/bulgarie/1508-original.webp','https://en.numista.com/catalogue/photos/bulgarie/1508-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(28611,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/bulgarie/1539-original.webp','https://en.numista.com/catalogue/photos/bulgarie/1539-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(28734,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(32604,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/canada/5108-original.webp','https://en.numista.com/catalogue/photos/canada/5108-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(36732,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36733,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36734,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36735,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36736,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36737,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36738,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36739,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36740,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36741,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36742,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(36743,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(40522,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(41904,NULL,NULL,'Finely ribbed with edge lettering: three times the sequence "2 * *" upright and the sequence "* * 2" inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/7459-original.webp','https://en.numista.com/catalogue/photos/france/7459-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(42976,NULL,NULL,'Reeded with 2''s & stars','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/espagne/3379-original.webp','https://en.numista.com/catalogue/photos/espagne/3379-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(49339,NULL,NULL,'Finely reeded with edge lettering: six times the sequence "2 * *" or "* * 2" alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/belgique/2731-original.webp','https://en.numista.com/catalogue/photos/belgique/2731-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(54956,NULL,NULL,'Indented',NULL,NULL,NULL,NULL,'/photos/pays-bas/2005-original.webp','https://en.numista.com/catalogue/photos/pays-bas/2005-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(56030,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,'/photos/belgique/2712-original.webp','https://en.numista.com/catalogue/photos/belgique/2712-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(56035,NULL,NULL,'Indented (50 indentations)',NULL,NULL,NULL,NULL,'/photos/belgique/2697-original.webp','https://en.numista.com/catalogue/photos/belgique/2697-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(61644,NULL,NULL,'Milled and plain alternately (four each)',NULL,NULL,NULL,NULL,'/photos/pologne/6159d5ff612143.53182078-original.webp','https://en.numista.com/catalogue/photos/pologne/6159d5ff612143.53182078-180.jpg',NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(67631,NULL,NULL,'Interrupted milled',NULL,NULL,NULL,NULL,'/photos/lituanie/659-original.webp','https://en.numista.com/catalogue/photos/lituanie/659-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(68395,NULL,NULL,'Finely milled with "2" in incuse, followed by two five-pointed stars, repeated six times alternately from bottom to top and vice versa.','2 ** 2 ** 2 ** 2 ** 2 ** 2 **','[object Object]',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(69263,NULL,NULL,'Reeded with inscription','EINIGKEIT UND RECHT UND FREIHEIT','[object Object]',NULL,'Unity and Justice and Freedom','/photos/allemagne/2014-original.webp','https://en.numista.com/catalogue/photos/allemagne/2014-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(69264,NULL,NULL,'Reeded with inscription','EINIGKEIT UND RECHT UND FREIHEIT','[object Object]',NULL,'Unity and Justice and Freedom','/photos/allemagne/2017-original.webp','https://en.numista.com/catalogue/photos/allemagne/2017-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(69469,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/espagne/3362-original.webp','https://en.numista.com/catalogue/photos/espagne/3362-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(70547,NULL,NULL,'Milled',NULL,NULL,NULL,NULL,'/photos/royaume-uni/9728-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/9728-180.jpg','G-REMXD',NULL,NULL,NULL); -INSERT INTO Edge VALUES(80926,NULL,NULL,'Reeded with inscription. Combination of 2 EURO and *** repeated four times','2 EURO *** 2 EURO *** 2 EURO *** 2 EURO ***','[object Object]',NULL,NULL,'/photos/autriche/3030-original.webp','https://en.numista.com/catalogue/photos/autriche/3030-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(81058,NULL,NULL,'Reeded with inscription: the number "2" and two stars, repeated six times alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/espagne/3377-original.webp','https://en.numista.com/catalogue/photos/espagne/3377-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(82237,NULL,NULL,'Reeded with inscription: combination of the number "2" and two stars, repeated six times alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/7452-original.webp','https://en.numista.com/catalogue/photos/france/7452-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(84061,NULL,NULL,'Finely ribbed with seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/4006-original.webp','https://en.numista.com/catalogue/photos/portugal/4006-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(87329,NULL,NULL,'Finely ribbed with seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/4005-original.webp','https://en.numista.com/catalogue/photos/portugal/4005-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(88649,NULL,NULL,'Milled',NULL,NULL,NULL,NULL,'/photos/suede/605d9e0d961316.90228193-original.webp','https://en.numista.com/catalogue/photos/suede/605d9e0d961316.90228193-180.jpg','ngdawa',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(89870,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,'/photos/argentine/1261-original.webp','https://en.numista.com/catalogue/photos/argentine/1261-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(91431,NULL,NULL,'Reeded with inscription: combination of the number "2" and two stars, repeated six times alternately upright and inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/8575-original.webp','https://en.numista.com/catalogue/photos/france/8575-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(100658,NULL,NULL,'Segmented reeding (milled on alternate edges)',NULL,NULL,NULL,NULL,'/photos/royaume-uni/7928-original.webp','https://en.numista.com/catalogue/photos/royaume-uni/7928-180.jpg','Mark240590',NULL,NULL,NULL); -INSERT INTO Edge VALUES(102445,NULL,NULL,'Reeded with inscription','EINIGKEIT UND RECHT UND FREIHEIT',NULL,NULL,'Unity and Justice and Freedom','/photos/allemagne/2208-original.webp','https://en.numista.com/catalogue/photos/allemagne/2208-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(105040,NULL,NULL,'Finely reeded with inscription: seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/5045-original.webp','https://en.numista.com/catalogue/photos/portugal/5045-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(122665,NULL,NULL,'Reeded',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(122799,NULL,NULL,'Reeded with inscription','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/9803-original.webp','https://en.numista.com/catalogue/photos/france/9803-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(133815,NULL,NULL,'Alternating plain and reeded segments (3 each)',NULL,NULL,NULL,NULL,'/photos/roumanie/2382-original.webp','https://en.numista.com/catalogue/photos/roumanie/2382-180.jpg','ZacUK',NULL,NULL,NULL); -INSERT INTO Edge VALUES(133816,NULL,NULL,'Smooth with lettering','ROMANIA * ROMANIA *',NULL,NULL,NULL,'/photos/roumanie/2377-original.webp','https://en.numista.com/catalogue/photos/roumanie/2377-180.jpg','From the other variety on the site',NULL,NULL,NULL); -INSERT INTO Edge VALUES(134685,NULL,NULL,'Reeded with inscription','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/11062-original.webp','https://en.numista.com/catalogue/photos/france/11062-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(157845,NULL,NULL,'Finely reeded with inscription: seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/5942-original.webp','https://en.numista.com/catalogue/photos/portugal/5942-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(192990,NULL,NULL,'Reeded with inscription','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/5f832c12e91d69.65800356-original.webp','https://en.numista.com/catalogue/photos/france/5f832c12e91d69.65800356-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(197919,NULL,NULL,'Finely reeded with inscription: seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/5f6bb282165b50.06260802-original.webp','https://en.numista.com/catalogue/photos/portugal/5f6bb282165b50.06260802-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(257573,NULL,NULL,'Plain',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(258832,NULL,NULL,'Finely reeded with inscription: seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/6016f0bc2c36a4.70108456-original.webp','https://en.numista.com/catalogue/photos/portugal/6016f0bc2c36a4.70108456-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(264789,NULL,NULL,replace(replace('Inscribed (lettered) \r\nThe sequence "2 ★ ★" repeated six times alternately upright and inverted.\r\n\r\n2 ★ ★ 2 ★ ★ 2 ★ ★ 2 ★ ★ 2 ★ ★ 2 ★ ★','\r',char(13)),'\n',char(10)),'2 ★ ★ 2 ★ ★ 2 ★ ★ 2 ★ ★ 2 ★ ★ 2 ★ ★',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(274850,NULL,NULL,'Finely reeded with inscription: seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/602bcd50abf1d2.14029502-original.webp','https://en.numista.com/catalogue/photos/portugal/602bcd50abf1d2.14029502-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(275891,NULL,NULL,'Reeded with inscription','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/6032a9831adef4.71580122-original.webp','https://en.numista.com/catalogue/photos/france/6032a9831adef4.71580122-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(314709,NULL,NULL,'Reeded with incuse text','EINIGKEIT UND RECHT UND FREIHEIT','[object Object]',NULL,'Unity and law and liberty','/photos/allemagne/61cda6f1eba0f3.20048770-original.webp','https://en.numista.com/catalogue/photos/allemagne/61cda6f1eba0f3.20048770-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(314962,NULL,NULL,'Finely ribbed with edge lettering: three times the sequence "2 * *" upright and the sequence "* * 2" inverted','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/61cdffc5993d05.32634169-original.webp','https://en.numista.com/catalogue/photos/france/61cdffc5993d05.32634169-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(318748,NULL,NULL,'Reeded with inscription','2 ** 2 ** 2 ** 2 ** 2 ** 2 **',NULL,NULL,NULL,'/photos/france/61f53db96e12e5.69933201-original.webp','https://en.numista.com/catalogue/photos/france/61f53db96e12e5.69933201-180.jpg','Cyrillius',NULL,NULL,NULL); -INSERT INTO Edge VALUES(319351,NULL,NULL,'Smooth',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(321378,NULL,NULL,'Finely reeded with inscription: seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/62ff620b515243.31233954-original.webp','https://en.numista.com/catalogue/photos/portugal/62ff620b515243.31233954-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(327288,NULL,NULL,'Alternatively reeded and smooth in 6 sections.',NULL,NULL,NULL,NULL,'/photos/tunisie/6284092241f828.47470484-original.webp','https://en.numista.com/catalogue/photos/tunisie/6284092241f828.47470484-180.jpg','Ahmed Limem',NULL,NULL,NULL); -INSERT INTO Edge VALUES(331445,NULL,NULL,'Finely ribbed with edge lettering: six times the sequence "2 *" alternately upright and inverted','2★2★2★2★2★2★','[object Object]',NULL,NULL,'/photos/italie/62ba1d43372ed2.29207041-original.webp','https://en.numista.com/catalogue/photos/italie/62ba1d43372ed2.29207041-180.jpg','Cyrillius',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(338338,NULL,NULL,'Segmented reeding',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Edge VALUES(338339,NULL,NULL,'Fine milled with edge lettering','O LIJEPA O DRAGA O SLATKA SLOBODO','[object Object]',NULL,'Oh beautiful, oh dear, oh sweet freedom','/photos/croatie/63e4016e2d3201.58633927-original.webp','https://en.numista.com/catalogue/photos/croatie/63e4016e2d3201.58633927-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(352712,NULL,NULL,'Germany''s national motto and the beginning of Germany''s national anthem, followed by the Federal Eagle','EINIGKEIT UND RECHT UND FREIHEIT','[object Object]',NULL,'Unity and justice and freedom','/photos/allemagne/63c291c22d62d9.12620705-original.webp','https://en.numista.com/catalogue/photos/allemagne/63c291c22d62d9.12620705-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(368994,NULL,NULL,'Finely reeded with inscription: seven castles and five coats of arms',NULL,NULL,NULL,NULL,'/photos/portugal/648bdd64d54a24.00701970-original.webp','https://en.numista.com/catalogue/photos/portugal/648bdd64d54a24.00701970-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(369820,NULL,NULL,'The sequence "2 ★ ★" repeated six times alternately upright and inverted','2★★2★★2★★2★★2★★2★★',NULL,NULL,NULL,'/photos/france/649a7f4455c368.14264025-original.webp','https://en.numista.com/catalogue/photos/france/649a7f4455c368.14264025-180.jpg','albinh',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Edge VALUES(377368,NULL,NULL,'Serrated',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -CREATE TABLE Watermark ( - id INTEGER NOT NULL PRIMARY KEY, - engravers TEXT, - designers TEXT, - description TEXT, - lettering TEXT, - lettering_scripts TEXT, - unabridged_legend TEXT, - lettering_translation TEXT, - picture TEXT, - thumbnail TEXT, - picture_copyright TEXT, - picture_copyright_url TEXT, - picture_license_name TEXT, - picture_license_url TEXT -); -INSERT INTO Watermark VALUES(201619,NULL,NULL,'On the left, the portrait of Ferenc Rákóczi with the denonimation "500" below.',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/hongrie/64c6a46d8e43b5.07870750-original.jpg','https://en.numista.com/catalogue/photos/hongrie/64c6a46d8e43b5.07870750-180.jpg','ByRussia45',NULL,'CC BY-SA','https://creativecommons.org/licenses/by-sa/4.0/deed.en'); -INSERT INTO Watermark VALUES(201676,NULL,NULL,'A rampant lion.',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/bulgarie/62c1577a7711e5.68693174-original.jpg','https://en.numista.com/catalogue/photos/bulgarie/62c1577a7711e5.68693174-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Watermark VALUES(201959,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/nepal/602c1850308bf0.41843567-original.jpg','https://en.numista.com/catalogue/photos/nepal/602c1850308bf0.41843567-180.jpg','italianumismatics',NULL,NULL,NULL); -INSERT INTO Watermark VALUES(202243,NULL,NULL,'Admiral Gago Coutinho',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/portugal/64e746d626e4b4.41118423-original.jpg','https://en.numista.com/catalogue/photos/portugal/64e746d626e4b4.41118423-180.jpg','gyoschak',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Watermark VALUES(202244,NULL,NULL,'Yusof bin Ishak',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/singapour/601b9427d5dc49.58449720-original.jpg','https://en.numista.com/catalogue/photos/singapour/601b9427d5dc49.58449720-180.jpg','Griffin S',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Watermark VALUES(202397,NULL,NULL,'Abraham Lincoln.',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/etats-unis/638b30a57f2ef4.61964255-original.jpg','https://en.numista.com/catalogue/photos/etats-unis/638b30a57f2ef4.61964255-180.jpg','Griffin S',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Watermark VALUES(202523,NULL,NULL,replace(replace('Crowned portrait of Queen Elizabeth II over clear window\r\n(image colourised to enhance detail)','\r',char(13)),'\n',char(10)),NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/england/641809fadf44e6.11202698-original.jpg','https://en.numista.com/catalogue/photos/england/641809fadf44e6.11202698-180.jpg','BCNumismatics',NULL,NULL,NULL); -INSERT INTO Watermark VALUES(204590,NULL,NULL,'Royal crown of Nepal',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/nepal/602bdb4c5764a8.45675736-original.jpg','https://en.numista.com/catalogue/photos/nepal/602bdb4c5764a8.45675736-180.jpg','italianumismatics',NULL,NULL,NULL); -INSERT INTO Watermark VALUES(205413,NULL,NULL,'Roberto Duarte Silva',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Watermark VALUES(205902,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/argentine/60d8f0f75efde4.76028717-original.jpg','https://en.numista.com/catalogue/photos/argentine/60d8f0f75efde4.76028717-180.jpg','oXide3030',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Watermark VALUES(206382,NULL,NULL,'Atatürk in profile; Electrotype ''5''',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/turquie/5eb994b6216581.77138961-original.jpg','https://en.numista.com/catalogue/photos/turquie/5eb994b6216581.77138961-180.jpg','Andy289',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Watermark VALUES(206385,NULL,NULL,'Atatürk in profile; Electrotype ''10''',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/turquie/5eb994ccbaeb83.00257247-original.jpg','https://en.numista.com/catalogue/photos/turquie/5eb994ccbaeb83.00257247-180.jpg','Andy289',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -INSERT INTO Watermark VALUES(206387,NULL,NULL,'Atatürk in profile; Electrotype ''20''',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/turquie/62912692ae6485.04664910-original.jpg','https://en.numista.com/catalogue/photos/turquie/62912692ae6485.04664910-180.jpg','Ngdawa',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Watermark VALUES(206732,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/argentine/5fa863178e3e22.87296235-original.jpg','https://en.numista.com/catalogue/photos/argentine/5fa863178e3e22.87296235-180.jpg','gvaicika',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Watermark VALUES(208875,NULL,NULL,'Tawhida Ben Cheikh and electrotype 10',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -INSERT INTO Watermark VALUES(209271,NULL,NULL,'Olive tree and number "10" of denomination.',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/tunisie/61796a3bb8c932.46582893-original.jpg','https://en.numista.com/catalogue/photos/tunisie/61796a3bb8c932.46582893-180.jpg','gyoschak',NULL,'CC BY-NC-SA','https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en'); -INSERT INTO Watermark VALUES(211537,NULL,NULL,'King Matthias Corvinus | 1000',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/hongrie/609ac6ce71f4e0.77792832-original.jpg','https://en.numista.com/catalogue/photos/hongrie/609ac6ce71f4e0.77792832-180.jpg','italianumismatics',NULL,NULL,NULL); -INSERT INTO Watermark VALUES(302331,NULL,NULL,'A portrait of Ivan Milev.',NULL,NULL,NULL,NULL,'https://en.numista.com/catalogue/photos/bulgarie/62c05d46ddf9a1.00960763-original.jpg','https://en.numista.com/catalogue/photos/bulgarie/62c05d46ddf9a1.00960763-180.jpg','hex7ech',NULL,'CC BY-NC','https://creativecommons.org/licenses/by-nc/4.0/deed.en'); -CREATE TABLE NumistaType ( - id INTEGER NOT NULL PRIMARY KEY, - url TEXT, - title TEXT NOT NULL COLLATE NOCASE, - category TEXT NOT NULL CHECK (category IN ('coin', 'banknote', 'exonumia')), - issuer_code TEXT, - min_year INTEGER, - max_year INTEGER, - type TEXT COLLATE NOCASE, - value_id INTEGER, - demonetization_id INTEGER, - shape TEXT, - composition_id INTEGER, - technique_id INTEGER, - weight REAL, - size REAL, - size2 REAL, - thickness REAL, - orientation TEXT CHECK (orientation IN ('coin', 'medal', 'variable', 'three', 'nine')), - obverse_id INTEGER, - reverse_id INTEGER, - edge_id INTEGER, - watermark_id INTEGER, - series TEXT, - commemorated_topic TEXT, - comments TEXT, - count INTEGER NOT NULL, - color TEXT, - FOREIGN KEY (issuer_code) REFERENCES Issuer(code), - FOREIGN KEY (value_id) REFERENCES Value(id), - FOREIGN KEY (demonetization_id) REFERENCES Demonetization(id), - FOREIGN KEY (composition_id) REFERENCES Composition(id), - FOREIGN KEY (technique_id) REFERENCES Technique(id), - FOREIGN KEY (obverse_id) REFERENCES Obverse(id), - FOREIGN KEY (reverse_id) REFERENCES Reverse(id), - FOREIGN KEY (edge_id) REFERENCES Edge(id), - FOREIGN KEY (watermark_id) REFERENCES Watermark(id) -); -INSERT INTO NumistaType VALUES(3,'https://en.numista.com/catalogue/pieces3.html','10 Centimes','coin','france',1962,2001,'Standard circulation coin',3,3,'Round',3,3,3.0,20.0,NULL,1.40999999999999992,'coin',3,3,3,NULL,NULL,NULL,replace(replace('Variety for 1997
\r\n
','\r',char(13)),'\n',char(10)),2,'rgb(173,149,81)'); -INSERT INTO NumistaType VALUES(4,'https://en.numista.com/catalogue/pieces4.html','20 Centimes','coin','france',1962,2001,'Standard circulation coin',4,4,'Round',4,4,4.0,23.5,NULL,1.39999999999999991,'coin',4,4,4,NULL,NULL,NULL,replace(replace('Different privy marks throughout mintages:
\r\nOwl 1962-74 Raymond Joly
\r\nDolphin 1975-94 Rousseau
\r\nBee 1994-2000 Pierre Rodier
\r\nHorseshoe  2001 Gérard Buquoy
\r\n
\r\nVariante pour 1997
\r\n
\r\nVariante pour 2000
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(208,196,132)'); -INSERT INTO NumistaType VALUES(5,'https://en.numista.com/catalogue/pieces5.html','½ Franc (signature "O. Roty")','coin','france',1964,2001,'Standard circulation coin',5,5,'Round',5,5,4.5,19.5,NULL,1.94999999999999995,'coin',5,5,5,NULL,NULL,NULL,replace(replace('Different privy marks throughout mintages:
\r\nOwl 1958-74 Raymond Joly
\r\nDolphin 1974-94 Rousseau
\r\nBee 1994- Pierre Rodier
\r\nHorseshoe 2000-2002 Gérard Buquoy
\r\n
\r\n The 1993 'No mark' has missing privy marks both sides of denomination ...
\r\n
\r\n
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(60,92,156)'); -INSERT INTO NumistaType VALUES(8,'https://en.numista.com/catalogue/pieces8.html','5 Francs (signature "O. Roty")','coin','france',1969,2001,'Standard circulation coin',8,8,'Round',8,8,10.0,29.0,NULL,2.08999999999999985,'coin',8,8,8,NULL,NULL,NULL,replace(replace('Pré-série de 5 FRANCS Semeuse, 1969 Paris GEM.154 10
\r\n
\r\n
\r\nThe different brands of general engravers
\r\nOwl 1958-74 Raymond Joly.
\r\n
\r\nDolphin 1975-94 Rousseau.
\r\nBee 1994-2000 Pierre Rodier
\r\n
\r\n
\r\nHead of the Engraving Service
\r\nHorseshoe  2001 Gérard Buquoy','\r',char(13)),'\n',char(10)),1,'rgb(80.52631578947368,107.36842105263155,174.47368421052633)'); -INSERT INTO NumistaType VALUES(9,'https://en.numista.com/catalogue/pieces9.html','10 Francs','coin','france',1988,2001,'Standard circulation coin',9,9,'Round',9,9,6.5,23.0,NULL,2.10000000000000008,'coin',9,9,9,NULL,NULL,NULL,replace(replace('Different privy marks throughout mintages.
\r\nDolphin 1988-93 Emile Rousseau.
\r\nBee 1994-2000 Pierre Rodier
\r\nHorseshoe  2001 Gérard Buquoy','\r',char(13)),'\n',char(10)),3,'rgb(182,140,66)'); -INSERT INTO NumistaType VALUES(12,'https://en.numista.com/catalogue/pieces12.html','1 Franc (Charles de Gaulle)','coin','france',1988,1988,'Circulating commemorative coin',12,12,'Round',12,12,6.0,24.0,NULL,1.60000000000000008,'coin',12,12,12,NULL,NULL,'30th Anniversary of the Fifth Republic','',1,'rgb(200.00000000000009,154.99999999999991,54.999999999999915)'); -INSERT INTO NumistaType VALUES(42,'https://en.numista.com/catalogue/pieces42.html','1 Cent "Lincoln Memorial Cent"','coin','etats-unis',1959,1982,'Standard circulation coin',42,42,'Round',42,42,3.10999999999999987,19.0,NULL,1.30000000000000004,'coin',42,42,42,NULL,NULL,NULL,replace(replace('The standard weight of this coin was 48 grains.
\r\n
\r\nFrom 1959 to September 5, 1962 these coins were minted with 95% Copper and 5% Tin and Zinc. After September 5, 1962 and until 1982 these coins were minted with 95% Copper and 5% Zinc (Brass).
\r\n
\r\nFrom 1965 to 1967, these coins were minted in Philadelphia and Denver without a mintmark.
\r\n
\r\nFrom 1974 through 1986, a number of these coins were minted in the United States Bullion Depository, West Point. These coins lacked a mintmark are were indistinguishable from the Philadelphia issue.
\r\n
\r\nFG engraver's signature
\r\n
\r\n
\r\n1960
\r\n
\r\n1960
\r\n
\r\n1969 double die
\r\n
\r\n
\r\n1969
\r\nMintmark D: aligned with the word LIBERTY, there are small differences in the position of the date, the mintmark D and the motto "IN GOD WE TRUST".
\r\n
\r\n1970 far  near S
\r\n
\r\n1971 double die
\r\n
\r\n1971, 1972
\r\nIn 1971 and 1972 the original dies of obverse were used.
\r\nDie with vest line started from the knot of bowtie and with vest line started from a loop of bowtie.
\r\nPicture: © Images courtesy of Alexandr Prokofyev
\r\n
\r\nThe upper die on the photos was in use in 1971 and 1972 years for all issues, the lower - in 1971 only for all issues.
\r\n1979S
\r\n
\r\n1981S
\r\n
\r\n
\r\n1982
\r\nThe year 1982 is a transition: the earliest coins were struck in 95% copper, and the latest coins were struck in copper plated zinc. One of the most noticeable differences between the two is the weight (3.11 grams versus 2.50 grams).
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(196,114,56)'); -INSERT INTO NumistaType VALUES(43,'https://en.numista.com/catalogue/pieces43.html','1 Cent "Lincoln Memorial Cent"','coin','etats-unis',1982,2008,'Standard circulation coin',43,43,'Round',43,43,2.5,19.0500000000000007,NULL,1.30000000000000004,'coin',43,43,43,NULL,NULL,NULL,replace(replace('KM#201a is for coins dated 1982, whereas KM#201b is for all coins dated afterward.
\r\n
\r\nFrom 1974 through 1986, a number of these coins were minted in the United States Bullion Depository, West Point. These coins lacked a mintmark and are indistinguishable from the Philadelphia issue.
\r\n
\r\nFG engraver's signature
\r\n
\r\n
\r\n1982 is a transition year: the earliest coins were struck in 95% copper, and the latest coins were struck in copper-plated zinc. One of the most noticeable differences between the two is the weights (3.11 grams versus 2.50 grams).
\r\n
\r\n
\r\nReverse
\r\nDie 005 - G in FG tall, AM to AMERICA widely spread, narrow script.
\r\n
\r\nDie 006 - G in FG flared, AM to AMERICA widely spread, bolder script. See on the first photo above by Heligal for year 1992.
\r\n
\r\nCombinations
\r\nDie 005: 1986, 1987, 1988 all issues.
\r\nDie 006: 1988, 1988 D, 1989-1992 all issues, 1994-2008 S (Proof), 1998, 1999, 2000.
\r\n
\r\nIn the American numismatics the business strike of 1988 with die 006 is named 'transitional'.
\r\n
\r\nIn 1992, all coins were meant to have a wide "AM" of "AMERICA"; however, some were struck using the design meant for 1993 pieces (not using the proof, contrary to what the documentation says), resulting in some having a close "AM" of "AMERICA".
\r\n
\r\nIn 1998, 1999, and 2000, there were two different intended designs: those meant for regular circulating coins and those meant for proof coins. The design of the circulating coins was meant to have a wide "AM" of "AMERICA" whereas the design of the proof coins was meant to have a close "AM" of "AMERICA". Even so, some regular circulating coins were struck with the reverse proof design, and some proof coins (known 1998, 1999 only) were struck with the circulating design.
\r\n
\r\n
\r\nKM#201a 1982
\r\n
\r\nkm201b
\r\n1983
\r\n
\r\n1984
\r\n
\r\n1992
\r\n
\r\n1995
\r\n
\r\n1996
\r\n
\r\n1998
\r\n
\r\n1999
\r\n
\r\n2000
\r\n
\r\n
\r\nThe lowercase "o" in the the reverse lettering "THE UNITED STATES oF AMERICA" is not an error. According to the final report of the Lincoln sesquicentennial commission, it was a choice of the artist Frank Gasparro, who said that the small "o" was not done in error but rather had been done deliberately to give design appeal to the lettering on the penny. Citing precedents for the lowercase letter, such as the Franklin Half Dollar, the Liberty Walking Half Dollar, the Peace Dollar, and several commemoratives, he said, "I did it to break up the pattern."','\r',char(13)),'\n',char(10)),4,'rgb(134,96,44)'); -INSERT INTO NumistaType VALUES(44,'https://en.numista.com/catalogue/pieces44.html','5 Cents "Jefferson Nickel" (1st portrait)','coin','etats-unis',1938,2003,'Standard circulation coin',44,44,'Round',44,44,5.0,21.1999999999999992,NULL,1.75,'coin',44,44,44,NULL,NULL,NULL,replace(replace('1939
\r\n
\r\n1949D
\r\n
\r\n1954S
\r\n
\r\n1955D
\r\n
\r\n1968S
\r\n
\r\n1969S
\r\n
\r\n1979S
\r\n
\r\n1981P
\r\n
\r\n1981S
\r\n
\r\n1988D
\r\n
\r\n1988P
\r\n
\r\n1989P
\r\n
\r\n
\r\nIncluding pre-war issues, the mintage of this coin resumed in 1946 as KM#A192.  War-time silver nickels are listed separately as KM#192a due to different metal compositions.
\r\n
\r\n1938 thru 1989 = 5 full steps
\r\n1990 to date = 6 full steps
\r\n
\r\nFrom 1965 to 1967, these coins were minted in Philadelphia and Denver without a mintmark.
\r\n
\r\nCoin with the "S" mintmark from 1968-1970 were made for circulation, while coins for that were only made for proof sets.
\r\n
\r\nThere are 1999 P and possibly other dates which exhibit DDD (Die Deterioration Doubling). These coins exhibit doubling, thickening, twisting and other deformities which results from die deterioration. Die deterioration is the result of die wear or improper heat treating (of the dies) combined with die wear.
\r\n
\r\nDifference between 1986 P coins
\r\n
\r\n"P" going outside :
\r\n
\r\n@ antoine0002
\r\n
\r\n"P" going inside :
\r\n
\r\n@ antoine0002','\r',char(13)),'\n',char(10)),5,'rgb(68,64,160)'); -INSERT INTO NumistaType VALUES(53,'https://en.numista.com/catalogue/pieces53.html','1 Dime "Roosevelt Dime"','coin','etats-unis',1965,2023,'Standard circulation coin',53,53,'Round',53,53,2.26799999999999979,17.9100000000000001,NULL,1.35000000000000008,'coin',53,53,53,NULL,NULL,NULL,replace(replace('The standard weight of this coin is 35 grains.
\r\n
\r\nMintmark varieties:
\r\n1) No mintmark (1965-1979)
\r\n2) "P" on obverse (1980-date)
\r\n3) "D" on obverse (1968-date)
\r\n4) "S" on obverse (Proof Issues, 1968-date)
\r\n5) San Francisco without a mintmark (1968, 1970, 1975, 1983)
\r\n6) "W" on obverse, 1996 (Mint sets only)
\r\nType II Proofs have a clearer mintmark than Type I Proofs.
\r\n
\r\n1979S proof
\r\n
\r\n1981S proof
\r\n
\r\n1982 weak / strong strikes - mint marks / none
\r\n
\r\n
\r\nThis design was adopted for the American Dime in 1946, one year after Franklin D. Roosevelt's death. It was minted in 90% silver from 1946 to 1964, until the United States removed silver from nearly all circulation coins starting in 1965. Since 1965, the design has remained relatively unchanged, meaning that the Roosevelt Dime is currently the oldest coin with consistent design, weight, and composition in current American production.
\r\n
\r\nFrom 1965 to 1967, these coins were minted in Philadelphia and Denver without a mintmark.','\r',char(13)),'\n',char(10)),9,'rgb(151.83206106870227,128.47328244274811,103.16793893129774)'); -INSERT INTO NumistaType VALUES(55,'https://en.numista.com/catalogue/pieces55.html','¼ Dollar "Washington Quarter"','coin','etats-unis',1965,1998,'Standard circulation coin',55,55,'Round',55,55,5.66999999999999992,24.2600000000000015,NULL,1.75,'coin',55,55,55,NULL,NULL,NULL,replace(replace('The standard weight of all quarters issued since 1965 is 87½ grains.
\r\n
\r\nFrom 1965 to 1967, these coins were minted in Philadelphia and Denver without a mintmark.
\r\n
\r\nFrom 1977 through 1979, 50,824,000 coins were minted in the United States Bullion Depository, West Point. These coins are identical to the Philadelphia issue. The mintage is a follows:
\r\n1977: 7,352,000
\r\n1978: 20,800,000
\r\n1979: 20,672,000
\r\n
\r\n"Type II" proofs have clearer mint-marks than "Type I".
\r\n1979S types
\r\n
\r\n1981S types
\r\n','\r',char(13)),'\n',char(10)),4,'rgb(132.68292682926833,124.39024390243898,122.31707317073166)'); -INSERT INTO NumistaType VALUES(57,'https://en.numista.com/catalogue/pieces57.html','1 Euro Cent','coin','autriche',2002,2023,'Standard circulation coin',57,57,'Round',57,57,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',57,57,57,NULL,NULL,NULL,replace(replace('Gentian Flower or Stemless Gentian Flower  - Binomial Name: Gentiana acaulis
\r\n
\r\n
\r\n
\r\nThere are small differences in the oblique lines on the reverse in 2018:
\r\n
\r\n
\r\nSlightly modified obverse (thinner, longer and more numerous lines in the red fields of the Austrian flag):
\r\n','\r',char(13)),'\n',char(10)),4,'rgb(167,113,74)'); -INSERT INTO NumistaType VALUES(58,'https://en.numista.com/catalogue/pieces58.html','2 Euro Cent','coin','autriche',2002,2023,'Standard circulation coin',58,58,'Round',58,58,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',58,58,58,NULL,NULL,NULL,replace(replace('Edelweiss Flower Binomial Name: Leontopodium alpinum
\r\n
\r\n
\r\n
\r\nNew version of the common side seen with 2018 coins. Main differences:
\r\n - Thicker and shorter numeral
\r\n - Rounded edges of the numeral
\r\n - Thicker font in "EURO CENT"
\r\n - Thicker lines with longer ends outside of stars
\r\nAlso from 2018 onwards, thinner and more numerous lines in the flag on the national side (21, 25 vs. 19, 22).
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(172,96,36)'); -INSERT INTO NumistaType VALUES(59,'https://en.numista.com/catalogue/pieces59.html','5 Euro Cent','coin','autriche',2002,2023,'Standard circulation coin',59,59,'Round',59,59,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',59,59,59,NULL,NULL,NULL,replace(replace('
\r\n
\r\n
\r\nNew version of the common side seen from 2018 onwards. Main differences:
\r\n - Thicker and shorter numeral
\r\n - Rounded edges of the numeral
\r\n - Thicker font in "EURO CENT"
\r\n - Thicker lines with longer ends outside of stars
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(204,133,68)'); -INSERT INTO NumistaType VALUES(73,'https://en.numista.com/catalogue/pieces73.html','1 Euro Cent - Albert II (1st type, 1st portrait)','coin','belgique',1999,2007,'Standard circulation coin',73,73,'Round',73,73,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',73,73,73,NULL,NULL,NULL,replace(replace('The star variants on the 1999 coin
\r\n
\r\nOle','\r',char(13)),'\n',char(10)),4,'rgb(172,92,52)'); -INSERT INTO NumistaType VALUES(74,'https://en.numista.com/catalogue/pieces74.html','5 Euro Cent - Albert II (1st type, 1st portrait)','coin','belgique',1999,2007,'Standard circulation coin',74,74,'Round',74,74,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',74,74,74,NULL,NULL,NULL,replace(replace('(fr) BU 1999 - 2001
\r\nSet introduction de l'euro avec les pièces de 1999 à 2001
\r\n
\r\n
\r\nBU 2002
\r\n 1 - Coffret annuel - les éperons d'or à 100 000 exemplaires + 1 médaille (700 ans de la bataille des éperons d'or : 1302 - 2002)
\r\n
\r\n 2 - Adieu au franc, bienvenue à l'euro à 20 000 exemplaires
\r\n
\r\n 3 - CM de cyclisme sur route à 20 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2003
\r\n1 - 50 ans de TV en Belgique + 1 médaille (50 ans de TV en Belgique) à 100 000 exemplaires
\r\n
\r\n2- 100 ans de Ford à 15 000 exemplaires
\r\nimage à trouver
\r\n3 - Naissance à 10 000 exemplaires
\r\nimage à trouver
\r\n4 - Mariage à 10 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2004
\r\n1 - 140 ans de la Croix rouge à 60 000 exemplaires + 1 médaille classique
\r\n
\r\n2 - 140 ans de la Croix rouge + 1 médaille avec la croix peinte en rouge à 2 000 exemplaires
\r\nimage à trouver
\r\n3 - Naissance à 10 000 exemplaires
\r\nimage à trouver
\r\n4 - Mariage à 10 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2005
\r\n1 - Grand' Place + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Grand' Place + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2006
\r\n1 - Les Béguinages flamands + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Les Béguinages flamands + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2007
\r\n1 - Les ascenseurs à bateaux + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Les ascenseurs à bateaux + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver','\r',char(13)),'\n',char(10)),2,'rgb(172,92,52)'); -INSERT INTO NumistaType VALUES(75,'https://en.numista.com/catalogue/pieces75.html','10 Euro Cent - Albert II (1st map, 1st type, 1st portrait)','coin','belgique',1999,2006,'Standard circulation coin',75,75,'Round',75,75,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',75,75,75,NULL,NULL,NULL,replace(replace('(fr) Distinction des variétés 1999:
\r\nAvers 1 :
\r\nLa gravure est épaisse
\r\n1) La base de la couronne est
\r\ntrès régulièrement courbe
\r\n2) Le support de la croix est étroit et accolé à la couronne
\r\n3) La pointe du A est très proche de la couronne
\r\n
\r\nAvers 2 :
\r\nLa gravure est épaisse
\r\n1) La base de la couronne
\r\nest aplatie
\r\n2) Le support de la croix est étroit et accolé à la couronne
\r\n3) La pointe du A est très proche de la couronne
\r\n
\r\nAvers 3:
\r\nLa gravure est fine
\r\n1) La base de la couronne est très régulièrement courbe
\r\n2) Le support de la croix est large et légèrement décollé de la couronne
\r\n3) La pointe du A est éloignée de la couronne
\r\n
\r\n
\r\nBU 1999 - 2001
\r\nSet introduction de l'euro avec les pièces de 1999 à 2001
\r\n
\r\n
\r\nBU 2002
\r\n 1 - Coffret annuel - les éperons d'or à 100 000 exemplaires + 1 médaille (700 ans de la bataille des éperons d'or : 1302 - 2002)
\r\n
\r\n 2 - Adieu au franc, bienvenue à l'euro à 20 000 exemplaires
\r\n
\r\n 3 - CM de cyclisme sur route à 20 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2003
\r\n1 - 50 ans de TV en Belgique + 1 médaille (50 ans de TV en Belgique) à 100 000 exemplaires
\r\n
\r\n2- 100 ans de Ford à 15 000 exemplaires
\r\nimage à trouver
\r\n3 - Naissance à 10 000 exemplaires
\r\nimage à trouver
\r\n4 - Mariage à 10 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2004
\r\n1 - 140 ans de la Croix rouge à 60 000 exemplaires + 1 médaille classique
\r\n
\r\n2 - 140 ans de la Croix rouge + 1 médaille avec la croix peinte en rouge à 2 000 exemplaires
\r\nimage à trouver
\r\n3 - Naissance à 10 000 exemplaires
\r\nimage à trouver
\r\n4 - Mariage à 10 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2005
\r\n1 - Grand' Place + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Grand' Place + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2006
\r\n1 - Les Béguinages flamands + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Les Béguinages flamands + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver','\r',char(13)),'\n',char(10)),1,'rgb(192,158,78)'); -INSERT INTO NumistaType VALUES(77,'https://en.numista.com/catalogue/pieces77.html','1 Euro - Albert II (1st map, 1st type, 1st portrait)','coin','belgique',1999,2006,'Standard circulation coin',77,77,'Round',77,77,7.5,23.25,NULL,2.33000000000000007,'medal',77,77,77,NULL,NULL,NULL,replace(replace('(fr) BU 1999 - 2001
\r\nSet introduction de l'euro avec les pièces de 1999 à 2001
\r\n
\r\n
\r\nBU 2002
\r\n 1 - Coffret annuel - les éperons d'or à 100 000 exemplaires + 1 médaille (700 ans de la bataille des éperons d'or : 1302 - 2002)
\r\n
\r\n 2 - Adieu au franc, bienvenue à l'euro à 20 000 exemplaires
\r\n
\r\n 3 - CM de cyclisme sur route à 20 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2003
\r\n1 - 50 ans de TV en Belgique + 1 médaille (50 ans de TV en Belgique) à 100 000 exemplaires
\r\n
\r\n2- 100 ans de Ford à 15 000 exemplaires
\r\nimage à trouver
\r\n3 - Naissance à 10 000 exemplaires
\r\nimage à trouver
\r\n4 - Mariage à 10 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2004
\r\n1 - 140 ans de la Croix rouge à 60 000 exemplaires + 1 médaille classique
\r\n
\r\n2 - 140 ans de la Croix rouge + 1 médaille avec la croix peinte en rouge à 2 000 exemplaires
\r\nimage à trouver
\r\n3 - Naissance à 10 000 exemplaires
\r\nimage à trouver
\r\n4 - Mariage à 10 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2005
\r\n1 - Grand' Place + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Grand' Place + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2006
\r\n1 - Les Béguinages flamands + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Les Béguinages flamands + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver','\r',char(13)),'\n',char(10)),1,'rgb(191,168,116)'); -INSERT INTO NumistaType VALUES(78,'https://en.numista.com/catalogue/pieces78.html','2 Euro Cent - Albert II (1st type, 1st portrait)','coin','belgique',1999,2007,'Standard circulation coin',78,78,'Round',78,78,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',78,78,78,NULL,NULL,NULL,replace(replace('(fr) BU 1999 - 2001
\r\nSet introduction de l'euro avec les pièces de 1999 à 2001
\r\n
\r\n
\r\nBU 2002
\r\n 1 - Coffret annuel - les éperons d'or à 100 000 exemplaires + 1 médaille (700 ans de la bataille des éperons d'or : 1302 - 2002)
\r\n
\r\n 2 - Adieu au franc, bienvenue à l'euro à 20 000 exemplaires
\r\n
\r\n 3 - CM de cyclisme sur route à 20 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2003
\r\n1 - 50 ans de TV en Belgique + 1 médaille (50 ans de TV en Belgique) à 100 000 exemplaires
\r\n
\r\n2- 100 ans de Ford à 15 000 exemplaires
\r\nimage à trouver
\r\n3 - Naissance à 10 000 exemplaires
\r\nimage à trouver
\r\n4 - Mariage à 10 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2004
\r\n1 - 140 ans de la Croix rouge à 60 000 exemplaires + 1 médaille classique
\r\n
\r\n2 - 140 ans de la Croix rouge + 1 médaille avec la croix peinte en rouge à 2 000 exemplaires
\r\nimage à trouver
\r\n3 - Naissance à 10 000 exemplaires
\r\nimage à trouver
\r\n4 - Mariage à 10 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2005
\r\n1 - Grand' Place + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Grand' Place + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2006
\r\n1 - Les Béguinages flamands + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Les Béguinages flamands + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver
\r\n
\r\nBU 2007
\r\n1 - Les ascenseurs à bateaux + 1 médaille non colorisé à 38 000 exemplaires
\r\n
\r\n2 - Les ascenseurs à bateaux + 1 médaille colorisé à 2 000 exemplaires
\r\nimage à trouver','\r',char(13)),'\n',char(10)),4,'rgb(172,92,52)'); -INSERT INTO NumistaType VALUES(79,'https://en.numista.com/catalogue/pieces79.html','20 Euro Cent - Albert II (1st map, 1st type, 1st portrait)','coin','belgique',1999,2006,'Standard circulation coin',79,79,'Spanish flower',79,79,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',79,79,79,NULL,NULL,NULL,replace(replace('Later issues show smaller date letters and stars surrounding the portrait.
\r\n
\r\nHow to understand if stars are small or big for 2002:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(172,156,60)'); -INSERT INTO NumistaType VALUES(81,'https://en.numista.com/catalogue/pieces81.html','1 Euro Cent (1st type)','coin','espagne',1999,2009,'Standard circulation coin',81,81,'Round',81,81,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',81,81,81,NULL,NULL,NULL,NULL,48,'rgb(196,116,60)'); -INSERT INTO NumistaType VALUES(82,'https://en.numista.com/catalogue/pieces82.html','2 Euro Cent (1st type)','coin','espagne',1999,2009,'Standard circulation coin',82,82,'Round',82,82,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',82,82,82,NULL,NULL,NULL,NULL,47,'rgb(196,116,60)'); -INSERT INTO NumistaType VALUES(83,'https://en.numista.com/catalogue/pieces83.html','5 Euro Cent (1st type)','coin','espagne',1999,2009,'Standard circulation coin',83,83,'Round',83,83,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',83,83,83,NULL,NULL,NULL,NULL,38,'rgb(196,116,60)'); -INSERT INTO NumistaType VALUES(84,'https://en.numista.com/catalogue/pieces84.html','10 Euro Cent (1st type; 1st map)','coin','espagne',1999,2006,'Standard circulation coin',84,84,'Round',84,84,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',84,84,84,NULL,NULL,NULL,NULL,6,'rgb(156,116,68)'); -INSERT INTO NumistaType VALUES(85,'https://en.numista.com/catalogue/pieces85.html','20 Euro Cent (1st type; 1st map)','coin','espagne',1999,2006,'Standard circulation coin',85,85,'Spanish flower',85,85,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',85,85,85,NULL,NULL,NULL,replace(replace('There is at least 2 types of variations in the Obverse for this coin in 1999 in regular circulation:
\r\n

  • Type A - More thick lettering and extra serifs in some letters (ex. "S" of ESPANA)
    \r\n
  • Type B - More slim lettering and no extra serifs in some letters (ex. "S" of ESPANA)
    \r\n

\r\nThese variations can be seen in the following images:
\r\n
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(198,140,84)'); -INSERT INTO NumistaType VALUES(87,'https://en.numista.com/catalogue/pieces87.html','1 Euro - Juan Carlos I (1st type - 1st map)','coin','espagne',1999,2006,'Standard circulation coin',87,87,'Round',87,87,7.5,23.25,NULL,2.33000000000000007,'medal',87,87,87,NULL,NULL,NULL,NULL,1,'rgb(190,142,84)'); -INSERT INTO NumistaType VALUES(88,'https://en.numista.com/catalogue/pieces88.html','2 Euro - Juan Carlos I (1st type - 1st map)','coin','espagne',1999,2006,'Standard circulation coin',88,88,'Round',88,88,8.5,25.75,NULL,2.20000000000000017,'medal',88,88,88,NULL,NULL,NULL,NULL,1,'rgb(196,148,100)'); -INSERT INTO NumistaType VALUES(91,'https://en.numista.com/catalogue/pieces91.html','5 Euro Cent (1st type)','coin','finlande',1999,2006,'Standard circulation coin',91,91,'Round',91,91,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',91,91,91,NULL,NULL,NULL,replace(replace('This documentation is also valid for the 5 cent coins
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(176,85,23)'); -INSERT INTO NumistaType VALUES(96,'https://en.numista.com/catalogue/pieces96.html','2 Euro (1st type, 1st map)','coin','finlande',1999,2006,'Standard circulation coin',96,96,'Round',96,96,8.5,25.75,NULL,2.20000000000000017,'medal',96,96,96,NULL,NULL,NULL,'',1,'rgb(162.13872832369944,141.50289017341038,92.86127167630057)'); -INSERT INTO NumistaType VALUES(97,'https://en.numista.com/catalogue/pieces97.html','1 Euro Cent','coin','france',1999,2023,'Standard circulation coin',97,97,'Round',97,97,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',97,97,97,NULL,NULL,NULL,replace(replace('Different Mint Master Marks
\r\n
  • Pierre Rodier, from 1999 to 2000, a mark of a bee
    \r\n
  • Gerard Buquoy, from 2001 to 2002, a mark of a horseshoe
    \r\n
  • Serge Levet, in 2003, a mark of a stylised heart with the initials of the mint master (SL)
    \r\n
  • Hubert Lariviere, from 2004 to 2010, a mark of a hunting horn with a wave and a fish
    \r\n
  • Yves Sampo, from 2011 to 2020, a mark of a Pentagon with letters AG, MP and YS
    \r\n
  • Joaquin Jimenez, since 2021, a mark of a square with a circle and a broken line in the small square.
    \r\n

\r\nBUNC Sets Released
\r\n
  • 1999 - 35000 Annual Coin Sets
    \r\n
  • 2000 - 35000 Annual Coin Sets
    \r\n
  • 2001 - 35000 Annual Coin Sets
    \r\n
  • 2002 - 145563 Annual Coin Sets + 19727 The Little Prince Coin Sets
    \r\n
  • 2003 - 109407 Annual Coin Sets + 10094 The Little Prince Coin Sets + 12638 Tourism Coin Sets (Eiffel Tower)
    \r\n
  • 2004 - 120000 Annual Coin Sets + 5399 The Little Prince Coin Sets + 3704 Tourism Coin Sets (Provence)
    \r\n
  • 2005 - 69999 Annual Coin Sets + 2611 Moebius Coin Sets + 2541 Tourism Coin Sets (Garonne)
    \r\n
  • 2006 - 70000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2007 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2008 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2009 - 50000 Annual Coin Sets + 3 different illustrated Coin Sets of 500 or 1000 issues each
    \r\n
  • 2010 - 50000 Annual Coin Sets + 9 different illustrated Coin Sets of 500 issues each + 1000 Coin Sets Jour de la Monnaie (Guest Of Honour)
    \r\n
  • 2011 - 40000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2012 - 40000 Annual Coin Sets + 6 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2013 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2014 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2015 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2016 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2017 - 25000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2018 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2019 - 15000 Annual Coin Sets + 2 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2020 - 15000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each + 2 different illustrated Coin Sets of 500 issues each with the 2€ 2020 Charles De Gaulle commemorative coin instead of the regular 2€ coin
    \r\n

\r\nPROOF Sets Released
\r\n
  • From 1999 to 2012 - Annual Coin Sets
    \r\n
  • 2013 - Annual Coin Sets + Annual Coin Sets Prestige with the 100€ gold coin of The Sower - Pessac Site
    \r\n
  • From 2014 to the present - Annual Coin Sets
    \r\n

\r\n
\r\nThere is currently known 7 variations on this coin in the year 1999, resulting in 10 combinations that have been found.
\r\nThese variations are:
\r\n
\r\nObverse:
\r\n
  • A – thick date, bee close to F.
    \r\n
  • B – thick date, bee far from F.
    \r\n
  • C – thick date, bee very far from F and rotated clockwise.
    \r\n
  • D – thin date, bee close to F.
    \r\n
  • E – thin date, bee further from F.
    \r\n

\r\nReverse:
\r\n
  • I – letters N and T are separate.
    \r\n
  • II – letters N and T join.
    \r\n

\r\nThis variations can be seen in the following image (easier to be seen hands on with several coins):
\r\n
\r\n
\r\nCombinations:
\r\n
  • A I
    \r\n
  • A II
    \r\n
  • B I
    \r\n
  • B II
    \r\n
  • C I
    \r\n
  • C II
    \r\n
  • D I
    \r\n
  • D II
    \r\n
  • E I
    \r\n
  • E II
    \r\n

\r\nMore images and details can be seen at http://eucoins.byethost9.com/fr.html','\r',char(13)),'\n',char(10)),51,'rgb(204,132,52)'); -INSERT INTO NumistaType VALUES(98,'https://en.numista.com/catalogue/pieces98.html','2 Euro Cent','coin','france',1999,2023,'Standard circulation coin',98,98,'Round',98,98,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',98,98,98,NULL,NULL,NULL,replace(replace('Different Mint Master Marks
\r\n
  • Pierre Rodier, from 1999 to 2000, a mark of a bee
    \r\n
  • Gerard Buquoy, from 2001 to 2002, a mark of a horseshoe
    \r\n
  • Serge Levet, in 2003, a mark of a stylised heart with the initials of the mint master (SL)
    \r\n
  • Hubert Lariviere, from 2004 to 2010, a mark of a hunting horn with a wave and a fish
    \r\n
  • Yves Sampo, from 2011 to 2020, a mark of a Pentagon with letters AG, MP and YS
    \r\n
  • Joaquin Jimenez, since 2021, a mark of a square with a circle and a broken line in the small square
    \r\n

\r\nBUNC Sets Released
\r\n
  • 1999 - 35000 Annual Coin Sets
    \r\n
  • 2000 - 35000 Annual Coin Sets
    \r\n
  • 2001 - 35000 Annual Coin Sets
    \r\n
  • 2002 - 145563 Annual Coin Sets + 19727 The Little Prince Coin Sets
    \r\n
  • 2003 - 109407 Annual Coin Sets + 10094 The Little Prince Coin Sets + 12638 Tourism Coin Sets (Eiffel Tower)
    \r\n
  • 2004 - 120000 Annual Coin Sets + 5399 The Little Prince Coin Sets + 3704 Tourism Coin Sets (Provence)
    \r\n
  • 2005 - 69999 Annual Coin Sets + 2611 Moebius Coin Sets + 2541 Tourism Coin Sets (Garonne)
    \r\n
  • 2006 - 70000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2007 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2008 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2009 - 50000 Annual Coin Sets + 3 different illustrated Coin Sets of 500 or 1000 issues each
    \r\n
  • 2010 - 50000 Annual Coin Sets + 9 different illustrated Coin Sets of 500 issues each + 1000 Coin Sets Jour de la Monnaie (Guest Of Honour)
    \r\n
  • 2011 - 40000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2012 - 40000 Annual Coin Sets + 6 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2013 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2014 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2015 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2016 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2017 - 25000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2018 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2019 - 15000 Annual Coin Sets + 2 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2020 - 15000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each + 2 different illustrated Coin Sets of 500 issues each with the 2€ 2020 Charles De Gaulle commemorative coin instead of the regular 2€ coin
    \r\n

\r\nPROOF Sets Released
\r\n
  • From 1999 to 2012 - Annual Coin Sets
    \r\n
  • 2013 - Annual Coin Sets + Annual Coin Sets Prestige with the 100€ gold coin of The Sower - Pessac Site
    \r\n
  • From 2014 to the present - Annual Coin Sets
    \r\n
','\r',char(13)),'\n',char(10)),66,'rgb(204,132,52)'); -INSERT INTO NumistaType VALUES(99,'https://en.numista.com/catalogue/pieces99.html','5 Euro Cent','coin','france',1999,2023,'Standard circulation coin',99,99,'Round',99,99,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',99,99,99,NULL,NULL,NULL,replace(replace('BUNC Sets Released
\r\n
  • 1999 - 35000 Annual Coin Sets
    \r\n
  • 2000 - 35000 Annual Coin Sets
    \r\n
  • 2001 - 35000 Annual Coin Sets
    \r\n
  • 2002 - 145563 Annual Coin Sets + 19727 The Little Prince Coin Sets
    \r\n
  • 2003 - 109407 Annual Coin Sets + 10094 The Little Prince Coin Sets + 12638 Tourism Coin Sets (Eiffel Tower)
    \r\n
  • 2004 - 120000 Annual Coin Sets + 5399 The Little Prince Coin Sets + 3704 Tourism Coin Sets (Provence)
    \r\n
  • 2005 - 69999 Annual Coin Sets + 2611 Moebius Coin Sets + 2541 Tourism Coin Sets (Garonne)
    \r\n
  • 2006 - 70000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2007 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2008 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2009 - 50000 Annual Coin Sets + 3 different illustrated Coin Sets of 500 or 1000 issues each
    \r\n
  • 2010 - 50000 Annual Coin Sets + 9 different illustrated Coin Sets of 500 issues each + 1000 Coin Sets Jour de la Monnaie (Guest Of Honour)
    \r\n
  • 2011 - 40000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2012 - 40000 Annual Coin Sets + 6 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2013 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2014 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2015 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2016 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2017 - 25000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2018 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2019 - 15000 Annual Coin Sets + 2 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2020 - 15000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each + 2 different illustrated Coin Sets of 500 issues each with the 2€ 2020 Charles De Gaulle commemorative coin instead of the regular 2€ coin
    \r\n

\r\nPROOF Sets Released
\r\n
  • From 1999 to 2012 - Annual Coin Sets
    \r\n
  • 2013 - Annual Coin Sets + Annual Coin Sets Prestige with the 100€ gold coin of The Sower - Pessac Site
    \r\n
  • From 2014 to the present - Annual Coin Sets
    \r\n
','\r',char(13)),'\n',char(10)),18,'rgb(164,100,52)'); -INSERT INTO NumistaType VALUES(100,'https://en.numista.com/catalogue/pieces100.html','10 Euro Cent (1st map; coarse reeding)','coin','france',1999,2006,'Standard circulation coin',100,100,'Round',100,100,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',100,100,100,NULL,NULL,NULL,replace(replace('Gad# 4 has the description Grande Semeuse (large sower) and the type is coins issued 1999.
\r\nGad# 4a has the description Petite Semeuse Iem type (small sower first type) and is coins issued 2000 to 2006.
\r\n
\r\nDifferent Mint Master Marks
\r\n
  • Pierre Rodier, from 1999 to 2000, a mark of a bee
    \r\n
  • Gerard Buquoy, from 2001 to 2002, a mark of a horseshoe
    \r\n
  • Serge Levet, in 2003, a mark of a stylised heart with the initials of the mint master (SL)
    \r\n
  • Hubert Lariviere, from 2004 to 2006, a mark of a hunting horn with a wave and a fish
    \r\n

\r\nBUNC Sets Released
\r\n
  • 1999 - 35000 Annual Coin Sets
    \r\n
  • 2000 - 35000 Annual Coin Sets
    \r\n
  • 2001 - 35000 Annual Coin Sets
    \r\n
  • 2002 - 145563 Annual Coin Sets + 19727 The Little Prince Coin Sets
    \r\n
  • 2003 - 109407 Annual Coin Sets + 10094 The Little Prince Coin Sets + 12638 Tourism Coin Sets (Eiffel Tower)
    \r\n
  • 2004 - 120000 Annual Coin Sets + 5399 The Little Prince Coin Sets + 3704 Tourism Coin Sets (Provence)
    \r\n
  • 2005 - 69999 Annual Coin Sets + 2611 Moebius Coin Sets + 2541 Tourism Coin Sets (Garonne)
    \r\n
  • 2006 - 70000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n

\r\nPROOF Sets Released
\r\n
  • From 1999 to 2006 - Annual Coin Sets
    \r\n
','\r',char(13)),'\n',char(10)),3,'rgb(140,120,60)'); -INSERT INTO NumistaType VALUES(103,'https://en.numista.com/catalogue/pieces103.html','1 Euro (1st map)','coin','france',1999,2006,'Standard circulation coin',103,103,'Round',103,103,7.5,23.25,NULL,2.33000000000000007,'medal',103,103,103,NULL,NULL,NULL,replace(replace('Different Mint Master Marks
\r\n
  • Pierre Rodier, from 1999 to 2000, a mark of a bee
    \r\n
  • Gerard Buquoy, from 2001 to 2002, a mark of a horseshoe
    \r\n
  • Serge Levet, in 2003, a mark of a stylised heart with the initials of the mint master (SL)
    \r\n
  • Hubert Lariviere, from 2004 to 2006, a mark of a hunting horn with a wave and a fish
    \r\n

\r\nBUNC Sets Released
\r\n
  • 1999 - 35000 Annual Coin Sets
    \r\n
  • 2000 - 35000 Annual Coin Sets
    \r\n
  • 2001 - 35000 Annual Coin Sets
    \r\n
  • 2002 - 145563 Annual Coin Sets + 19727 The Little Prince Coin Sets
    \r\n
  • 2003 - 109407 Annual Coin Sets + 10094 The Little Prince Coin Sets + 12638 Tourism Coin Sets (Eiffel Tower)
    \r\n
  • 2004 - 120000 Annual Coin Sets + 5399 The Little Prince Coin Sets + 3704 Tourism Coin Sets (Provence)
    \r\n
  • 2005 - 69999 Annual Coin Sets + 2611 Moebius Coin Sets + 2541 Tourism Coin Sets (Garonne)
    \r\n
  • 2006 - 70000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n

\r\nPROOF Sets Released
\r\n
  • From 1999 to 2006 - Annual Coin Sets
    \r\n

\r\nPosition of the Bee Mark in 1999 and 2000
\r\nIn the 1999 coin the Bee from the Mint Master is pointing to the left.
\r\nIn the 2000 coin the Bee from the Mint Master is pointing to the right.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(141,112,60)'); -INSERT INTO NumistaType VALUES(105,'https://en.numista.com/catalogue/pieces105.html','1 Euro Cent','coin','allemagne',2002,2023,'Standard circulation coin',105,105,'Round',105,105,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',105,105,105,NULL,NULL,NULL,replace(replace('The 2002 coins have a KMB Variant.
\r\nThe KMB has a smaller (by about 10%) reverse design.
\r\nKMB = Kleines Münz Bild  [petite pièce de monnaie / small coin]
\r\n
\r\n
\r\n
\r\n1, 2 & 5 cents with large and small oak leaves
\r\n
\r\n
\r\n
\r\n© Ulmo
\r\n
\r\nOfficial Coincard of the Federal Ministry of Finance
\r\n2013
\r\n
\r\n2016
\r\n','\r',char(13)),'\n',char(10)),15,'rgb(222,148,107)'); -INSERT INTO NumistaType VALUES(106,'https://en.numista.com/catalogue/pieces106.html','2 Euro Cent','coin','allemagne',2002,2023,'Standard circulation coin',106,106,'Round',106,106,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',106,106,106,NULL,NULL,NULL,replace(replace('Example for 2002 "Kleines Münzbild":
\r\n
\r\n
\r\n2016/2017 change of Oak Leaves:
\r\n
\r\n
\r\n2010 J with different leaf:
\r\n
\r\n
\r\nwith small branch (2016 G and since 2017):
\r\n
\r\n
\r\nwith small picture since 2019:
\r\n
\r\n
\r\nall pictures ©Ulmo
\r\n
\r\nBE AWARE THAT THE SMALL OAK LEAF WERE GENERALLY INTRODUCED IN 2017 ON THE 2 E-CENT
\r\n(the last 2 from Ulmo are not really clear)
\r\n
\r\n','\r',char(13)),'\n',char(10)),17,'rgb(199,119,60)'); -INSERT INTO NumistaType VALUES(107,'https://en.numista.com/catalogue/pieces107.html','5 Euro Cent','coin','allemagne',2002,2023,'Standard circulation coin',107,107,'Round',107,107,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',107,107,107,NULL,NULL,NULL,replace(replace('
\r\n
\r\nFrom 2019 change of the size of the oak leaf
\r\n
\r\n
\r\n
\r\n©Ulmo
\r\n
\r\n','\r',char(13)),'\n',char(10)),7,'rgb(199,119,60)'); -INSERT INTO NumistaType VALUES(108,'https://en.numista.com/catalogue/pieces108.html','10 Euro Cent (1st map)','coin','allemagne',2002,2006,'Standard circulation coin',108,108,'Round',108,108,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',108,108,108,NULL,NULL,NULL,replace(replace('Two variants for the 2002A:
\r\n','\r',char(13)),'\n',char(10)),3,'rgb(204,160,73)'); -INSERT INTO NumistaType VALUES(109,'https://en.numista.com/catalogue/pieces109.html','20 Euro Cent (1st map)','coin','allemagne',2002,2007,'Standard circulation coin',109,109,'Spanish flower',109,109,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',109,109,109,NULL,NULL,NULL,'',3,'rgb(164,126,74)'); -INSERT INTO NumistaType VALUES(110,'https://en.numista.com/catalogue/pieces110.html','50 Euro Cent (1st map)','coin','allemagne',2002,2006,'Standard circulation coin',110,110,'Round',110,110,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',110,110,110,NULL,NULL,NULL,replace(replace('Five mints currently share coin production. Each puts its own workshop letter on the coins it mints:
\r\nA - Berlin
\r\nD - Munich
\r\nF - Stuttgart
\r\nG - Karlsruhe
\r\nJ - Hamburg','\r',char(13)),'\n',char(10)),1,'rgb(151,130,60)'); -INSERT INTO NumistaType VALUES(111,'https://en.numista.com/catalogue/pieces111.html','1 Euro (1st map)','coin','allemagne',2002,2006,'Standard circulation coin',111,111,'Round',111,111,7.5,23.25,NULL,2.33000000000000007,'medal',111,111,111,NULL,NULL,NULL,replace(replace('2002F orientation of the stars:
\r\n
\r\n
\r\nVarieties in star size in 2002:
\r\n
\r\nSee the complete description of 2002 types in the comprehensive online catalog http://eucoins.byethost9.com/ge.html Varieties of Euro Coins.','\r',char(13)),'\n',char(10)),1,'rgb(173.0357142857143,139.64285714285717,81.96428571428571)'); -INSERT INTO NumistaType VALUES(112,'https://en.numista.com/catalogue/pieces112.html','2 Euro (1st map)','coin','allemagne',2002,2006,'Standard circulation coin',112,112,'Round',112,112,8.5,25.75,NULL,2.20000000000000017,'medal',112,112,112,NULL,NULL,NULL,replace(replace('Five mints currently share coin production. Each puts its own workshop letter on the coins it mints:
\r\nA - Berlin
\r\nD - Munich
\r\nF - Stuttgart
\r\nG - Karlsruhe
\r\nJ - Hamburg','\r',char(13)),'\n',char(10)),1,'rgb(172.36111111111111,144.0277777777778,82.63888888888889)'); -INSERT INTO NumistaType VALUES(115,'https://en.numista.com/catalogue/pieces115.html','5 Euro Cent','coin','grece',2002,2023,'Standard circulation coin',115,115,'Round',115,115,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',115,115,115,NULL,NULL,NULL,replace(replace('
\r\n
\r\nThe coin is issued in bankrolls and the above mint sets:
\r\n
\r\n2002 Official Issue Hellenic Coin Set: The Official Blister 2002 was issued on 31 October 2002 with a mintage of 50,000 pieces. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos.
\r\n
\r\n
\r\n2002 Official Issue Hellenic Coin Set produced by the Duch Mint: The Dutch version of the Greek Blister 2002 was issued in 2002 with a mintage of only 5,000 pieces. The only visible difference between the Greek and the Dutch version of the blister is the issuing authority, namely the Greek ministry of Economy and the Greek Ministry of Economics and Finance respectively.
\r\n
\r\n
\r\n2003 Official Issue Hellenic Coin Set: The Official Blister 2003 was issued in June 2003. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos.
\r\n
\r\n
\r\n2004 Official Issue Hellenic Coin Set: The Official 2004 Blister is dedicated to the "Epikourios Apollo’s temple” and it was issued in May 2005 with a mintage of 30,000 pieces. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros (BU). Bassae (Latin) or Bassai (meaning "little vale in the rocks") hosts the temple of Apollo Epikourios ("Apollo the helper"). It was designed by Iktinos, the architect of the Temple of Hephaestus and the Parthenon and the ancient writer Pausanias praises the temple as eclipsing all others but the temple of Athena at Tegea by the beauty of its stone and the harmony of its construction.
\r\n
\r\n
\r\n2005 Official Issue Hellenic Coin Set: The Official Blister 2005 is dedicated to the "Ancient coins of Athens”. It was issued on 11 January 2006 with a mintage of 25,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships, the middle coins portray famous Greeks and the two large denominations showing images of Greek history and mythology.
\r\n
\r\n
\r\n2006 Official Issue Hellenic Coin Set: The Official Blister 2006 is dedicated to the "Ancient Greek coins". It was issued on 11 January 2006 with a mintage of 25,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships, the middle coins portray famous Greeks and the two large denominations showing images of Greek history and mythology.
\r\n
\r\n
\r\n2007 Official Issue Hellenic Coin Set: The Official Blister 2007 is dedicated to the "Ancient coins of the Aegean Sea”. It was issued on 13 August 2007 with a mintage of 15,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships. The middle coins portray famous Greeks. The two large denominations show images of Greek history and mythology. All designs feature the 12 stars of the EU, the year of imprint and a tiny symbol of the Bank of Greece (the anthemion flower).
\r\n
\r\n
\r\n2008 Official Issue Hellenic Coin Set: The Official Blister 2008 is dedicated to the "Ancient coins of Thrace, Macedonia, Thessaly, Epirus and Peloponnese”. It was issued on 4 October 2008 with a mintage of 20,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros.
\r\n
\r\n
\r\n2009 Official Issue Hellenic Coin Set: The Official Blister 2009 is dedicated to the "Theran Ship", a typical Cycladic ship from the 17th century BC. The construction model was based on the Miniature Ships Fresco, depicting a fleet in procession, discovered in the West House of the prehistoric settlement of Akritiri, on the island of Thera. The "Theran Ship" blister was issued on 7 December 2009 with a mintage of 7,500 pieces. It contains the 1, 2, 5, 10, 20, 50 cent and 1, 2 euros coins.
\r\n
\r\n
\r\n2010 Official Issue Hellenic Coin Set: The Official Blister 2010 is dedicated to the "Athenian Triere" (or trireme), the largest battleship for 200 years dating from the time of the Athenian democracy and Kimon (5th-century b.C.- Marine Museum). Triremes were the dominant warship in the Mediterranean from around 700 to 300 BC when naval combat took place mainly by ramming enemy vessels which would typically break apart from the force of the collision. The "Athenian Trireme” blister was issued in November 2010 and contains the 1, 2, 5, 10, 20, 50 cent and 1, 2 euros coins.
\r\n
\r\n
\r\n2011 Official Issue Hellenic Coin Set: This Special Olympics Blister 2011 commemorates the XIII Special Olympics World Summer Games and contains the following coins: 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships (Athenian triere - Corvette - Modern tanker ship), the middle coins portray famous Greeks (Rigas-Fereos Velestinlis - Ioannis Kapodistrias - Eleytherios Venizelos) and the two large denominations show images of Greek history and mythology (Owl - Europa abducted by Zeus).
\r\n
\r\n
\r\n2012 Official Issue Hellenic Coin Set: The official 2012 blister of the Hellenic Republic is dedicated to “Santorini” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). The Cycladic island of Santorini, also known by its ancient name of Thera, is one of the top tourist destinations in the world, thanks to its unique volcanic landscape dominated by the impressive Caldera, as shaped by a volcanic eruption in the Bronze Age. The island was an important centre of Cycladic civilisation, one of the earliest civilisations in Europe, as can be seen from the remarkably well-preserved remains uncovered at the prehistoric site of Akrotiri. Santorini also enchants its visitors with its traditional villages and vernacular architecture, as well as with its renowned wines and other products.
\r\n
\r\n
\r\n2012 Official Issue Hellenic Proof Coin Set: The 2012 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros), as well as the 2 Euro commemorative coin for the Ten Years of Euro Cash.
\r\n
\r\n
\r\n2013 Official Issue Hellenic Coin Set: The official 2013 blister of the Hellenic Republic is dedicated to “Mykonos and Delos” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). One of the first Greek islands to embrace tourism, Mykonos was a choice destination for visitors in ever-increasing numbers as early as the 1960s. Today, Mykonos is Greece’s most cosmopolitan island and receives visitors year-round. With its austere, barren and rocky terrain and its well preserved vernacular architecture, the “island of the winds”, as it is known, is perhaps the most typical Cycladic landscape. A few miles from Mykonos lies the tiny island of Delos, sacred in antiquity for being the birthplace of Apollo and Artemis and listed as a UNESCO World Heritage Site since 1990. Uninhabited today and unmarred by any modern construction, Delos preserves much of its sanctity as an archaeological site that boasts numerous classical, Hellenistic and Roman antiquities.
\r\n
\r\n
\r\n2013 Official Issue Hellenic Proof Coin Set: The 2013 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros), as well as two 2 euro commemorative coins celebrating the Union of Crete with Greece and the Founding of the Platonic Academy.
\r\n
\r\n
\r\n2014 Official Issue Hellenic Coin Set: The official 2014 blister of the Hellenic Republic is dedicated to “Thrace”, a north-east region of the country. It includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). Thrace, the north-easternmost region of Greece, comprises the Prefectures of Xanthi, Rodopi and Evros. The region is bounded by the rivers Nestos and Evros, by the Rodopi mountain range to the North and by the Thracian Sea to the South, and has a major seaport, Alexandroupolis. Blessed with stunningly diverse and pristine nature, Thrace boasts internationally significant wetlands (e.g. the Evros Delta), lakes (e.g. Vistonis), national parks (e.g. Rodopi and Dadia) and the fascinating island of Samothrace, all increasingly popular tourist destinations. Traditionally one of the breadbaskets of Greece, Thrace is now looking for new ways to tap its huge growth potential. Thrace has also had an important and continuous presence in national and world culture, ranging from Democritus and Protagoras to a rich musical heritage, consistent with Thrace’s renown as the “land of Orpheus”, and the Xanthi Old Town Festival. Finally, the harmonious coexistence of Christians and Muslims gives Thrace’s towns and villages a unique feel, while also fostering understanding and cooperation between cultures and peoples.
\r\n
\r\n
\r\n2014 Official Issue Hellenic Proof Coin Set: The 2014 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros), as well as two 2 euro commemorative coins celebrating the 400th Anniversary of the Death of Domenikos Theotokopoulos and the 150th Anniversary of the Union of the Ionian Islands with Greece.
\r\n
\r\n
\r\n2015 Official Issue Hellenic Coin Set: The official 2015 blister of the Hellenic Republic is dedicated to “Epirus” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). Epirus, the north-westernmost region of Greece, is flanked to the west by the Ionian Sea and the east by the Pindos mountain range. For the ancient Greeks, Epirus had great religious importance on account of the Dodona Oracle. Milestones in the region’s later history include the Hellenistic kingdom of Pyrrhus and the late-Byzantine Despotate of Epirus, while during Ottoman rule Epirus was associated with the Greek struggle for freedom, with sites of heroic self-sacrifice at Koungi and Zalongo. After Greek independence, several Epirote benefactors (Arsakis, Tositsas, Zappas, Sinas, Averof) contributed generously to the construction of the newly founded Greek state, which Epirus became part of in two phases (the Arta district was ceded to Greece in 1881 and the rest of Epirus after the Balkan Wars of 1912-13). It was in the Epirus highlands that the Greek army waged its epic battles against the Italian invader in 1940-41. Today Epirus attracts visitors for its stunning natural scenery (Vikos gorge), seaside resorts (Parga, Syvota), traditional settlements (Ioannina, Metsovo, Zagorochoria) and rich folk tradition in music, silver and gold craftsmanship and stone masonry.
\r\n
\r\n
\r\n2015 Official Issue Hellenic Proof Coin Set: The 2015 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros).
\r\n
\r\n
\r\n2016 Official Issue Hellenic Coin Set: The official 2016 blister of the Hellenic Republic is dedicated to “Peloponnese” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). The Peloponnese or Peloponnesus is a peninsula and geographic region in southern Greece. It is separated from the central part of the country by the Gulf of Corinth. It was here that the Greek War of Independence began in 1821. In 2016, Lonely Planet voted the Peloponnese the top spot of their Best in Europe list. The peninsula has been inhabited since prehistoric times. The Mycenaean civilization dominated the Peloponnese in the Bronze Age from its stronghold at Mycenae in the north-east of the peninsula. In 776 BC, the first Olympic Games were held at Olympia, and this date is sometimes used to denote the beginning of the classical period of Greek antiquity. During the Roman period, the peninsula remained prosperous but became a provincial backwater, relatively cut off from the affairs of the wider Roman world.
\r\n
\r\n
\r\n2016 Official Issue Hellenic Proof Coin Set: The 2016 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros.
\r\n
\r\n
\r\n2017 Official Issue Hellenic Coin Set: The official 2017 blister of the Hellenic Republic is dedicated to “Crete” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). Crete is the largest island of Greece and the cradle of Minoan civilisation. According to mythology, the is also the birthplace of Zeus. Crete is strategically situated at the juncture of three continents and came under the rule of several conquerors (Romans, Arabs, Venetians and, last, Ottomans), before finally uniting with Greece in 1913. Crete’s tumultuous history has forged the indomitable Cretan spirit, while centuries of fruitful cultural exchanges have left their mark on countless monuments, as well as on folk and scholarly traditions that admirably fuse East and West. The proverbial Cretan hospitality, exquisite local produce, mild climate, and beauty and diversity of the natural landscape all make Crete one of Greece’s top tourist destinations.
\r\n
\r\n
\r\n2017 Official Issue Hellenic Proof Coin Set: The 2017 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros.
\r\n
\r\n
\r\n2018 Official Issue Hellenic Coin Set: The official 2018 blister of the Hellenic Republic is dedicated to “Rhodos” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). The largest island of the Dodecanese and the fourth largest of Greece, Rhodes was the island of the god Helios, whose statue, the famous Colossus, standing at the harbour entrance, was one of the Seven Wonders of the Ancient World. Rhodes flourished in Hellenistic times, becoming a major trading city. From 1309, Rhodes was the seat of the Order of the Knights Hospitaller. The medieval city which they built, with the Castle of the Knights and the Palace of the Grand Master, was declared a UNESCO world heritage site in 1988. The island was conquered by the Ottomans in 1523 and by the Italians in 1912. It remained under Italian rule until the unification of the Dodecanese with Greece in 1948. Today, one of Greece’s most popular island destinations, Rhodes enchants its visitors with its exquisite beaches, idyllic landscapes and important ancient and medieval monuments.
\r\n
\r\n
\r\n2018 Official Issue Hellenic Proof Coin Set: The 2018 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros, as well as two 2 euro commemorative coins celebrating the 75th Anniversary of the Death of Kostis Palamas and the 150th Anniversary of the Union of the Dodecanese With Greece.
\r\n
\r\n
\r\n2019 Official Issue Hellenic Coin Set: The official 2018 blister of the Hellenic Republic is dedicated to “Samos” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). The island of Samos in the Eastern Aegean is the renowned birthplace of Pythagoras the mathematician, Aristarchos the astronomer and Epikouros the philosopher. It flourished in antiquity, especially under the tyrant Polycrates, and was also famous for its wines. Samos was home to one of the most important ancient Greek sanctuaries, the Heraion. Another UNESCO listed site, the Eupalinian Aqueduct, ran 1,036 metres through the mountainside to bring water to the ancient city of Samos. In the late Byzantine period, Samos came under Genovese rule, before eventually falling to the Ottomans. In 1835, it was given semi-autonomous status under Ottoman suzerainty and was united with Greece in 1912. Today, the island continues to produce its prized wines and is popular among tourists for its lush forests, important archaeological sites, picturesque villages and stunning beaches.
\r\n
\r\n
\r\n2019 Official Issue Hellenic Proof Coin Set: The 2019 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros, as well as two 2 euro commemorative coins celebrating the 150 years in memoriam of A. Kalvos and the 100th Anniversary of the birth of M. Andronicos.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(172,108,52)'); -INSERT INTO NumistaType VALUES(116,'https://en.numista.com/catalogue/pieces116.html','10 Euro Cent (1st map)','coin','grece',2002,2006,'Standard circulation coin',116,116,'Round',116,116,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',116,116,116,NULL,NULL,NULL,replace(replace('The coin is issued in bankrolls and the above mint sets:
\r\n
\r\n2002 Official Issue Hellenic Coin Set: The Official Blister 2002 was issued on 31 October 2002 with a mintage of 50,000 pieces. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos.
\r\n
\r\n
\r\n2002 Official Issue Hellenic Coin Set produced by the Duch Mint: The Dutch version of the Greek Blister 2002 was issued in 2002 with a mintage of only 5,000 pieces. The only visible difference between the Greek and the Dutch version of the blister is the issuing authority, namely the Greek ministry of Economy and the Greek ministry of Economics and Finance respectively.
\r\n
\r\n
\r\n2003 Official Issue Hellenic Coin Set: The Official Blister 2003 was issued in June 2003. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos.
\r\n
\r\n
\r\n2004 Official Issue Hellenic Coin Set: The Official 2004 Blister is dedicated to the "Epikourios Apollo’s temple” and it was issued in May 2005 with a mintage of 30,000 pieces. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros (BU). Bassae (Latin) or Bassai (meaning "little vale in the rocks") hosts the temple of Apollo Epikourios ("Apollo the helper"). It was designed by Iktinos, architect of the Temple of Hephaestus and the Parthenon and the ancient writer Pausanias praises the temple as eclipsing all others but the temple of Athena at Tegea by the beauty of its stone and the harmony of its construction.
\r\n
\r\n
\r\n2005 Official Issue Hellenic Coin Set: The Official Blister 2005 is dedicated to the "Ancient coins of Athens”. It was issued on 11 January 2006 with a mintage of 25,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships, the middle coins portray famous Greeks and the two large denominations show images of Greek history and mythology.
\r\n
\r\n
\r\n2006 Official Issue Hellenic Coin Set: The Official Blister 2006 is dedicated to the "Ancient Greek coins". It was issued on 11 January 2006 with a mintage of 25,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships, the middle coins portray famous Greeks and the two large denominations show images of Greek history and mythology.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(205,148,32)'); -INSERT INTO NumistaType VALUES(118,'https://en.numista.com/catalogue/pieces118.html','50 Euro Cent (1st map)','coin','grece',2002,2006,'Standard circulation coin',118,118,'Round',118,118,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',118,118,118,NULL,NULL,NULL,replace(replace('The coin is issued in bankrolls and the above mint sets:
\r\n
\r\n2002 Official Issue Hellenic Coin Set: The Official Blister 2002 was issued on 31 October 2002 with a mintage of 50,000 pieces. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos.
\r\n
\r\n
\r\n2002 Official Issue Hellenic Coin Set produced by the Duch Mint: The Dutch version of the Greek Blister 2002 was issued in 2002 with a mintage of only 5,000 pieces. The only visible difference between the Greek and the Dutch version of the blister is the issuing authority, namely the Greek ministry of Economy and the Greek Ministry of Economics and Finance respectively.
\r\n
\r\n
\r\n2003 Official Issue Hellenic Coin Set: The Official Blister 2003 was issued in June 2003. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos.
\r\n
\r\n
\r\n2004 Official Issue Hellenic Coin Set: The Official 2004 Blister is dedicated to the "Epikourios Apollo’s temple” and it was issued in May 2005 with a mintage of 30,000 pieces. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros (BU). Bassae (Latin) or Bassai (meaning "little vale in the rocks") hosts the temple of Apollo Epikourios ("Apollo the helper"). It was designed by Iktinos, the architect of the Temple of Hephaestus and the Parthenon and the ancient writer Pausanias praises the temple as eclipsing all others but the temple of Athena at Tegea by the beauty of its stone and the harmony of its construction.
\r\n
\r\n
\r\n2005 Official Issue Hellenic Coin Set: The Official Blister 2005 is dedicated to the "Ancient coins of Athens”. It was issued on 11 January 2006 with a mintage of 25,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships, the middle coins portray famous Greeks and the two large denominations showing images of Greek history and mythology.
\r\n
\r\n
\r\n2006 Official Issue Hellenic Coin Set: The Official Blister 2006 is dedicated to the "Ancient Greek coins". It was issued on 11 January 2006 with a mintage of 25,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships, the middle coins portray famous Greeks and the two large denominations showing images of Greek history and mythology.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(193,173,121)'); -INSERT INTO NumistaType VALUES(120,'https://en.numista.com/catalogue/pieces120.html','2 Euro (1st map)','coin','grece',2002,2006,'Standard circulation coin',120,120,'Round',120,120,8.5,25.75,NULL,2.20000000000000017,'medal',120,120,120,NULL,NULL,NULL,replace(replace('Smaller and larger font variants seen on 2 euro coins
\r\n© tvladusi
\r\n
\r\nThe coin is issued in bankrolls and the above mint sets:
\r\n
\r\n2002 Official Issue Hellenic Coin Set: The Official Blister 2002 was issued on 31 October 2002 with a mintage of 50,000 pieces. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos.
\r\n
\r\n
\r\n2002 Official Issue Hellenic Coin Set produced by the Duch Mint: The Dutch version of the Greek Blister 2002 was issued in 2002 with a mintage of only 5,000 pieces. The only visible difference between the Greek and the Dutch version of the blister is the issuing authority, namely the Greek ministry of Economy and the Greek Ministry of Economics and Finance respectively.
\r\n
\r\n
\r\n2003 Official Issue Hellenic Coin Set: The Official Blister 2003 was issued in June 2003. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos.
\r\n
\r\n
\r\n2004 Official Issue Hellenic Coin Set: The Official 2004 Blister is dedicated to the "Epikourios Apollo’s temple” and it was issued in May 2005 with a mintage of 30,000 pieces. It contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros (BU). Bassae (Latin) or Bassai (meaning "little vale in the rocks") hosts the temple of Apollo Epikourios ("Apollo the helper"). It was designed by Iktinos, an architect of the Temple of Hephaestus and the Parthenon and the ancient writer Pausanias praises the temple as eclipsing all others but the temple of Athena at Tegea by the beauty of its stone and the harmony of its construction.
\r\n
\r\n
\r\n2005 Official Issue Hellenic Coin Set: The Official Blister 2005 is dedicated to the "Ancient coins of Athens”. It was issued on 11 January 2006 with a mintage of 25,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships, the middle coins portray famous Greeks and the two large denominations showing images of Greek history and mythology.
\r\n
\r\n
\r\n2006 Official Issue Hellenic Coin Set: The Official Blister 2006 is dedicated to the "Ancient Greek coins". It was issued on 11 January 2006 with a mintage of 25,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships, the middle coins portray famous Greeks and the two large denominations showing images of Greek history and mythology.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(167.5714285714286,140.25,87.4285714285714)'); -INSERT INTO NumistaType VALUES(121,'https://en.numista.com/catalogue/pieces121.html','1 Euro Cent','coin','irlande',2002,2023,'Standard circulation coin',121,121,'Round',121,121,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',121,121,121,NULL,NULL,NULL,replace(replace('Although still legal tender, these coins are no longer issued for circulation as of 2015. Cash transactions are now rounded to the nearest 5 Cents.
\r\n
\r\nThere is a variation in 2008 Reverse where the N and the T are joined in the upper part of the letters as seen in the image below:
\r\n','\r',char(13)),'\n',char(10)),20,'rgb(236,164,87)'); -INSERT INTO NumistaType VALUES(122,'https://en.numista.com/catalogue/pieces122.html','2 Euro Cent','coin','irlande',2002,2023,'Standard circulation coin',122,122,'Round',122,122,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',122,122,122,NULL,NULL,NULL,'Although still legal tender, these coins are no longer issued for circulation as of 2015. Cash transactions are now rounded to the nearest 5 Cents.',25,'rgb(217,138,58)'); -INSERT INTO NumistaType VALUES(125,'https://en.numista.com/catalogue/pieces125.html','20 Euro Cent (1st map)','coin','irlande',2002,2006,'Standard circulation coin',125,125,'Spanish flower',125,125,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',125,125,125,NULL,NULL,NULL,NULL,1,'rgb(198,147,64)'); -INSERT INTO NumistaType VALUES(126,'https://en.numista.com/catalogue/pieces126.html','50 Euro Cent (1st map)','coin','irlande',2002,2006,'Standard circulation coin',126,126,'Round',126,126,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',126,126,126,NULL,NULL,NULL,NULL,1,'rgb(196,139,34)'); -INSERT INTO NumistaType VALUES(129,'https://en.numista.com/catalogue/pieces129.html','1 Euro Cent','coin','italie',2002,2023,'Standard circulation coin',129,129,'Round',129,129,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',129,129,129,NULL,NULL,NULL,replace(replace('Although still legal tender, these coins are no longer issued for circulation as of 2018. Cash transactions are now rounded to the nearest 5 Cents.
\r\n
\r\nThere are small differences between 2016 and 2017.
\r\n','\r',char(13)),'\n',char(10)),4,'rgb(149,78,36)'); -INSERT INTO NumistaType VALUES(130,'https://en.numista.com/catalogue/pieces130.html','2 Euro Cent','coin','italie',2002,2023,'Standard circulation coin',130,130,'Round',130,130,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',130,130,130,NULL,NULL,NULL,replace(replace('Although still legal tender, these coins are no longer issued for circulation as of 2018. Cash transactions are now rounded to the nearest 5 Cents.
\r\n
\r\n','\r',char(13)),'\n',char(10)),8,'rgb(182,101,56)'); -INSERT INTO NumistaType VALUES(131,'https://en.numista.com/catalogue/pieces131.html','5 Euro Cent','coin','italie',2002,2023,'Standard circulation coin',131,131,'Round',131,131,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',131,131,131,NULL,NULL,NULL,replace(replace('
\r\n
\r\n
\r\nThe differences between 2002 and 2017','\r',char(13)),'\n',char(10)),1,'rgb(180,132,76)'); -INSERT INTO NumistaType VALUES(132,'https://en.numista.com/catalogue/pieces132.html','10 Euro Cent (1st map)','coin','italie',2002,2007,'Standard circulation coin',132,132,'Round',132,132,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',132,132,132,NULL,NULL,NULL,replace(replace('Varieties for 2002:
\r\n
\r\n
\r\n2002: 150.000 in BU set KMS40
\r\n2003: 100.000 in BU sets (50.000 in KMS41 and 50.000 in KMS42) - 12.000 in Proof set KMPS26
\r\n2004: 65.000 in BU sets (35.000 in KMS43 and 30.000 in KMS44) - 10.000 in Proof set KMPS27
\r\n2005: 49.500 in BU sets (25.000 in KMS45 and 24.500 in KMS46) - 6.600 in Proof set KMPS28
\r\n2006: 42.500 in BU sets (20.500 in KMS47 and 22.000 in KMS48) - 5.800 in Proof set KMPS29
\r\n2007: 39.000 in BU sets (20.000 in KMS49 and 19.000 in KMS50) - 5.510 in Proof set KMPS30','\r',char(13)),'\n',char(10)),3,'rgb(199,171,56)'); -INSERT INTO NumistaType VALUES(133,'https://en.numista.com/catalogue/pieces133.html','20 Euro Cent (1st map)','coin','italie',2002,2007,'Standard circulation coin',133,133,'Spanish flower',133,133,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',133,133,133,NULL,NULL,NULL,replace(replace('2002: 150.000 in BU set KMS40
\r\n2003: 100.000 in BU sets (50.000 in KMS41 and 50.000 in KMS42) - 12.000 in Proof set KMPS26
\r\n2004: 65.000 in BU sets (35.000 in KMS43 and 30.000 in KMS44) - 10.000 in Proof set KMPS27
\r\n2005: 49.500 in BU sets (25.000 in KMS45 and 24.500 in KMS46) - 6.600 in Proof set KMPS28
\r\n2006: 42.500 in BU sets (20.500 in KMS47 and 22.000 in KMS48) - 5.800 in Proof set KMPS29
\r\n2007: 39.000 in BU sets (20.000 in KMS49 and 19.000 in KMS50) - 5.510 in Proof set KMPS30','\r',char(13)),'\n',char(10)),1,'rgb(200,175,65)'); -INSERT INTO NumistaType VALUES(136,'https://en.numista.com/catalogue/pieces136.html','2 Euro (1st map)','coin','italie',2002,2007,'Standard circulation coin',136,136,'Round',136,136,8.5,25.75,NULL,2.20000000000000017,'medal',136,136,136,NULL,NULL,NULL,replace(replace(' - different font and star sizes
\r\n
\r\n2002: 150.000 in BU set KMS40
\r\n2003: 100.000 in BU sets (50.000 in KMS41 and 50.000 in KMS42) - 12.000 in Proof set KMPS26
\r\n2004: 65.000 in BU sets (35.000 in KMS43 and 30.000 in KMS44) - 10.000 in Proof set KMPS27
\r\n2005: 49.500 in BU sets (25.000 in KMS45 and 24.500 in KMS46) - 6.600 in Proof set KMPS28
\r\n2006: 42.500 in BU sets (20.500 in KMS47 and 22.000 in KMS48) - 5.800 in Proof set KMPS29
\r\n2007: 39.000 in BU sets (20.000 in KMS49 and 19.000 in KMS50) - 5.510 in Proof set KMPS30','\r',char(13)),'\n',char(10)),1,'rgb(240,204,88)'); -INSERT INTO NumistaType VALUES(137,'https://en.numista.com/catalogue/pieces137.html','1 Euro Cent - Henri I','coin','luxembourg',2002,2023,'Standard circulation coin',137,137,'Round',137,137,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',137,137,137,NULL,NULL,NULL,replace(replace('This piece was engraved by several countries and by several engravers according to the following periods :
\r\n
  • 2002    Netherlands: caduceus - Mark: bow and star - W. J. van Schauwenburg (interim)
    \r\n
  • 2003 - 2004 Netherlands: caduceus - Mark: Sails - Maarten Brouwer (holder)
    \r\n
  • 2005 - 2006 Finland:  "S" and logo of Vanda mint
    \r\n
  • 2007 - 2008 France: horn of plenty and "F" in star - Mark: hunting horn - Hubert Lariviere
    \r\n
  • 2009 - 2015 Netherlands: caduceus - Mark: Sails - Maarten Brouwer (holder)  
    \r\n
  • 2016 - 2017 Netherlands: caduceus - Mark: Sails and star - Kees Bruinsma (interim)
    \r\n
  • 2018 (In sets only) Netherlands:  caduceus - Mark: Bridge - Stephan Satijn (holder)
    \r\n

\r\nSince 2018, Luxembourg using the lion mark.
\r\n2018 (normal): caduceus and lion
\r\n2018 (Proof): Lion and bridge - Stephan Satijn (holder)','\r',char(13)),'\n',char(10)),4,'rgb(154,108,68)'); -INSERT INTO NumistaType VALUES(138,'https://en.numista.com/catalogue/pieces138.html','2 Euro Cent - Henri I','coin','luxembourg',2002,2023,'Standard circulation coin',138,138,'Round',138,138,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',138,138,138,NULL,NULL,NULL,replace(replace('This piece was engraved by several countries and by several engravers according to the following periods:
\r\n
  • 2002 Netherlands: caduceus - Mark: bow and star - W. J. van Schauwenburg (interim)
    \r\n
  • 2003 - 2004 Netherlands: caduceus - Mark: Sails - Maarten Brouwer (holder)
    \r\n
  • 2005 - 2006 Finland: "S" and logo of Vantaa mint
    \r\n
  • 2007 - 2008 France: horn of plenty and "F" in star - Mark: hunting horn - Hubert Lariviere
    \r\n
  • 2009 - 2015 Netherlands: caduceus - Mark: Sails - Maarten Brouwer (holder)  
    \r\n
  • 2016 - 2017 Netherlands: caduceus - Mark: Sails and star - Kees Bruinsma (interim)
    \r\n
  • 2018 (In sets only) Netherlands: caduceus - Mark: Bridge - Stephan Satijn (holder)
    \r\n

\r\nSince 2018, Luxembourg has used a lion mark.
\r\n2018 (normal): caduceus  and lion
\r\n2018 (Proof): Lion and bridge - Stephan Satijn (holder)','\r',char(13)),'\n',char(10)),3,'rgb(154,108,68)'); -INSERT INTO NumistaType VALUES(139,'https://en.numista.com/catalogue/pieces139.html','5 Euro Cent - Henri I','coin','luxembourg',2002,2023,'Standard circulation coin',139,139,'Round',139,139,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',139,139,139,NULL,NULL,NULL,replace(replace('This piece was engraved by severals contries and by severals engravers according to the following periods:
\r\n
  • 2002 Netherlands: caduceus - Mark : bow and star - W. J. van Schauwenburg (interim)
    \r\n
  • 2003 - 2004 Netherlands: caduceus - Mark : Sails - Maarten Brouwer (holder)
    \r\n
  • 2005 - 2006 Finland:  "S" and logo of Vanda mint
    \r\n
  • 2007 - 2008 France: horn of plenty and "F" in star - Mark : hunting horn - Hubert Lariviere
    \r\n
  • 2009 - 2015 Nederland : caduceus - Mark : Sails - Maarten Brouwer (holder)  
    \r\n
  • 2016 - 2017 Netherlands: caduceus - Mark : Sails and star - Kees Bruinsma (interim)
    \r\n
  • 2018 (In sets only) Netherlands: caduceus - Mark : Bridge - Stephan Satijn (holder)
    \r\n

\r\nSince 2018, Luxembourg using lion mark.
\r\n2018 (normal): caduceus  and lion
\r\n2018 (Proof): Lion and bridge - Stephan Satijn (holder)','\r',char(13)),'\n',char(10)),1,'rgb(154,108,68)'); -INSERT INTO NumistaType VALUES(144,'https://en.numista.com/catalogue/pieces144.html','2 Euro - Henri I (1st map)','coin','luxembourg',2002,2006,'Standard circulation coin',144,144,'Round',144,144,8.5,25.75,NULL,2.20000000000000017,'medal',144,144,144,NULL,NULL,NULL,replace(replace('Cette pièce à été gravée par plusieurs pays et plusieurs graveur selon les périodes suivantes :
\r\n
  • Pour 2002    Pays-Bas : Caducée - Marque : Arc avec une étoile - W. J. van Schauwenburg (maître supplétif)
    \r\n
  • 2003 - 2004 Pays-Bas : Caducée - Marque : Voilier - Maarten Brouwer (maître titulaire)
    \r\n
  • 2005 - 2006 Finlande : La lettre "S" et le logo de l'atelier de la Vanda
    \r\n
','\r',char(13)),'\n',char(10)),1,'rgb(181.52542372881356,151.27118644067795,73.47457627118645)'); -INSERT INTO NumistaType VALUES(145,'https://en.numista.com/catalogue/pieces145.html','1 Euro Cent - Beatrix','coin','pays-bas',1999,2013,'Standard circulation coin',145,145,'Round',145,145,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',145,145,145,NULL,NULL,NULL,replace(replace('(fr) Cette pièce à été gravée par l'atelier monétaire d'Utrecht par plusieurs graveurs selon les périodes suivantes :
\r\n
  • 1999              : arc bandé et armé ; Chris Van Dranen (titulaire)
    \r\n
  • 2000              : arc bandé et armé et étoile ; Erik Jan van Schouwenburg (intérim)
    \r\n
  • 2001              : grappe ; Robert Bruens (titulaire)
    \r\n
  • 2002              : grappe et étoile ; Maarten Brouwer (interim)
    \r\n
  • 2003 - 2013 : voiles ; Maarten Brouwer (titulaire)
    \r\n

\r\nBU 1999
\r\nCharité - "Clini-clowns" 65000 exemplaires sur 75000 exemplaires prévu
\r\nBU 2000
\r\nCharité - "Chefs-d'oeuvre de la Nature" 68000 exemplaires sur 75000 exemplaires prévu
\r\nBU  2001
\r\nCharité - "Fonds pour les handicapés"  65000 exemplaires sur 75000 exemplaires prévu
\r\nSet d'information "Danemark" 15000 exemplaires
\r\nBU 2002
\r\nCharité - "Chiens guides d'aveugles" 105000 exemplaires
\r\nCoffret Beatrix 59500 exemplaires
\r\nNaissance 25000 exemplaires
\r\nVOC 1 - La fondation 10000 exemplaires
\r\nVOC 2 - Les navires 10000 exemplaires
\r\nVOC 3 - Les itinéraires 10000 exemplaires
\r\nVOC 4 - Les héros 10000 exemplaires
\r\nMariage 10000 exemplaires
\r\nJour de la Monnaie 2002  exemplaires
\r\nLes chèques cadeaux IRIS de VVV 2500 exemplaires
\r\nBVC Bloemendaal 3000 exemplaires
\r\nThemaset - Beatrix 3500 exemplaires
\r\nBU 2003
\r\nCharité - "Fondation contre l'épilepsie" 75 000 exemplaires
\r\nVOC 5 - Les marchandises 10 000 exemplaires
\r\nVOC 6 - L'argent 4 500 exemplaires
\r\nMariage 15 000 exemplaires
\r\nNaissance 25 000 exemplaires
\r\nThemaset - Naissance de la princesse 20 000 exemplaires
\r\nJour de la Monnaie 2 003 exemplaires
\r\nThemaset - Maîtres de la Monnaie 3 500 exemplaires
\r\nLes chèques cadeaux IRIS de VVV 10 000 exemplaires
\r\nWorld Money Fair de Bâle 1 000 exemplaires
\r\nSet d'information "Hongrie" 11 000 exemplaires
\r\nBU 2004
\r\nCharité - "Victimes des brûlures" 50 000 exemplaires
\r\nNaissance 20 000 exemplaires
\r\nMariage 10 000 exemplaires
\r\nThemaset - Maîtres de la Monnaie 3 500 exemplaires
\r\nLes chèques cadeaux IRIS de VVV 3 500 exemplaires
\r\nThemaset - Souvenir de la Reine Juliana 10 000 exemplaires
\r\nJour de la Monnaie 2 004
\r\nWorld Money Fair de Bâle 1 000 exemplaires
\r\nBU 2005
\r\nCharité - "Fonds de la Princesse Beatrix" 55 000 exemplaires
\r\nMariage 10 000 exemplaires
\r\nNaissance 14 500 exemplaires
\r\nCoffret 50 ans Miffy 20 000 exemplaires
\r\nJour de la Monnaie 2 005 exemplaires
\r\nThemaset - Maîtres de la Monnaie 3 500 exemplaires
\r\nWorld Money Fair de Bâle 1 000 exemplaires
\r\nThemaset - Pays-Bas et Canada : 60 ans de libération 17 500 exemplaires
\r\nBU 2006
\r\nCharité - "Fondation KIKA" 38 000 exemplaires
\r\nWorld Money Fair de Berlin 1 000 exemplaires
\r\nJour de la Monnaie 2 006 exemplaires
\r\nThemaset - Maîtres de la Monnaie 3 500 exemplaires
\r\n200 ans de monnayage des Pays-Bas 4 500 exemplaires
\r\nSix séries Rembrandt (collection argent) 4 000 exemplaires
\r\nBU 2007
\r\nCoffret annuel 40 000 exemplaires
\r\nThemaset - Maîtres de la Monnaie 3 500 exemplaires
\r\nJour de la Monnaie 2 007 exemplaires
\r\nWorld Money Fair de Berlin 500 exemplaires
\r\nSix séries Michiel de Ruyter (collection Argent) 3 000 exemplaires
\r\nThemaset - 200 ans du prédicat royal 5 000 exemplaires
\r\nBU 2008
\r\nCoffret annuel 40 000 exemplaires
\r\nThemaset - Maîtres de la Monnaie 3 500 exemplaires*
\r\nWorld Money Fair de Berlin 500 exemplaires
\r\nJour de la Monnaie 2 008 exemplaires
\r\nThemaset - 150e anniversaire de la naissance de la reine Emma 5 000 exemplaires
\r\nBU 2009
\r\nCoffret annuel 35 000 exemplaires
\r\nThemaset - 100e anniversaire de la naissance de la reine Juliana 5 000 exemplaires
\r\nThemaset - Maîtres de la Monnaie 3 500 exemplaires
\r\nJour de la Monnaie 2 009 exemplaires
\r\nWorld Money Fair de Berlin 500 exemplaires
\r\nCoffret - Coin Convention Tokyo 500 exemplaires
\r\nBU 2010
\r\nCoffret annuel 25 000 exemplaires
\r\nThemaset - 30e anniversaire du règne de la reine Beatrix 5 000 exemplaires
\r\nJour de la Monnaie 2 010 exemplaires
\r\nSérie Musées - Noord-Brabants Museum 3 000 exemplaires
\r\nWorld Money Fair de Berlin 500 exemplaires
\r\nBU 2011
\r\nCoffret annuel 25 000 exemplaires
\r\nJour de la Monnaie 2 011 exemplaires
\r\nSérie Musées - Groninger Museum 3 000 exemplaires
\r\nThemaset - 100e anniversaire de la naissance du prince Bernhard 5 000 exemplaires
\r\nMariage 1 250 exemplaires
\r\nWorld Money Fair de Berlin 500 exemplaires
\r\nNaissance 5 000 exemplaires
\r\nBU 2012
\r\nNaissance 2 500 exemplaires
\r\nMariage 1 250 exemplaires
\r\nCoffret annuel 25 000 exemplaires
\r\nSérie Musées - Musée central de Drents 3 000 exemplaires
\r\nJour de la Monnaie 2 012 exemplaires
\r\nThemaset - 10e anniversaire de mariage du prince Willem-Alexander et la princesse Maxima 5 000 exemplaires
\r\nWorld Money Fair de Berlin 500 exemplaires
\r\nBU 2013
\r\nCoffret annuel 15 000 exemplaires
\r\nSérie Musées - Musée national des antiquités de Leyde 2 250 exemplaires
\r\nWorld Money Fair de Berlin 500 exemplaires
\r\nAbdication I 10 000 exemplaires
\r\nJour de la Monnaie 2 013 exemplaires
\r\nNaissance garçon 2 000 exemplaires
\r\nNaissance fille 2 000 exemplaires
\r\nNaissance 2 000 exemplaires
\r\nMariage 1 000 exemplaires
\r\nThemaset : le dernier jour de la reine 4 000 exemplaires','\r',char(13)),'\n',char(10)),3,'rgb(197,147,115)'); -INSERT INTO NumistaType VALUES(146,'https://en.numista.com/catalogue/pieces146.html','2 Euro Cent - Beatrix','coin','pays-bas',1999,2013,'Standard circulation coin',146,146,'Round',146,146,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',146,146,146,NULL,NULL,NULL,replace(replace('This coin was engraved by the Utrecht mint by several engravers in the following periods:
\r\n
  • 1999: bow bandaged and cocked; Chris Van Dranen (titular)
    \r\n
  • 2000: banded and cocked bow and star; Erik Jan van Schouwenburg (interim)
    \r\n
  • 2001: cluster; Robert Bruens (incumbent)
    \r\n
  • 2002: cluster and star; Maarten Brouwer (interim)
    \r\n
  • 2003 - 2013: sails; Maarten Brouwer (incumbent)
    \r\n

\r\nBU 1999
\r\nCharité - "Clini-clowns" 75,000 copies
\r\nBU 2000
\r\nCharité - "Nature''s masterpieces" 75000 copies
\r\nUNC 2000
\r\nRabo-bank 13850 copies
\r\nBU 2001
\r\nCharity - "Fund for the disabled" 65000 copies
\r\nInformation set "Denmark" 15000 copies
\r\nBU 2002
\r\nCharity - "Guide dogs for the blind" 105000 copies
\r\nBeatrix box set 59500 copies
\r\nBirth 25000 copies
\r\nVOC 1 - The foundation 10000 copies
\r\nVOC 2 - The ships 10000 copies
\r\nVOC 3 - Itineraries 10,000 copies
\r\nVOC 4 - Heroes 10000 copies
\r\nWedding 10000 copies
\r\nMint Day 2002 copies
\r\nVVV IRIS gift vouchers 2500 copies
\r\nBVC Bloemendaal 3000 copies
\r\nThemaset - Beatrix 3500 copies
\r\nBU 2003
\r\nCharité - "Fondation contre l''épilepsie" 75,000 copies
\r\nVOC 5 - Goods 10,000 copies
\r\nVOC 6 - Money 4,500 copies
\r\nMarriage 15,000 copies
\r\nBirth 25,000 copies
\r\nThemaset - Princess birth 20,000 copies
\r\nMint Day 2,003 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nVVV IRIS gift vouchers 10,000 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nHungary" information set 11,000 copies
\r\nBU 2004
\r\nCharity - "Burn victims" 50,000 copies
\r\nBirth 20,000 copies
\r\nWedding 10,000 copies
\r\nThemaset - Mint Masters 3,500 copies
\r\nVVV IRIS gift vouchers 3,500 copies
\r\nThemaset - Souvenir de la Reine Juliana 10,000 copies
\r\nJour de la Monnaie 2,004
\r\nBasel World Money Fair 1,000 copies
\r\nBU 2005
\r\nCharity - "Princess Beatrix Fund" 55,000 copies
\r\nWedding 10,000 copies
\r\nBirth 14,500 copies
\r\nMiffy 50th anniversary box set 20,000 copies
\r\nMint Day 2,005 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nThemaset - Netherlands and Canada: 60 years of liberation 17,500 copies
\r\nBU 2006
\r\nCharité - "KIKA Foundation" 38,000 copies
\r\nWorld Money Fair Berlin 1,000 copies
\r\nJour de la Monnaie 2,006 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\n200 years of Dutch coinage 4,500 copies
\r\nSix Rembrandt series (silver collection) 4,000 copies
\r\nBU 2007
\r\nAnnual boxed set 40,000 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nJour de la Monnaie 2,007 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nSix Michiel de Ruyter series (Silver collection) 3,000 copies
\r\nThemaset - 200 years of the royal predicate 5,000 copies
\r\nBU 2008
\r\nAnnual boxed set 40,000 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies*
\r\nWorld Money Fair Berlin 500 copies
\r\nJour de la Monnaie 2,008 copies
\r\nThemaset - 150th anniversary of the birth of Queen Emma 5,000 copies
\r\nBU 2009
\r\nAnnual box set 35,000 copies
\r\nThemaset - 100th anniversary of the birth of Queen Juliana 5,000 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nJour de la Monnaie 2,009 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nCoin Convention Tokyo 500 copies
\r\nBU 2010
\r\nAnnual box set 25,000 copies
\r\nThemaset - 30th anniversary of Queen Beatrix''s reign 5,000 copies
\r\nMint Day 2,010 copies
\r\nMuseum Series - Noord-Brabants Museum 3,000 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nBU 2011
\r\nAnnual box set 25,000 copies
\r\nMint Day 2,011 copies
\r\nMuseum Series - Groninger Museum 3,000 copies
\r\nThemaset - 100th anniversary of Prince Bernhard''s birth 5,000 copies
\r\nWedding 1,250 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nBirth 5,000 copies
\r\nBU 2012
\r\nBirth 2,500 copies
\r\nWedding 1,250 copies
\r\nAnnual box set 25,000 copies
\r\nMuseum Series - Drents Central Museum 3,000 copies
\r\nMint Day 2,012 copies
\r\nThemaset - 10th wedding anniversary of Prince Willem-Alexander and Princess Maxima 5,000 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nBU 2013
\r\nAnnual boxed set 15,000 copies
\r\nMuseum Series - National Museum of Antiquities Leiden 2,250 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nAbdication I 10,000 copies
\r\nMint Day 2,013 copies
\r\nBirth boy 2,000 copies
\r\nBirth girl 2,000 copies
\r\nBirth 2,000 copies
\r\nWedding 1,000 copies
\r\nThemaset: the Queen''s last day 4,000 copies','\r',char(13)),'\n',char(10)),1,'rgb(164,97,51)'); -INSERT INTO NumistaType VALUES(147,'https://en.numista.com/catalogue/pieces147.html','5 Euro Cent - Beatrix','coin','pays-bas',1999,2013,'Standard circulation coin',147,147,'Round',147,147,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',147,147,147,NULL,NULL,NULL,replace(replace('This coin was engraved by the Utrecht mint by several engravers in the following periods:
\r\n
  • 1999: bow bandaged and cocked; Chris Van Dranen (titular)
    \r\n
  • 2000: banded and cocked bow and star; Erik Jan van Schouwenburg (interim)
    \r\n
  • 2001: cluster; Robert Bruens (incumbent)
    \r\n
  • 2002: cluster and star; Maarten Brouwer (interim)
    \r\n
  • 2003 - 2013: sails; Maarten Brouwer (incumbent)
    \r\n

\r\nBU 1999
\r\nCharité - "Clini-clowns" 75,000 copies
\r\nBU 2000
\r\nCharité - "Nature''s masterpieces" 75000 copies
\r\nUNC 2000
\r\nRabo-bank 13850 copies
\r\nBU 2001
\r\nCharity - "Fund for the disabled" 65000 copies
\r\nInformation set "Denmark" 15000 copies
\r\nBU 2002
\r\nCharity - "Guide dogs for the blind" 105000 copies
\r\nBeatrix box set 59500 copies
\r\nBirth 25000 copies
\r\nVOC 1 - The foundation 10000 copies
\r\nVOC 2 - The ships 10000 copies
\r\nVOC 3 - Itineraries 10,000 copies
\r\nVOC 4 - Heroes 10000 copies
\r\nWedding 10000 copies
\r\nMint Day 2002 copies
\r\nVVV IRIS gift vouchers 2500 copies
\r\nBVC Bloemendaal 3000 copies
\r\nThemaset - Beatrix 3500 copies
\r\nBU 2003
\r\nCharité - "Fondation contre l''épilepsie" 75,000 copies
\r\nVOC 5 - Goods 10,000 copies
\r\nVOC 6 - Money 4,500 copies
\r\nMarriage 15,000 copies
\r\nBirth 25,000 copies
\r\nThemaset - Princess birth 20,000 copies
\r\nMint Day 2,003 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nVVV IRIS gift vouchers 10,000 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nHungary" information set 11,000 copies
\r\nBU 2004
\r\nCharity - "Burn victims" 50,000 copies
\r\nBirth 20,000 copies
\r\nWedding 10,000 copies
\r\nThemaset - Mint Masters 3,500 copies
\r\nVVV IRIS gift vouchers 3,500 copies
\r\nThemaset - Souvenir de la Reine Juliana 10,000 copies
\r\nJour de la Monnaie 2,004
\r\nBasel World Money Fair 1,000 copies
\r\nBU 2005
\r\nCharity - "Princess Beatrix Fund" 55,000 copies
\r\nWedding 10,000 copies
\r\nBirth 14,500 copies
\r\nMiffy 50th anniversary box set 20,000 copies
\r\nMint Day 2,005 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nThemaset - Netherlands and Canada: 60 years of liberation 17,500 copies
\r\nBU 2006
\r\nCharité - "KIKA Foundation" 38,000 copies
\r\nWorld Money Fair Berlin 1,000 copies
\r\nJour de la Monnaie 2,006 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\n200 years of Dutch coinage 4,500 copies
\r\nSix Rembrandt series (silver collection) 4,000 copies
\r\nBU 2007
\r\nAnnual boxed set 40,000 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nJour de la Monnaie 2,007 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nSix Michiel de Ruyter series (Silver collection) 3,000 copies
\r\nThemaset - 200 years of the royal predicate 5,000 copies
\r\nBU 2008
\r\nAnnual boxed set 40,000 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies*
\r\nWorld Money Fair Berlin 500 copies
\r\nJour de la Monnaie 2,008 copies
\r\nThemaset - 150th anniversary of the birth of Queen Emma 5,000 copies
\r\nBU 2009
\r\nAnnual box set 35,000 copies
\r\nThemaset - 100th anniversary of the birth of Queen Juliana 5,000 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nJour de la Monnaie 2,009 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nCoin Convention Tokyo 500 copies
\r\nBU 2010
\r\nAnnual box set 25,000 copies
\r\nThemaset - 30th anniversary of Queen Beatrix''s reign 5,000 copies
\r\nMint Day 2,010 copies
\r\nMuseum Series - Noord-Brabants Museum 3,000 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nBU 2011
\r\nAnnual box set 25,000 copies
\r\nMint Day 2,011 copies
\r\nMuseum Series - Groninger Museum 3,000 copies
\r\nThemaset - 100th anniversary of Prince Bernhard''s birth 5,000 copies
\r\nWedding 1,250 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nBirth 5,000 copies
\r\nBU 2012
\r\nBirth 2,500 copies
\r\nWedding 1,250 copies
\r\nAnnual box set 25,000 copies
\r\nMuseum Series - Drents Central Museum 3,000 copies
\r\nMint Day 2,012 copies
\r\nThemaset - 10th wedding anniversary of Prince Willem-Alexander and Princess Maxima 5,000 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nBU 2013
\r\nAnnual boxed set 15,000 copies
\r\nMuseum Series - National Museum of Antiquities Leiden 2,250 copies
\r\nWorld Money Fair Berlin 500 copies
\r\nAbdication I 10,000 copies
\r\nMint Day 2,013 copies
\r\nBirth boy 2,000 copies
\r\nBirth girl 2,000 copies
\r\nBirth 2,000 copies
\r\nWedding 1,000 copies
\r\nThemaset: the Queen''s last day 4,000 copies','\r',char(13)),'\n',char(10)),3,'rgb(164,97,51)'); -INSERT INTO NumistaType VALUES(149,'https://en.numista.com/catalogue/pieces149.html','20 Euro Cent - Beatrix (1st map)','coin','pays-bas',1999,2006,'Standard circulation coin',149,149,'Spanish flower',149,149,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',149,149,149,NULL,NULL,NULL,replace(replace('This coin was engraved by the Utrecht mint by several engravers in the following periods:
\r\n
  • 1999: bow bandaged and cocked; (holder)
    \r\n
  • 2000: banded and cocked bow and star; (interim)
    \r\n
  • 2001 - 2002: cluster; (incumbent)
    \r\n
  • 2003 - 2013: sails; Maarten Brouwer (incumbent)
    \r\n

\r\nBU 1999
\r\nCharité - "Clini-clowns" 75,000 copies
\r\nBU 2000
\r\nCharité - "Nature''s masterpieces" 75000 copies
\r\nUNC 2000
\r\nRabo-bank 13850 copies
\r\nBU 2001
\r\nCharity - "Fund for the disabled" 65000 copies
\r\nInformation set "Denmark" 15000 copies
\r\nBU 2002
\r\nCharity - "Guide dogs for the blind" 105000 copies
\r\nBeatrix box set 59500 copies
\r\nBirth 25000 copies
\r\nVOC 1 - The foundation 10000 copies
\r\nVOC 2 - The ships 10000 copies
\r\nVOC 3 - Itineraries 10,000 copies
\r\nVOC 4 - Heroes 10000 copies
\r\nWedding 10000 copies
\r\nMint Day 2002 copies
\r\nVVV IRIS gift vouchers 2500 copies
\r\nBVC Bloemendaal 3000 copies
\r\nThemaset - Beatrix 3500 copies
\r\nBU 2003
\r\nCharité - "Fondation contre l''épilepsie" 75,000 copies
\r\nVOC 5 - Goods 10,000 copies
\r\nVOC 6 - Money 4,500 copies
\r\nMarriage 15,000 copies
\r\nBirth 25,000 copies
\r\nThemaset - Princess birth 20,000 copies
\r\nMint Day 2,003 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nVVV IRIS gift vouchers 10,000 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nHungary" information set 11,000 copies
\r\nBU 2004
\r\nCharity - "Burn victims" 50,000 copies
\r\nBirth 20,000 copies
\r\nWedding 10,000 copies
\r\nThemaset - Mint Masters 3,500 copies
\r\nVVV IRIS gift vouchers 3,500 copies
\r\nThemaset - Souvenir de la Reine Juliana 10,000 copies
\r\nJour de la Monnaie 2,004
\r\nBasel World Money Fair 1,000 copies
\r\nBU 2005
\r\nCharity - "Princess Beatrix Fund" 55,000 copies
\r\nWedding 10,000 copies
\r\nBirth 14,500 copies
\r\nMiffy 50th anniversary box set 20,000 copies
\r\nMint Day 2,005 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nThemaset - Netherlands and Canada: 60 years of liberation 17,500 copies
\r\nBU 2006
\r\nCharité - "KIKA Foundation" 38,000 copies
\r\nWorld Money Fair Berlin 1,000 copies
\r\nJour de la Monnaie 2,006 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\n200 years of Dutch coinage 4,500 copies
\r\nSix Rembrandt series (silver collection) 4,000 copies','\r',char(13)),'\n',char(10)),1,'rgb(208,95,50)'); -INSERT INTO NumistaType VALUES(150,'https://en.numista.com/catalogue/pieces150.html','50 Euro Cent - Beatrix (1st map)','coin','pays-bas',1999,2006,'Standard circulation coin',150,150,'Round',150,150,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',150,150,150,NULL,NULL,NULL,replace(replace('This coin was engraved by the Utrecht mint by several engravers in the following periods:
\r\n
  • 1999: bow bandaged and cocked; (holder)
    \r\n
  • 2000: banded and cocked bow and star; (interim)
    \r\n
  • 2001 - 2002: cluster; (incumbent)
    \r\n
  • 2003 - 2013: sails; Maarten Brouwer (incumbent)
    \r\n

\r\nBU 1999
\r\nCharité - "Clini-clowns" 75,000 copies
\r\nBU 2000
\r\nCharité - "Nature''s masterpieces" 75000 copies
\r\nUNC 2000
\r\nRabo-bank 13850 copies
\r\nBU 2001
\r\nCharity - "Fund for the disabled" 65000 copies
\r\nInformation set "Denmark" 15000 copies
\r\nBU 2002
\r\nCharity - "Guide dogs for the blind" 105000 copies
\r\nBeatrix box set 59500 copies
\r\nBirth 25000 copies
\r\nVOC 1 - The foundation 10000 copies
\r\nVOC 2 - The ships 10000 copies
\r\nVOC 3 - Itineraries 10,000 copies
\r\nVOC 4 - Heroes 10000 copies
\r\nWedding 10000 copies
\r\nMint Day 2002 copies
\r\nVVV IRIS gift vouchers 2500 copies
\r\nBVC Bloemendaal 3000 copies
\r\nThemaset - Beatrix 3500 copies
\r\nBU 2003
\r\nCharité - "Fondation contre l''épilepsie" 75,000 copies
\r\nVOC 5 - Goods 10,000 copies
\r\nVOC 6 - Money 4,500 copies
\r\nMarriage 15,000 copies
\r\nBirth 25,000 copies
\r\nThemaset - Princess birth 20,000 copies
\r\nMint Day 2,003 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nVVV IRIS gift vouchers 10,000 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nHungary" information set 11,000 copies
\r\nBU 2004
\r\nCharity - "Burn victims" 50,000 copies
\r\nBirth 20,000 copies
\r\nWedding 10,000 copies
\r\nThemaset - Mint Masters 3,500 copies
\r\nVVV IRIS gift vouchers 3,500 copies
\r\nThemaset - Souvenir de la Reine Juliana 10,000 copies
\r\nJour de la Monnaie 2,004
\r\nBasel World Money Fair 1,000 copies
\r\nBU 2005
\r\nCharity - "Princess Beatrix Fund" 55,000 copies
\r\nWedding 10,000 copies
\r\nBirth 14,500 copies
\r\nMiffy 50th anniversary box set 20,000 copies
\r\nMint Day 2,005 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nThemaset - Netherlands and Canada: 60 years of liberation 17,500 copies
\r\nBU 2006
\r\nCharité - "KIKA Foundation" 38,000 copies
\r\nWorld Money Fair Berlin 1,000 copies
\r\nJour de la Monnaie 2,006 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\n200 years of Dutch coinage 4,500 copies
\r\nSix Rembrandt series (silver collection) 4,000 copies','\r',char(13)),'\n',char(10)),1,'rgb(148,108,36)'); -INSERT INTO NumistaType VALUES(152,'https://en.numista.com/catalogue/pieces152.html','2 Euro - Beatrix (1st map)','coin','pays-bas',1999,2006,'Standard circulation coin',152,152,'Round',152,152,8.5,25.75,NULL,2.20000000000000017,'medal',152,152,152,NULL,NULL,NULL,replace(replace('This coin was engraved by the Utrecht mint by several engravers in the following periods:
\r\n
  • 1999: bow bandaged and cocked; (holder)
    \r\n
  • 2000: banded and cocked bow and star; (interim)
    \r\n
  • 2001 - 2002: cluster; (incumbent)
    \r\n
  • 2003 - 2013: sails; Maarten Brouwer (incumbent)
    \r\n

\r\nBU 1999
\r\nCharité - "Clini-clowns" 75,000 copies
\r\nBU 2000
\r\nCharité - "Nature''s masterpieces" 75000 copies
\r\nUNC 2000
\r\nRabo-bank 13850 copies
\r\nBU 2001
\r\nCharity - "Fund for the disabled" 65000 copies
\r\nInformation set "Denmark" 15000 copies
\r\nBU 2002
\r\nCharity - "Guide dogs for the blind" 105000 copies
\r\nBeatrix box set 59500 copies
\r\nBirth 25000 copies
\r\nVOC 1 - The foundation 10000 copies
\r\nVOC 2 - The ships 10000 copies
\r\nVOC 3 - Itineraries 10,000 copies
\r\nVOC 4 - Heroes 10000 copies
\r\nWedding 10000 copies
\r\nMint Day 2002 copies
\r\nVVV IRIS gift vouchers 2500 copies
\r\nBVC Bloemendaal 3000 copies
\r\nThemaset - Beatrix 3500 copies
\r\nBU 2003
\r\nCharité - "Fondation contre l''épilepsie" 75,000 copies
\r\nVOC 5 - Goods 10,000 copies
\r\nVOC 6 - Money 4,500 copies
\r\nMarriage 15,000 copies
\r\nBirth 25,000 copies
\r\nThemaset - Princess birth 20,000 copies
\r\nMint Day 2,003 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nVVV IRIS gift vouchers 10,000 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nHungary" information set 11,000 copies
\r\nBU 2004
\r\nCharity - "Burn victims" 50,000 copies
\r\nBirth 20,000 copies
\r\nWedding 10,000 copies
\r\nThemaset - Mint Masters 3,500 copies
\r\nVVV IRIS gift vouchers 3,500 copies
\r\nThemaset - Souvenir de la Reine Juliana 10,000 copies
\r\nJour de la Monnaie 2,004
\r\nBasel World Money Fair 1,000 copies
\r\nBU 2005
\r\nCharity - "Princess Beatrix Fund" 55,000 copies
\r\nWedding 10,000 copies
\r\nBirth 14,500 copies
\r\nMiffy 50th anniversary box set 20,000 copies
\r\nMint Day 2,005 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\nWorld Money Fair Basel 1,000 copies
\r\nThemaset - Netherlands and Canada: 60 years of liberation 17,500 copies
\r\nBU 2006
\r\nCharité - "KIKA Foundation" 38,000 copies
\r\nWorld Money Fair Berlin 1,000 copies
\r\nJour de la Monnaie 2,006 copies
\r\nThemaset - Maîtres de la Monnaie 3,500 copies
\r\n200 years of Dutch coinage 4,500 copies
\r\nSix Rembrandt series (silver collection) 4,000 copies','\r',char(13)),'\n',char(10)),1,'rgb(172,133,56)'); -INSERT INTO NumistaType VALUES(153,'https://en.numista.com/catalogue/pieces153.html','1 Euro Cent','coin','portugal',2002,2023,'Standard circulation coin',153,153,'Round',153,153,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',153,153,153,NULL,NULL,NULL,replace(replace('From 2016 onwards the design of the Obverse changed to display more thin and delicate lines and motifs, this can be seen in the following image below (comparison between 2015 design, and the new 2016-present one):
\r\n','\r',char(13)),'\n',char(10)),480,'rgb(228,132,80)'); -INSERT INTO NumistaType VALUES(154,'https://en.numista.com/catalogue/pieces154.html','2 Euro Cent','coin','portugal',2002,2023,'Standard circulation coin',154,154,'Round',154,154,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',154,154,154,NULL,NULL,NULL,'(fr) ',393,'rgb(196,123,84)'); -INSERT INTO NumistaType VALUES(155,'https://en.numista.com/catalogue/pieces155.html','5 Euro Cent','coin','portugal',2002,2023,'Standard circulation coin',155,155,'Round',155,155,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',155,155,155,NULL,NULL,NULL,replace(replace('From 2011 onwards the design of the Obverse changed to display more thin and delicate lines and motifs, this can be seen in the following image below (comparison between 2010 design, and the new 2011-present one):
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),94,'rgb(180,117,79)'); -INSERT INTO NumistaType VALUES(156,'https://en.numista.com/catalogue/pieces156.html','10 Euro Cent (1st map)','coin','portugal',2002,2007,'Standard circulation coin',156,156,'Round',156,156,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',156,156,156,NULL,NULL,NULL,NULL,3,'rgb(156,132,60)'); -INSERT INTO NumistaType VALUES(159,'https://en.numista.com/catalogue/pieces159.html','1 Euro (1st map)','coin','portugal',2002,2007,'Standard circulation coin',159,159,'Round',159,159,7.5,23.25,NULL,2.33000000000000007,'medal',159,159,159,NULL,NULL,NULL,replace(replace('
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(156,128,68)'); -INSERT INTO NumistaType VALUES(171,'https://en.numista.com/catalogue/pieces171.html','5 Rappen (Libertas; aluminium-bronze)','coin','suisse',1981,2023,'Standard circulation coin',171,171,'Round',171,171,1.80000000000000004,17.1499999999999985,NULL,1.25,'medal',171,171,171,NULL,'Libertas series',NULL,replace(replace('Different groups of dies are known.
\r\n
\r\nObverse
\r\n
\r\nDie 1 from model 1879 - large central dots in decorations, thin script to LIBERTAS.
\r\nDie 2 - small central dots in decorations, thick script to LIBERTAS.
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nReverse
\r\nDie A from model 1879 - see description in the article https://en.numista.com/catalogue/pieces168.html.
\r\nDie B - numeral "5" thick,  wide ribbon.
\r\nDie C - numeral "5" thin, the right low tendril touches 2 berries, narrow ribbon.
\r\nDie D - numeral "5" thin, the right low tendril touches leaf and berry, narrow ribbon.
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nCombinations by groups
\r\n2+B: 1981.
\r\n2+C: 1981-1985.
\r\n2+D: 1986-2019.','\r',char(13)),'\n',char(10)),3,'rgb(196,156,84)'); -INSERT INTO NumistaType VALUES(173,'https://en.numista.com/catalogue/pieces173.html','10 Rappen (Libertas; copper-nickel)','coin','suisse',1879,2023,'Standard circulation coin',173,173,'Round',173,173,3.0,19.1499999999999985,NULL,1.44999999999999995,'medal',173,173,173,NULL,'Libertas series',NULL,replace(replace('Different types are known.
\r\n
\r\nObverse
\r\nDie 1 from model 1879 - left pearl in diadem smaller than others, thin script to LIBERTAS, "R" in LIBERTAS with long right leg.
\r\nDie 2 - left pearl in diadem same size as others, thick script to LIBERTAS, "R" in LIBERTAS with short right leg.
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nReverse
\r\nDie A from model 1879 -  numeral "1" thicker, midribs in oak leaves made by fine well defined lines.
\r\nDie B - numeral "1" thinner, midribs made by shallow lines.
\r\nDie C - reengraved, numeral "1" thinner, acorns with grids, midribs made by wide well defined lines.
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nCombinations
\r\n1+A: 1879-1964 (in some years no 10 rappen coins are known).
\r\n1+B: 1965-1970, 1972-1981.
\r\n2+B: 1982.
\r\n2+C: 1982-2017.','\r',char(13)),'\n',char(10)),1,'rgb(151.78571428571428,135.59523809523807,103.21428571428572)'); -INSERT INTO NumistaType VALUES(178,'https://en.numista.com/catalogue/pieces178.html','20 Rappen (Libertas; copper-nickel)','coin','suisse',1939,2023,'Standard circulation coin',178,178,'Round',178,178,4.0,21.0500000000000007,NULL,1.64999999999999991,'medal',178,178,178,NULL,'Libertas series',NULL,replace('Different types are known.
\n
\nObverse
\nDie 1 from model 1879 - large central dots in decorations, thick nostril with a curved back line, half of left pearl in diadem hidden behind hair.
\nDie 2 - small central dots in decorations, thin nostril, left pearl in diadem far from hair.
\n
\nReverse
\nDie A from model 1879 - all details thick, top of the tail of 2 wide.
\nDie B - reengraved, all details thinner and further from each other, midribs of each leaf well defined, top of the tail of 2 sharp.
\nPicture: © Images courtesy of Alexandr Prokofyev
\n
\n
\nCombinations
\n1+A: 1879-1981.
\n2+A: 1982.
\nPicture: © Images courtesy of Alexandr Prokofyev
\n
\n
\n2+B: 1982-2021.','\n',char(10)),4,'rgb(206,181,134)'); -INSERT INTO NumistaType VALUES(185,'https://en.numista.com/catalogue/pieces185.html','1 Franc (Helvetia standing; copper-nickel)','coin','suisse',1968,2023,'Standard circulation coin',185,185,'Round',185,185,4.40000000000000035,23.1999999999999992,NULL,1.55000000000000004,'variable',185,185,185,NULL,'Helvetia standing series',NULL,replace(replace('In 1967, the price of silver soared steeply, reaching 260 francs per kilogram in August and 350 francs per kilogram in March 1968.  At this time, the melt value of the 1 franc pieces was ≈1.46 francs. Switzerland started to experience a severe shortage of cash, especially in the north, where people were exporting coins to Germany to be melted. In spite of strict measures against hoarding and melting coins, it is estimated that around 100 tonnes of silver in 1/2, 1 and 2 franc coins were melted. The crisis alleviated in 1968, when the Swiss mint started to mint coins in a copper-nickel alloy at full capacity, around 1.5 million coins per day. The coins were released on 10 May 1968 and the old silver coins were withdrawn on 1 April 1971.
\r\n
\r\nNevertheless, the mint in Bern did not have enough capacity to timely substitute around half a billion silver coins in circulation with new copper-nickel pieces. Therefore, the Royal Mint in London was contracted to supplement production in 1968-1970. The 1 franc coins were the most needed and therefore, the first to be produced from 20 June to 10 July 1968. Around 500 000 early coins produced in London were rejected by the Swiss, who were dissatisfied with the dull grey colour and the quality of the milled edge. Four Swiss experts were sent to London to ensure quality control.
\r\n
\r\nCoins from 1968 without mintmark were minted in London, and they can be easily distinguished by the coins minted in Bern, which bear the B mintmark. At the time, opportunistic collectors tried to sell the coins with no mintmark as rare mint errors, which was not the case, given that 34 910 000 one franc pieces have been minted in London. In order to address these deceiving practices, the mint in London also adopted the B mintmark in 1969. As a result, it is almost impossible to distinguish between the coins minted in Bern and those minted in London in 1969. 19 910 000 pieces dated 1969 were minted in London, and 17 688 000 in Bern. The coins minted in London have a grey appearance, while those from Bern are more reflective.
\r\n
\r\nSource: Ruedi Kunzmann; 2002. "Die Silbermünzenkrise der Schweiz von 1968 und die Tätigkeit der Royal Mint, London". Schweizer Münzblätter, volume 50-52, page 68-72.
\r\n
\r\nKM# 24 = Schön# 28
\r\nKM# 24a.1 = Schön# 28a.1
\r\n
\r\n
\r\nKM# 24a.2 = Schön# 28a.2
\r\nKM# 24a.3 = Schön# 58
\r\n
\r\nTwo main groups are known in issue with 23 stars on obverse.
\r\nObverse
\r\n
\r\nDie 1 - 23 small stars, HELVETIA with small serifs, A to HELVETIA narrow.
\r\nDie 2 - 23 large stars, HELVETIA with big serifs, A to HELVETIA wide.
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nReverse
\r\nDie A from model of 1850 - at the top of the wreath an oak leaf without cutout. In use from 1850 till 1982.
\r\nDie B - reengraved, at the top of the smaller wreath an oak leaf with cutout,  midribs made by wide well defined lines.
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nCombinations
\r\n1+B: 1983-1999.
\r\n2+B: 2000-2018.','\r',char(13)),'\n',char(10)),1,'rgb(151.78571428571428,135.59523809523807,103.21428571428572)'); -INSERT INTO NumistaType VALUES(189,'https://en.numista.com/catalogue/pieces189.html','2 Francs (Helvetia standing; copper-nickel)','coin','suisse',1968,2023,'Standard circulation coin',189,189,'Round',189,189,8.80000000000000071,27.3999999999999985,NULL,2.14999999999999991,NULL,189,189,189,NULL,'Helvetia standing series',NULL,replace(replace('Switch from silver to copper-nickel
\r\nThis copper-nickel 2 franc coin replaced the silver pieces minted between 1874-1967. In 1967, the price of silver soared steeply, reaching 260 francs per kilogram in August and 350 francs per kilogram in March 1968.  At this time, the melt value of the silver 2 franc pieces was circa 2.92 francs, exceeding their face value. Switzerland started to experience a severe shortage of cash, especially in the north, where coins were exported to Germany to be melted. In spite of strict measures against hoarding and melting coins, around 100 tonnes of silver in 1⁄2, 1, and 2 franc coins were melted. The crisis alleviated in 1968, when coins in copper-nickel started to be minted in double shifts in Bern, around 1.5 million per day. The coins were released on 10 May 1968 and the old silver coins were withdrawn on 1 April 1971.
\r\n
\r\nMints
\r\nThe mint in Bern did not have enough capacity to timely substitute around half a billion silver coins in circulation in 1968 with new copper-nickel pieces. Therefore, the Royal Mint in London was contracted to supplement production in 1968-1970. The 2 franc coins dated 1968 were produced between 11-17 July. Around 500 000 early coins produced in London were rejected by the Swiss, who were dissatisfied with the dull grey colour and the quality of the milled edge. Four Swiss experts were sent to London to ensure quality control.
\r\n
\r\nMintmarks
\r\nCoins dated 1968 without mintmark were minted in London, and they can be easily distinguished from the coins minted in Bern, which bear the B mintmark. At the time, opportunistic collectors tried to sell the coins with no mintmark as rare mint errors, which was not the case, given that 10 000 000 two franc pieces had already been minted in London. In order to address these deceiving practices, the mint in Bern dropped the B mintmark after 1970 and until 1985.
\r\n
\r\nAlignment
\r\nCoins dated 1968-1981 have coin alignment.
\r\nCoins dated after 1982 have medal alignment.
\r\n
\r\nHelvetia
\r\nHelvetia (after the neo-Latin name of Switzerland) is an allegorical female figure symbolizing the Swiss Confederation. Helvetia is a derivation of the ethnonym Helvetii, the name of the Gaulish tribe inhabiting the Swiss Plateau before the Roman conquest. The first documented use of the allegory dates from 1642, in Matthäus Merian's "Topographia", after which it gradually replaced the earlier convention of representing Switzerland as a bull.
\r\n
\r\nSources
\r\nGeorg Kreis; 1991. "Helvetia - through the ages. The story of a national figurehead". Verlag Neue Zürcher Zeitung, Zürich. ISBN 3858233161.
\r\nRuedi Kunzmann; 2002. "Die Silbermünzenkrise der Schweiz von 1968 und die Tätigkeit der Royal Mint, London". Schweizer Münzblätter, volume 50-52, page 68-72.
\r\n
\r\nThere are three groups of type with 23 stars on Obv.
\r\nObverse
\r\nDie 1 - 23 small stars, fine script to A.BOVY INCT., top of spear points between beads.
\r\nDie 2 - 23 large stars, small bold script to A.BOVY INCT., top of spear points between beads.
\r\nDie 3 - 23 large stars, reengraved, beads far from rim, large bold script to A.BOVY INCT., top of spear points to bead.
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nReverse
\r\nDie A from model of 1860 - large wreath, bold script to "2 Fr." In use from 1860 till 1975.
\r\nDie B - large wreath, fine script to "2 Fr.", midribs made by shallow lines. In use in 1976-1980.
\r\nDie C - large wreath, fine script to "2 Fr.", midribs made by fine lines. In use in 1981, 1982.
\r\nDie D - reengraved, small wreath, midribs made by wide well defined lines.
\r\nDie E - reengraved, beads far from rim.
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nCombinations
\r\n1+D: 1983-1998, 2000 Mint Set.
\r\n2+D: 1998-2018.
\r\n3+E: 2020-2022.','\r',char(13)),'\n',char(10)),1,'rgb(140,109,60)'); -INSERT INTO NumistaType VALUES(242,'https://en.numista.com/catalogue/pieces242.html','1 Euro (2nd map)','coin','slovenie',2007,2022,'Standard circulation coin',242,242,'Round',242,242,7.5,23.25,NULL,2.33000000000000007,'medal',242,242,242,NULL,NULL,NULL,replace(replace('Mints:
\r\n2007, 2009-2011: Finland
\r\n2008, 2014-2018: Netherlands
\r\n2012-2013: Slovakia','\r',char(13)),'\n',char(10)),1,'rgb(197,147,74)'); -INSERT INTO NumistaType VALUES(243,'https://en.numista.com/catalogue/pieces243.html','2 Euro (2nd map)','coin','slovenie',2007,2022,'Standard circulation coin',243,243,'Round',243,243,8.5,25.75,NULL,2.20000000000000017,'medal',243,243,243,NULL,NULL,NULL,replace(replace('Stamping workshop: (Note that Slovenia has no stamping workshop and relies on subcontracting through calls for tender.
\r\nFinland: 2007, 2009, 2010, 2011
\r\nNetherlands: 2008, 2014
\r\nSlovakia: 2012, 2013, 2015, 2017
\r\nZECCA Rome workshop: 2016, 2018, 2019','\r',char(13)),'\n',char(10)),1,'rgb(199,145,65)'); -INSERT INTO NumistaType VALUES(377,'https://en.numista.com/catalogue/pieces377.html','10 Cents - Elizabeth II (4th portrait with RCM logo)','coin','canada',2006,2022,'Standard circulation coin',377,377,'Round',377,377,1.75,18.0300000000000011,NULL,1.21999999999999997,'medal',377,377,377,NULL,NULL,NULL,replace('The Royal Mint's 2017 annual report lists a 199,925,000 mintage for regular circulating 2017 coins, even though the design that year was a Canada 150 design (which has a different mintage listed). However, starting in 2017, the annual report omitted the 'Coins struck dated 2017' table, meaning the 199,925,000 coins were likely struck in 2017 are dated 2016 or 2018.
\n
\n2006 the mint mark "P"  was last used and the Royal Canadian Mint Logo was also started.','\n',char(10)),1,'rgb(192.55102040816325,145.7142857142857,62.448979591836746)'); -INSERT INTO NumistaType VALUES(403,'https://en.numista.com/catalogue/pieces403.html','5 Cents - Elizabeth II (1st portrait; round)','coin','canada',1963,1964,'Standard circulation coin',403,403,'Round',403,403,4.54000000000000003,21.2100000000000008,NULL,1.69999999999999995,'medal',403,403,403,NULL,NULL,NULL,'',1,'rgb(149.6739130434783,60.97826086956515,194.02173913043484)'); -INSERT INTO NumistaType VALUES(465,'https://en.numista.com/catalogue/pieces465.html','1 Dollar - Elizabeth II (2nd portrait)','coin','canada',1987,1989,'Standard circulation coin',465,465,'Hendecagonal (11-sided)',465,465,7.0,26.5,NULL,1.89999999999999991,'medal',465,465,465,NULL,NULL,NULL,replace('Note: for 1987 the coin's thickness is 1.95 mm and diameter 26.72 mm, but for 1988 and 1989 coins it is 1.75 mm and 26.50.
\n
\nThe common loon or the Canadian Loon (Binomial Name: Gavia immer)','\n',char(10)),1,'rgb(196,153,121)'); -INSERT INTO NumistaType VALUES(524,'https://en.numista.com/catalogue/pieces524.html','5 Groszy (non-magnetic)','coin','pologne',1990,2014,'Standard circulation coin',524,524,'Round',524,524,2.58999999999999985,19.5,NULL,1.30000000000000004,'medal',524,524,524,NULL,NULL,NULL,NULL,1,'rgb(167,140,70)'); -INSERT INTO NumistaType VALUES(573,'https://en.numista.com/catalogue/pieces573.html','20 Pence - Elizabeth II (4th portrait; Tudor Rose)','coin','royaume-uni',1998,2008,'Standard circulation coin',573,573,'Equilateral curve heptagon (7-sided)',573,573,5.0,21.3999999999999985,NULL,1.69999999999999995,'medal',573,573,573,NULL,NULL,NULL,replace(replace('Reports have been received regarding 2000, 2001 and 2002 dated issues having a slightly different shaped 2 than the rest of this series. For example, the top of the 2 in 2000 ends in a curved drop while the top of the 2 in 2005 ends in a point.
\r\n
\r\n
\r\n
\r\nIn 2008 a mule was introduced using the obverse from this coin with the Matthew Dent Royal Shield reverse.
\r\n(former Spink ref. 4630)','\r',char(13)),'\n',char(10)),5,'rgb(139.344262295082,126.80327868852459,115.65573770491802)'); -INSERT INTO NumistaType VALUES(587,'https://en.numista.com/catalogue/pieces587.html','2 Pesos','coin','mexique',1996,2023,'Standard circulation coin',587,587,'Round',587,587,5.19000000000000039,23.0,NULL,1.39999999999999991,'coin',587,587,NULL,NULL,NULL,NULL,replace(replace('Varieties exist:
\r\n - Reverse: inner ring features placement: closer vs. farther from the side of the ring.
\r\n - Obverse: lettering placement on the  outer ring: closer vs. farther from the right-side ornaments.
\r\n
\r\n
\r\nBlack Squares denotes the motifs on the $2 coin (Reverse, Outer circle)
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(200,178,129)'); -INSERT INTO NumistaType VALUES(589,'https://en.numista.com/catalogue/pieces589.html','5 Pesos','coin','mexique',1997,2023,'Standard circulation coin',589,589,'Round',589,589,7.07000000000000028,25.5,NULL,2.0299999999999998,'coin',589,589,589,NULL,NULL,NULL,replace(replace('2008 - 2010 mintages are considerably lower because those were the years the commemorative coins were released (Centennial of the Revolution and Bicentennial of Independence series).  The mintage for these standard 5 Pesos coins was reduced to nearly a tenth of the normal years, making them more difficult to find and usually more expensive than the commemorative coins of the same years.
\r\n
\r\nVarieties exist:
\r\nBeginning in 2009 the obverse has smaller design features, with the thickness of the font on obverse being finer than the pre-2009 font,  with and without decoration of Serpent's tales above date and '5' of denomination on Reverse:
\r\n
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(206,176,123)'); -INSERT INTO NumistaType VALUES(591,'https://en.numista.com/catalogue/pieces591.html','10 Pesos','coin','mexique',1997,2023,'Standard circulation coin',591,591,'Round',591,591,10.33,28.0,NULL,2.29999999999999982,'coin',591,591,591,NULL,NULL,NULL,replace(replace('
\r\n
\r\nIn 2007, an unknown number of coins were minted with an error called "grafila invertida" or "inverted beading," which means the L-shaped beads or denticles around the border of the coin are facing right instead of left.
\r\n
\r\n
\r\n
\r\nOther varieties exist:
\r\n - Reverse: Denticle size and alignment with the lettering
\r\n - Obverse: Larger vs. smaller design features
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(172,132,79)'); -INSERT INTO NumistaType VALUES(596,'https://en.numista.com/catalogue/pieces596.html','20 Dinars','coin','algerie',1992,2023,'Standard circulation coin',596,596,'Round',596,596,8.61999999999999921,27.5,NULL,2.06999999999999984,'coin',596,596,596,NULL,NULL,NULL,replace(replace('The Barbary Lion or Atlas Lion (Panthera leo) found in Algeria is considered now a sub-species.
\r\nIts tri-Nominal name or Sub-species name is Panthera leo barbaricus
\r\n
\r\n1413 (1992) Proof Set:
\r\n
\r\n
\r\n
\r\n© gdch6ng
\r\n
\r\n1417 (1997) Mint Set
\r\n
\r\n
\r\n1421 (2000) Mint Set:
\r\n
\r\n
\r\n© gregg','\r',char(13)),'\n',char(10)),1,'rgb(100,100,100)'); -INSERT INTO NumistaType VALUES(614,'https://en.numista.com/catalogue/pieces614.html','¼ Dollar "Washington Quarter" (New York)','coin','etats-unis',2001,2001,'Circulating commemorative coin',614,614,'Round',614,614,5.66999999999999992,24.2600000000000015,NULL,1.75,'coin',614,614,614,NULL,'United States Mint''s 50 State Quarters® Program','New York',NULL,1,'rgb(127.5,127.5,127.5)'); -INSERT INTO NumistaType VALUES(648,'https://en.numista.com/catalogue/pieces648.html','¼ Dollar "Washington Quarter" (Utah)','coin','etats-unis',2007,2007,'Circulating commemorative coin',648,648,'Round',648,648,5.66999999999999992,24.2600000000000015,NULL,1.75,'coin',648,648,648,NULL,'United States Mint''s 50 State Quarters® Program','Utah',NULL,1,'rgb(127.5,127.5,127.5)'); -INSERT INTO NumistaType VALUES(649,'https://en.numista.com/catalogue/pieces649.html','¼ Dollar "Washington Quarter" (Oklahoma)','coin','etats-unis',2008,2008,'Circulating commemorative coin',649,649,'Round',649,649,5.66999999999999992,24.2600000000000015,NULL,1.75,'coin',649,649,649,NULL,'United States Mint''s 50 State Quarters® Program','Oklahoma',NULL,1,'rgb(127.5,127.5,127.5)'); -INSERT INTO NumistaType VALUES(664,'https://en.numista.com/catalogue/pieces664.html','2 New Pence - Elizabeth II (2nd portrait)','coin','royaume-uni',1971,1981,'Standard circulation coin',664,664,'Round',664,664,7.1200000000000001,25.8999999999999985,NULL,1.85000000000000008,'medal',664,664,664,NULL,NULL,NULL,replace(replace('Although these coins were not released until Decimalisation Day on 15th February 1971, Prince Charles, the Prince of Wales struck 6 of the new two pence pieces at the opening of the new Royal Mint in Llantrisant, Glamorgan on 17th December 1968.
\r\n
\r\nChristopher Ironside designed all six new denominations for decimalisation for which he was awarded the OBE in 1971.','\r',char(13)),'\n',char(10)),2,'rgb(149,102,61)'); -INSERT INTO NumistaType VALUES(665,'https://en.numista.com/catalogue/pieces665.html','1 New Penny - Elizabeth II (2nd portrait)','coin','royaume-uni',1971,1981,'Standard circulation coin',665,665,'Round',665,665,3.56000000000000005,20.3000000000000007,NULL,1.52000000000000001,'medal',665,665,665,NULL,NULL,NULL,replace(replace('Although these coins were not issued until Decimalisation Day on 15th February 1971, Queen Elizabeth II struck 6 of the new pennies at the opening of the new Royal Mint in Llantrisant, Glamorgan on 17th December 1968. Following that, Prince Philip, the Duke of Edinburgh struck 6 of the new halfpennies and Prince Charles, the Prince of Wales struck 6 of the new two pence pieces.
\r\n
\r\nChristopher Ironside designed all six new denominations for decimalisation for which he was awarded the OBE in 1971.','\r',char(13)),'\n',char(10)),3,'rgb(108,59,51)'); -INSERT INTO NumistaType VALUES(666,'https://en.numista.com/catalogue/pieces666.html','50 Centavos (Rio Branco; stainless steel)','coin','bresil',2002,2023,'Standard circulation coin',666,666,'Round',666,666,7.8099999999999996,23.0,NULL,2.85000000000000008,'coin',666,666,666,NULL,NULL,NULL,replace(replace('
\r\n
\r\n   
\r\nOfficial Sets - 2019 - Mintage 3000 Sets
\r\n
\r\n
\r\nOfficial Sets - 2021 - Mintage 5000 Sets
\r\n
\r\n5 or 6 lines also occurs in 2008 issues.
\r\n
\r\n
\r\n
\r\nG on edge "PROGRESSO" varieties exists:
\r\n1 - "Arrow" G: G with spud & bar, standard font for all years, including KM#651;
\r\n2 - Large "Arrow" G: G with larger spud & bar, in 2018, 2019 coins;
\r\n3 - Regular G: G with bar, in 2010, 2011, 2012 & 2013 coins;
\r\n4 - Italic regular G: In 2014 & 2015 coins;
\r\n5 - Regular G with small  bar: Regular G with smaller bar, in 2018 & 2019 coins.
\r\n
\r\n
\r\nA new die was introduced in 2018.
\r\nThe major diference can be observed in "Rio Branco" letter, which use bolder font than previous die.','\r',char(13)),'\n',char(10)),1,'rgb(200.35714285714297,145.7142857142854,54.64285714285703)'); -INSERT INTO NumistaType VALUES(681,'https://en.numista.com/catalogue/pieces681.html','50 Francs','coin','france',1974,1980,'Standard circulation coin',681,681,'Round',681,681,30.0,41.0,NULL,2.70000000000000017,'coin',681,681,681,NULL,NULL,NULL,replace('
\n
\n
\nEXPLANATION
\n1) Equality is above the head of Hercules
\n2) The branch is at the same level as the sheet.
\n3) The pedestal is longer.
\nSource :
\nhttp://remiseenligne.over-blog.com','\n',char(10)),1,'rgb(188,140,60)'); -INSERT INTO NumistaType VALUES(734,'https://en.numista.com/catalogue/pieces734.html','10 Cents - Juliana','coin','pays-bas',1950,1980,'Standard circulation coin',734,734,'Round',734,734,1.5,15.0,NULL,1.20999999999999996,'coin',734,734,734,NULL,NULL,NULL,replace(replace('
\r\nThe same pattern is found in other years.
\r\n
\r\nCoins from 1948 to 1967 are silver-colored nickel
\r\nCoins from 1965 to 1980 are bright nickel
\r\n
\r\n Of the coins dated 1980, 50,000,000 were minted by the Royal British Mint in 1981.','\r',char(13)),'\n',char(10)),1,'rgb(120.28301886792453,134.71698113207546,125.09433962264151)'); -INSERT INTO NumistaType VALUES(766,'https://en.numista.com/catalogue/pieces766.html','3 Kopecks (15 orbits)','coin','ancienne_urss',1961,1991,'Standard circulation coin',766,766,'Round',766,766,3.0,22.0,NULL,1.21999999999999997,'medal',766,766,766,NULL,NULL,NULL,replace('Varieties exist.
\n
\n
\nwww.rarecoins.ru
\n
\nIn SCWC Krause - Aluminium-bronze.
\nThe Russian (and Soviet) catalogues list the as Copper-zinc alloy.
\nAccording to official technical specifications, the alloy of this coin is brass ЛМц 58-2 (58% Cu, 40% Zn, 2% Mn).','\n',char(10)),1,'rgb(173,126,76)'); -INSERT INTO NumistaType VALUES(768,'https://en.numista.com/catalogue/pieces768.html','20 Réis - Luíz I','coin','portugal',1882,1886,'Standard circulation coin',768,768,'Round',768,768,11.7400000000000002,30.0,NULL,2.10999999999999987,'coin',768,768,768,NULL,NULL,NULL,NULL,1,'rgb(167,108,66)'); -INSERT INTO NumistaType VALUES(770,'https://en.numista.com/catalogue/pieces770.html','50 Escudos','coin','portugal',1986,2001,'Standard circulation coin',770,770,'Round',770,770,9.41000000000000014,31.0,NULL,1.64999999999999991,'coin',770,770,770,NULL,'System 1927-1968',NULL,replace(replace('Different Obv. and Rev. dies are known.
\r\n
\r\nObverse
\r\nDie 1 - E in  E.VAZ narrow and far from full stop, the first S in ESCUDOS with short tail.
\r\nDie 2 - E in  E.VAZ wide and close to full stop, the first  S in ESCUDOS with short tail.
\r\nDie 3 - E in  E.VAZ wide and close to full stop, the first S in ESCUDOS with long tail.
\r\n
\r\n
\r\nReverse
\r\nDie A - in the shield in center all 4 escutcheons vertically orientated.
\r\nDie B - in the shield in center side escutcheons orientated to center, details in bold lines.
\r\nDie C - in the shield in center side escutcheons orientated to center, enhanced details with outline.
\r\n
\r\n
\r\nCombinations
\r\n1+A: 1986.
\r\n1+B: 1987.
\r\n2+C: 1988-1992.
\r\n3+C: 1992-2001.
\r\n
\r\nCorrespondence to Weltmünzkatalog / 20. Jahrhundert: 1901-2000
\r\nSchön#95.1: 1+A.
\r\nSchön#95.2: 1+B, 2+C, 3+C.','\r',char(13)),'\n',char(10)),7,'rgb(135.3061224489796,124.89795918367352,119.69387755102039)'); -INSERT INTO NumistaType VALUES(771,'https://en.numista.com/catalogue/pieces771.html','10 Escudos','coin','portugal',1986,2001,'Standard circulation coin',771,771,'Round',771,771,7.5,23.5,NULL,2.29999999999999982,'coin',771,771,771,NULL,'System 1981-2001',NULL,replace(replace('Different Obv. and Rev. dies are known.
\r\n
\r\nObverse
\r\nDie 1 - bottom towers in corners lower, decorations in legend outlined.
\r\nDie 2 - bottom towers in corners higher, decorations in legend without outline.
\r\n
\r\nReverse
\r\nDie A - narrow script.  Eight outer circle decorations connected with leaves.
\r\nDie B - bold script. No connection between eight outer circle decorations and leaves.
\r\n
\r\n
\r\nCombinations
\r\n1+A: 1986- 1991.
\r\n2+B: 1992-2001.','\r',char(13)),'\n',char(10)),49,'rgb(242,194,40)'); -INSERT INTO NumistaType VALUES(772,'https://en.numista.com/catalogue/pieces772.html','5 Escudos','coin','portugal',1963,1986,'Standard circulation coin',772,772,'Round',772,772,7.0,24.5,NULL,1.30000000000000004,'coin',772,772,772,NULL,'System 1969-1980',NULL,NULL,46,'rgb(153.72340425531914,141.06382978723403,101.27659574468086)'); -INSERT INTO NumistaType VALUES(773,'https://en.numista.com/catalogue/pieces773.html','5 Escudos','coin','portugal',1986,2001,'Standard circulation coin',773,773,'Round',773,773,5.25,21.1000000000000014,NULL,2.0,'coin',773,773,773,NULL,'System 1981-2001',NULL,replace(replace('Different Obv. and Rev. dies are known.
\r\n
\r\nObverse
\r\nDie 1 - bottom towers in corners lower, decorations in legend outlined.
\r\nDie 2 - bottom towers in corners higher, decorations in legend without outline.
\r\n
\r\nReverse
\r\nDie A - narrow script.
\r\nDie B - bold script.
\r\n
\r\n
\r\nCombinations
\r\n1+A: 1986- 1991.
\r\n2+B: 1992-2001.','\r',char(13)),'\n',char(10)),82,'rgb(172,144,52)'); -INSERT INTO NumistaType VALUES(774,'https://en.numista.com/catalogue/pieces774.html','2.50 Escudos','coin','portugal',1963,1985,'Standard circulation coin',774,774,'Round',774,774,3.5,20.0,NULL,1.19999999999999995,'coin',774,774,774,NULL,'System 1969-1980',NULL,'',94,'rgb(139.26923076923077,121.61538461538458,115.73076923076921)'); -INSERT INTO NumistaType VALUES(775,'https://en.numista.com/catalogue/pieces775.html','1 Escudo','coin','portugal',1969,1979,'Standard circulation coin',775,775,'Round',775,775,8.0,26.0,NULL,2.0299999999999998,'coin',775,775,775,NULL,'System 1969-1980',NULL,'In 1973, the British Royal Mint produced 7,625,000 blank planchets for the manufacture of these coins.',18,'rgb(176,106,84)'); -INSERT INTO NumistaType VALUES(776,'https://en.numista.com/catalogue/pieces776.html','50 Centavos','coin','portugal',1969,1979,'Standard circulation coin',776,776,'Round',776,776,4.5,22.5,NULL,1.5,'coin',776,776,776,NULL,'System 1969-1980',NULL,'In 1973, the British Royal Mint produced 16,444,444 blank planchets for the manufacture of these coins.',35,'rgb(180,110,80)'); -INSERT INTO NumistaType VALUES(779,'https://en.numista.com/catalogue/pieces779.html','25 Pesetas (Canary Islands)','coin','espagne',1994,1994,'Circulating commemorative coin',779,779,'Round with a round hole',779,779,4.20000000000000017,19.5,NULL,1.60000000000000008,'coin',779,779,779,NULL,'Autonomous communities of Spain',NULL,NULL,1,'rgb(236,204,116)'); -INSERT INTO NumistaType VALUES(781,'https://en.numista.com/catalogue/pieces781.html','5 Pesetas - Francisco Franco (Copper-nickel)','coin','espagne',1958,1975,'Standard circulation coin',781,781,'Round',781,781,5.75,23.0,NULL,1.5,'coin',781,781,781,NULL,NULL,NULL,replace('
\n
\nYear of Minting (1959 - click image below)
\n
\n','\n',char(10)),1,'rgb(196,172,124)'); -INSERT INTO NumistaType VALUES(782,'https://en.numista.com/catalogue/pieces782.html','5 Pesetas - Juan Carlos I','coin','espagne',1976,1980,'Standard circulation coin',782,782,'Round',782,782,5.75,23.0,NULL,1.5,'coin',782,782,782,NULL,NULL,NULL,replace('Tilde style in España above the N has three sizes and also a variety with the mark missing altogether possibly from a blocked die?
\n','\n',char(10)),2,'rgb(173.20754716981133,134.71698113207546,81.79245283018867)'); -INSERT INTO NumistaType VALUES(783,'https://en.numista.com/catalogue/pieces783.html','5 Pesetas (Islas Baleares)','coin','espagne',1997,1997,'Circulating commemorative coin',783,783,'Round',783,783,3.0,17.5,NULL,1.5,'coin',783,783,783,NULL,'Autonomous communities of Spain',NULL,replace('The Balearic Islands, an archipelago in the western Mediterranean Sea which form an autonomous community and a province of Spain.
\nThere are coins with a large rim and coins with a small rim.','\n',char(10)),3,'rgb(177,155,85)'); -INSERT INTO NumistaType VALUES(784,'https://en.numista.com/catalogue/pieces784.html','5 Pesetas (Asturias)','coin','espagne',1995,1995,'Circulating commemorative coin',784,784,'Round',784,784,3.0,17.5,NULL,1.5,'coin',784,784,784,NULL,'Autonomous communities of Spain',NULL,replace('Hórreos are raised granaries found in the northwest Iberian peninsula made to keep rodents out
\n
\nDifference between normal and wide rim:
\n','\n',char(10)),1,'rgb(212,188,68)'); -INSERT INTO NumistaType VALUES(787,'https://en.numista.com/catalogue/pieces787.html','1 Peseta - Juan Carlos I','coin','espagne',1976,1980,'Standard circulation coin',787,787,'Round',787,787,3.5,21.0,NULL,1.60000000000000008,'coin',787,787,787,NULL,NULL,NULL,replace('The real date is written in the stars on each side of the word "UNA". An example shows 19 77 listed as 1975 77.
\n
\n
\nThe 1978 issue was struck by three mints: Madrid Mint,  Santiago de Chile Mint, and the British Royal Mint. They are distinguished by the style of script on obverse and position of numerals 78 on the reverse.
\n
\n
\n
\n1978:
\n- above: Madrid Mint,
\n- mid: Santiago de Chile Mint,
\n- below: British Royal Mint.
\n(1200dpi scans from the actual coins)
\n','\n',char(10)),2,'rgb(190,175,70)'); -INSERT INTO NumistaType VALUES(808,'https://en.numista.com/catalogue/pieces808.html','50 Forint','coin','hongrie',1992,2011,'Standard circulation coin',808,808,'Round',808,808,7.59999999999999964,27.3999999999999985,NULL,1.69999999999999995,'medal',808,808,808,NULL,NULL,NULL,NULL,2,'rgb(141.25899280575535,132.08633093525182,113.74100719424463)'); -INSERT INTO NumistaType VALUES(810,'https://en.numista.com/catalogue/pieces810.html','10 Forint','coin','hongrie',1992,2011,'Standard circulation coin',810,810,'Round',810,810,6.09999999999999964,24.8000000000000007,NULL,1.30000000000000004,'medal',810,810,810,NULL,NULL,NULL,NULL,1,'rgb(140.25,132.96428571428575,114.74999999999999)'); -INSERT INTO NumistaType VALUES(844,'https://en.numista.com/catalogue/pieces844.html','2 Deutsche Mark (Konrad Adenauer)','coin','allemagne',1969,1987,'Circulating commemorative coin',844,844,'Round',844,844,7.0,26.75,NULL,1.79000000000000003,'medal',844,844,844,NULL,NULL,'20 years of Constitution of the Federal Republic of Germany',NULL,1,'rgb(113.12030075187968,122.70676691729317,141.87969924812032)'); -INSERT INTO NumistaType VALUES(846,'https://en.numista.com/catalogue/pieces846.html','1 Deutsche Mark','coin','allemagne',1950,2001,'Standard circulation coin',846,846,'Round',846,846,5.5,23.5,NULL,1.75,'medal',846,846,846,NULL,NULL,NULL,replace(replace('Different obverse and reverse designs (visible in eagle's head, legend lettering):
\r\n
\r\n-Type A (1950-1970): Obverse 1: tongue near the lower beak, large eyeball, thicker letters; Reverse 1: thicker letters with a smaller base
\r\n-Type B (1971-1973): Obverse 1: tongue near the lower beak, large eyeball, thicker letters; Reverse 2: thinner letters with larger and more detailed base
\r\n-Type C (1971-2001): Obverse 2: tongue in the middle, smaller eyeball, thinner letters; Reverse 2: thinner letters with larger and more detailed base
\r\n-Type D (1974): Obverse 2: tongue in the middle, smaller eyeball, thinner letters; Reverse 1: thicker letters with a smaller base
\r\n
\r\nsee here for pictures (Type C and D switched):
\r\nhttps://monnaiesetvarietes.numista.com/FICHES/Allemagne%20RFA/ALLEMAGNE%201%20Mark%20110.pdf','\r',char(13)),'\n',char(10)),1,'rgb(154.43661971830986,129.29577464788733,100.56338028169014)'); -INSERT INTO NumistaType VALUES(847,'https://en.numista.com/catalogue/pieces847.html','50 Pfennig','coin','allemagne',1950,2001,'Standard circulation coin',847,847,'Round',847,847,3.5,20.0,NULL,1.58000000000000007,'medal',847,847,847,NULL,NULL,NULL,replace(replace('Documentation of the 1971 large and small D, not mentioned in the year list:
\r\n
\r\nOle
\r\n
\r\nDocumentation of the 1971 large and small J, mentioned in the year list:
\r\n
\r\nOle
\r\n
\r\nObverse varieties between 1970 and 1990 in thickness of letters:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(134.64000000000001,124.43999999999998,120.36)'); -INSERT INTO NumistaType VALUES(850,'https://en.numista.com/catalogue/pieces850.html','10 Pfennig','coin','allemagne',1950,2001,'Standard circulation coin',850,850,'Round',850,850,4.0,21.5,NULL,1.69999999999999995,'medal',850,850,850,NULL,NULL,NULL,replace(replace('1971J has different varieties-Small "J" and Large "J"
\r\nhttps://www.ngccoin.com/price-guide/world/germany-federal-republic-10-pfennig-km-108-1950-2001-cuid-38780-duid-109659
\r\nhttp://www.coincommunity.com/forum/topic.asp?TOPIC_ID=166737
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(158,129,72)'); -INSERT INTO NumistaType VALUES(854,'https://en.numista.com/catalogue/pieces854.html','1 Pfennig','coin','allemagne',1950,2001,'Standard circulation coin',854,854,'Round',854,854,2.0,16.5,NULL,1.37999999999999989,'variable',854,854,854,NULL,NULL,NULL,replace(replace('1950DG
\r\n
\r\n1950J
\r\n
\r\n1966D
\r\n
\r\n1967D
\r\n
\r\n1968D
\r\n
\r\n1969D
\r\n
\r\n1970D
\r\n
\r\n1970J
\r\n
\r\n1971J
\r\n
\r\n1973F
\r\n
\r\n1973J
\r\n
\r\n1976F
\r\n
\r\n1977F
\r\n
\r\n1977J
\r\n
\r\n1980F&G
\r\n
\r\n
\r\n
\r\nDifferent designs (obverse):
\r\nType 1: 1950 DFGJ
\r\nType 2: 1950 DG, 1966-1970 (slight change at leaves and stalks)
\r\nType 3: 1971-1980 (thinner lettering and slight change at leaf stalks)
\r\nType 4: 1980-1990 (thinner date)
\r\n1990 F to 1996: new design of leaf stalks every year
\r\n
\r\nMainly two different designs (reverse):
\r\nType 1: 1950-1973 (short thick rye grains)
\r\nType 2: 1971-1996 (long thin rye grains)','\r',char(13)),'\n',char(10)),1,'rgb(209,152,108)'); -INSERT INTO NumistaType VALUES(861,'https://en.numista.com/catalogue/pieces861.html','1 Penny - Elizabeth II (3rd portrait; non-magnetic)','coin','royaume-uni',1985,1992,'Standard circulation coin',861,861,'Round',861,861,3.56000000000000005,20.3000000000000007,NULL,1.52000000000000001,'medal',861,861,861,NULL,NULL,NULL,replace(replace('1992 saw the changeover from bronze to copper-plated steel for both the 1p & 2p to reduce the cost of production. Both bronze and copper-plated steel 1992 coins can be found, however those in Proof & Brilliant Uncirculated sets were struck in Bronze, while circulation strikes were copper-plated steel.
\r\n
\r\n1991 reverse die varieties:
\r\n
\r\nType A (1985-92) Junctions of portcullis bars are raised dots;
\r\nType B (1991-92) Junctions of portcullis bars are incuse circles.
\r\n
\r\nFor further detail on these die varieties, please visit Tony Clayton's website http://coins-of-the-uk.co.uk/dec1.html','\r',char(13)),'\n',char(10)),4,'rgb(200,152,92)'); -INSERT INTO NumistaType VALUES(862,'https://en.numista.com/catalogue/pieces862.html','1 Penny - Elizabeth II (4th portrait; magnetic)','coin','royaume-uni',1998,2008,'Standard circulation coin',862,862,'Round',862,862,3.56000000000000005,20.3000000000000007,NULL,1.64999999999999991,'medal',862,862,862,NULL,NULL,NULL,replace(replace('Non-magnetic (bronze) set issues (see link below):
\r\n
\r\nIn 1999, the Brilliant Uncirculated and Proof Annual sets featured pennies struck using bronze planchets, due to a world shortage of steel.
\r\n
\r\nReports have been received regarding differing number of beads to both sides:
\r\n
\r\n1998-1999 115 beads on obverse and 113 beads on reverse;
\r\n2000-2008 110 beads on obverse and 109 beads on reverse;
\r\n
\r\n
\r\n© Heligal
\r\n
\r\nReports have also been received regarding reverse varieties for the 2000 & 2004 issues:
\r\n
\r\n2000 1 points to left of dot;
\r\n2004 1 points to right of dot;
\r\n
\r\n
\r\n
\r\n(former Spink ref. 4710)','\r',char(13)),'\n',char(10)),5,'rgb(148,92,60)'); -INSERT INTO NumistaType VALUES(863,'https://en.numista.com/catalogue/pieces863.html','1 Pound - Elizabeth II (3rd portrait; Welsh Leek)','coin','royaume-uni',1985,1990,'Circulating commemorative coin',863,863,'Round',863,863,9.5,22.5,NULL,3.14999999999999991,'medal',863,863,863,NULL,'Royal Diadem series','Wales',replace(replace('In 1985 the Royal Mint released the second one pound coin in the 'Royal Diadem' series, the first with the Maklouf third portrait of HM The Queen. The coin was issued as part of the 1985 Annual Coin Sets in both Brilliant Uncirculated (178,375 sales) & Proof versions as well as individually in a BU pack (24,850 sales).
\r\n
\r\n
\r\nThis Leslie Durbin reverse design was repeated one more time on a second edition in 1990, again issued as part of the 1990 Annual Coin Sets in both Brilliant Uncirculated & Proof versions.
\r\n
\r\n
\r\nThe coin was also struck in silver proof and silver piedfort.','\r',char(13)),'\n',char(10)),1,'rgb(220.22727272727272,104.31818181818181,34.77272727272727)'); -INSERT INTO NumistaType VALUES(864,'https://en.numista.com/catalogue/pieces864.html','50 Pence - Elizabeth II (4th portrait; Britannia)','coin','royaume-uni',1998,2009,'Standard circulation coin',864,864,'Equilateral curve heptagon (7-sided)',864,864,8.0,27.3000000000000007,NULL,1.78000000000000002,'medal',864,864,864,NULL,NULL,NULL,replace(replace('The 1998 BU was also issued in a twin pack with the European Union 50p (15,370 sales)
\r\n
\r\n
\r\nThe 2006 & 2007 issues were only struck for circulation and in Proof, not in Brilliant Uncirculated (2006 BU sets featured the Victoria Cross 50ps and the 2007 sets featured the Scouting Movement 50 pence).
\r\n
\r\nThe 2009 Proof strike was issued in sets to commemorate the 40th anniversary of the 50 pence denomination; Issue Limit: 5,000
\r\n
\r\n©The Royal Mint, 2009
\r\n(former Spink ref. 4610)','\r',char(13)),'\n',char(10)),2,'rgb(161.82692307692307,145.48076923076923,93.17307692307693)'); -INSERT INTO NumistaType VALUES(865,'https://en.numista.com/catalogue/pieces865.html','20 Pence - Elizabeth II (2nd portrait)','coin','royaume-uni',1982,1984,'Standard circulation coin',865,865,'Equilateral curve heptagon (7-sided)',865,865,5.0,21.3999999999999985,NULL,1.69999999999999995,'medal',865,865,865,NULL,NULL,NULL,'(former Spink ref. 4230)',4,'rgb(199,183,137)'); -INSERT INTO NumistaType VALUES(867,'https://en.numista.com/catalogue/pieces867.html','2 Pence - Elizabeth II (3rd portrait; non-magnetic)','coin','royaume-uni',1985,1992,'Standard circulation coin',867,867,'Round',867,867,7.1200000000000001,25.8999999999999985,NULL,1.85000000000000008,'medal',867,867,867,NULL,NULL,NULL,replace(replace('1992 saw the changeover from bronze to copper-plated steel for both the 1p & 2p to reduce the cost of production. Both bronze and copper-plated steel 1992 coins can be found, however those in Proof & Brilliant Uncirculated sets were struck in Bronze, while circulation strikes were copper-plated steel.
\r\n
\r\n(former Spink ref. 4376)','\r',char(13)),'\n',char(10)),3,'rgb(158,108,76)'); -INSERT INTO NumistaType VALUES(868,'https://en.numista.com/catalogue/pieces868.html','2 Pence - Elizabeth II (3rd portrait; magnetic)','coin','royaume-uni',1992,1997,'Standard circulation coin',868,868,'Round',868,868,7.1200000000000001,25.8999999999999985,NULL,2.04999999999999982,'medal',868,868,868,NULL,NULL,NULL,replace(replace('1992 saw the changeover from bronze to copper-plated steel for both the 1p & 2p to reduce the cost of production. Both bronze and copper-plated steel 1992 coins can be found, however those in Proof & Brilliant Uncirculated sets were struck in Bronze, while circulation strikes were copper-plated steel.
\r\n
\r\n1993 reverse die varieties:
\r\n
\r\nReverse A (1992-93) P shorter foot, E between pearls, pearls near to border;
\r\nReverse B (1993-97) P longer foot, E at a pearl, pearls far from border;
\r\n
\r\n
\r\n
\r\nInformation has been received to suggest that 1993 BU and Proof sets were struck with Reverse B but this is yet to be confirmed.','\r',char(13)),'\n',char(10)),4,'rgb(156,108,68)'); -INSERT INTO NumistaType VALUES(875,'https://en.numista.com/catalogue/pieces875.html','5 Pence - Elizabeth II (3rd portrait; small type)','coin','royaume-uni',1990,1997,'Standard circulation coin',875,875,'Round',875,875,3.25,18.0,NULL,1.69999999999999995,'medal',875,875,875,NULL,NULL,NULL,replace(replace('There were no business strikes issued for circulation in 1993; coins bearing this date were available in BU and Proof sets only.
\r\n
\r\nObverse die varieties:
\r\n
\r\n
\r\n
\r\nObverse A (1990) 92 pearls, last I in II at a pearl, E in REG at a pearl;
\r\nObverse B (1991, 1994-97) 91 pearls, last I in II at a pearl, E in REG between pearls;
\r\nObverse C (1992 & 1997) 92 pearls, last I in II between pearls, E in REG at a pearl;
\r\n
\r\nInformation has been received to suggest that 1990-97 BU and Proof sets were struck with Obverse C but this is yet to be confirmed.
\r\n
\r\nRounded/square edge varieties
\r\n
\r\nReports have been received regarding rounded/wire edge and squared/flat edge varieties for the 1992 issues. The existence of this variation is common knowledge for the 10 pence but is less well documented for this type.
\r\n
\r\n
\r\n© Amer Salmeh','\r',char(13)),'\n',char(10)),6,'rgb(147.7241379310345,130.1379310344828,107.27586206896551)'); -INSERT INTO NumistaType VALUES(876,'https://en.numista.com/catalogue/pieces876.html','5 Pence - Elizabeth II (4th portrait; Crowned Thistle)','coin','royaume-uni',1998,2008,'Standard circulation coin',876,876,'Round',876,876,3.25,18.0,NULL,1.69999999999999995,'medal',876,876,876,NULL,NULL,NULL,NULL,4,'rgb(154.59375,141.84375,100.40625000000001)'); -INSERT INTO NumistaType VALUES(879,'https://en.numista.com/catalogue/pieces879.html','10 Pence - Elizabeth II (3rd portrait; small type)','coin','royaume-uni',1992,1997,'Standard circulation coin',879,879,'Round',879,879,6.5,24.5,NULL,1.85000000000000008,'medal',879,879,879,NULL,NULL,NULL,replace(replace('In 1992 the ten pence was reduced in size to begin the process of demonetising the larger 10p which, alongside pre-decimal florins, were finally taken out of circulation in 1993.
\r\n
\r\n1992 dated 10 pence issues
\r\n
\r\nKM# 938, Sp# F3 Copper-nickel • 11.3 g • ⌀ 28.5 mm - issued in RM sets only (BU and Proof);
\r\nKM# 938b, Sp# F4 Copper-nickel • 6.5 g • ⌀ 24.5 mm - issued in RM sets and over 1.4bn struck for circulation.
\r\n
\r\nObverse die varieties:
\r\n
\r\nType 1: L, I and A in ELIZABETH point to space between dots
\r\nType 2: L, I and A in ELIZABETH point directly at dots
\r\n
\r\nReverse die varieties:
\r\n
\r\nType A: 1 in 10 aligned to dot, four tufts under chest, lowest hair of mane detached from back of lion.
\r\nType B: 1 in 10 aligned between dots, five tufts under chest, lowest hair of mane attached to back of lion.
\r\n
\r\nEdge varieties:
\r\n
\r\nRounded (wire edge): looking thinner, tapers to a narrow reeding (1992 only);
\r\nSquared (flat edge): wider reeding across full coin thickness;
\r\n
\r\n© Sjoelund
\r\n
\r\nFor further information and images please visit Tony Clayton's website
\r\nFollowing are a couple of specific links for the 10p varieties pages:
\r\n
\r\n10p die varieties details (scroll down)
\r\n10p die varieties pics (scroll down)','\r',char(13)),'\n',char(10)),4,'rgb(150.16666666666666,130.33333333333331,104.83333333333333)'); -INSERT INTO NumistaType VALUES(907,'https://en.numista.com/catalogue/pieces907.html','1 Escudo','coin','portugal',1927,1968,'Standard circulation coin',907,907,'Round',907,907,8.0,26.8000000000000007,NULL,2.0,'medal',907,907,907,NULL,'System 1927-1968',NULL,NULL,2,'rgb(119.40476190476188,135.59523809523813,119.40476190476188)'); -INSERT INTO NumistaType VALUES(908,'https://en.numista.com/catalogue/pieces908.html','1 Cent "Lincoln - Wheat Ears Reverse"','coin','etats-unis',1909,1958,'Standard circulation coin',908,908,'Round',908,908,3.10999999999999987,19.0,NULL,1.39999999999999991,'coin',908,908,908,NULL,NULL,NULL,replace(replace('KM# 132 - 1909-1942 bronze issues
\r\nKM# 132a - 1943 zinc-coated steel issues
\r\nKM# A132 - 1944-1958 bronze issues resumed
\r\n
\r\nThe standard weight of this coin was 48 grains.
\r\n
\r\nHow the initials ['signature'] "VDB" looks on reverse (1909 and 1909-S only)
\r\n
\r\n© Ringgy
\r\n
\r\n1909 initials
\r\n
\r\n1917
\r\n
\r\n1922
\r\n
\r\n1928S
\r\n
\r\n1936
\r\n
\r\n1941S
\r\n
\r\n1944D
\r\n
\r\n1946S (inverted S and S/D)
\r\n
\r\n1953D
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n1955
\r\n
\r\n1956D
\r\n
\r\n1958
\r\n
\r\n
\r\nCoins from 1910-1917 do not have the VDB initials.
\r\nStarting in 1918, "VDB" was added onto the underside of Lincoln's bust, below the shoulder.
\r\n
\r\nThere are claims of a 1917 matte proof coin existing (one known). However, many sources now claim this coin does not exist.
\r\n
\r\nIssues from 1944 to 1946 used brass made from spent wartime shell casings composed of 70% copper and 30% zinc. As a result, such issues are made of 95% copper and 5% zinc. However, alloy resumed to pre-war composition after 1946 (95% copper and 5% tin and zinc)
\r\n
\r\nThe 1943 bronze cent is a "Transitional Error" which occurred during the changeover from bronze to steel coated zinc.','\r',char(13)),'\n',char(10)),1,'rgb(246,141,60)'); -INSERT INTO NumistaType VALUES(941,'https://en.numista.com/catalogue/pieces941.html','1 Cent','coin','bahamas',1985,2004,'Standard circulation coin',941,941,'Round',941,941,2.5,19.0,NULL,1.39999999999999991,'medal',941,941,941,NULL,NULL,NULL,NULL,10,'rgb(188,108,76)'); -INSERT INTO NumistaType VALUES(946,'https://en.numista.com/catalogue/pieces946.html','5 Pesetas - Juan Carlos I (España ''82)','coin','espagne',1980,1982,'Circulating commemorative coin',946,946,'Round',946,946,5.75,23.0,NULL,1.5,'coin',946,946,946,NULL,'1982 FIFA World Cup',NULL,'There is a known error mule (KM# 811) which has 1975 instead 1980 on the obverse.',2,'rgb(127.5,127.5,127.5)'); -INSERT INTO NumistaType VALUES(991,'https://en.numista.com/catalogue/pieces991.html','50 Centavos','coin','portugal',1927,1968,'Standard circulation coin',991,991,'Round',991,991,4.5,23.0,NULL,1.53000000000000002,'medal',991,991,991,NULL,'System 1927-1968',NULL,'Weight is 4,50g (1947 coin)',9,'rgb(138.0451127819549,124.62406015037591,116.95488721804509)'); -INSERT INTO NumistaType VALUES(1051,'https://en.numista.com/catalogue/pieces1051.html','200 Pesos','coin','colombie',1994,2012,'Standard circulation coin',1051,1051,'Round',1051,1051,7.08000000000000007,24.3999999999999985,NULL,1.69999999999999995,'coin',1051,1051,1051,NULL,NULL,NULL,replace(replace('There are main groups of obverse and reverse.
\r\n
\r\nObverse
\r\nDie 1 - letters in REPUBLICA DE COLOMBIA short, there are no vertical lines of background pattern inside mashes of P and O in PESOS.
\r\nDie 2 - letters in REPUBLICA DE COLOMBIA short, there is vertical line of background pattern inside each mash of P and O in PESOS.
\r\nDie 3 - letters in REPUBLICA DE COLOMBIA tall, there is vertical line of background pattern inside each mash of P and O in PESOS.
\r\n
\r\n
\r\n
\r\nReverse
\r\n
\r\nDie A - all 4 narrow lines in motif point to gap in between beads.
\r\nDie B - each of 4 narrow lines in motif point to bead.
\r\n
\r\n
\r\n
\r\nCombinations
\r\n1+A 1994.
\r\n2+A 1995-1997.
\r\n3+A 1997, 2004-2007.
\r\n3+B 2008-2012.
\r\n
\r\nFor 1995 there are some coins with an additional dot in the central circle, making 5 dots on the reverse.
\r\n
\r\nAlthough Krause shows mintage numbers for 2003, this coin was not issued with that year.','\r',char(13)),'\n',char(10)),2,'rgb(149.3939393939394,131.36363636363637,105.60606060606061)'); -INSERT INTO NumistaType VALUES(1073,'https://en.numista.com/catalogue/pieces1073.html','50 Pesos (non-magnetic)','coin','colombie',1989,2009,'Standard circulation coin',1073,1073,'Round',1073,1073,4.34999999999999964,21.5,NULL,1.39999999999999991,'coin',1073,1073,1073,NULL,NULL,NULL,replace(replace('
\r\n
\r\nThere are groups of dies of the type.
\r\n
\r\nObverse
\r\n
\r\nObverse bears year and that is why every year at least one new die is used. There are a lot of differences between them in size and position of legend and in interpretation of the coat of arms. The presented groups are of the main changes in the coat of arms.
\r\n
\r\nDie 1 - comb of condor in one line, leaf to the right of pomegranate is higher then to the left.
\r\nDie 2 - the only die with leaf to the left of pomegranate higher, than the one to the right.
\r\nDie 3 - comb of condor in 3 dots, the only die with narrow almost straight Isthmus of Panama.
\r\nDie 4 - comb of condor in 3 dots, leaf to the right of pomegranate is higher then to the left, realistic Isthmus of Panama.
\r\n
\r\n
\r\n
\r\nReverse
\r\n
\r\nDie A - 66 bead around rim, top of the left top leaf to gap,  numerals '50' high and set apart.
\r\nDie B - 72 beads, top of the left top leaf to bead, '50' high, the only die with numerals '50' close.
\r\nDie C - 72 beads, top of the left top leaf next to bead, numerals '50' set apart, the only die with '50' low, on the level of inner leaves.
\r\nDie D - 72 beads, top of the left top leaf to gap, numerals '50' high and set apart. The only die, where all details are thick and tops of leaves are blunt.
\r\n
\r\n
\r\n
\r\nCombinations
\r\n1+A 1989, 1990, 1992, 1993, 1994
\r\n1+B 1989
\r\n1+C 1994
\r\n2+A 1991
\r\n2+B 1990
\r\n3+C 2003, 2004, 2005, 2006, 2007
\r\n4+C 2008
\r\n4+D 2008-2012
\r\n
\r\nCorrespondence with Standard Catalog of World Coins:
\r\nKM#283.1 1+A, 2+A
\r\nKM#283.2 all the rest combinations.
\r\n
\r\nThe 2008 version can be found with pointy leaves or blunt leaves on the reverse. The distance of the 5 from the leaves can also vary. Both variants have the same amount of beads (72):
\r\n
\r\n@Duberney Osorio','\r',char(13)),'\n',char(10)),1,'rgb(148.6092715231788,128.34437086092714,106.3907284768212)'); -INSERT INTO NumistaType VALUES(1149,'https://en.numista.com/catalogue/pieces1149.html','5 Pesetas (La Rioja)','coin','espagne',1996,1996,'Circulating commemorative coin',1149,1149,'Round',1149,1149,3.0,17.5,NULL,1.5,'coin',1149,1149,1149,NULL,'Autonomous communities of Spain',NULL,replace('The Danza de Los Zancos (Dance of the Stilts) is a traditional folk festival on July 22nd in Anguiano, La Rioja, in which dancers wear traditional clothing and 50cm stilts and dance around in the streets.
\nGrapes are represented because of the importance of Rioja wine, well known all over the world.
\n
\n','\n',char(10)),2,'rgb(172,149,68)'); -INSERT INTO NumistaType VALUES(1202,'https://en.numista.com/catalogue/pieces1202.html','½ Dinar','coin','tunisie',1996,2013,'Circulating commemorative coin',1202,1202,'Round',1202,1202,8.0,23.8999999999999985,NULL,2.20000000000000017,'coin',1202,1202,1202,NULL,NULL,NULL,'

There are 2 varieties of AH1418-1997.
Obverse: 
I - all details small. Leafs are touching the inner circle.
II - all details large. Leafs are not touching the inner circle.
It is easy to see the difference in the position of details and the inner circle.
Picture: © Images courtesy of Alexandr Prokofyev


3 completely different types of reverse are known for this emission:
Reverse:
B 1996 - thick rim. Two dots far to the left of the curve of the left word at bottom.
E - thick rim. Two dots under the curve of the left word at bottom.
F - thin rim. Two dots to the left next to the curve of the left word at bottom.
Picture: © Images courtesy of Alexandr Prokofyev


Combinations: 
A in AH1416-1996.
I+E, II+F in AH1418-1997.
E in AH1428-2007, AH1430-2009, AH 1432-2011, AH1434-2013.

Note. Dies A, C and D are described in article ½ Dinar 1976-1983.

',2,'rgb(142.5806451612903,128.8709677419355,112.4193548387097)'); -INSERT INTO NumistaType VALUES(1205,'https://en.numista.com/catalogue/pieces1205.html','1 Dinar (Country map)','coin','tunisie',1988,1990,'Standard circulation coin',1205,1205,'Round',1205,1205,9.84999999999999964,28.0599999999999987,NULL,2.08000000000000007,'coin',1205,1205,1205,NULL,NULL,'FAO',NULL,1,'rgb(152.5984251968504,132.51968503937005,102.4015748031496)'); -INSERT INTO NumistaType VALUES(1206,'https://en.numista.com/catalogue/pieces1206.html','1 Dinar','coin','tunisie',1996,2013,'Standard circulation coin',1206,1206,'Round',1206,1206,10.0999999999999996,28.0,NULL,2.10000000000000008,'variable',1206,1206,1206,NULL,NULL,'FAO',replace('Obverse

\nTwo styles may be distinguished by script:
\nDie I - dash between dates is wide and tilted.
\nDie II - dash between dates is narrow and horizontal.

\nAH1418-1997 was struck by two dies of style I.
\n1 - type of 1996, laurel branches closer to center.
\n2 - type of 1997, laurel branches closer to rim.
\nSee example, where die 1 to the left, and die 2 to the right.
\n

\nReverse

\nThe reserve was taken from 1976 group A with wide pipe of tractor.
\nDie A1 1976 - wide pipe of tractor, legends far from rim, two lower dots at دينار large.

\nDie A2 1997 - wide pipe of tractor, legends closer to rim, two lower dots at دينار smaller and elongated.
\n


\nCombinations:
\nCoin alignment ↑↓
\nI+A1 AH 1416-1996.
\nI: 1+A1 AH1418-1997;
\n 2+A1 AH1418-1997;
\n 2+A2 AH1418-1997.

\nII+A1 AH1428-2007, AH1432-2011.
\nII+A2 AH1430-2009, AH1434-2013.

\nMedal alignment ↑↑
\nII+A1 AH1432-2011.','\n',char(10)),4,'rgb(145.08620689655174,131.8965517241379,109.91379310344827)'); -INSERT INTO NumistaType VALUES(1236,'https://en.numista.com/catalogue/pieces1236.html','10 Centavos','coin','portugal',1942,1969,'Standard circulation coin',1236,1236,'Round',1236,1236,1.98999999999999999,17.5,NULL,1.1200000000000001,'coin',1236,1236,1236,NULL,'System 1927-1968',NULL,NULL,20,'rgb(150,88,68)'); -INSERT INTO NumistaType VALUES(1237,'https://en.numista.com/catalogue/pieces1237.html','20 Centavos','coin','portugal',1942,1969,'Standard circulation coin',1237,1237,'Round',1237,1237,3.0,20.1999999999999992,NULL,1.16999999999999992,'coin',1237,1237,1237,NULL,'System 1927-1968',NULL,NULL,20,'rgb(191,151,118)'); -INSERT INTO NumistaType VALUES(1238,'https://en.numista.com/catalogue/pieces1238.html','200 Escudos','coin','portugal',1991,2001,'Standard circulation coin',1238,1238,'Round',1238,1238,9.80000000000000071,28.0,NULL,2.20000000000000017,'coin',1238,1238,1238,NULL,'System 1981-2001',NULL,replace(replace('Different dies are known.
\r\n
\r\nObverse
\r\nDie 1 - thin numerals in date.
\r\nDie 2 - thick numerals in date, date higher and closer to R in REPUBLICA.
\r\n
\r\nReverse
\r\nDie A - all details large, as the result wheat ear near rim; letters in INCM and J. CANDIDO close to each other and stocky.
\r\nDie B - all details smaller, closer to center, as the result wheat ear far from rim;  letters in INCM and J. CANDIDO wide spread and taller.
\r\n
\r\n
\r\nCombinations
\r\n1+A: 1991.
\r\n1+B: 1992-1998, 2000, 2001.
\r\n2+B: 1999.
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),6,'rgb(151,112,72)'); -INSERT INTO NumistaType VALUES(1241,'https://en.numista.com/catalogue/pieces1241.html','1 Escudo','coin','portugal',1986,2001,'Standard circulation coin',1241,1241,'Round',1241,1241,1.68999999999999994,16.0,NULL,1.19999999999999995,'coin',1241,1241,1241,NULL,'System 1981-2001',NULL,replace(replace('Different Obv. and Rev. dies are known.
\r\n
\r\nObverse
\r\nDie 1 - bottom towers in corners lower, decorations in legend outlined.
\r\nDie 2 - bottom towers in corners higher, decorations in legend without outline.
\r\n
\r\nReverse
\r\nDie A - narrow script, engraver's name small and low.
\r\nDie B - bold script, engraver's name large and high.
\r\nPicture: © Images courtesy of Alexandr Prokofyev
\r\n
\r\n
\r\nCombinations
\r\n1+A: 1986- 1991.
\r\n2+A: 1992 MS.
\r\n2+B: 1992-2001.
\r\n
\r\nAbbreviation
\r\nMS - mint set.
\r\n
\r\n1992
\r\n','\r',char(13)),'\n',char(10)),44,'rgb(236,202,81)'); -INSERT INTO NumistaType VALUES(1242,'https://en.numista.com/catalogue/pieces1242.html','100 Escudos','coin','portugal',1989,2001,'Standard circulation coin',1242,1242,'Round',1242,1242,8.30000000000000071,25.5,NULL,2.5,'coin',1242,1242,1242,NULL,'System 1981-2001',NULL,'',13,'rgb(223,189,116)'); -INSERT INTO NumistaType VALUES(1243,'https://en.numista.com/catalogue/pieces1243.html','20 Escudos','coin','portugal',1986,2001,'Standard circulation coin',1243,1243,'Round',1243,1243,6.90000000000000035,26.5,NULL,1.6399999999999999,'coin',1243,1243,1243,NULL,'System 1981-2001',NULL,replace(replace('Different Obv. and Rev. dies are known.
\r\n
\r\nObverse
\r\nDie 1 - details smaller, ESCUDOS far from rim,  E.VAZ INCM close to rim.
\r\nDie 2 - details a bit larger, ESCUDOS far from rim,  E.VAZ INCM far from rim.
\r\nDie 3 - details larger, ESCUDOS close to rim,  E.VAZ INCM far from rim.
\r\n
\r\n
\r\nReverse
\r\nDie A - details smaller, top pointer short, inner cross in Order of Christ Cross small.
\r\nDie B - details larger, top pointer long, inner cross in Order of Christ Cross long.
\r\n
\r\n
\r\nCombinations
\r\n1+A: 1986, 1987.
\r\n2+B: 1988-1997.
\r\n3+B: 1998-2001.
\r\n
\r\nCorrespondence to Standard Catalog of World Coins
\r\nKM#634.1: 1+A, 2+B.
\r\nKM#634.2: 3+B.','\r',char(13)),'\n',char(10)),18,'rgb(137.17241379310343,121.34482758620689,117.82758620689656)'); -INSERT INTO NumistaType VALUES(1258,'https://en.numista.com/catalogue/pieces1258.html','100 Pesetas - Juan Carlos I (value as "CIEN")','coin','espagne',1982,1990,'Standard circulation coin',1258,1258,'Round',1258,1258,9.25,24.5,NULL,2.29999999999999982,'coin',1258,1258,1258,NULL,NULL,NULL,replace('1986 heads
\n
\n1988 heads
\n
\n
\nTo face the problems that the previous circulating coins presented, mainly caused by inflation and the disparity among the prices of metals and the face value of some coins, on February 9th, 1982, the Delegated Commission for Economic Affairs within the Government of Spain proposed the introduction of a new coin series following the socio-economic context of the country. On March 14th of the same year, the Cabinet approved the proposal of the Commission and promulgated the Royal Decree 1417/1982. That Royal Decree states that the previous 100 pesetas coin, even though essential, proved itself to be extremely uncomfortable for daily transactions due to its size; and, in its Article 3.1, introduced the specifications for a new coin to replace it. This new 100 pesetas coin would consist of 88.4% copper,  5% aluminum, 5% nickel, 1% iron and 0.6% manganese.
\n
\nOn July 15th, 1982, the Ministry of the Treasury gave the order for the new coin to enter circulation on September 15th of that very same year. That fact that was celebrated by the FNMT with the issuance of a proof version in a special package.
\n
\n
\n
\nThe new coin, which was also known as "20 duros", immediately became wildly popular among Spaniards. So much so, that when in 1983 the FNMT workers decided to go on strike, both the Mint and the Government suddenly found themselves with a huge problem when the demand for more coins could not be met. To solve it, the production of new coins was ordered to German mints and transported back to Spain in bags instead of rolls, as was the norm for the FNMT. They were put into circulation as soon as possible, but the distribution channels were not the usual ones. The numismatic consequence was that, while very easy to acquire in circulated condition, compared to any other year, it is relatively hard and expensive to find 1983 copies in uncirculated condition.
\n
\nWhile maintaining the design elements of the coin, a Ministry of the Treasury order, issued on August 31st, 1990, changed the expression of the face value from letters to numbers. The reasons given for this change were the difficulty to use it by those foreign visitors unable to read Spanish and to get in line with the de facto standard on lettering,  which uses numbers for the face value. Thus, a new type was born.','\n',char(10)),4,'rgb(173,150,74)'); -INSERT INTO NumistaType VALUES(1262,'https://en.numista.com/catalogue/pieces1262.html','5 Pesetas - Juan Carlos I','coin','espagne',1989,2001,'Standard circulation coin',1262,1262,'Round',1262,1262,3.0,17.5,NULL,1.5,'coin',1262,1262,1262,NULL,NULL,NULL,replace('Variants for 1998 and 2000 exist with an abnormal rim.
\nThere is also a 1992 with abnormal rim
\n
\n
\nVariant without mintmark.
\n
\nThere are variant rim combinations for obverse and reverse
\n','\n',char(10)),6,'rgb(150,127,67)'); -INSERT INTO NumistaType VALUES(1263,'https://en.numista.com/catalogue/pieces1263.html','5 Pesetas (Jacobeo)','coin','espagne',1993,1993,'Circulating commemorative coin',1263,1263,'Round',1263,1263,3.0,17.5,NULL,1.5,'coin',1263,1263,1263,NULL,'Jubilee Year of St. James',NULL,replace('Abnormal rim
\n
\n
\n','\n',char(10)),1,'rgb(186,160,73)'); -INSERT INTO NumistaType VALUES(1264,'https://en.numista.com/catalogue/pieces1264.html','25 Pesetas (Melilla)','coin','espagne',1997,1997,'Circulating commemorative coin',1264,1264,'Round with a round hole',1264,1264,4.20000000000000017,19.5,NULL,1.60000000000000008,'coin',1264,1264,1264,NULL,'Autonomous communities of Spain',NULL,replace('Melilla is a Spanish autonomous city located on the northwest coast of Africa, sharing a border with Morocco. Melilla is one of two permanently inhabited Spanish cities in mainland Africa, the other being nearby Ceuta. It was part of the Province of Málaga until 14 March 1995, when the city's Statute of Autonomy was passed.
\n
\nThe coin is commemoring the 500th Anniversary of the Conquest of Melilla by Spain (1497).','\n',char(10)),1,'rgb(178,157,89)'); -INSERT INTO NumistaType VALUES(1266,'https://en.numista.com/catalogue/pieces1266.html','5 Pesetas (Murcia)','coin','espagne',1999,1999,'Circulating commemorative coin',1266,1266,'Round',1266,1266,3.0,17.5,NULL,1.5,'coin',1266,1266,1266,NULL,'Autonomous communities of Spain',NULL,replace('Murcia is an Autonomous Community of Spain.
\n
\n','\n',char(10)),3,'rgb(152,126,70)'); -INSERT INTO NumistaType VALUES(1267,'https://en.numista.com/catalogue/pieces1267.html','1 Peseta - Juan Carlos I','coin','espagne',1989,2001,'Standard circulation coin',1267,1267,'Round',1267,1267,0.550000000000000044,14.0,NULL,1.19999999999999995,'coin',1267,1267,1267,NULL,NULL,NULL,replace('1997 coin, plus or X different. Can be a different variant.
\n
\n','\n',char(10)),3,'rgb(128.36734693877548,128.36734693877548,126.63265306122452)'); -INSERT INTO NumistaType VALUES(1324,'https://en.numista.com/catalogue/pieces1324.html','2 Pounds - Elizabeth II (4th portrait; Technology)','coin','royaume-uni',1998,2015,'Standard circulation coin',1324,1324,'Round',1324,1324,12.0,28.3999999999999985,NULL,2.5,'medal',1324,1324,1324,NULL,NULL,NULL,replace(replace('In 1999, this type was only struck for circulation since the Royal Mint Brilliant Uncirculated and Proof sets contained the Rugby World Cup commemoratives.
\r\n
\r\nNo Brilliant Uncirculated coins were issued in either 2006 or 2007.
\r\n
\r\nThe design has also been struck over the years in silver proof, silver piedfort, gold proof and platinum proof.','\r',char(13)),'\n',char(10)),4,'rgb(181,148,98)'); -INSERT INTO NumistaType VALUES(1353,'https://en.numista.com/catalogue/pieces1353.html','25 Pesetas - Juan Carlos I (España ''82)','coin','espagne',1980,1982,'Circulating commemorative coin',1353,1353,'Round',1353,1353,8.5,26.5,NULL,1.69999999999999995,'coin',1353,1353,1353,NULL,'1982 FIFA World Cup',NULL,'',1,'rgb(163.4154929577465,134.6830985915493,91.5845070422535)'); -INSERT INTO NumistaType VALUES(1366,'https://en.numista.com/catalogue/pieces1366.html','10 Centavos','coin','portugal',1969,1979,'Standard circulation coin',1366,1366,'Round',1366,1366,0.5,15.0,NULL,1.36000000000000009,'coin',1366,1366,1366,NULL,'System 1969-1980',NULL,'The olive fruit/tree (Binomial name:  Olea europaea)',30,'rgb(163.4154929577465,149.04929577464787,91.5845070422535)'); -INSERT INTO NumistaType VALUES(1376,'https://en.numista.com/catalogue/pieces1376.html','20 Pence - Elizabeth II (3rd portrait)','coin','royaume-uni',1985,1997,'Standard circulation coin',1376,1376,'Equilateral curve heptagon (7-sided)',1376,1376,5.0,21.3999999999999985,NULL,1.69999999999999995,'medal',1376,1376,1376,NULL,NULL,NULL,replace(replace('The 1986 strike was not issued for circulation and only issued as part of the Annual Coin Sets in both Brilliant Uncirculated & Proof versions.
\r\n
\r\nObverse varieties:
\r\n
\r\nAn obverse die design change occurred part way through 1992.
\r\n
\r\n1985-1992 slightly smaller portrait;
\r\n1992-1997 slightly larger portrait;
\r\n
\r\n
\r\n
\r\nInformation has been received to suggest that 1992 BU and Proof sets bear the large portrait but this is yet to be confirmed.
\r\n
\r\n1997 has small varieties in the design of the portrait.','\r',char(13)),'\n',char(10)),3,'rgb(154.96153846153848,121.61538461538458,100.03846153846152)'); -INSERT INTO NumistaType VALUES(1384,'https://en.numista.com/catalogue/pieces1384.html','1 Pound - Elizabeth II (3rd portrait; Royal Arms)','coin','royaume-uni',1993,1993,'Circulating commemorative coin',1384,1384,'Round',1384,1384,9.5,22.5,NULL,3.14999999999999991,'medal',1384,1384,1384,NULL,'Heraldic Emblems series','UK',replace(replace('The second edition of the one pound coin in the 'Heraldic Emblems' series. The Eric Sewell 'Royal Arms' reverse design was used four other times, earlier in 1983, and later in 1998, 2003, 2008, making a total of 5 times it was issued.
\r\n
\r\nThis is the only version of the coin with the Maklouf third portrait on the obverse and was issued for circulation as well as part of the Annual Coin Sets for 1993, in both Proof and Brilliant Uncirculated versions. The design was also issued in silver proof and silver piedfort.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(180,140,52)'); -INSERT INTO NumistaType VALUES(1389,'https://en.numista.com/catalogue/pieces1389.html','1 Pound - Elizabeth II (2nd portrait; Royal Arms)','coin','royaume-uni',1983,1983,'Standard circulation coin',1389,1389,'Round',1389,1389,9.5,22.5,NULL,3.14999999999999991,'medal',1389,1389,1389,NULL,'Heraldic Emblems series',NULL,replace(replace('The first round pound coin to replace the old pound note. Issued for circulation as well as was part of the Annual Coin Sets in both Brilliant Uncirculated (637,100 sales) & Proof versions, while also available in an individual BU pack (484, 900 sales)
\r\n
\r\n
\r\nThe Eric Sewell 'Royal Arms' reverse design was used four more times for circulation issues in subsequent years, 1993, 1998, 2003, 2008, making a total of 5 editions of this type.','\r',char(13)),'\n',char(10)),2,'rgb(174.14634146341464,143.0487804878049,80.85365853658536)'); -INSERT INTO NumistaType VALUES(1390,'https://en.numista.com/catalogue/pieces1390.html','1 Pound - Elizabeth II (3rd portrait; Celtic Cross)','coin','royaume-uni',1996,1996,'Circulating commemorative coin',1390,1390,'Round',1390,1390,9.5,22.5,NULL,3.14999999999999991,'medal',1390,1390,1390,NULL,'Heraldic Emblems series','Northern Ireland',replace(replace('The third of four Norman Sillman heraldic emblems, issued as part of the Annual Coin Sets for 1996, in both Brilliant Uncirculated (86,501 sales) & Proof versions, it was also issued individually in a BU pack (no sales data), while also being struck in silver proof and silver piedfort.
\r\n
\r\n
\r\nA second edition of this coin was issued in 2001 with the Rank-Broadley fourth portrait on the obverse.','\r',char(13)),'\n',char(10)),1,'rgb(196.3274336283186,142.16814159292034,58.67256637168139)'); -INSERT INTO NumistaType VALUES(1395,'https://en.numista.com/catalogue/pieces1395.html','1 Pound - Elizabeth II (4th portrait; Celtic Cross)','coin','royaume-uni',2001,2001,'Circulating commemorative coin',1395,1395,'Round',1395,1395,9.5,22.5,NULL,3.14999999999999991,'medal',1395,1395,1395,NULL,'Heraldic Emblems series','Northern Ireland',replace(replace('The Norman Sillman heraldic emblem of the 'Celtic Cross' reverse was originally introduced in 1996 with the Maklouf third portrait on the obverse. This second edition was struck for circulation and can also be found in Annual Coin Sets in both Proof and Brilliant Uncirculated quality. The coin was also issued in silver proof, reverse frosted silver proof and silver piedfort.
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(188,148,60)'); -INSERT INTO NumistaType VALUES(1397,'https://en.numista.com/catalogue/pieces1397.html','1 Pound - Elizabeth II (3rd portrait; English Lions)','coin','royaume-uni',1997,1997,'Circulating commemorative coin',1397,1397,'Round',1397,1397,9.5,22.5,NULL,3.14999999999999991,'medal',1397,1397,1397,NULL,'Heraldic Emblems series','England',replace(replace('The fourth and final of the Norman Sillman heraldic emblems, issued as part of the Annual Coin Sets for 1997, in both Brilliant Uncirculated (109,557 sales) and Proof versions, as well as in an individual BU pack (56,996 sales).
\r\n
\r\n
\r\nA second edition of this coin was issued in 2002 with the Rank-Broadley fourth portrait on the obverse.','\r',char(13)),'\n',char(10)),1,'rgb(191,177,107)'); -INSERT INTO NumistaType VALUES(1571,'https://en.numista.com/catalogue/pieces1571.html','5 Paisa - Birendra Bir Bikram','coin','nepal',1971,1982,'Standard circulation coin',1571,1571,'Round',1571,1571,1.1399999999999999,20.5,NULL,1.61000000000000009,'medal',1571,1571,1571,NULL,NULL,NULL,replace(replace('
\r\nThe national breed Achham cattle which falls in the Bos indicus (also the Binomial Name) species is the national animal of Nepal.
\r\n
\r\nProof issues were minted by the United States mint in San Francisco.','\r',char(13)),'\n',char(10)),1,'rgb(157.3714285714286,134.05714285714288,97.6285714285714)'); -INSERT INTO NumistaType VALUES(1589,'https://en.numista.com/catalogue/pieces1589.html','100 Yen - Shōwa','coin','japon',1967,1988,'Standard circulation coin',1589,1589,'Round',1589,1589,4.79999999999999982,22.5,NULL,1.69999999999999995,'medal',1589,1589,1589,NULL,NULL,NULL,NULL,1,'rgb(138.77551020408166,126.6326530612245,116.22448979591836)'); -INSERT INTO NumistaType VALUES(1643,'https://en.numista.com/catalogue/pieces1643.html','10 Baht - Rama IX','coin','thailande',1988,2008,'Standard circulation coin',1643,1643,'Round',1643,1643,8.5,26.0,NULL,2.0,'coin',1643,1643,1643,NULL,NULL,NULL,replace(replace('A lot of counterfeits exist and are made from 2537/1994 (by removing only a little part of the 7)
\r\n
\r\nDifferences:
\r\n
  • Inner ring 2533 has bigger bronze than 2537
    \r\n
  • Space between 33 and 37
    \r\n
  • Shape of 3 and 7
    \r\n

\r\nThe 10 baht baht coins minted with 2533 (1990) were made for a coin exhibition in England to promote the fact that the 10 baht coins would now be the only 10 baht denomination. 10 Baht banknotes would not be produced after that. See the attached link from the Bangkok Post.
\r\n
\r\nhttps://www.bangkokpost.com/thailand/politics/426162/ony-100-10-baht-coins-issued-in-1990-says-treasury
\r\n
\r\nMade-to-order (MTO) coins exist.
\r\n- Coin struck as double obverse and medal alignment; PCGS #37982050.
\r\n- Coin dated 2537, struck as double reverse and medal alignment; PCGS #80704776.
\r\n- Coin dated 2538, struck as double reverse and medal alignment; PCGS #37982051.
\r\n// for above MTO, about 1300 pairs are believed to be made. (source by siamcoin)
\r\n- Coin struck as double obverse on 9.5 grams copper planchet; PCGS #34110607.
\r\n- Coin dated 2537, struck on copper planchet; NGC #4971242-006.
\r\n- Coin dated 2537, struck on 5.48 grams copper-nickel-zinc planchet; PCGS #35676313.
\r\n- Coins dated 2537, struck as medal alignment; PCGS #80717155. (could be error)
\r\n- Coin dated 2538, struck on 8.39 grams brass planchet; PCGS #36821777.
\r\n- Coin dated 2538, struck on 9.18 grams copper-nickel planchet; PCGS #36821779.
\r\n- Coin dated 2538, struck on 9.0 grams copper planchet; PCGS #35676312.
\r\n- Coin dated 2538, struck on 5.97 grams silver planchet; PCGS #36821778.
\r\n- Coin dated 2538, struck on silver planchet; PCGS #43296061.
\r\n- Coin dated 2538, struck on 16.03 grams gold planchet; PCGS #36837183.
\r\n- Coin dated 2538, struck on gold planchet; PCGS #43296060.
\r\n- Coin dated 2538, struck on bimetallic of gold center and copper-nickel ring planchet. PCGS #36837184.
\r\n- Coin dated 2539, struck on mono-metallic planchet; PCGS #37982040. (set of 2539)
\r\n- Coin dated 2539, struck on copper planchet; PCGS #37982042. Non-graded coin also exists. (set of 2539)
\r\n- Coin dated 2539, struck on bronze planchet. Non-graded. (set of 2539)
\r\n- Coin dated 2539, struck on nickel planchet. Non-graded. (set of 2539)
\r\n- Coin dated 2539, struck on silver planchet. Non-graded. (set of 2539)
\r\n- Coin dated 2539, struck on gold planchet. Non-graded. (set of 2539)
\r\n- Coin dated 2539, struck on bimetallic of gold center and silver ring. Non-graded. (set of 2539)
\r\n- Coin dated 2539, struck on 8.7 grams 98%-copper planchet; PCGS #36026877.
\r\n- Coin struck as uniface obverse; PCGS #37982052; NGC #4970235-037. (pair of uniface 2546)
\r\n- Coin dated 2546 struck as uniface reverse; PCGS #37982053; NGC #4970235-038. (pair of uniface 2546)
\r\n- Bimetallic mule: obverse of Y#391, reverse of standard 2546, medal alignment. Non-graded.
\r\n
\r\nCoins dated 2532 (1989) were minted in Italy.','\r',char(13)),'\n',char(10)),1,'rgb(205,184,137)'); -INSERT INTO NumistaType VALUES(1702,'https://en.numista.com/catalogue/pieces1702.html','20 Cents - Elizabeth II (4th Portrait)','coin','australie',1999,2019,'Standard circulation coin',1702,1702,'Round',1702,1702,11.3100000000000004,28.5199999999999995,NULL,2.0,'medal',1702,1702,1702,NULL,NULL,NULL,replace(replace('In 1999 the RAM updated the standard circulation Platypus 20 cent coin with the Ian Rank Broadley 4th Portrait of the Queen on the Obverse. The coin has also been issued in Uncirculated & Proof Year Sets, UNC in WMF Berlin Money Fair Sets, and various Baby UNC & Proof sets. Specimen versions of the coin were issued in Wedding Sets from 2002 to 2009. From 2010 all Wedding Sets were Proof issues. 2019 is the final year for the IRB Obverse.
\r\n
\r\nThe 2001 issues featured 3 different versions of the IRB Initials, "IRB" joined, "IRB" spaced and "RB" Joined.
\r\n
\r\n
\r\nThe 2004 issued coin has two varieties, large and small QE II Head on the obverse, see this image.
\r\n
\r\n
\r\nFine Silver (.999) Proof versions of the coin have been released in the Masterpieces in Silver 1998 Set & Fine Silver Proof Sets in 2004 & 2009 onwards.','\r',char(13)),'\n',char(10)),1,'rgb(141.0638297872341,127.5,113.9361702127659)'); -INSERT INTO NumistaType VALUES(1703,'https://en.numista.com/catalogue/pieces1703.html','20 Cents - Elizabeth II (3rd Portrait)','coin','australie',1985,2019,'Standard circulation coin',1703,1703,'Round',1703,1703,11.3100000000000004,28.5199999999999995,NULL,2.0,'medal',1703,1703,1703,NULL,NULL,NULL,replace(replace('This Copper-nickel 20 cent coin was first released into circulation by the RAM in 1985. This coin has the standard Stuart Devlin Platypus reverse used since 1966 but was updated with the Ralph David Makleouf obverse. The new obverse replaced the previous Arnold Machin obverse. The RDM Obverse was used until 1998 when it was also replaced with the Ian Rank-Broadley obverse.
\r\n
\r\nNo circulation coins were issued in 1986, 1987, 1989, 1990, 1991, 1992 & 1995. These years are only available by breaking up a Year Set. RAM records show that (174,000) 1988 & (1,490,000) 1993 coins were issued into circulation but it is thought to be a mistake. Those 2 years can only be found in BU & Proof Sets.
\r\n
\r\nIn 2019 a special release was issued to commemorate "Effigies Over Time" The RDM effigy was chosen to be used on the 20 cent coin in the Set which were all dated 2019.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(142.7064220183486,131.00917431192659,112.29357798165138)'); -INSERT INTO NumistaType VALUES(1998,'https://en.numista.com/catalogue/pieces1998.html','5 Forint','coin','hongrie',1992,2011,'Standard circulation coin',1998,1998,'Round',1998,1998,4.20000000000000017,21.1999999999999992,NULL,1.60000000000000008,'medal',1998,1998,1998,NULL,NULL,NULL,NULL,1,'rgb(129,108,52)'); -INSERT INTO NumistaType VALUES(2047,'https://en.numista.com/catalogue/pieces2047.html','200 Escudos (Expo ''98)','coin','portugal',1998,1998,'Circulating commemorative coin',2047,2047,'Round',2047,2047,9.80000000000000071,28.0,NULL,2.20000000000000017,'coin',2047,2047,2047,NULL,'System 1981-2001','Expo ''98',NULL,2,'rgb(110,94,44)'); -INSERT INTO NumistaType VALUES(2168,'https://en.numista.com/catalogue/pieces2168.html','2 Euro (Don Quixote)','coin','espagne',2005,2005,'Circulating commemorative coin',2168,2168,'Round',2168,2168,8.5,25.75,NULL,2.20000000000000017,'medal',2168,2168,2168,NULL,NULL,'IV centenary of the first edition of "Don Quixote de la Mancha"','The Ingenious Gentleman Don Quixote of La Mancha (Modern Spanish: El ingenioso hidalgo Don Quijote de la Mancha), or just Don Quixote, is a Spanish novel by Miguel de Cervantes. It was published in two parts, in 1605 and 1615. A founding work of Western literature, it is often labeled "the first modern novel" and many authors consider it to be the best literary work ever written.',1,'rgb(145.2906976744186,130.4651162790698,109.70930232558139)'); -INSERT INTO NumistaType VALUES(2169,'https://en.numista.com/catalogue/pieces2169.html','2 Euro (Bundesländer - "Schleswig-Holstein")','coin','allemagne',2006,2006,'Circulating commemorative coin',2169,2169,'Round',2169,2169,8.5,25.75,NULL,2.20000000000000017,'medal',2169,2169,2169,NULL,'German states','State of Schleswig-Holstein',NULL,1,'rgb(148,148,204)'); -INSERT INTO NumistaType VALUES(2173,'https://en.numista.com/catalogue/pieces2173.html','1 Euro Cent','coin','chypre',2008,2022,'Standard circulation coin',2173,2173,'Round',2173,2173,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',2173,2173,2173,NULL,NULL,NULL,NULL,1,'rgb(182,127,94)'); -INSERT INTO NumistaType VALUES(2175,'https://en.numista.com/catalogue/pieces2175.html','5 Euro Cent','coin','chypre',2008,2022,'Standard circulation coin',2175,2175,'Round',2175,2175,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',2175,2175,2175,NULL,NULL,NULL,replace(replace('On the edge 2018-2019 modification of Rev. happened.
\r\nOld modification - all details larger and closer to rim, numeral '5' larger, thinner, higher to edges and has angles at corners; stars with sharp tops of rays..
\r\nNew modification - all details smaller and closer to center, numeral '5' smaller, thicker, flatter with curved lines; stars with blunt tops of rays..
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n
\r\n
\r\nMore information at http://eucoins.byethost9.com/intro.html#107 .','\r',char(13)),'\n',char(10)),1,'rgb(182,127,94)'); -INSERT INTO NumistaType VALUES(2178,'https://en.numista.com/catalogue/pieces2178.html','50 Euro Cent','coin','chypre',2008,2022,'Standard circulation coin',2178,2178,'Round',2178,2178,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',2178,2178,2178,NULL,NULL,NULL,NULL,1,'rgb(156,124,33)'); -INSERT INTO NumistaType VALUES(2180,'https://en.numista.com/catalogue/pieces2180.html','2 Euro','coin','chypre',2008,2022,'Standard circulation coin',2180,2180,'Round',2180,2180,8.5,25.75,NULL,2.20000000000000017,'medal',2180,2180,2180,NULL,NULL,NULL,NULL,1,'rgb(213,191,116)'); -INSERT INTO NumistaType VALUES(2183,'https://en.numista.com/catalogue/pieces2183.html','5 Euro Cent','coin','malte',2008,2022,'Standard circulation coin',2183,2183,'Round',2183,2183,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',2183,2183,2183,NULL,NULL,NULL,NULL,1,'rgb(204,100,52)'); -INSERT INTO NumistaType VALUES(2190,'https://en.numista.com/catalogue/pieces2190.html','2 Euros (Olympic Games)','coin','grece',2004,2004,'Circulating commemorative coin',2190,2190,'Round',2190,2190,8.5,25.75,NULL,2.20000000000000017,'medal',2190,2190,2190,NULL,NULL,'XXVIIIth Olympic Games 2004 in Athens',replace(replace('The 2004 Summer Olympics, officially known as the Games of the XXVIII Olympiad and commonly known as Athens 2004, was a premier international multi-sport event held in Athens, Greece, from 13 to 29 August 2004 with the motto Welcome Home. The Games saw 10,625 athletes compete, accompanied by 5,501 team officials from 201 countries. There were 301 medal events in 28 different sports. Athens 2004 marked the first time since the 1996 Summer Olympics that all countries with a National Olympic Comittee were in attendance. 2004 also marked the return of the Olympic Games to the city where they began. Having previously hosted the Olympics in 1896, Athens became one of only four cities to have hosted the Summer Olympic Games on two separate occasions at the time (together with Paris, London and Los Angeles). The 2004 Olympics were generally deemed to be a success, with the rising standard of competition amongst nations across the world. The final medal tally was led by the United States, followed by China and Russia with the host Greece at 15th place. Several World and Olympic records were broken during these Games.
\r\nThe coin was issued in bankrolls and in BU quality on a coincard blister.

\r\n','\r',char(13)),'\n',char(10)),1,'rgb(176.01769911504425,137.65486725663715,78.98230088495576)'); -INSERT INTO NumistaType VALUES(2199,'https://en.numista.com/catalogue/pieces2199.html','2 Euros (2006 Winter Olympics - Turin)','coin','italie',2006,2006,'Circulating commemorative coin',2199,2199,'Round',2199,2199,8.5,25.75,NULL,2.20000000000000017,'medal',2199,2199,2199,NULL,'2006 XX Winter Olympics','XX Olympic Winter Games Turin 2006.','

There are 2 types of slice:
Slice A = 2 right side up with obverse above, preceded by a star pointing upwards
Slice B = 2 right side up with obverse above, preceded by a star pointing downwards

',1,'rgb(188,148,100)'); -INSERT INTO NumistaType VALUES(2201,'https://en.numista.com/catalogue/pieces2201.html','2 Euro (Bundesländer - "Mecklenburg-Vorpommern")','coin','allemagne',2007,2007,'Circulating commemorative coin',2201,2201,'Round',2201,2201,8.5,25.75,NULL,2.20000000000000017,'medal',2201,2201,2201,NULL,'German states','State of Mecklenburg-Vorpommern',replace(replace('Five mints currently share coin production. Each puts its own workshop letter on the coins it mints:
\r\nA - Berlin
\r\nD - Munich
\r\nF - Stuttgart
\r\nG - Karlsruhe
\r\nJ - Hamburg','\r',char(13)),'\n',char(10)),1,'rgb(142,126,68)'); -INSERT INTO NumistaType VALUES(2204,'https://en.numista.com/catalogue/pieces2204.html','2 Euro (Council of the European Union)','coin','portugal',2007,2007,'Circulating commemorative coin',2204,2204,'Round',2204,2204,8.5,25.75,NULL,2.20000000000000017,'medal',2204,2204,2204,NULL,NULL,'Portugal holding the Presidency of the Council of the European Union',NULL,1,'rgb(144.83999999999997,144.84,110.15999999999998)'); -INSERT INTO NumistaType VALUES(2217,'https://en.numista.com/catalogue/pieces2217.html','1 Peso','coin','argentine',1994,2016,'Standard circulation coin',2217,2217,'Round',2217,2217,6.40000000000000035,23.0,NULL,2.20000000000000017,'medal',2217,2217,2217,NULL,NULL,NULL,replace(replace('
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\nKM 112.3
\r\n
\r\nThree types of coin (year 1995): different fonts and size of arms. Error in type B: PROVINGIAS. @Rhonan.
\r\n','\r',char(13)),'\n',char(10)),4,'rgb(176,140,84)'); -INSERT INTO NumistaType VALUES(2236,'https://en.numista.com/catalogue/pieces2236.html','10 Pence - Elizabeth II (4th portrait; Crowned Lion)','coin','royaume-uni',1998,2008,'Standard circulation coin',2236,2236,'Round',2236,2236,6.5,24.5,NULL,1.85000000000000008,'medal',2236,2236,2236,NULL,NULL,NULL,'The 1998 & 1999 issues were not struck for circulation and can only be found in the annual Brilliant Uncirculated and Proof sets.',4,'rgb(201,185,132)'); -INSERT INTO NumistaType VALUES(2252,'https://en.numista.com/catalogue/pieces2252.html','25 Centavos (Deodoro da Fonseca)','coin','bresil',1998,2023,'Standard circulation coin',2252,2252,'Round',2252,2252,7.54999999999999982,25.0,NULL,2.25,'coin',2252,2252,2252,NULL,NULL,NULL,replace(replace('"T" partially and wholly inside the stripes
\r\n
\r\n
\r\n   
\r\nOfficial Sets - 2019 - Mintage 3000 Sets
\r\n
\r\n
\r\nOfficial Sets - 2021 - Mintage 5000 Sets','\r',char(13)),'\n',char(10)),1,'rgb(156,132,75)'); -INSERT INTO NumistaType VALUES(2253,'https://en.numista.com/catalogue/pieces2253.html','10 Centavos (Pedro I)','coin','bresil',1998,2023,'Standard circulation coin',2253,2253,'Round',2253,2253,4.79999999999999982,20.0,NULL,2.22999999999999998,'coin',2253,2253,2253,NULL,NULL,NULL,replace(replace('NOTE: SCWC New edition: KM#649.3 no longer exists. Despite that it is considered that
\r\nKM#649.2 "T" wholly inside stripes on Rev.;
\r\nKM#649.3 "T" partially inside stripes.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n   
\r\nOfficial Sets - 2019 - Mintage 3000 Sets
\r\n
\r\nNew die introduced in 2017.
\r\nIts distinctive feature was the replacement of a Dot amongst the chest medals by a Star
\r\n
\r\n
\r\n
\r\n
\r\nOfficial Sets - 2021 - Mintage 5000 Sets','\r',char(13)),'\n',char(10)),2,'rgb(132,100,60)'); -INSERT INTO NumistaType VALUES(2254,'https://en.numista.com/catalogue/pieces2254.html','25 Pesetas (Torre del Oro)','coin','espagne',1992,1992,'Circulating commemorative coin',2254,2254,'Round with a round hole',2254,2254,4.20000000000000017,19.5,NULL,1.60000000000000008,'coin',2254,2254,2254,NULL,'Seville Expo ''92',NULL,NULL,1,'rgb(198,182,126)'); -INSERT INTO NumistaType VALUES(2255,'https://en.numista.com/catalogue/pieces2255.html','25 Pesetas (Basque Country)','coin','espagne',1993,1993,'Circulating commemorative coin',2255,2255,'Round with a round hole',2255,2255,4.20000000000000017,19.5,NULL,1.60000000000000008,'coin',2255,2255,2255,NULL,'Autonomous communities of Spain',NULL,NULL,1,'rgb(183,164,100)'); -INSERT INTO NumistaType VALUES(2304,'https://en.numista.com/catalogue/pieces2304.html','100 Pesetas - Juan Carlos I (FAO)','coin','espagne',1995,1995,'Circulating commemorative coin',2304,2304,'Round',2304,2304,9.25,24.5,NULL,2.29999999999999982,'coin',2304,2304,2304,NULL,NULL,'FAO','exist with abnormal rim',1,'rgb(189,165,116)'); -INSERT INTO NumistaType VALUES(2374,'https://en.numista.com/catalogue/pieces2374.html','100 Pesetas - Juan Carlos I','coin','espagne',1976,1976,'Standard circulation coin',2374,2374,'Round',2374,2374,17.0,34.0,NULL,2.10000000000000008,'coin',2374,2374,2374,NULL,NULL,NULL,NULL,1,'rgb(181.75531914893617,138.35106382978722,73.24468085106383)'); -INSERT INTO NumistaType VALUES(2375,'https://en.numista.com/catalogue/pieces2375.html','10 Stotinki','coin','bulgarie',1999,2002,'Standard circulation coin',2375,2375,'Round',2375,2375,3.0,18.3999999999999985,NULL,1.5,'medal',2375,2375,2375,NULL,NULL,NULL,replace(replace('There are two different versions from 1999:
\r\n- Yellow matte, thickness: 1.59mm, Rectangular rim
\r\n- White shiny, thickness: 1,54mm, Rounded rim
\r\nSee this topic
\r\n ','\r',char(13)),'\n',char(10)),14,'rgb(157.25,144.5,97.74999999999999)'); -INSERT INTO NumistaType VALUES(2376,'https://en.numista.com/catalogue/pieces2376.html','20 Stotinki','coin','bulgarie',1999,2002,'Standard circulation coin',2376,2376,'Round',2376,2376,4.0,20.5,NULL,1.68999999999999994,'medal',2376,2376,2376,NULL,NULL,NULL,replace(replace('Two varieties for 1999:
\r\n- Small stars, ​angular/square shoulder
\r\n- Big stars, bold lettering, rounded shoulder
\r\n
\r\n','\r',char(13)),'\n',char(10)),7,'rgb(157.98913043478262,149.67391304347825,97.01086956521736)'); -INSERT INTO NumistaType VALUES(2383,'https://en.numista.com/catalogue/pieces2383.html','25 Escudos','coin','portugal',1977,1978,'Standard circulation coin',2383,2383,'Round',2383,2383,9.5,26.25,NULL,2.39999999999999991,'coin',2383,2383,2383,NULL,'System 1969-1980',NULL,NULL,3,'rgb(159.375,143.4375,95.625)'); -INSERT INTO NumistaType VALUES(2384,'https://en.numista.com/catalogue/pieces2384.html','25 Escudos','coin','portugal',1980,1986,'Standard circulation coin',2384,2384,'Round',2384,2384,10.8000000000000007,28.5,NULL,2.25,'coin',2384,2384,2384,NULL,'System 1981-2001',NULL,'This coin is larger than the previous version (KM# 607, Schön# 63).',7,'rgb(137.30769230769232,123.04195804195807,117.69230769230766)'); -INSERT INTO NumistaType VALUES(2432,'https://en.numista.com/catalogue/pieces2432.html','500 Pesos','coin','colombie',1993,2012,'Standard circulation coin',2432,2432,'Round',2432,2432,7.40000000000000035,23.8000000000000007,NULL,2.25,'coin',2432,2432,2432,NULL,NULL,NULL,replace(replace('Varieties exist both in terms of the ratio of design size and the inner circle and in terms of placement of writing along the rim (closer vs. farther from the coin edge):
\r\n
\r\n
\r\nVarieties exist on the 1997 lettering:
\r\n @Duberney Osorio
\r\n
\r\n
\r\nFalse coin, 2004, 6,8 grams with rotation error
\r\n
\r\n
\r\n@Darthvader (Numista)','\r',char(13)),'\n',char(10)),1,'rgb(163.20000000000005,129.68571428571428,91.79999999999997)'); -INSERT INTO NumistaType VALUES(2433,'https://en.numista.com/catalogue/pieces2433.html','100 Pesos','coin','colombie',1992,2012,'Standard circulation coin',2433,2433,'Round',2433,2433,5.3099999999999996,23.0,NULL,1.55000000000000004,'coin',2433,2433,2433,NULL,NULL,NULL,replace(replace('Documentation of numeral sizes in the denomination
\r\n
\r\nOle
\r\n
\r\nDesign varieties exist:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(171.5178571428571,127.49999999999997,83.4821428571429)'); -INSERT INTO NumistaType VALUES(2504,'https://en.numista.com/catalogue/pieces2504.html','5 Pesos (magnetic)','coin','republique_dominicaine',2002,2020,'Standard circulation coin',2504,2504,'Round',2504,2504,6.0,23.0,NULL,2.14999999999999991,'coin',2504,2504,2504,NULL,NULL,NULL,replace(replace('For the 2008 non-magnetic center , see https://en.numista.com/catalogue/pieces220030.html
\r\n
\r\nDifferences between the 2008 magnetic and 2008 non-magnetic in case you don't have a magnet. All differences are on the reverse. Different coloured arrows within a picture are always equal (copy & paste).
\r\n
\r\n
\r\n© Essor Prof
\r\n
\r\n1. Different fonts for "PESOS". The magnetic coin has a bigger hole in the "P", longer legs for the "E", more curled "S's" and an oval "O".
\r\n
\r\n
\r\n© Essor Prof
\r\n
\r\n2. The dots beside the lettering "REPUBLICA DOMINICANA" are closer to this lettering and the lettering itself is closer to the inner ring on the magnetic coin.
\r\n
\r\n
\r\n© Essor Prof
\r\n
\r\n3. The date on the magnetic coin is wider and closer to the rim.
\r\n
\r\n
\r\n© Essor Prof
\r\n
\r\n4. Many differences on the coat of arms. On the magnetic coin:
\r\n- The upper banner is very close to the outer ring.
\r\n- Shorter shield.
\r\n- Less and wider horizontal and vertical bars on the shield.
\r\n- Bigger arrow heads on the flag poles.
\r\n- Smaller cross.
\r\n- Different flag drapes.
\r\n- More leaves touching the lower banner at left.
\r\n- The knot under the lower banner is flatter.','\r',char(13)),'\n',char(10)),1,'rgb(108,84,52)'); -INSERT INTO NumistaType VALUES(2560,'https://en.numista.com/catalogue/pieces2560.html','20 Escudos (Sailing ship "Novas de Alegria")','coin','cap-vert',1994,1994,'Circulating commemorative coin',2560,2560,'Round',2560,2560,5.90000000000000035,25.0,NULL,NULL,'medal',2560,2560,2560,NULL,'Ships sailing under Cabo Verde Flag Series','Sailing ship "Novas de Alegria"',NULL,2,'rgb(144.8863636363636,119.77272727272727,110.1136363636364)'); -INSERT INTO NumistaType VALUES(2736,'https://en.numista.com/catalogue/pieces2736.html','25 Pesetas - Juan Carlos I','coin','espagne',1976,1980,'Standard circulation coin',2736,2736,'Round',2736,2736,8.5,26.5,NULL,1.69999999999999995,'coin',2736,2736,2736,NULL,NULL,NULL,replace('Year 1979 - there are coins with a squared edge and thickness mm. 2.15 and with
\nrounded edge and thickness mm. 2.00  ','\n',char(10)),1,'rgb(155.21739130434784,129.34782608695653,99.78260869565216)'); -INSERT INTO NumistaType VALUES(2763,'https://en.numista.com/catalogue/pieces2763.html','1 Pound - Elizabeth II (4th portrait; Menai Bridge)','coin','royaume-uni',2005,2005,'Circulating commemorative coin',2763,2763,'Round',2763,2763,9.5,22.5,NULL,3.14999999999999991,'medal',2763,2763,2763,NULL,'Regional Bridge series','Wales',replace(replace('The second of four Edwina Ellis bridge designs, representing Wales, the Menai Suspension Bridge (Welsh: Pont Grog y Borth) is a suspension bridge that carries road traffic between the island of Anglesey and the mainland of Wales. The bridge was opened on 30 January 1826 and on 28 February 2005 the bridge was promoted to UNESCO as a candidate World Heritage Site.
\r\n
\r\nIssued for circulation as well as in the Annual sets in both Brilliant Uncirculated (51,776 sales) and Proof quality, the coin was also issued individually in a BU pack (24,802 sales) as well as in a triple coin pack with the Gunpowder Plot £2 and Samuel Johnson Dictionary 50p (10,822 sales), the coin was also struck in silver proof, silver piedfort and gold proof.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(193,164,82)'); -INSERT INTO NumistaType VALUES(2842,'https://en.numista.com/catalogue/pieces2842.html','10 Pesos','coin','chili',1981,1990,'Standard circulation coin',2842,2842,'Round',2842,2842,3.5,21.0,NULL,1.30000000000000004,'coin',2842,2842,2842,NULL,NULL,NULL,replace(replace('1986 Varieties:
\r\n
\r\n
\r\n1988 Varieties:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(209,156,81)'); -INSERT INTO NumistaType VALUES(2903,'https://en.numista.com/catalogue/pieces2903.html','20 Cents (iNingizimu Afrika)','coin','afrique_du_sud',2007,2020,'Standard circulation coin',2903,2903,'Round',2903,2903,3.5,19.0,NULL,1.80000000000000004,'medal',2903,2903,2903,NULL,NULL,NULL,replace(replace('Legends in the 11 Official Languages of the Republic of South Africa:
\r\nAfrikaans: Suid-Afrika
\r\nEnglish: South Africa
\r\nSesotho and Sepedi: Afrika Borwa
\r\nTswana: Aforika Borwa
\r\nXhosa: uMzantsi Afrika
\r\nZulu: iNingizimu Afrika
\r\nNdebele: iSewula frika
\r\nVenda: Afurika Tshipembe
\r\nsiSwati: Ningizimu Afrika
\r\nTsonga: Afrika Dzonga','\r',char(13)),'\n',char(10)),1,'rgb(200,164,116)'); -INSERT INTO NumistaType VALUES(2986,'https://en.numista.com/catalogue/pieces2986.html','100 Pesetas - Juan Carlos I (Year of Older Persons)','coin','espagne',1999,1999,'Circulating commemorative coin',2986,2986,'Round',2986,2986,9.25,24.5,NULL,2.29999999999999982,'coin',2986,2986,2986,NULL,NULL,'International Year of Older Persons',replace('Exists with united points all around.
\n','\n',char(10)),1,'rgb(174,145,82)'); -INSERT INTO NumistaType VALUES(2994,'https://en.numista.com/catalogue/pieces2994.html','2 Euro (Bundesländer - "Hamburg")','coin','allemagne',2008,2008,'Circulating commemorative coin',2994,2994,'Round',2994,2994,8.5,25.75,NULL,2.20000000000000017,'medal',2994,2994,2994,NULL,'German states','Federal State of Hamburg',replace(replace('This coin was issued in 2008 by the Stuttgart Mint. It was supposed to have the "New" Europe Map on the reverse. The Stuttgart Mint (F) accidentally issued 600,000 of them with the "Old" Europe Map on the reverse. They realised their error and issued their remaining allocation, 9,000,000, with the correct reverse. The Mule coin has got a separate KM# (KM# A261) from the correctly issued coin (KM# 261)
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(137,94,52)'); -INSERT INTO NumistaType VALUES(3002,'https://en.numista.com/catalogue/pieces3002.html','10 Centavos','coin','equateur',2000,2000,'Standard circulation coin',3002,3002,'Round',3002,3002,2.29999999999999982,17.8999999999999985,NULL,1.30000000000000004,'coin',3002,3002,3002,NULL,NULL,NULL,'Due to rampant inflation in the 1980's and 1990's, the government of Ecuador abandoned the Sucre in 2000 and adopted the United States Dollar. These coins where introduced to supplement the circulation of the Dime.',1,'rgb(196,156,124)'); -INSERT INTO NumistaType VALUES(3044,'https://en.numista.com/catalogue/pieces3044.html','1 Yeni Lira','coin','turquie',2005,2008,'Standard circulation coin',3044,3044,'Round',3044,3044,8.5,26.1499999999999985,NULL,1.89999999999999991,'medal',3044,3044,3044,NULL,NULL,NULL,replace(replace('The mint set "The first minted new uncirculated coins 2005."
\r\nPicture: © Images courtesy of Alexandr Prokofyev.
\r\n ','\r',char(13)),'\n',char(10)),3,'rgb(149,113,71)'); -INSERT INTO NumistaType VALUES(3200,'https://en.numista.com/catalogue/pieces3200.html','50 Pesetas - Juan Carlos I','coin','espagne',1975,1980,'Standard circulation coin',3200,3200,'Round',3200,3200,12.5,30.0,NULL,2.0,'coin',3200,3200,3200,NULL,NULL,NULL,NULL,1,'rgb(155.3448275862069,134.82758620689657,99.65517241379312)'); -INSERT INTO NumistaType VALUES(3223,'https://en.numista.com/catalogue/pieces3223.html','20 Centavos','coin','bolivie',1987,2008,'Standard circulation coin',3223,3223,'Round',3223,3223,3.66000000000000014,22.0,NULL,1.26,'coin',3223,3223,3223,NULL,NULL,NULL,replace(replace('Different denominations:
\r\n
\r\n
\r\nDifferent designs of the coat of arms:
\r\n
\r\n
\r\nDifferent design varieties exist:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(123.33333333333331,131.66666666666669,123.33333333333331)'); -INSERT INTO NumistaType VALUES(3224,'https://en.numista.com/catalogue/pieces3224.html','50 Centavos','coin','bolivie',1965,1980,'Standard circulation coin',3224,3224,'Round',3224,3224,4.0,24.0,NULL,2.0,'medal',3224,3224,3224,NULL,NULL,NULL,NULL,1,'rgb(145.45774647887322,127.5,109.54225352112678)'); -INSERT INTO NumistaType VALUES(3225,'https://en.numista.com/catalogue/pieces3225.html','50 Centavos','coin','bolivie',1987,2008,'Standard circulation coin',3225,3225,'Round',3225,3225,3.79999999999999982,24.0,NULL,1.23999999999999999,'coin',3225,3225,3225,NULL,NULL,NULL,replace(replace('Different designs of the coat of arms:
\r\n
\r\n
\r\nDifferent denominations:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(132.68292682926833,122.31707317073166,126.46341463414632)'); -INSERT INTO NumistaType VALUES(3228,'https://en.numista.com/catalogue/pieces3228.html','1 Boliviano','coin','bolivie',1987,2008,'Standard circulation coin',3228,3228,'Round',3228,3228,5.0,27.0,NULL,1.26,'coin',3228,3228,3228,NULL,NULL,NULL,replace(replace('Different designs of the coat of arms:
\r\n
\r\n
\r\nDifferent denominations:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(126.60839160839161,119.47552447552445,135.52447552447555)'); -INSERT INTO NumistaType VALUES(3256,'https://en.numista.com/catalogue/pieces3256.html','25 Centavos','coin','argentine',1992,2010,'Standard circulation coin',3256,3256,'Round',3256,3256,5.40000000000000035,24.1999999999999992,NULL,1.73599999999999998,'coin',3256,3256,3256,NULL,NULL,NULL,replace(replace('CJ# 4.1.1 - 1992 - Chile Mint
\r\nCJ# 4.1.2 - 1992 -Brazil Mint struck with Chilean mintmark
\r\nCJ# 4.2.1 - 1993 - South African Mint
\r\nCJ# 4.5.1 - 2009 - Chile Mint
\r\nCJ# 4.5.2 - 2009 - Argentina Mint
\r\nCJ# 4.6.1 - 2010 - Argentina Mint
\r\nCJ# 4.6.2 - 2010 - Slovakia Mint
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(192,164,100)'); -INSERT INTO NumistaType VALUES(3282,'https://en.numista.com/catalogue/pieces3282.html','20 Centavos','coin','portugal',1969,1974,'Standard circulation coin',3282,3282,'Round',3282,3282,1.80000000000000004,16.0,NULL,1.14999999999999991,'coin',3282,3282,3282,NULL,'System 1969-1980',NULL,'The olive fruit/tree (Binomial name:  Olea europaea).',9,'rgb(151,108,68)'); -INSERT INTO NumistaType VALUES(3372,'https://en.numista.com/catalogue/pieces3372.html','10 Euro Cent (1st type; 2nd map)','coin','espagne',2007,2009,'Standard circulation coin',3372,3372,'Round',3372,3372,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',3372,3372,3372,NULL,NULL,NULL,NULL,2,'rgb(178,138,73)'); -INSERT INTO NumistaType VALUES(3510,'https://en.numista.com/catalogue/pieces3510.html','10 Euro Cent (2nd map)','coin','france',2007,2023,'Standard circulation coin',3510,3510,'Round',3510,3510,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',3510,3510,3510,NULL,NULL,NULL,replace(replace('Different Mint Master Marks
\r\n
  • Hubert Lariviere, from 2007 to 2010, a mark of a hunting horn with a wave and a fish
    \r\n
  • Yves Sampo, since 2011 to 2020, a mark of a Pentagon with letters AG, MP and YS
    \r\n
  • Joaquin Jimenez, since 2021, a mark of a square with a circle and a broken line in the small square
    \r\n

\r\nBUNC Sets Released
\r\n
  • 2007 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2008 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2009 - 50000 Annual Coin Sets + 3 different illustrated Coin Sets of 500 or 1000 issues each
    \r\n
  • 2010 - 50000 Annual Coin Sets + 9 different illustrated Coin Sets of 500 issues each + 1000 Coin Sets Jour de la Monnaie (Guest Of Honour)
    \r\n
  • 2011 - 40000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2012 - 40000 Annual Coin Sets + 6 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2013 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2014 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2015 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2016 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2017 - 25000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2018 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2019 - 15000 Annual Coin Sets + 2 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2020 - 15000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each + 2 different illustrated Coin Sets of 500 issues each with the 2€ 2020 Charles De Gaulle commemorative coin instead of the regular 2€ coin
    \r\n

\r\nPROOF Sets Released
\r\n
  • From 2007 to 2012 - Annual Coin Sets
    \r\n
  • 2013 - Annual Coin Sets + Annual Coin Sets Prestige with the 100€ gold coin of The Sower - Pessac Site
    \r\n
  • From 2014 to the present - Annual Coin Sets
    \r\n
','\r',char(13)),'\n',char(10)),4,'rgb(244,212,68)'); -INSERT INTO NumistaType VALUES(3818,'https://en.numista.com/catalogue/pieces3818.html','5 Dirhams - Mohammed VI','coin','maroc',2002,2002,'Standard circulation coin',3818,3818,'Round',3818,3818,7.5,25.0,NULL,2.0,'coin',3818,3818,3818,NULL,NULL,NULL,NULL,1,'rgb(152.47422680412373,134.07216494845358,102.52577319587627)'); -INSERT INTO NumistaType VALUES(3888,'https://en.numista.com/catalogue/pieces3888.html','100 Pesetas (Way of St. James)','coin','espagne',1993,1993,'Circulating commemorative coin',3888,3888,'Round',3888,3888,9.25,24.5,NULL,2.29999999999999982,'coin',3888,3888,3888,NULL,'Jubilee Year of St. James',NULL,NULL,2,'rgb(172,148,76)'); -INSERT INTO NumistaType VALUES(3932,'https://en.numista.com/catalogue/pieces3932.html','5 Pesetas - Juan Carlos I (with mintmark)','coin','espagne',1982,1989,'Standard circulation coin',3932,3932,'Round',3932,3932,5.75,23.0,NULL,1.5,'coin',3932,3932,3932,NULL,NULL,NULL,NULL,1,'rgb(127.5,127.5,127.5)'); -INSERT INTO NumistaType VALUES(4038,'https://en.numista.com/catalogue/pieces4038.html','1 Penny - Elizabeth II (4th portrait; Royal Shield)','coin','royaume-uni',2008,2015,'Standard circulation coin',4038,4038,'Round',4038,4038,3.56000000000000005,20.3000000000000007,NULL,1.64999999999999991,'medal',4038,4038,4038,NULL,NULL,NULL,replace(replace('Introduced in 2008 when the small coinage designs were changed from the Emblems of Britain to the Royal Shield of Arms. The 2008 coin was issued part way through the year and so was not part of the annual coin sets, however it was issued in both a Brilliant Uncirculated set (Issue Limit: 100,000) and a Proof set (Issue Limit: 20,000) it was also issued in silver proof, silver piedfort, gold proof and platinum proof.
\r\n
\r\n© The Royal Mint, 2008
\r\n
\r\nThe 2015 strike was issued as part of the dual set to commemorate the change from the 4th portrait to the 5th and was also struck in silver proof, gold proof and platinum proof.
\r\n
\r\n©The Royal Mint, 2015
\r\n
\r\n(former Spink ref. 4711)','\r',char(13)),'\n',char(10)),4,'rgb(188,132,92)'); -INSERT INTO NumistaType VALUES(4039,'https://en.numista.com/catalogue/pieces4039.html','2 Pence - Elizabeth II (4th portrait; Royal Shield)','coin','royaume-uni',2008,2015,'Standard circulation coin',4039,4039,'Round',4039,4039,7.1200000000000001,25.8999999999999985,NULL,2.04999999999999982,'medal',4039,4039,4039,NULL,NULL,NULL,replace(replace('Introduced in 2008 when the small coinage designs were changed from the Emblems of Britain to the Royal Shield of Arms. The 2008 coin was issued part way through the year and so was not part of the annual coin sets, however it was issued in both a Brilliant Uncirculated set (Issue Limit: 100,000) and a Proof set (Issue Limit: 20,000) it was also issued in silver proof, silver piedfort, gold proof and platinum proof.
\r\n
\r\n© The Royal Mint, 2008
\r\n
\r\nThe 2015 strike was issued as part of the dual set to commemorate the change from the 4th portrait to the 5th and was also struck in silver proof, gold proof and platinum proof.
\r\n
\r\n©The Royal Mint, 2015
\r\n(former Spink ref. 4691)','\r',char(13)),'\n',char(10)),2,'rgb(180,113,76)'); -INSERT INTO NumistaType VALUES(4141,'https://en.numista.com/catalogue/pieces4141.html','5 Réis - Luíz I','coin','portugal',1882,1886,'Standard circulation coin',4141,4141,'Round',4141,4141,2.79999999999999982,20.5,NULL,1.19999999999999995,'coin',4141,4141,4141,NULL,NULL,NULL,NULL,1,'rgb(168,110,72)'); -INSERT INTO NumistaType VALUES(4546,'https://en.numista.com/catalogue/pieces4546.html','50 Pesetas - Juan Carlos I (Expo ''92)','coin','espagne',1990,1990,'Circulating commemorative coin',4546,4546,'Spanish flower',4546,4546,5.59999999999999964,20.5,NULL,1.89999999999999991,'coin',4546,4546,4546,NULL,'Seville Expo ''92',NULL,replace('Albeit relatively scarce, there is one well known variant of this coin, traditionally known as the Pantograph Error. There are three main features through which the Pantograph Error can be distinguished. Firstly, the rim in the error coin is thinner. Secondly, the portrait of Juan Carlos I is somewhat bigger than in the normal coin. And thirdly, the sphere on the reverse of the error coin is also bigger, and usually, it presents a blank space in its center, probably due to a weak strike.
\n
\nThe following image of the Pantograph Error is courtesy of Aureo & Calicó:
\n ','\n',char(10)),1,'rgb(144.50000000000003,130.33333333333326,110.49999999999997)'); -INSERT INTO NumistaType VALUES(4580,'https://en.numista.com/catalogue/pieces4580.html','50 Kopecks (magnetic; smooth edge)','coin','russie',2006,2015,'Standard circulation coin',4580,4580,'Round',4580,4580,2.75,19.5,NULL,1.5,'medal',4580,4580,4580,NULL,NULL,NULL,replace(replace('Two types of this coin exist.
\r\n
\r\nType 1 (2006—2014): steel base clad with tombac (90% Cu, 10% Zn) on the obverse and reverse side. Edge is partially covered, with steel base visible. The colour of the coin is bronze.
\r\n
\r\nType 2 (2008, 2014—2015): steel base electroplated with brass (75% Cu, 25% Zn). Both sides and edges are fully covered, the steel base is not visible. The colour of the coin is yellow.
\r\n
\r\n
\r\n
\r\nDesign varieties exist. More details available here:
\r\nhttps://vse-monety.ru/katalog-a-stashkina-50-kopeek-1997-2015-gg/','\r',char(13)),'\n',char(10)),1,'rgb(181,129,66)'); -INSERT INTO NumistaType VALUES(4729,'https://en.numista.com/catalogue/pieces4729.html','100 Escudos (Expo 98 -Sea Lion)','coin','portugal',1997,1997,'Circulating commemorative coin',4729,4729,'Round',4729,4729,8.30000000000000071,25.5,NULL,2.29999999999999982,'coin',4729,4729,4729,NULL,'System 1981-2001','Lisbon World Expo ''98',NULL,2,'rgb(168,133,77)'); -INSERT INTO NumistaType VALUES(4901,'https://en.numista.com/catalogue/pieces4901.html','50 Centavos','coin','bolivie',1942,1942,'Standard circulation coin',4901,4901,'Round',4901,4901,5.09999999999999964,24.6000000000000014,NULL,1.69999999999999995,'medal',4901,4901,4901,NULL,NULL,NULL,replace(replace('Although the "Standard Catalog of World Coins" lists this type as being made of Bronze, official mint records state that these coins are made of Copper and Zinc (Brass).
\r\n
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),5,'rgb(177,80,65)'); -INSERT INTO NumistaType VALUES(4902,'https://en.numista.com/catalogue/pieces4902.html','50 Centavos','coin','bolivie',1939,1939,'Standard circulation coin',4902,4902,'Round',4902,4902,8.44999999999999929,29.0,NULL,1.87999999999999989,'medal',4902,4902,4902,NULL,NULL,NULL,NULL,1,'rgb(145.7142857142857,125.4761904761905,109.28571428571429)'); -INSERT INTO NumistaType VALUES(5010,'https://en.numista.com/catalogue/pieces5010.html','5 Cents (non-magnetic)','coin','bahamas',1974,2006,'Standard circulation coin',5010,5010,'Round',5010,5010,3.93999999999999994,21.0,NULL,1.53000000000000002,'medal',5010,5010,5010,NULL,NULL,NULL,NULL,1,'rgb(184.53947368421052,167.76315789473682,70.46052631578947)'); -INSERT INTO NumistaType VALUES(5012,'https://en.numista.com/catalogue/pieces5012.html','15 Cents','coin','bahamas',1974,2005,'Standard circulation coin',5012,5012,'Square with rounded corners',5012,5012,6.48000000000000042,25.0,NULL,2.06000000000000005,'medal',5012,5012,5012,NULL,NULL,NULL,NULL,1,'rgb(184,184,184)'); -INSERT INTO NumistaType VALUES(5063,'https://en.numista.com/catalogue/pieces5063.html','2 Euro (10 Years of EMU)','coin','france',2009,2009,'Circulating commemorative coin',5063,5063,'Round',5063,5063,8.5,25.75,NULL,2.20000000000000017,'medal',5063,5063,5063,NULL,'10 Years of EMU','10th Anniversary of the European Monetary Union',replace(replace('
\r\n
\r\nThe design was chosen out of a shortlist of five by members of the public across the European Union voting online. It was created by George Stamatopoulos, a sculptor from the Minting department at the Bank of Greece.
\r\n
\r\nCoincard:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(52,76,124)'); -INSERT INTO NumistaType VALUES(5086,'https://en.numista.com/catalogue/pieces5086.html','5 Euro Cent','coin','slovaquie',2009,2023,'Standard circulation coin',5086,5086,'Round',5086,5086,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',5086,5086,5086,NULL,NULL,NULL,replace(replace('New version of the common side seen from 2020 onwards. Main differences:
\r\n - Thicker and shorter numeral
\r\n - Rounded edges of the numeral
\r\n - Thicker font in "EURO CENT"
\r\n - Thicker lines with longer ends outside of stars
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(169,104,73)'); -INSERT INTO NumistaType VALUES(5090,'https://en.numista.com/catalogue/pieces5090.html','1 Euro','coin','slovaquie',2009,2023,'Standard circulation coin',5090,5090,'Round',5090,5090,7.5,23.25,NULL,2.33000000000000007,'medal',5090,5090,5090,NULL,NULL,NULL,NULL,1,'rgb(116,92,44)'); -INSERT INTO NumistaType VALUES(5091,'https://en.numista.com/catalogue/pieces5091.html','2 Euros','coin','slovaquie',2009,2024,'Standard circulation coins',5091,5091,'Round',5091,5091,8.5,25.75,NULL,2.20000000000000017,'medal',5091,5091,5091,NULL,NULL,NULL,'

Variations in the leaf (left) stamped in the edge lettering are known (examples for 2009):

',1,'rgb(196,180,116)'); -INSERT INTO NumistaType VALUES(5109,'https://en.numista.com/catalogue/pieces5109.html','1 Lev','coin','bulgarie',2002,2002,'Standard circulation coin',5109,5109,'Round',5109,5109,7.0,24.5,NULL,1.89999999999999991,'medal',5109,5109,5109,NULL,NULL,NULL,NULL,7,'rgb(198,178,124)'); -INSERT INTO NumistaType VALUES(5444,'https://en.numista.com/catalogue/pieces5444.html','10 Escudos','coin','portugal',1971,1974,'Standard circulation coin',5444,5444,'Round',5444,5444,10.0,28.0,NULL,2.18000000000000016,'coin',5444,5444,5444,NULL,'System 1969-1980',NULL,'There are 2 edge alignments in all dates',2,'rgb(180.96774193548387,134.35483870967735,74.03225806451611)'); -INSERT INTO NumistaType VALUES(5492,'https://en.numista.com/catalogue/pieces5492.html','25 Escudos (Accession to the EEC)','coin','portugal',1986,1986,'Circulating commemorative coin',5492,5492,'Round',5492,5492,11.0,28.5,NULL,2.25,'coin',5492,5492,5492,NULL,'System 1981-2001','Accession of Portugal to the European Economic Community',NULL,2,'rgb(139.30555555555554,139.30555555555554,115.69444444444444)'); -INSERT INTO NumistaType VALUES(5624,'https://en.numista.com/catalogue/pieces5624.html','200 Pesetas (Jacinto Benavente)','coin','espagne',1997,1997,'Circulating commemorative coin',5624,5624,'Round',5624,5624,10.5,25.5,NULL,2.29999999999999982,'coin',5624,5624,5624,NULL,NULL,'75th anniversary of Nobel Prize for Jacinto Benavente',NULL,1,'rgb(149.84536082474224,134.07216494845358,105.15463917525776)'); -INSERT INTO NumistaType VALUES(5628,'https://en.numista.com/catalogue/pieces5628.html','20 Pence - Elizabeth II (4th portrait; Royal Shield)','coin','royaume-uni',2008,2015,'Standard circulation coin',5628,5628,'Equilateral curve heptagon (7-sided)',5628,5628,5.0,21.3999999999999985,NULL,1.69999999999999995,'medal',5628,5628,5628,NULL,NULL,NULL,replace(replace('Introduced in 2008 when the small coinage designs were changed from the Emblems of Britain to the Royal Shield of Arms. The 2008 coin was issued part way through the year and so was not part of the annual coin sets, however it was issued in both a Brilliant Uncirculated set (Issue Limit: 100,000) and a Proof set (Issue Limit: 20,000) it was also issued in silver proof, silver piedfort, gold proof and platinum proof.
\r\n
\r\n© The Royal Mint, 2008
\r\n
\r\nA mule was introduced using the reverse from this coin with the Ian Rank-Broadley obverse of the William Gardner Tudor Rose reverse.
\r\n
\r\nThe 2015 strike was issued as part of the dual set to commemorate the change from the 4th portrait to the 5th and was also struck in silver proof, gold proof and platinum proof.
\r\n
\r\n©The Royal Mint, 2015
\r\n
\r\n(former Spink ref. 4631)','\r',char(13)),'\n',char(10)),3,'rgb(180,148,92)'); -INSERT INTO NumistaType VALUES(5737,'https://en.numista.com/catalogue/pieces5737.html','2 Rupees - Monarchy/Republic','coin','nepal',2006,2009,'Standard circulation coin',5737,5737,'Round',5737,5737,5.0,24.9299999999999997,NULL,1.58000000000000007,'medal',5737,5737,5737,NULL,NULL,NULL,NULL,1,'rgb(197,156,60)'); -INSERT INTO NumistaType VALUES(5786,'https://en.numista.com/catalogue/pieces5786.html','200 Escudos (Espingarda)','coin','portugal',1993,1993,'Circulating commemorative coin',5786,5786,'Round',5786,5786,21.1000000000000014,36.0,NULL,2.79999999999999982,'coin',5786,5786,5786,NULL,'IV-Portuguese Discoveries (Arrival to Japan)','Espingarda',NULL,1,'rgb(140.3488372093024,124.53488372093022,114.65116279069763)'); -INSERT INTO NumistaType VALUES(6071,'https://en.numista.com/catalogue/pieces6071.html','2.50 Escudos (Alexandre Herculano)','coin','portugal',1977,1977,'Circulating commemorative coin',6071,6071,'Round',6071,6071,3.5,20.0,NULL,1.60000000000000008,'coin',6071,6071,6071,NULL,'System 1969-1980','100th Anniversary of the Death of Alexandre Herculano',replace(replace('The Proof-Like coins were release in a 3 coin set containing the 2$50, 5$, 25$00 coins.
\r\n
\r\nImages of the Proof-Like Set: (The set does not come originally with the coin in a flip, but due to the hazard nature of the plastic used in the set usually the owners protect the coin with some extra holder)
\r\n
\r\n
\r\nThe original disposition of the coins without posterious extra protection:
\r\n','\r',char(13)),'\n',char(10)),4,'rgb(145.45774647887322,140.0704225352113,109.54225352112678)'); -INSERT INTO NumistaType VALUES(6163,'https://en.numista.com/catalogue/pieces6163.html','1 Lira','coin','turquie',2009,2022,'Standard circulation coin',6163,6163,'Round',6163,6163,8.19999999999999929,26.1499999999999985,NULL,2.0,'medal',6163,6163,6163,NULL,NULL,NULL,replace(replace('Out of real varieties, the types with the wide and narrow bottom of numeral "1" on the reverse in 2009 are the most popular.
\r\n
\r\n
\r\n
\r\nT.C. on edge readable with obverse  or reverse up','\r',char(13)),'\n',char(10)),23,'rgb(180,140,97)'); -INSERT INTO NumistaType VALUES(6164,'https://en.numista.com/catalogue/pieces6164.html','25 Kuruş','coin','turquie',2009,2022,'Standard circulation coin',6164,6164,'Round',6164,6164,4.0,20.5,NULL,1.5,'medal',6164,6164,6164,NULL,NULL,NULL,'Kufic is the oldest calligraphic form of the various Arabic scripts developed in the 7th century.',1,'rgb(196,180,132)'); -INSERT INTO NumistaType VALUES(6165,'https://en.numista.com/catalogue/pieces6165.html','10 Kuruş','coin','turquie',2009,2023,'Standard circulation coin',6165,6165,'Round',6165,6165,3.14999999999999991,18.5,NULL,1.55000000000000004,'medal',6165,6165,6165,NULL,NULL,NULL,'Two types of year 2012: normal and bold',6,'rgb(172,188,76)'); -INSERT INTO NumistaType VALUES(6185,'https://en.numista.com/catalogue/pieces6185.html','1 Escudo','coin','cap-vert',1994,1994,'Standard circulation coin',6185,6185,'Round',6185,6185,2.5,18.0,NULL,1.5,'medal',6185,6185,6185,NULL,NULL,NULL,NULL,4,'rgb(188,171,111)'); -INSERT INTO NumistaType VALUES(6258,'https://en.numista.com/catalogue/pieces6258.html','10 Escudos (Council of Europe - Rural World)','coin','portugal',1987,1987,'Circulating commemorative coin',6258,6258,'Round',6258,6258,7.40000000000000035,23.5,NULL,2.35000000000000008,'coin',6258,6258,6258,NULL,'System 1981-2001','Council of Europe - Rural World',NULL,2,'rgb(164,148,68)'); -INSERT INTO NumistaType VALUES(6278,'https://en.numista.com/catalogue/pieces6278.html','50 Paisa - Birendra Bir Bikram','coin','nepal',1994,2000,'Standard circulation coin',6278,6278,'Round',6278,6278,1.39999999999999991,22.5,NULL,NULL,'medal',6278,6278,6278,NULL,NULL,NULL,replace(replace('Varieties in design are result of two mints. Singapore mint has fine design and small lettering; Kathmandu mint has rough design and bigger lettering:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(122.48031496062993,132.51968503937007,130.51181102362204)'); -INSERT INTO NumistaType VALUES(6290,'https://en.numista.com/catalogue/pieces6290.html','20 Euro Cent - Albert II (2nd map, 1st type, 1st portrait)','coin','belgique',2007,2007,'Standard circulation coin',6290,6290,'Spanish flower',6290,6290,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',6290,6290,6290,NULL,NULL,NULL,replace(replace('Documentation:
\r\n
\r\nOle','\r',char(13)),'\n',char(10)),1,'rgb(244,212,52)'); -INSERT INTO NumistaType VALUES(6293,'https://en.numista.com/catalogue/pieces6293.html','2 Euro - Albert II (2nd map, 2nd type, 2nd portrait)','coin','belgique',2008,2008,'Standard circulation coin',6293,6293,'Round',6293,6293,8.5,25.75,NULL,2.20000000000000017,'medal',6293,6293,6293,NULL,NULL,NULL,replace(replace('Privy mark:
\r\n
  • Scales: Romain Coenen, 1987-2009
    \r\n
','\r',char(13)),'\n',char(10)),1,'rgb(44,92,150)'); -INSERT INTO NumistaType VALUES(6298,'https://en.numista.com/catalogue/pieces6298.html','1 Euro Cent - Albert II (2nd type, 1st portrait)','coin','belgique',2009,2013,'Standard circulation coin',6298,6298,'Round',6298,6298,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',6298,6298,6298,NULL,NULL,NULL,NULL,6,'rgb(175,116,83)'); -INSERT INTO NumistaType VALUES(6307,'https://en.numista.com/catalogue/pieces6307.html','50 Euro Cent - Albert II (2nd map, 2nd type, 1st portrait)','coin','belgique',2009,2013,'Standard circulation coin',6307,6307,'Round',6307,6307,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',6307,6307,6307,NULL,NULL,NULL,replace(replace('Privy marks:
  • Scales, Mint Master Romain Coenen, 1987-2009
    \r\n
  • Goose quill, Mint Master Serge Lesens, 2009-2012
    \r\n
  • Cat, Mint Master Bernard Giillard, 2013-
    \r\n
','\r',char(13)),'\n',char(10)),1,'rgb(164,140,76)'); -INSERT INTO NumistaType VALUES(6319,'https://en.numista.com/catalogue/pieces6319.html','20 Euro Cent (2nd map)','coin','allemagne',2007,2023,'Standard circulation coin',6319,6319,'Spanish flower',6319,6319,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',6319,6319,6319,NULL,NULL,NULL,replace(replace('2008A Obverse mat inside
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(170,162,79)'); -INSERT INTO NumistaType VALUES(6329,'https://en.numista.com/catalogue/pieces6329.html','10 Euro Cent (2nd map)','coin','irlande',2007,2023,'Standard circulation coin',6329,6329,'Round',6329,6329,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',6329,6329,6329,NULL,NULL,NULL,NULL,1,'rgb(207,162,66)'); -INSERT INTO NumistaType VALUES(6333,'https://en.numista.com/catalogue/pieces6333.html','1 Euro (2nd map)','coin','irlande',2007,2023,'Standard circulation coin',6333,6333,'Round',6333,6333,7.5,23.25,NULL,2.33000000000000007,'medal',6333,6333,6333,NULL,NULL,NULL,NULL,1,'rgb(148,116,68)'); -INSERT INTO NumistaType VALUES(6334,'https://en.numista.com/catalogue/pieces6334.html','2 Euro (2nd map)','coin','irlande',2007,2023,'Standard circulation coin',6334,6334,'Round',6334,6334,8.5,25.75,NULL,2.20000000000000017,'medal',6334,6334,6334,NULL,NULL,NULL,'There are 2 different types of edges A and B depending on the specific star, read more at: http://www.amisdeleuro.org/fr/121',1,'rgb(124,98,43)'); -INSERT INTO NumistaType VALUES(6350,'https://en.numista.com/catalogue/pieces6350.html','20 Euro Cent (2nd map)','coin','grece',2007,2023,'Standard circulation coin',6350,6350,'Spanish flower',6350,6350,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',6350,6350,6350,NULL,NULL,NULL,replace(replace('The coin is issued in bankrolls and the above mint sets:
\r\n
\r\n2007 Official Issue Hellenic Coin Set: The Official Blister 2007 is dedicated to the "Ancient coins of the Aegean Sea”. It was issued on 13 August 2007 with a mintage of 15,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships. The middle coins portray famous Greeks. The two large denominations show images of Greek history and mythology. All designs feature the 12 stars of the EU, the year of imprint, and a tiny symbol of the Bank of Greece (the anthemion flower).
\r\n
\r\n2008 Official Issue Hellenic Coin Set: The Official Blister 2008 is dedicated to the "Ancient coins of Thrace, Macedonia, Thessaly, Epirus, and Peloponnese”. It was issued on 4 October 2008 with a mintage of 20,000 pieces. The blister contains the 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros.
\r\n
\r\n2009 Official Issue Hellenic Coin Set: The Official Blister 2009 is dedicated to the "Theran Ship", a typical Cycladic ship from the 17th century BC. The construction model was based on the Miniature Ships Fresco, depicting a fleet in procession, discovered in the West House of the prehistoric settlement of Akritiri, on the island of Thera. The "Theran Ship" blister was issued on 7 December 2009 with a mintage of 7,500 pieces. It contains the 1, 2, 5, 10, 20, 50 cent and 1, 2 euros coins.
\r\n
\r\n2010 Official Issue Hellenic Coin Set: The Official Blister 2010 is dedicated to the "Athenian Triere" (or trireme), the largest battleship for 200 years dating from the time of the Athenian democracy and Kimon (5th-century B.C.- Marine Museum). Triremes were the dominant warship in the Mediterranean from around 700 to 300 BC when naval combat took place mainly by ramming enemy vessels which would typically break apart from the force of the collision. The "Athenian Trireme” blister was issued in November 2010 and contains the 1, 2, 5, 10, 20, 50 cent and 1, 2 euros coins.
\r\n
\r\n2011 Official Issue Hellenic Coin Set: This Special Olympics Blister 2011 commemorates the XIII Special Olympics World Summer Games and contains the following coins: 1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros. Greek euro coins feature a unique design for every one of the eight coins and they were all designed by Georgios Stamatopoulos. The minor coins depict Greek ships (Athenian triere - Corvette - Modern tanker ship), the middle coins portray famous Greeks (Rigas-Fereos Velestinlis - Ioannis Kapodistrias - Eleytherios Venizelos) and the two large denominations show images of Greek history and mythology (Owl - Europa abducted by Zeus).
\r\n
\r\n2012 Official Issue Hellenic Coin Set: The official 2012 blister of the Hellenic Republic is dedicated to “Santorini” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). The Cycladic island of Santorini, also known by its ancient name of Thera, is one of the top tourist destinations in the world, thanks to its unique volcanic landscape dominated by the impressive Caldera, as shaped by a volcanic eruption in the Bronze Age. The island was an important center of Cycladic civilization, one of the earliest civilizations in Europe, as can be seen from the remarkably well-preserved remains uncovered at the prehistoric site of Akrotiri. Santorini also enchants its visitors with its traditional villages and vernacular architecture, as well as with its renowned wines and other products.
\r\n
\r\n2012 Official Issue Hellenic Proof Coin Set: The 2012 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros), as well as the 2 Euro commemorative coin for the Ten Years of Euro Cash.
\r\n
\r\n2013 Official Issue Hellenic Coin Set: The official 2013 blister of the Hellenic Republic is dedicated to “Mykonos and Delos” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). One of the first Greek islands to embrace tourism, Mykonos was a choice destination for visitors in ever-increasing numbers as early as the 1960s. Today, Mykonos is Greece’s most cosmopolitan island and receives visitors year-round. With its austere, barren, and rocky terrain and its well preserved vernacular architecture, the “island of the winds”, as it is known, is perhaps the most typical Cycladic landscape. A few miles from Mykonos lies the tiny island of Delos, sacred in antiquity for being the birthplace of Apollo and Artemis and listed as a UNESCO World Heritage Site since 1990. Uninhabited today and unmarred by any modern construction, Delos preserves much of its sanctity as an archaeological site that boasts numerous classical, Hellenistic, and Roman antiquities.
\r\n
\r\n2013 Official Issue Hellenic Proof Coin Set: The 2013 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros), as well as two 2 euro commemorative coins celebrating the Union of Crete with Greece and the Founding of the Platonic Academy.
\r\n
\r\n2014 Official Issue Hellenic Coin Set: The official 2014 blister of the Hellenic Republic is dedicated to “Thrace”, a north-east region of the country. It includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). Thrace, the north-easternmost region of Greece, comprises the Prefectures of Xanthi, Rodopi, and Evros. The region is bounded by the rivers Nestos and Evros, by the Rodopi mountain range to the North and by the Thracian Sea to the South, and has a major seaport, Alexandroupolis. Blessed with stunningly diverse and pristine nature, Thrace boasts internationally significant wetlands (e.g. the Evros Delta), lakes (e.g. Vistonis), national parks (e.g. Rodopi and Dadia), and the fascinating island of Samothrace, all increasingly popular tourist destinations. Traditionally one of the breadbaskets of Greece, Thrace is now looking for new ways to tap its huge growth potential. Thrace has also had an important and continuous presence in national and world culture, ranging from Democritus and Protagoras to a rich musical heritage, consistent with Thrace’s renown as the “land of Orpheus”, and the Xanthi Old Town Festival. Finally, the harmonious coexistence of Christians and Muslims gives Thrace’s towns and villages a unique feel, while also fostering understanding and cooperation between cultures and peoples.
\r\n
\r\n2014 Official Issue Hellenic Proof Coin Set: The 2014 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros), as well as two 2 euro commemorative coins celebrating the 400th Anniversary of the Death of Domenikos Theotokopoulos and the 150th Anniversary of the Union of the Ionian Islands with Greece.
\r\n
\r\n2015 Official Issue Hellenic Coin Set: The official 2015 blister of the Hellenic Republic is dedicated to “Epirus” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). Epirus, the north-westernmost region of Greece, is flanked to the west by the Ionian Sea and the east by the Pindos mountain range. For the ancient Greeks, Epirus had great religious importance on account of the Dodona Oracle. Milestones in the region’s later history include the Hellenistic kingdom of Pyrrhus and the late-Byzantine Despotate of Epirus, while during Ottoman rule Epirus was associated with the Greek struggle for freedom, with sites of heroic self-sacrifice at Koungi and Zalongo. After Greek independence, several Epirote benefactors (Arsakis, Tositsas, Zappas, Sinas, Averof) contributed generously to the construction of the newly founded Greek state, which Epirus became part of in two phases (the Arta district was ceded to Greece in 1881 and the rest of Epirus after the Balkan Wars of 1912-13). It was in the Epirus highlands that the Greek army waged its epic battles against the Italian invader in 1940-41. Today Epirus attracts visitors for its stunning natural scenery (Vikos gorge), seaside resorts (Parga, Syvota), traditional settlements (Ioannina, Metsovo, Zagorochoria), and rich folk tradition in music, silver and gold craftsmanship, and stone masonry.
\r\n
\r\n2015 Official Issue Hellenic Proof Coin Set: The 2015 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros).
\r\n
\r\n2016 Official Issue Hellenic Coin Set: The official 2016 blister of the Hellenic Republic is dedicated to “Peloponnese” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). The Peloponnese or Peloponnesus is a peninsula and geographic region in southern Greece. It is separated from the central part of the country by the Gulf of Corinth. It was here that the Greek War of Independence began in 1821. In 2016, Lonely Planet voted the Peloponnese the top spot of their Best in Europe list. The peninsula has been inhabited since prehistoric times. The Mycenaean civilization dominated the Peloponnese in the Bronze Age from its stronghold at Mycenae in the north-east of the peninsula. In 776 BC, the first Olympic Games were held at Olympia, and this date is sometimes used to denote the beginning of the classical period of Greek antiquity. During the Roman period, the peninsula remained prosperous but became a provincial backwater, relatively cut off from the affairs of the wider Roman world.
\r\n
\r\n2016 Official Issue Hellenic Proof Coin Set: The 2016 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros.
\r\n
\r\n2017 Official Issue Hellenic Coin Set: The official 2017 blister of the Hellenic Republic is dedicated to “Crete” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). Crete is the largest island of Greece and the cradle of Minoan civilization. According to mythology, the is also the birthplace of Zeus. Crete is strategically situated at the juncture of three continents and came under the rule of several conquerors (Romans, Arabs, Venetians, and, last, Ottomans), before finally uniting with Greece in 1913. Crete’s tumultuous history has forged the indomitable Cretan spirit, while centuries of fruitful cultural exchanges have left their mark on countless monuments, as well as on folk and scholarly traditions that admirably fuse East and West. The proverbial Cretan hospitality, exquisite local produce, mild climate, and beauty and diversity of the natural landscape all make Crete one of Greece’s top tourist destinations.
\r\n
\r\n2017 Official Issue Hellenic Proof Coin Set: The 2017 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros.
\r\n
\r\n2018 Official Issue Hellenic Coin Set: The official 2018 blister of the Hellenic Republic is dedicated to “Rhodos” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). The largest island of the Dodecanese and the fourth largest of Greece, Rhodes was the island of the god Helios, whose statue, the famous Colossus, standing at the harbor entrance, was one of the Seven Wonders of the Ancient World. Rhodes flourished in Hellenistic times, becoming a major trading city. From 1309, Rhodes was the seat of the Order of the Knights Hospitaller. The medieval city which they built, with the Castle of the Knights and the Palace of the Grand Master, was declared a UNESCO world heritage site in 1988. The island was conquered by the Ottomans in 1523 and by the Italians in 1912. It remained under Italian rule until the unification of the Dodecanese with Greece in 1948. Today, one of Greece’s most popular island destinations, Rhodes enchants its visitors with its exquisite beaches, idyllic landscapes, and important ancient and medieval monuments.
\r\n
\r\n2018 Official Issue Hellenic Proof Coin Set: The 2018 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros, as well as two 2 euro commemorative coins celebrating the 75th Anniversary of the Death of Kostis Palamas and the 150th Anniversary of the Union of the Dodecanese With Greece.
\r\n
\r\n2019 Official Issue Hellenic Coin Set: The official 2018 blister of the Hellenic Republic is dedicated to “Samos” and includes all 8 euro coins (1, 2, 5, 10, 20, 50 cents and 1, 2 euros). The island of Samos in the Eastern Aegean is the renowned birthplace of Pythagoras the mathematician, Aristarchos the astronomer, and Epikouros the philosopher. It flourished in antiquity, especially under the tyrant Polycrates, and was also famous for its wines. Samos was home to one of the most important ancient Greek sanctuaries, the Heraion. Another UNESCO listed site, the Eupalinian Aqueduct, ran 1,036 meters through the mountainside to bring water to the ancient city of Samos. In the late Byzantine period, Samos came under Genovese rule, before eventually falling to the Ottomans. In 1835, it was given semi-autonomous status under Ottoman suzerainty and was united with Greece in 1912. Today, the island continues to produce its prized wines and is popular among tourists for its lush forests, important archaeological sites, picturesque villages, and stunning beaches.
\r\n
\r\n2019 Official Issue Hellenic Proof Coin Set: The 2019 official set of the Hellenic Republic in Proof quality, contains a complete set of the Greek euro coins (1, 2, 5, 10, 20, 50 cent coins and 1, 2 euros, as well as two 2 euro commemorative coins celebrating the 150 years in memoriam of A. Kalvos and the 100th Anniversary of the birth of M. Andronicos.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(176,154,84)'); -INSERT INTO NumistaType VALUES(6361,'https://en.numista.com/catalogue/pieces6361.html','20 Euro Cent (1st type; 2nd map)','coin','espagne',2007,2009,'Standard circulation coin',6361,6361,'Spanish flower',6361,6361,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',6361,6361,6361,NULL,NULL,NULL,NULL,2,'rgb(196,140,60)'); -INSERT INTO NumistaType VALUES(6373,'https://en.numista.com/catalogue/pieces6373.html','20 Euro Cent (2nd map)','coin','france',2007,2023,'Standard circulation coin',6373,6373,'Spanish flower',6373,6373,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',6373,6373,6373,NULL,NULL,NULL,replace(replace('Different Mint Master Marks
\r\n
  • Hubert Lariviere, from 2007 to 2010, a mark of a hunting horn with a wave and a fish
    \r\n
  • Yves Sampo, since 2011 to 2020, a mark of a Pentagon with letters AG, MP and YS
    \r\n
  • Joaquin Jimenez, since 2021, a mark of a square with a circle and a broken line in the small square
    \r\n

\r\nBUNC Sets Released
\r\n
  • 2007 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2008 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2009 - 50000 Annual Coin Sets + 3 different illustrated Coin Sets of 500 or 1000 issues each
    \r\n
  • 2010 - 50000 Annual Coin Sets + 9 different illustrated Coin Sets of 500 issues each + 1000 Coin Sets Jour de la Monnaie (Guest Of Honour)
    \r\n
  • 2011 - 40000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2012 - 40000 Annual Coin Sets + 6 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2013 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2014 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2015 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2016 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2017 - 25000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2018 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2019 - 15000 Annual Coin Sets + 2 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2020 - 15000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each + 2 different illustrated Coin Sets of 500 issues each with the 2€ 2020 Charles De Gaulle commemorative coin instead of the regular 2€ coin
    \r\n

\r\nPROOF Sets Released
\r\n
  • From 2007 to 2012 - Annual Coin Sets
    \r\n
  • 2013 - Annual Coin Sets + Annual Coin Sets Prestige with the 100€ gold coin of The Sower - Pessac Site
    \r\n
  • From 2014 to the present - Annual Coin Sets
    \r\n
','\r',char(13)),'\n',char(10)),2,'rgb(188,164,84)'); -INSERT INTO NumistaType VALUES(6374,'https://en.numista.com/catalogue/pieces6374.html','50 Euro Cent (2nd map)','coin','france',2007,2023,'Standard circulation coin',6374,6374,'Round',6374,6374,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',6374,6374,6374,NULL,NULL,NULL,replace(replace('Different Mint Master Marks
\r\n
  • Hubert Lariviere, from 2007 to 2010, a mark of a hunting horn with a wave and a fish
    \r\n
  • Yves Sampo, since 2011 to 2020, a mark of a Pentagon with letters AG, MP and YS
    \r\n
  • Joaquin Jimenez, since 2021, a mark of a square with a circle and a broken line in the small square
    \r\n

\r\nBUNC Sets Released
\r\n
  • 2007 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2008 - 50000 Annual Coin Sets + 20 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2009 - 50000 Annual Coin Sets + 3 different illustrated Coin Sets of 500 or 1000 issues each
    \r\n
  • 2010 - 50000 Annual Coin Sets + 9 different illustrated Coin Sets of 500 issues each + 1000 Coin Sets Jour de la Monnaie (Guest Of Honour)
    \r\n
  • 2011 - 40000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2012 - 40000 Annual Coin Sets + 6 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2013 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2014 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2015 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2016 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2017 - 25000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2018 - 25000 Annual Coin Sets + 7 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2019 - 15000 Annual Coin Sets + 2 different illustrated Coin Sets of 500 issues each
    \r\n
  • 2020 - 15000 Annual Coin Sets + 5 different illustrated Coin Sets of 500 issues each + 2 different illustrated Coin Sets of 500 issues each with the 2€ 2020 Charles De Gaulle commemorative coin instead of the regular 2€ coin
    \r\n

\r\nPROOF Sets Released
\r\n
  • From 2007 to 2012 - Annual Coin Sets
    \r\n
  • 2013 - Annual Coin Sets + Annual Coin Sets Prestige with the 100€ gold coin of The Sower - Pessac Site
    \r\n
  • From 2014 to the present - Annual Coin Sets
    \r\n
','\r',char(13)),'\n',char(10)),1,'rgb(185,174,100)'); -INSERT INTO NumistaType VALUES(6376,'https://en.numista.com/catalogue/pieces6376.html','2 Euro (2nd map)','coin','france',2007,2021,'Standard circulation coin',6376,6376,'Round',6376,6376,8.5,25.75,NULL,2.20000000000000017,'medal',6376,6376,6376,NULL,NULL,NULL,replace(replace('smaller and larger stars and font seen on both pre- and post 2007 2 euro coins:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(223.125,159.375,31.875)'); -INSERT INTO NumistaType VALUES(6383,'https://en.numista.com/catalogue/pieces6383.html','1 Euro (2nd map)','coin','italie',2008,2023,'Standard circulation coin',6383,6383,'Round',6383,6383,7.5,23.25,NULL,2.33000000000000007,'medal',6383,6383,6383,NULL,NULL,NULL,NULL,1,'rgb(203,155,82)'); -INSERT INTO NumistaType VALUES(6384,'https://en.numista.com/catalogue/pieces6384.html','2 Euros (2nd map)','coin','italie',2008,2024,'Standard circulation coins',6384,6384,'Round',6384,6384,8.5,25.75,NULL,2.20000000000000017,'medal',6384,6384,6384,NULL,NULL,NULL,replace(replace('2012
\r\nTwo types of edge are known.
\r\n
\r\nCredit: online catalog Varieties of Euro coins http://eucoins.byethost9.com/it.html','\r',char(13)),'\n',char(10)),1,'rgb(153.99350649350652,142.40259740259742,101.0064935064935)'); -INSERT INTO NumistaType VALUES(6418,'https://en.numista.com/catalogue/pieces6418.html','20 Euro Cent - Henri I (2nd map)','coin','luxembourg',2007,2023,'Standard circulation coin',6418,6418,'Spanish flower',6418,6418,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',6418,6418,6418,NULL,NULL,NULL,replace(replace('This piece was engraved by several countries and by several engravers according to the following periods:
\r\n
  • 2007 - 2008 France: horn of plenty and "F" in star - Mark: hunting horn - Hubert Lariviere
    \r\n
  • 2009 - 2015 Netherlands: caduceus - Mark: Sails - Maarten Brouwer (holder)  
    \r\n
  • 2016 - 2017 Netherlands: caduceus - Mark: Sails and star - Kees Bruinsma (interim)
    \r\n
  • 2018 (In Sets only) Netherlands: caduceus - Mark: Bridge - Stephan Satijn (holder)
    \r\n

\r\nSince 2018, Luxembourg using lion mark.
\r\n2018 (Normal): Caduceus and lion.
\r\n2018 (Proof): Lion and bridge - Stephan Satijn (holder).','\r',char(13)),'\n',char(10)),1,'rgb(204,194,147)'); -INSERT INTO NumistaType VALUES(6419,'https://en.numista.com/catalogue/pieces6419.html','1 Euro - Henri I (2nd map)','coin','luxembourg',2007,2023,'Standard circulation coin',6419,6419,'Round',6419,6419,7.5,23.25,NULL,2.33000000000000007,'medal',6419,6419,6419,NULL,NULL,NULL,replace(replace('Cette pièce à été gravée par plusieurs pays et plusieurs graveur selon les périodes suivantes :
\r\n
  • 2007 - 2008 France : Corne d'abondance et un "F" dans l'étoile - Marque : Cor de chasse - Hubert Lariviere
    \r\n
  • 2009 - 2015 Pays-Bas : Caducée - Marque : Voilier - Maarten Brouwer (maître titulaire)
    \r\n
  • 2016 - 2017 Pays-Bas : Caducée - Marque : Voilier avec étoile -Kees Bruinsma (maître supplétif)
    \r\n
  • 2018 (Version BU) Pays-Bas : Caducée et pont - Stephan Satijn (maître titulaire)
    \r\n

\r\nA partir de 2018, le Luxembourg fait usage d'un lion comme différent monétaire.
\r\n2018 Version courante  : Pays-Bas : Caducée et lion
\r\n2018 Version BE :  Lion et pont - Stephan Satijn (maître titulaire)','\r',char(13)),'\n',char(10)),1,'rgb(141.02272727272725,141.02272727272725,113.97727272727273)'); -INSERT INTO NumistaType VALUES(6499,'https://en.numista.com/catalogue/pieces6499.html','200 Escudos (Namban Art)','coin','portugal',1993,1993,'Circulating commemorative coin',6499,6499,'Round',6499,6499,21.3999999999999985,36.0,NULL,NULL,'coin',6499,6499,6499,NULL,'IV-Portuguese Discoveries (Arrival to Japan)','450th Anniversary of Namban Art',NULL,1,'rgb(208,196,148)'); -INSERT INTO NumistaType VALUES(6500,'https://en.numista.com/catalogue/pieces6500.html','200 Escudos (Daimios of Omura)','coin','portugal',1993,1993,'Circulating commemorative coin',6500,6500,'Round',6500,6500,21.3999999999999985,36.0,NULL,2.79999999999999982,'coin',6500,6500,6500,NULL,'IV-Portuguese Discoveries (Arrival to Japan)','Enviados Daimios Kiushu',NULL,2,'rgb(99.06474820143886,104.56834532374101,155.93525179856115)'); -INSERT INTO NumistaType VALUES(6541,'https://en.numista.com/catalogue/pieces6541.html','100 Escudos (Saiao; Brass ring)','coin','cap-vert',1994,1994,'Circulating commemorative coin',6541,6541,'Decagonal (10-sided)',6541,6541,11.0,27.0,NULL,2.70000000000000017,'medal',6541,6541,6541,NULL,NULL,'Flora of Cabo Verde Islands Series - Saiao',replace(replace('Minimum Diameter 26.0 mm
\r\nMaximum Diameter 27.0 mm','\r',char(13)),'\n',char(10)),5,'rgb(180.36585365853657,128.53658536585365,74.63414634146342)'); -INSERT INTO NumistaType VALUES(6612,'https://en.numista.com/catalogue/pieces6612.html','5 Pence - Elizabeth II (4th portrait; Royal Shield, non-magnetic)','coin','royaume-uni',2008,2010,'Standard circulation coin',6612,6612,'Round',6612,6612,3.25,18.0,NULL,1.69999999999999995,'medal',6612,6612,6612,NULL,NULL,NULL,replace(replace('Introduced in 2008 when the small coinage designs were changed from the Emblems of Britain to the Royal Shield of Arms. The 2008 coin was issued part way through the year so was not part of the annual coin sets but was issued in both a Brilliant Uncirculated set (issue limit: 100,000) and a Proof set (issue limit: 20,000). This design was also issued in silver proof, silver piedfort, gold proof and platinum proof.
\r\n
\r\n© The Royal Mint, 2008
\r\n
\r\nThe 2015 strike was issued as part of the dual set to commemorate the change from the fourth to fifth portraits and was also struck in silver proof, gold proof and platinum proof.
\r\n
\r\n©The Royal Mint, 2015
\r\n
\r\nThe following message was received from the Royal Mint Museum circulating coin team:
\r\n
\r\n"The mintage figures shown on the Royal Mint’s website for 2011 (https://www.royalmint.com/currency/uk-currency/mintages/5-pence/) are quantities of nickel-plated steel coins only. There were no cupro-nickel 5 and 10 pence pieces issued after 2010."
\r\n
\r\nIt has been reported that there are some 2008 strikes which have a rotation alignment up to 180 degrees making the coin appear to have coin alignment.
\r\n
\r\nThis variant on KM#1109d has been reported by Numista member Negev.
\r\n
\r\nOle','\r',char(13)),'\n',char(10)),2,'rgb(177.23404255319153,133.82978723404258,77.76595744680849)'); -INSERT INTO NumistaType VALUES(6926,'https://en.numista.com/catalogue/pieces6926.html','10 Kronor - Carl XVI Gustaf','coin','suede',2001,2009,'Standard circulation coin',6926,6926,'Round',6926,6926,6.59999999999999964,20.5,NULL,2.8700000000000001,'medal',6926,6926,6926,NULL,NULL,NULL,replace(replace('Varieties exist
\r\nObverse
\r\nDie 1 - features smaller: effigy 12.1 mm, outer lettering diameter 16.7 mm, short numerals in date.
\r\nDie 2 - features larger: effigy 12.7 mm, outer lettering diameter 17.2 mm, short numerals in date.
\r\nDie 3 - features smaller, bolder and ruder, short numerals in date.
\r\nDie 4 - features mixed: effigy 12.7 mm, outer lettering diameter 16.7 mm, short numerals in date.
\r\nDie 5 - tall numerals in date, big diamonds.
\r\nDie 6 - tall numerals in date, small diamonds.
\r\nOn the photo from left to right: die 2, die 1, die 4.
\r\n
\r\ndie 3
\r\n
\r\n
\r\nReverse E B
\r\nDie A - superimposition of crowns is lower, the bottom crown superimposed on numeral 1 concavely.
\r\nDie B - the superimposition of crowns is higher, the bottom crown superimposed on numeral 1 convexly. This style was in use until 2009.
\r\n
\r\n
\r\nReverse E SI
\r\nDie A - wide lettering such as D in TIDEN, SI initials, both O in KRONOR slightly rotated counterclockwise.
\r\n
\r\nDie B - narrow lettering such as D in TIDEN, SI initials, both O in KRONOR noticeably rotated counterclockwise.
\r\n
\r\n
\r\nCombinations
\r\n1+A 2001 E B
\r\n2+B 2002 E B
\r\n2 2003 E H
\r\n3 2004 E H
\r\n1 2005 E H
\r\n4 2005 E H
\r\n5+A 2006 E SI
\r\n6+B 2007 E SI
\r\n5 2008 S SI
\r\n5 2009 S SI','\r',char(13)),'\n',char(10)),1,'rgb(176,150,75)'); -INSERT INTO NumistaType VALUES(7047,'https://en.numista.com/catalogue/pieces7047.html','5 Kuruş','coin','turquie',2009,2022,'Standard circulation coin',7047,7047,'Round',7047,7047,2.89999999999999991,17.5,NULL,1.64999999999999991,'medal',7047,7047,7047,NULL,NULL,NULL,'The World Tree or Tree of Life is a central symbol in Turkic mythology and finds prominence place in arts & handicraft.',7,'rgb(189.72,161.16,65.28)'); -INSERT INTO NumistaType VALUES(7048,'https://en.numista.com/catalogue/pieces7048.html','50 Kuruş','coin','turquie',2009,2022,'Standard circulation coin',7048,7048,'Round',7048,7048,6.79999999999999982,23.8500000000000014,NULL,2.0,'medal',7048,7048,7048,NULL,NULL,NULL,replace(replace('Only the 2011 version, the presence of parts is probably struck with a blocked border. The same happens on the obverse with a narrower font.
\r\n
\r\n
\r\n
\r\nThe Istanbul suspension bridge has the two continent landmasses separated by the strait (i.e. within the Istanbul city which is spread across the two continents)','\r',char(13)),'\n',char(10)),3,'rgb(160.2364864864865,134.3918918918919,94.76351351351347)'); -INSERT INTO NumistaType VALUES(7130,'https://en.numista.com/catalogue/pieces7130.html','25 Escudos (Carnation Revolution)','coin','portugal',1984,1984,'Circulating commemorative coin',7130,7130,'Round',7130,7130,11.0,28.5,NULL,2.25,'coin',7130,7130,7130,NULL,'System 1981-2001','10th anniversary of the Carnation Revolution',NULL,1,'rgb(173.48360655737704,165.12295081967218,81.51639344262296)'); -INSERT INTO NumistaType VALUES(7184,'https://en.numista.com/catalogue/pieces7184.html','200 Pesetas - Juan Carlos I (Torch bearers)','coin','espagne',1992,1992,'Circulating commemorative coin',7184,7184,'Round',7184,7184,10.5,25.5,NULL,2.29999999999999982,'coin',7184,7184,7184,NULL,'Madrid European Capital of Culture',NULL,NULL,1,'rgb(149.35714285714286,114.74999999999996,105.64285714285714)'); -INSERT INTO NumistaType VALUES(7193,'https://en.numista.com/catalogue/pieces7193.html','200 Escudos (Tanegashima)','coin','portugal',1993,1993,'Circulating commemorative coin',7193,7193,'Round',7193,7193,21.1000000000000014,36.0,NULL,2.79999999999999982,'coin',7193,7193,7193,NULL,'IV-Portuguese Discoveries (Arrival to Japan)','Tanegashima',NULL,1,'rgb(181.18421052631584,73.81578947368416,127.50000000000003)'); -INSERT INTO NumistaType VALUES(7337,'https://en.numista.com/catalogue/pieces7337.html','5 Escudos (Roller Hockey Championship)','coin','portugal',1982,1982,'Circulating commemorative coin',7337,7337,'Round',7337,7337,7.0,24.5,NULL,2.0,'coin',7337,7337,7337,NULL,'System 1981-2001','World Roller Hockey Championship Games',NULL,2,'rgb(138.86138613861385,136.33663366336634,116.13861386138616)'); -INSERT INTO NumistaType VALUES(7338,'https://en.numista.com/catalogue/pieces7338.html','25 Escudos (Alexandre Herculano)','coin','portugal',1978,1978,'Circulating commemorative coin',7338,7338,'Round',7338,7338,9.5,26.5,NULL,2.39999999999999991,'coin',7338,7338,7338,NULL,'System 1969-1980','100th Anniversary of the Death of Alexandre Herculano',replace(replace('The Proof-Like coins were release in a 3 coin set containing the 2$50, 5$, 25$00 coins.
\r\n
\r\nImages of the Proof-Like Set: (The set does not come originally with the coin in a flip, but due to the hazard nature of the plastic used in the set usually the owners protect the coin with some extra holder)
\r\n
\r\n
\r\nThe original disposition of the coins without posterious extra protection:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(149.04929577464787,132.88732394366193,105.95070422535211)'); -INSERT INTO NumistaType VALUES(7398,'https://en.numista.com/catalogue/pieces7398.html','2 Pence - Elizabeth II (4th portrait; magnetic)','coin','royaume-uni',1998,2008,'Standard circulation coin',7398,7398,'Round',7398,7398,7.1200000000000001,25.8999999999999985,NULL,2.04999999999999982,'medal',7398,7398,7398,NULL,NULL,NULL,replace(replace('In 1992 the composition for the two pence circulation strikes was changed from bronze to copper plated steel to reduce production costs.
\r\nIn 1998 the circulation issues were struck in both bronze and copper plated steel in approximately equal quantities.
\r\nIn 1999 the BU and Proof set issues were struck in bronze instead of copper plated steel.
\r\n
\r\nReports have been received regarding obverse varieties for the
\r\n1998 and 2004 year issues but they are yet to be confirmed:
\r\n1998 - I points to right of dot, A points to left of dot
\r\n2004 - I points to left of dot, A points to right of dot
\r\n
\r\n
\r\n(former Spink ref. 4710)','\r',char(13)),'\n',char(10)),1,'rgb(166,97,66)'); -INSERT INTO NumistaType VALUES(7461,'https://en.numista.com/catalogue/pieces7461.html','1 Rupee - Birendra Bir Bikram (non-magnetic)','coin','nepal',1995,2001,'Standard circulation coin',7461,7461,'Round',7461,7461,4.0,20.0,NULL,1.94999999999999995,'medal',7461,7461,7461,NULL,NULL,NULL,replace(replace('There are two varieties of this coin. The first, struck in 1995 and 1996 (VM 2052-2053), has larger design features on both obverse and reverse than the second, struck between 1997 and 2001 (VM 2054-2058).
\r\n
\r\n
\r\n2053 (1996) is also available with large design features on the obverse and small design features on the reverse
\r\n
\r\n© LDC63','\r',char(13)),'\n',char(10)),1,'rgb(205,198,151)'); -INSERT INTO NumistaType VALUES(7524,'https://en.numista.com/catalogue/pieces7524.html','1000 Pesos','coin','colombie',1996,1998,'Standard circulation coin',7524,7524,'Round',7524,7524,7.29999999999999982,21.6700000000000017,NULL,2.75999999999999978,'coin',7524,7524,7524,NULL,NULL,NULL,'This regular, circulation coin was taken out of circulation because it was massively counterfeited.',1,'rgb(45, 30, 20)'); -INSERT INTO NumistaType VALUES(7576,'https://en.numista.com/catalogue/pieces7576.html','50 Centimos - Juan Carlos I','coin','espagne',1976,1976,'Standard circulation coin',7576,7576,'Round',7576,7576,1.0,20.0,NULL,1.19999999999999995,'coin',7576,7576,7576,NULL,NULL,NULL,NULL,1,'rgb(154.70000000000002,127.5,100.3)'); -INSERT INTO NumistaType VALUES(7639,'https://en.numista.com/catalogue/pieces7639.html','2 Euro (Lusophony Games)','coin','portugal',2009,2009,'Circulating commemorative coin',7639,7639,'Round',7639,7639,8.5,25.75,NULL,2.20000000000000017,'medal',7639,7639,7639,NULL,NULL,'2nd Lusophony Games','The coin was issued to mark the games held for Portuguese-speaking countries.',1,'rgb(196,151,80)'); -INSERT INTO NumistaType VALUES(7641,'https://en.numista.com/catalogue/pieces7641.html','200 Forint','coin','hongrie',2009,2011,'Standard circulation coin',7641,7641,'Round',7641,7641,9.0,28.3000000000000007,NULL,2.0,'medal',7641,7641,7641,NULL,NULL,NULL,NULL,3,'rgb(204,172.8333333333333,50.999999999999986)'); -INSERT INTO NumistaType VALUES(7872,'https://en.numista.com/catalogue/pieces7872.html','25 Paisa - Birendra Bir Bikram (large type)','coin','nepal',1982,1993,'Standard circulation coin',7872,7872,'Round',7872,7872,1.80000000000000004,24.5,NULL,2.0,'medal',7872,7872,7872,NULL,NULL,NULL,replace(replace('Varieties exist:
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(164.23728813559325,138.30508474576268,90.76271186440677)'); -INSERT INTO NumistaType VALUES(7905,'https://en.numista.com/catalogue/pieces7905.html','1 Euro (2nd map)','coin','autriche',2008,2023,'Standard circulation coin',7905,7905,'Round',7905,7905,7.5,23.25,NULL,2.33000000000000007,'medal',7905,7905,7905,NULL,NULL,NULL,NULL,1,'rgb(202,182,130)'); -INSERT INTO NumistaType VALUES(8862,'https://en.numista.com/catalogue/pieces8862.html','1 Rupee - Birendra Bir Bikram','coin','nepal',1988,1992,'Standard circulation coin',8862,8862,'Round',8862,8862,6.75,27.5,NULL,1.75,'medal',8862,8862,8862,NULL,NULL,NULL,NULL,2,'rgb(204,196,146)'); -INSERT INTO NumistaType VALUES(8884,'https://en.numista.com/catalogue/pieces8884.html','50 Escudos (Macelina)','coin','cap-vert',1994,1994,'Circulating commemorative coin',8884,8884,'Round',8884,8884,7.40000000000000035,28.0,NULL,NULL,'medal',8884,8884,8884,NULL,'Flora of Cabo Verde Islands Series','Macelina',NULL,1,'rgb(150.68181818181816,127.50000000000003,104.31818181818184)'); -INSERT INTO NumistaType VALUES(8896,'https://en.numista.com/catalogue/pieces8896.html','1 Real','coin','bresil',2002,2023,'Standard circulation coin',8896,8896,'Round',8896,8896,7.0,27.0,NULL,1.94999999999999995,'coin',8896,8896,8896,NULL,NULL,NULL,replace(replace('
\r\nOfficial Sets - 2018
\r\n   
\r\n
\r\nOfficial Sets - 2019 - Mintage 3000 Sets
\r\n
\r\n
\r\nOfficial Sets - 2021 - Mintage 5000 Sets','\r',char(13)),'\n',char(10)),1,'rgb(140,100,60)'); -INSERT INTO NumistaType VALUES(8925,'https://en.numista.com/catalogue/pieces8925.html','200 Pesetas - Juan Carlos I','coin','espagne',1998,2000,'Standard circulation coin',8925,8925,'Round',8925,8925,10.5,25.5,NULL,2.29999999999999982,'coin',8925,8925,8925,NULL,NULL,NULL,NULL,1,'rgb(145.35000000000002,132.59999999999997,109.64999999999998)'); -INSERT INTO NumistaType VALUES(9224,'https://en.numista.com/catalogue/pieces9224.html','10 Cents','coin','bahamas',1974,2005,'Standard circulation coin',9224,9224,'Scalloped (with 12 notches)',9224,9224,5.54000000000000003,23.5,NULL,1.71999999999999997,'medal',9224,9224,NULL,NULL,NULL,NULL,NULL,8,'rgb(180,180,160)'); -INSERT INTO NumistaType VALUES(9285,'https://en.numista.com/catalogue/pieces9285.html','2 Centavos','coin','portugal',1918,1921,'Standard circulation coin',9285,9285,'Round',9285,9285,5.0,23.0,NULL,1.80000000000000004,'medal',9285,9285,9285,NULL,'System 1917-1922',NULL,NULL,1,'rgb(196,142,100)'); -INSERT INTO NumistaType VALUES(9638,'https://en.numista.com/catalogue/pieces9638.html','20 Escudos (Carqueja)','coin','cap-vert',1994,1994,'Circulating commemorative coin',9638,9638,'Round',9638,9638,5.90000000000000035,25.0,NULL,NULL,'medal',9638,9638,9638,NULL,'Flora of Cabo Verde Islands Series','Carqueja',NULL,1,'rgb(144.7297297297297,126.35135135135137,110.27027027027027)'); -INSERT INTO NumistaType VALUES(9761,'https://en.numista.com/catalogue/pieces9761.html','2 Euro (2nd map)','coin','autriche',2008,2023,'Standard circulation coin',9761,9761,'Round',9761,9761,8.5,25.75,NULL,2.20000000000000017,'medal',9761,9761,9761,NULL,NULL,NULL,replace(replace('(fr) On peut distinguer deux tranches :
\r\n
\r\nTranche A : L'avers vers le haut, les écritures à l'endroit sont précédés de 3 étoiles avec une branche pointant vers le haut.
\r\n
\r\nTranche B : L'avers vers le haut, les écritures à l'endroit sont précédés de 3 étoiles avec une branche pointant vers le bas.
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(148,116,60)'); -INSERT INTO NumistaType VALUES(9826,'https://en.numista.com/catalogue/pieces9826.html','1 Escudo (Roller Hockey Championship)','coin','portugal',1982,1982,'Circulating commemorative coin',9826,9826,'Round',9826,9826,3.0,18.1999999999999992,NULL,1.69999999999999995,'coin',9826,9826,9826,NULL,'System 1981-2001','25th Roller Hockey World Championship',NULL,3,'rgb(152,141,60)'); -INSERT INTO NumistaType VALUES(9828,'https://en.numista.com/catalogue/pieces9828.html','2.50 Escudos (Roller Hockey Championship)','coin','portugal',1982,1982,'Circulating commemorative coin',9828,9828,'Round',9828,9828,3.5,20.0,NULL,1.60000000000000008,'coin',9828,9828,9828,NULL,'System 1981-2001','25th Roller hockey world championships',NULL,1,'rgb(118.46456692913385,136.53543307086616,132.51968503937005)'); -INSERT INTO NumistaType VALUES(9831,'https://en.numista.com/catalogue/pieces9831.html','25 Escudos (FAO)','coin','portugal',1983,1983,'Circulating commemorative coin',9831,9831,'Round',9831,9831,11.0,28.5,NULL,2.25,'coin',9831,9831,9831,NULL,'System 1981-2001','World Food Day 1983',replace(replace('Under the FAO coins Programme; Portugal in 1983 issued
\r\non a 2$50 coin Maize is depicted to signify Agriculture produce
\r\non a 5$00 coin Cow depicted is to signify Dairy development and  
\r\non a 25$00 coin an Atlantic cod fish is depicted to signify Fisheries or Marine produce','\r',char(13)),'\n',char(10)),1,'rgb(131.1428571428571,132.96428571428572,122.03571428571428)'); -INSERT INTO NumistaType VALUES(9834,'https://en.numista.com/catalogue/pieces9834.html','200 Escudos (Columbus and Portugal)','coin','portugal',1991,1991,'Circulating commemorative coin',9834,9834,'Round',9834,9834,21.1000000000000014,36.0,NULL,2.79999999999999982,'coin',9834,9834,9834,NULL,'III-Portuguese Discoveries(Sailing to the West)','Columbus and Portugal',NULL,1,'rgb(131.14285714285717,128.7142857142857,123.85714285714285)'); -INSERT INTO NumistaType VALUES(9894,'https://en.numista.com/catalogue/pieces9894.html','1 Euro (2nd map)','coin','portugal',2008,2023,'Standard circulation coin',9894,9894,'Round',9894,9894,7.5,23.25,NULL,2.33000000000000007,'medal',9894,9894,9894,NULL,NULL,NULL,replace(replace('From 2011 onwards the design of the Obverse changed to display more thin and delicate lines and motifs, this can be seen in the following image below (comparison between 2002 design, and the new 2011-date one):
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(132,116,60)'); -INSERT INTO NumistaType VALUES(9895,'https://en.numista.com/catalogue/pieces9895.html','10 Euro Cent (2nd map)','coin','portugal',2008,2023,'Standard circulation coin',9895,9895,'Round',9895,9895,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',9895,9895,9895,NULL,NULL,NULL,'(fr) ',5,'rgb(187.5,172.5,67.49999999999999)'); -INSERT INTO NumistaType VALUES(9896,'https://en.numista.com/catalogue/pieces9896.html','20 Euro Cent (2nd map)','coin','portugal',2008,2023,'Standard circulation coin',9896,9896,'Spanish flower',9896,9896,5.74000000000000021,22.25,NULL,2.14000000000000012,'medal',9896,9896,9896,NULL,NULL,NULL,'(fr) ',4,'rgb(183.28125,151.40625,71.71875)'); -INSERT INTO NumistaType VALUES(9897,'https://en.numista.com/catalogue/pieces9897.html','2 Euros (2nd map)','coin','portugal',2008,2024,'Standard circulation coins',9897,9897,'Round',9897,9897,8.5,25.75,NULL,2.20000000000000017,'medal',9897,9897,9897,NULL,NULL,NULL,'',1,'rgb(141.4453125,137.46093750000003,113.5546875)'); -INSERT INTO NumistaType VALUES(10004,'https://en.numista.com/catalogue/pieces10004.html','1 Satang - Rama IX','coin','thailande',1987,2007,'Non-circulating coin',10004,10004,'Round',10004,10004,0.5,15.0,NULL,NULL,'coin',10004,10004,NULL,NULL,NULL,NULL,replace('Made-to-order coins exist:
\n- 2542 MTO sets of copper-silver-gold, 16~18 sets believed to be made. (set of copper-silver-gold 1 Satang to 5 Baht series)
\n- Coin dated 2544, struck on copper planchet; PCGS #80718023. (set of copper 1-5-10 Satang 2544)
\n- Coin dated 2544, struck on 1.7 grams wrong planchet; NGC #2811573-028. (set of wrong planchet 1-5-10 Satang 2544)
\n- Coin dated 2544, struck on 4.85 grams gold planchet; PCGS #35676317. (set of gold 1-5 Satang 2544)
\n- Coin dated 2548, struck on copper planchet; PCGS #36473854. (set of copper 1-5-10 Satang 2548)','\n',char(10)),1,'rgb(175.86206896551727,131.89655172413785,79.13793103448275)'); -INSERT INTO NumistaType VALUES(10056,'https://en.numista.com/catalogue/pieces10056.html','10 Escudos (Grey-headed Kingfisher)','coin','cap-vert',1994,1994,'Circulating commemorative coin',10056,10056,'Round',10056,10056,4.57000000000000028,22.0,NULL,1.89999999999999991,'medal',10056,10056,10056,NULL,'Bird Fauna of Cabo Verde Islands Series','Bird Fauna of Cabo Verde Islands Series - Grey-headed Kingfisher',NULL,1,'rgb(139.4871794871795,126.41025641025645,115.5128205128205)'); -INSERT INTO NumistaType VALUES(10126,'https://en.numista.com/catalogue/pieces10126.html','5 Escudos (Alexandre Herculano)','coin','portugal',1977,1977,'Circulating commemorative coin',10126,10126,'Round',10126,10126,7.0,24.5,NULL,2.0,'coin',10126,10126,10126,NULL,'System 1969-1980','100th Anniversary of the Death of Alexandre Herculano',replace(replace('The Proof-Like coins were release in a 3 coin set containing the 2$50, 5$, 25$00 coins.
\r\n
\r\nImages of the Proof-Like Set: (The set does not come originally with the coin in a flip, but due to the hazard nature of the plastic used in the set usually the owners protect the coin with some extra holder)
\r\n
\r\n
\r\nThe original disposition of the coins without posterious extra protection:
\r\n','\r',char(13)),'\n',char(10)),4,'rgb(132.0863309352518,133.9208633093525,121.07913669064749)'); -INSERT INTO NumistaType VALUES(10288,'https://en.numista.com/catalogue/pieces10288.html','200 Escudos (Sydney Olympic Games)','coin','portugal',2000,2000,'Circulating commemorative coin',10288,10288,'Round',10288,10288,9.80000000000000071,28.0,NULL,2.20000000000000017,'coin',10288,10288,10288,NULL,'System 1981-2001','Olympic Games 2000 in Sydney',NULL,1,'rgb(203,174,109)'); -INSERT INTO NumistaType VALUES(10854,'https://en.numista.com/catalogue/pieces10854.html','5 Euro Cent (2nd type)','coin','espagne',2010,2023,'Standard circulation coin',10854,10854,'Round',10854,10854,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',10854,10854,10854,NULL,NULL,NULL,replace(replace('(fr) Variante trouvée pour 2018 concernant la face commune avec globe et le chiffre déplacés vers l'intérieur. Les traits sont aussi de plus grande taille à l'extérieur et de taille inférieure à l'intérieur.
\r\nIl semble que les exemplaires de 2019 et années suivantes soient avec la nouvelle variété mais ça reste à confirmer. Idem pour les 1 cent et 2 cent.
\r\n
\r\nVariante trouvée pour 2018 concernant la face nationale. La gravure existe en gravure fine et gravure épaisse. Les textes et étoiles sont plus écartés de la cathédrale sur la monnaie avec gravure fine (monnaie de gauche) et plus proche de la cathédrale sur la gravure épaisse (monnaie de droite)
\r\n','\r',char(13)),'\n',char(10)),7,'rgb(204,116,52)'); -INSERT INTO NumistaType VALUES(10856,'https://en.numista.com/catalogue/pieces10856.html','1 Euro Cent (2nd type)','coin','espagne',2010,2023,'Standard circulation coin',10856,10856,'Round',10856,10856,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',10856,10856,10856,NULL,NULL,NULL,replace(replace('New version of the common side seen from 2018 onwards. Main differences:
\r\n - Thicker and shorter numeral
\r\n - Rounded edges of the numeral
\r\n - Thicker font in "EURO CENT"
\r\n - Thicker lines with longer ends outside of stars
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),20,'rgb(204,116,52)'); -INSERT INTO NumistaType VALUES(10857,'https://en.numista.com/catalogue/pieces10857.html','2 Euro Cent (2nd type)','coin','espagne',2010,2023,'Standard circulation coin',10857,10857,'Round',10857,10857,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',10857,10857,10857,NULL,NULL,NULL,'',5,'rgb(204,116,52)'); -INSERT INTO NumistaType VALUES(10860,'https://en.numista.com/catalogue/pieces10860.html','50 Euro Cent (2nd type; 2nd map)','coin','espagne',2010,2023,'Standard circulation coin',10860,10860,'Round',10860,10860,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',10860,10860,10860,NULL,NULL,NULL,NULL,1,'rgb(160,136,60)'); -INSERT INTO NumistaType VALUES(10861,'https://en.numista.com/catalogue/pieces10861.html','1 Euro - Juan Carlos I (2nd type - 2nd map)','coin','espagne',2010,2014,'Standard circulation coin',10861,10861,'Round',10861,10861,7.5,23.25,NULL,2.33000000000000007,'medal',10861,10861,10861,NULL,NULL,NULL,NULL,1,'rgb(164,148,76)'); -INSERT INTO NumistaType VALUES(10862,'https://en.numista.com/catalogue/pieces10862.html','2 Euro - Juan Carlos I (2nd type - 2nd map)','coin','espagne',2010,2014,'Standard circulation coin',10862,10862,'Round',10862,10862,8.5,25.75,NULL,2.20000000000000017,'medal',10862,10862,10862,NULL,NULL,NULL,NULL,1,'rgb(204,188,140)'); -INSERT INTO NumistaType VALUES(11526,'https://en.numista.com/catalogue/pieces11526.html','2 Euro (Speech of June 18th 1940)','coin','france',2010,2010,'Circulating commemorative coin',11526,11526,'Round',11526,11526,8.5,25.75,NULL,2.20000000000000017,'medal',11526,11526,11526,NULL,NULL,'DeGaulle''s Radio Speech on June 18th, 1940 - 70th Anniversary of the Appeal of June 18','',1,'rgb(152.0642201834862,140.36697247706422,102.9357798165138)'); -INSERT INTO NumistaType VALUES(11635,'https://en.numista.com/catalogue/pieces11635.html','200 Escudos (United Nations)','coin','portugal',1995,1995,'Circulating commemorative coin',11635,11635,'Round',11635,11635,9.80000000000000071,28.0,NULL,2.10000000000000008,'coin',11635,11635,11635,NULL,'System 1981-2001','50th Anniversary of the United Nations',NULL,1,'rgb(157.3404255319149,146.48936170212764,97.65957446808511)'); -INSERT INTO NumistaType VALUES(11691,'https://en.numista.com/catalogue/pieces11691.html','200 Escudos (Father Luis Frois)','coin','portugal',1997,1997,'Circulating commemorative coin',11691,11691,'Round',11691,11691,21.1999999999999992,36.0,NULL,3.0,'coin',11691,11691,11691,NULL,'VIII Portuguese Discoveries Series','Father Luís Fróis',NULL,1,'rgb(140.24999999999997,130.05000000000004,114.75000000000001)'); -INSERT INTO NumistaType VALUES(11695,'https://en.numista.com/catalogue/pieces11695.html','200 Escudos (India)','coin','portugal',1998,1998,'Circulating commemorative coin',11695,11695,'Round',11695,11695,21.1000000000000014,36.0,NULL,2.79999999999999982,'coin',11695,11695,11695,NULL,'IX Portuguese Discoveries Series','India',NULL,1,'rgb(151.78571428571428,135.59523809523807,103.21428571428572)'); -INSERT INTO NumistaType VALUES(11952,'https://en.numista.com/catalogue/pieces11952.html','1 Escudo','coin','portugal',1981,1986,'Standard circulation coin',11952,11952,'Round',11952,11952,3.0,18.0,NULL,1.62999999999999989,'coin',11952,11952,11952,NULL,'System 1981-2001',NULL,replace(replace('Two styles of obverse are known. In 1981-1984 and 1986 the date is thin, in 1985 the date is thick.
\r\nPicture: © Images courtesy of Alexandr Prokofyev
\r\n','\r',char(13)),'\n',char(10)),25,'rgb(172.5563909774436,161.05263157894737,82.4436090225564)'); -INSERT INTO NumistaType VALUES(13034,'https://en.numista.com/catalogue/pieces13034.html','200 Escudos (Death on the Sea)','coin','portugal',1999,1999,'Circulating commemorative coin',13034,13034,'Round',13034,13034,21.1000000000000014,36.0,NULL,NULL,'coin',13034,13034,13034,NULL,'X Portuguese Discoveries Series','Death on the Sea',NULL,1,'rgb(109.00763358778627,124.58015267175574,145.99236641221373)'); -INSERT INTO NumistaType VALUES(13038,'https://en.numista.com/catalogue/pieces13038.html','200 Escudos (Duarte Pacheco Pereira)','coin','portugal',1999,1999,'Circulating commemorative coin',13038,13038,'Round',13038,13038,21.1000000000000014,36.0,NULL,NULL,'coin',13038,13038,13038,NULL,'X Portuguese Discoveries Series','Duarte Pacheco Pereira',NULL,1,'rgb(147.7380952380952,141.66666666666669,107.26190476190477)'); -INSERT INTO NumistaType VALUES(13820,'https://en.numista.com/catalogue/pieces13820.html','2 Bolivianos (large type)','coin','bolivie',1995,2008,'Standard circulation coin',13820,13820,'Hendecagonal (11-sided)',13820,13820,6.40000000000000035,29.0,NULL,1.39999999999999991,'coin',13820,13820,13820,NULL,NULL,NULL,replace(replace('Different designs of the coat of arms:
\r\n
\r\n
\r\nDifferent denominations:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(104.08163265306119,130.10204081632654,150.9183673469388)'); -INSERT INTO NumistaType VALUES(15296,'https://en.numista.com/catalogue/pieces15296.html','25 Cents (non-magnetic)','coin','bahamas',1991,2005,'Standard circulation coin',15296,15296,'Round',15296,15296,5.75,24.2600000000000015,NULL,1.64999999999999991,'medal',15296,15296,15296,NULL,NULL,NULL,NULL,1,'rgb(200.35714285714297,145.7142857142854,54.64285714285703)'); -INSERT INTO NumistaType VALUES(15575,'https://en.numista.com/catalogue/pieces15575.html','50 Paisa - Gyanendra Bir Bikram','coin','nepal',2003,2004,'Standard circulation coin',15575,15575,'Round',15575,15575,1.39999999999999991,22.5,NULL,1.55000000000000004,'medal',15575,15575,15575,NULL,NULL,NULL,NULL,1,'rgb(134.58333333333331,134.58333333333331,120.41666666666669)'); -INSERT INTO NumistaType VALUES(16586,'https://en.numista.com/catalogue/pieces16586.html','2 Euro Cent','coin','estonie',2011,2022,'Standard circulation coin',16586,16586,'Round',16586,16586,3.06000000000000005,18.75,NULL,1.66999999999999992,'medal',16586,16586,16586,NULL,NULL,NULL,replace(replace('2018 large stars:
\r\n
\r\n
\r\n
\r\n2018 has both small and large stars (left Slovakian with bigger mintage, right Lithuanian with smaller mintage):
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(179.364406779661,127.5,75.63559322033898)'); -INSERT INTO NumistaType VALUES(16588,'https://en.numista.com/catalogue/pieces16588.html','5 Euro Cent','coin','estonie',2011,2023,'Standard circulation coin',16588,16588,'Round',16588,16588,3.91999999999999992,21.25,NULL,1.66999999999999992,'medal',16588,16588,16588,NULL,NULL,NULL,replace(replace('Coins from 2018 have large stars:
\r\n
\r\n
\r\n
\r\n2018 has both small and large stars (left coin made in Slovakian mint with bigger mintage, right Lithuanian mint with smaller mintage):
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(204,177,148)'); -INSERT INTO NumistaType VALUES(18054,'https://en.numista.com/catalogue/pieces18054.html','2 Bolivianos','coin','bolivie',2010,2017,'Standard circulation coin',18054,18054,'Hendecagonal (11-sided)',18054,18054,6.40000000000000035,29.0,NULL,1.39999999999999991,'coin',18054,18054,18054,NULL,NULL,NULL,replace(replace('Design varieties exist:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(133.3846153846154,121.61538461538461,121.61538461538461)'); -INSERT INTO NumistaType VALUES(18666,'https://en.numista.com/catalogue/pieces18666.html','2 Euro (Bundesländer - "Nordrhein-Westfalen")','coin','allemagne',2011,2011,'Circulating commemorative coin',18666,18666,'Round',18666,18666,8.5,25.75,NULL,2.20000000000000017,'medal',18666,18666,18666,NULL,'German states','State of Nordrhein-Westfalen',replace(replace('Five mints currently share coin production. Each puts its own workshop letter on the coins it mints:
\r\nA - Berlin
\r\nD - Munich
\r\nF - Stuttgart
\r\nG - Karlsruhe
\r\nJ - Hamburg','\r',char(13)),'\n',char(10)),1,'rgb(153,129.09375,102)'); -INSERT INTO NumistaType VALUES(19979,'https://en.numista.com/catalogue/pieces19979.html','2 Euro (Alhambra of Granada)','coin','espagne',2011,2011,'Circulating commemorative coin',19979,19979,'Round',19979,19979,8.5,25.75,NULL,2.20000000000000017,'medal',19979,19979,19979,NULL,'UNESCO World Heritage','Alhambra, Generalife and Albayzín',replace(replace('Spain started the commemorative coin series Patrimonio de la Humanidad de la UNESCO (UNESCO World Heritage) in 2010, commemorating all of Spain's UNESCO World Heritage Sites, which could continue until 2050. The order in which the coin for a specific site is issued coincides with the order in which they were declared a UNESCO World Heritage site.
\r\nThe Alhambra is a palace and fortress complex located in Granada, Andalusia, Spain. It was originally constructed as a small fortress in 889 CE on the remains of ancient Roman fortifications, and then largely ignored until its ruins were renovated and rebuilt in the mid-13th century by the Arab Nasrid emir Mohammed ben Al-Ahmar of the Emirate of Granada, who built its current palace and walls. It was converted into a royal palace in 1333 by Yusuf I, Sultan of Granada. After the conclusion of the Christian Reconquista in 1492, the site became the Royal Court of Ferdinand and Isabella (where Christopher Columbus received royal endorsement for his expedition), and the palaces were partially altered in the Renaissance style. In 1526, Charles I of Spain commissioned a new Renaissance palace better befitting the Holy Roman Emperor in the revolutionary Mannerist style influenced by humanist philosophy in direct juxtaposition with the Nasrid Andalusian architecture, but it was ultimately never completed due to Morisco rebellions in Granada.','\r',char(13)),'\n',char(10)),1,'rgb(188,142,89)'); -INSERT INTO NumistaType VALUES(20700,'https://en.numista.com/catalogue/pieces20700.html','50 Pence - Elizabeth II (3rd portrait; small type)','coin','royaume-uni',1997,1997,'Standard circulation coin',20700,20700,'Equilateral curve heptagon (7-sided)',20700,20700,8.0,27.3000000000000007,NULL,1.78000000000000002,'medal',20700,20700,20700,NULL,NULL,NULL,replace(replace('As well as being issued for circulation, this design was also part of the Annual Coin Sets for 1997, in both Brilliant Uncirculated & Proof versions.
\r\n
\r\n
\r\n(former Spink ref. 4354)','\r',char(13)),'\n',char(10)),6,'rgb(133.68932038834956,133.68932038834956,121.31067961165043)'); -INSERT INTO NumistaType VALUES(20892,'https://en.numista.com/catalogue/pieces20892.html','2 Euro (Unification of Italy)','coin','italie',2011,2011,'Circulating commemorative coin',20892,20892,'Round',20892,20892,8.5,25.75,NULL,2.20000000000000017,'medal',20892,20892,20892,NULL,NULL,'150th Anniversary of Italian Unification',replace(replace('This coin is released for circulation but is available also in these forms:
\r\n- In official mint Mint folder (or coincard) with initial mintage of 20000 then reduced to 13350
\r\n- Inserted in Mint BU Sets (both 9 and 10 valued) and Mint Proof Sets','\r',char(13)),'\n',char(10)),1,'rgb(228,196,127)'); -INSERT INTO NumistaType VALUES(22038,'https://en.numista.com/catalogue/pieces22038.html','10 Baht - Rama IX (Wat Arun; 4th portrait)','coin','thailande',2008,2017,'Standard circulation coin',22038,22038,'Round',22038,22038,8.5,26.0,NULL,2.14999999999999991,'coin',22038,22038,22038,NULL,NULL,NULL,NULL,1,'rgb(143.25842696629215,131.7977528089888,111.74157303370785)'); -INSERT INTO NumistaType VALUES(22544,'https://en.numista.com/catalogue/pieces22544.html','50 Paisa - Gyanendra Bir Bikram','coin','nepal',2001,2002,'Standard circulation coin',22544,22544,'Round',22544,22544,1.39999999999999991,22.5,NULL,1.69999999999999995,'medal',22544,22544,22544,NULL,NULL,NULL,NULL,1,'rgb(73.81578947368416,73.81578947368416,181.18421052631584)'); -INSERT INTO NumistaType VALUES(22652,'https://en.numista.com/catalogue/exonumia22652.html','Shell Token - Man in Flight (#14 - Sputnik 1, 1957)','exonumia','france',1969,1969,'Advertising token',22652,22652,'Round',22652,22652,5.0,26.0,NULL,1.5,'medal',22652,22652,22652,NULL,NULL,'Man in Flight',replace(replace('Man in Flight - L'épopée de l'espace (the epic of space) set.
\r\n
\r\n  
\r\n
\r\nIn 1969 Shell Oil launched the 'Man in Flight' promotion in several countries outside the United States. When customers filled their tank at a participating Shell gas station they received a packet containing a Man in Flight coin. These coins were part of a collectible set but it was not a game and there were no prizes offered. Shell issued mounting boards for the coins which were designed to inspire their customers to return over and over to try to complete the set.
\r\n
\r\nThe coin sets commemorated man's achievements with flight throughout history. Some countries received sets with 20 coins, while other countries received sets with only 16 coins. The 16-coin sets simply had four of the coins intentionally omitted. The coins were struck in both bronze and aluminium, and were produced both in round versions and 12-sided versions. This created quite a few varieties. Millions of each variety were produced and they are all fairly easy to find today.
\r\n
\r\n
\r\nThe most common of the 'Man in Flight' tokens, available in many nations with different collection cards.
\r\n
\r\n Lentävä maailma (Flying world) set.
\r\n
\r\n Ruimte-avontuur (Space adventure) set.
\r\n
\r\n de verovering van de hemel (the conquest of heaven) set.','\r',char(13)),'\n',char(10)),1,'rgb(142,108,14)'); -INSERT INTO NumistaType VALUES(24276,'https://en.numista.com/catalogue/exonumia24276.html','Shell Token - Man in Flight (#15 - Wernher Von Braun, Jupiter C, 1958)','exonumia','france',1969,1969,'Advertising token',24276,24276,'Round',24276,24276,5.0,26.0,NULL,1.5,'medal',24276,24276,24276,NULL,NULL,'Man in Flight',replace(replace('Man in Flight - L'épopée de l'espace (the epic of space) set.
\r\n
\r\n  
\r\n
\r\nIn 1969 Shell Oil launched the 'Man in Flight' promotion in several countries outside the United States. When customers filled their tank at a participating Shell gas station they received a packet containing a Man in Flight coin. These coins were part of a collectible set but it was not a game and there were no prizes offered. Shell issued mounting boards for the coins which were designed to inspire their customers to return over and over to try to complete the set.
\r\n
\r\nThe coin sets commemorated man's achievements with flight throughout history. Some countries received sets with 20 coins, while other countries received sets with only 16 coins. The 16-coin sets simply had four of the coins intentionally omitted. The coins were struck in both bronze and aluminium, and were produced both in round versions and 12-sided versions. This created quite a few varieties. Millions of each variety were produced and they are all fairly easy to find today.
\r\n
\r\n
\r\nThe most common of the 'Man in Flight' tokens, available in many nations with different collection cards.
\r\n
\r\n Lentävä maailma (Flying world) set.
\r\n
\r\n Ruimte-avontuur (Space adventure) set.
\r\n
\r\n de verovering van de hemel (the conquest of heaven) set.','\r',char(13)),'\n',char(10)),1,'rgb(166,141,74)'); -INSERT INTO NumistaType VALUES(25746,'https://en.numista.com/catalogue/pieces25746.html','10 Pence - Elizabeth II (4th portrait; Royal Shield, magnetic)','coin','royaume-uni',2011,2015,'Standard circulation coin',25746,25746,'Round',25746,25746,6.5,24.5,NULL,1.85000000000000008,'medal',25746,25746,25746,NULL,NULL,NULL,replace(replace('Introduced in 2008 when the small coinage designs were changed from the Emblems of Britain to the Royal Shield of Arms.
\r\n
\r\nInformation received from the Royal Mint circulating coin team:
\r\n
\r\n‘The issue date for nickel-plated steel 5 and 10 pence pieces was originally intended to be January 2011, however this was deferred to January 2012 to allow additional time for automatic vending machines to be updated to accept the coins. As a result, the 2011 dated 5 and 10 pence pieces were issued into circulation in 2012 instead.’','\r',char(13)),'\n',char(10)),2,'rgb(171.9318181818182,141.02272727272725,83.0681818181818)'); -INSERT INTO NumistaType VALUES(25766,'https://en.numista.com/catalogue/pieces25766.html','5 Pence - Elizabeth II (4th portrait; Royal Shield, magnetic)','coin','royaume-uni',2011,2015,'Standard circulation coin',25766,25766,'Round',25766,25766,3.25,18.0,NULL,1.69999999999999995,'medal',25766,25766,25766,NULL,NULL,NULL,replace(replace('Introduced in 2008 when the small coinage designs were changed from the Emblems of Britain to the Royal Shield of Arms.
\r\n
\r\nInformation received from the Royal Mint circulating coin team:
\r\n
\r\n‘The issue date for nickel-plated steel 5 and 10 pence pieces was originally intended to be January 2011, however this was deferred to January 2012 to allow additional time for automatic vending machines to be updated to accept the coins. As a result, the 2011 dated 5 and 10 pence pieces were issued into circulation in 2012 instead.’
\r\n
\r\nVariants found by Steve Leach
\r\n
\r\nOle
\r\nI have found similar variants in the 2015 version','\r',char(13)),'\n',char(10)),6,'rgb(179.89726027397265,151.9520547945206,75.10273972602735)'); -INSERT INTO NumistaType VALUES(26208,'https://en.numista.com/catalogue/pieces26208.html','25 Paisa - Gyanendra Bir Bikram','coin','nepal',2001,2003,'Standard circulation coin',26208,26208,'Round',26208,26208,1.0,20.0,NULL,NULL,'medal',26208,26208,26208,NULL,NULL,NULL,NULL,1,'rgb(131.68032786885243,131.68032786885243,123.31967213114757)'); -INSERT INTO NumistaType VALUES(26791,'https://en.numista.com/catalogue/pieces26791.html','2 Rupees - Gyanendra Bir Bikram (magnetic)','coin','nepal',2003,2003,'Standard circulation coin',26791,26791,'Round',26791,26791,5.07000000000000028,25.0,NULL,1.60000000000000008,'medal',26791,26791,26791,NULL,NULL,NULL,NULL,1,'rgb(116,88,52)'); -INSERT INTO NumistaType VALUES(26792,'https://en.numista.com/catalogue/pieces26792.html','5 Rupees - Birendra Bir Bikram (non-magnetic)','coin','nepal',1996,1996,'Standard circulation coin',26792,26792,'Round',26792,26792,8.0,25.0,NULL,NULL,'medal',26792,26792,26792,NULL,NULL,NULL,replace(replace('
\r\n
\r\nPashupati is an incarnation of Lord Shiva. It translates to "Lord of animals". Pashupatinath temple is located on the banks of Bagmati River in Kathmandu, Nepal. It is the most important shrine for Hindus. Only Hindus are allowed to enter the temple..','\r',char(13)),'\n',char(10)),1,'rgb(117,102,52)'); -INSERT INTO NumistaType VALUES(27352,'https://en.numista.com/catalogue/pieces27352.html','5 Dirhams - Mohammed VI','coin','maroc',2011,2022,'Standard circulation coin',27352,27352,'Round',27352,27352,7.5,25.0,NULL,2.0,'medal',27352,27352,27352,NULL,NULL,NULL,NULL,1,'rgb(196,108,52)'); -INSERT INTO NumistaType VALUES(27395,'https://en.numista.com/catalogue/pieces27395.html','10 Dirhams - Mohammed VI','coin','maroc',2011,2022,'Standard circulation coin',27395,27395,'Round',27395,27395,9.0,26.8099999999999987,NULL,2.10000000000000008,'medal',27395,27395,27395,NULL,NULL,NULL,NULL,1,'rgb(213,187,134)'); -INSERT INTO NumistaType VALUES(27528,'https://en.numista.com/catalogue/pieces27528.html','2 Pesos (May Revolution)','coin','argentine',2010,2016,'Standard circulation coin',27528,27528,'Round',27528,27528,7.20000000000000017,24.5,NULL,2.20000000000000017,'medal',27528,27528,27528,NULL,NULL,NULL,replace(replace('
\r\nLogo of the Argentina Bicentennial (designed by Cristina Fernández)
\r\n
\r\nDifference between "normal eyes" and "bulging eyes" for the 2 pesos 2010:
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(188,153,112)'); -INSERT INTO NumistaType VALUES(28191,'https://en.numista.com/catalogue/pieces28191.html','2 Euro (10 Years of Euro Cash)','coin','autriche',2012,2012,'Circulating commemorative coin',28191,28191,'Round',28191,28191,8.5,25.75,NULL,2.20000000000000017,'medal',28191,28191,28191,NULL,NULL,'10 Years of Euro Cash',NULL,1,'rgb(169.99999999999997,136.32075471698116,85.00000000000004)'); -INSERT INTO NumistaType VALUES(28330,'https://en.numista.com/catalogue/pieces28330.html','2 Euro (10 Years of Euro Cash)','coin','france',2012,2012,'Circulating commemorative coin',28330,28330,'Round',28330,28330,8.5,25.75,NULL,2.20000000000000017,'medal',28330,28330,28330,NULL,NULL,'10 Years of Euro Cash',replace(replace('There are 2 different types of edges A and B depending on the specific star, for more information read:
\r\nhttp://www.amisdeleuro.org/fr/121
\r\n
\r\ncoincard
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(142,105,68)'); -INSERT INTO NumistaType VALUES(28608,'https://en.numista.com/catalogue/pieces28608.html','2 Stotinki (magnetic)','coin','bulgarie',2000,2002,'Standard circulation coin',28608,28608,'Round',28608,28608,2.5,18.0,NULL,1.39999999999999991,'medal',28608,28608,28608,NULL,NULL,NULL,replace(replace('Two varieties:
\r\n- Matte,
\r\n- Shiny, bold lettering
\r\n','\r',char(13)),'\n',char(10)),12,'rgb(228,180,82)'); -INSERT INTO NumistaType VALUES(28610,'https://en.numista.com/catalogue/pieces28610.html','1 Stotinka (magnetic)','coin','bulgarie',2000,2002,'Standard circulation coin',28610,28610,'Round',28610,28610,1.80000000000000004,16.0,NULL,1.32000000000000006,'medal',28610,28610,28610,NULL,NULL,NULL,replace('Two varieties:
\n- Matte, small stars
\n- Shiny, big stars, bold lettering
\n','\n',char(10)),11,'rgb(242,199,85)'); -INSERT INTO NumistaType VALUES(28611,'https://en.numista.com/catalogue/pieces28611.html','5 Stotinki (magnetic)','coin','bulgarie',2000,2002,'Standard circulation coin',28611,28611,'Round',28611,28611,3.5,20.0,NULL,1.69999999999999995,'medal',28611,28611,28611,NULL,NULL,NULL,replace(replace('Two different varieties:
\r\n- Matte, small stars
\r\n- Shiny, big stars, bold lettering
\r\n','\r',char(13)),'\n',char(10)),9,'rgb(212,152,44)'); -INSERT INTO NumistaType VALUES(28734,'https://en.numista.com/catalogue/pieces28734.html','50 Forint','coin','hongrie',2012,2023,'Standard circulation coin',28734,28734,'Round',28734,28734,7.70000000000000017,27.3999999999999985,NULL,NULL,'medal',28734,28734,28734,NULL,NULL,NULL,NULL,1,'rgb(138.72,132.59999999999997,116.27999999999999)'); -INSERT INTO NumistaType VALUES(32604,'https://en.numista.com/catalogue/pieces32604.html','1 Dollar - Elizabeth II (4th portrait, new alloy)','coin','canada',2012,2022,'Standard circulation coin',32604,32604,'Hendecagonal (11-sided)',32604,32604,6.26999999999999957,26.5,NULL,1.94999999999999995,'medal',32604,32604,32604,NULL,NULL,NULL,replace(replace('
\r\n
\r\nThe Royal Canadian Mint's 2017 annual report stated a mintage of 15,750,000 for regular circulating 2017 coins, even though the circulating coins for that year only bore the Canada 150 commemorative design (which has a different mintage listed). However, starting in 2017, the annual report omitted the 'Coins struck dated 2017' table, meaning the 15,750,000 coins were probably dated either 2016 or 2018, even though they were struck in 2017.','\r',char(13)),'\n',char(10)),1,'rgb(180,139,97)'); -INSERT INTO NumistaType VALUES(36732,'https://en.numista.com/catalogue/exonumia36732.html','Token - Qing Dynasty Emperors (Nurhaci, 1616-1626)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36732,36732,20.0,39.0,NULL,NULL,'medal',36732,36732,36732,NULL,NULL,'Nurchaci Emperor (1616 - 1626)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36733,'https://en.numista.com/catalogue/exonumia36733.html','Token - Qing Dynasty Emperors (Hong Taiji, 1627-1643)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36733,36733,20.0,39.0,NULL,NULL,'medal',36733,36733,36733,NULL,NULL,'Hong Taiji Emperor (1627 - 1643)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36734,'https://en.numista.com/catalogue/exonumia36734.html','Token - Qing Dynasty Emperors (Shunzi, 1644-1661)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36734,36734,20.0,39.0,NULL,2.39000000000000012,'medal',36734,36734,36734,NULL,NULL,'Shunzi Emperor (1644 -1661)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36735,'https://en.numista.com/catalogue/exonumia36735.html','Token - Qing Dynasty Emperors (Kangxi, 1662-1722)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36735,36735,20.0,39.0,NULL,NULL,'medal',36735,36735,36735,NULL,NULL,'Kangxi Emperor (1662 - 1722)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36736,'https://en.numista.com/catalogue/exonumia36736.html','Token - Qing Dynasty Emperors (Yongzhen, 1723-1735)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36736,36736,20.0,39.0,NULL,NULL,'medal',36736,36736,36736,NULL,NULL,'Yongzhen Emperor (1723 - 1735)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36737,'https://en.numista.com/catalogue/exonumia36737.html','Token - Qing Dynasty Emperors (Qianlong, 1736-1795)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36737,36737,20.0,39.0,NULL,NULL,'medal',36737,36737,36737,NULL,NULL,'Qianlong Emperor (1736 - 1795)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36738,'https://en.numista.com/catalogue/exonumia36738.html','Token - Qing Dynasty Emperors (Jiaqing, 1796-1820)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36738,36738,20.0,39.0,NULL,NULL,'medal',36738,36738,36738,NULL,NULL,'Jiaqing Emperor (1796 - 1820)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36739,'https://en.numista.com/catalogue/exonumia36739.html','Token - Qing Dynasty Emperors (Daoguang, 1821-1850)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36739,36739,20.0,39.0,NULL,NULL,'medal',36739,36739,36739,NULL,NULL,'Daoguang Emperor (1821 - 1850)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36740,'https://en.numista.com/catalogue/exonumia36740.html','Token - Qing Dynasty Emperors (Xiafeng, 1851-1861)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,36740,'Round',36740,36740,20.0,39.0,NULL,2.0,'medal',36740,36740,36740,NULL,NULL,'Xiafeng Emperor (1851 - 1861)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36741,'https://en.numista.com/catalogue/exonumia36741.html','Token - Qing Dynasty Emperors (Tongxhi, 1862-1874)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36741,36741,20.0,39.0,NULL,NULL,'medal',36741,36741,36741,NULL,NULL,'Tongxhi Emperor (1862 - 1874)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36742,'https://en.numista.com/catalogue/exonumia36742.html','Token - Qing Dynasty Emperors (Guangxu, 1875-1908)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36742,36742,20.0,39.0,NULL,NULL,'medal',36742,36742,36742,NULL,NULL,'Guangxu Emperor (1875 - 1908)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(36743,'https://en.numista.com/catalogue/exonumia36743.html','Token - Qing Dynasty Emperors (Xuantong, 1909-1911)','exonumia','chine',NULL,NULL,'Tourist souvenir',NULL,NULL,'Round',36743,36743,20.0,39.0,NULL,NULL,'medal',36743,36743,36743,NULL,NULL,'Xuantong Emperor (1909 - 1911)',NULL,1,'#8d7c71'); -INSERT INTO NumistaType VALUES(40522,'https://en.numista.com/catalogue/pieces40522.html','1 Dirham - Khalifa (small type; magnetic)','coin','emirats_arabes_unis',2012,2022,'Standard circulation coin',40522,40522,'Round',40522,40522,6.09999999999999964,24.0,NULL,1.89999999999999991,'medal',40522,40522,40522,NULL,NULL,NULL,replace(replace('1435 (2014) Roll:
\r\n
\r\n© Amer Salmeh','\r',char(13)),'\n',char(10)),1,'rgb(158.81578947368425,136.4473684210526,96.18421052631575)'); -INSERT INTO NumistaType VALUES(41904,'https://en.numista.com/catalogue/pieces41904.html','2 Euro (Élysée Treaty)','coin','france',2013,2013,'Circulating commemorative coin',41904,41904,'Round',41904,41904,8.5,25.75,NULL,2.20000000000000017,'medal',41904,41904,41904,NULL,NULL,'50th Anniversary of the Élysée Treaty',replace(replace('coincard
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(144.04580152671755,124.58015267175574,110.95419847328246)'); -INSERT INTO NumistaType VALUES(42976,'https://en.numista.com/catalogue/pieces42976.html','2 Euro (Escorial)','coin','espagne',2013,2013,'Circulating commemorative coin',42976,42976,'Round',42976,42976,8.5,25.75,NULL,2.20000000000000017,'medal',42976,42976,42976,NULL,'UNESCO World Heritage','Monastery and Site of the Escorial','El Escorial is one of several Spanish royal sites due to its history as a residence of the royal family. The palace was designed by King Philip II and architect Juan Bautista de Toledo to serve as a monument to Spain's central role in the Christian world.',1,'rgb(124,100,44)'); -INSERT INTO NumistaType VALUES(49339,'https://en.numista.com/catalogue/pieces49339.html','2 Euro - Philippe (Royal Meteorological Institute)','coin','belgique',2013,2013,'Circulating commemorative coin',49339,49339,'Round',49339,49339,8.5,25.75,NULL,2.20000000000000017,'medal',49339,49339,49339,NULL,NULL,'100th Anniversary of the Royal Meteorological Institute',replace(replace('coincard
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(141.02272727272725,141.02272727272725,113.97727272727273)'); -INSERT INTO NumistaType VALUES(54956,'https://en.numista.com/catalogue/pieces54956.html','10 Euro Cent - Willem-Alexander (2nd map)','coin','pays-bas',2014,2023,'Standard circulation coin',54956,54956,'Round',54956,54956,4.09999999999999964,19.75,NULL,1.92999999999999993,'medal',54956,54956,54956,NULL,NULL,NULL,replace(replace('This piece was engraved by the monetary workshop of Utrecht by several engravers according to the following periods :
\r\n
  • 2014 - 2015 : Sails ; Maarten Brouwer (holder)
    \r\n
  • 2016 - 2017 : Sails and star ; Kees Bruinsma (interim)
    \r\n
  • 2017 - 2020 : Sint Servaas bridge; Stephan Satijn (holder)
    \r\nIn 2020 Dutch coins minted for general circulation did not depict the mintmark and mintmastermark
    \r\n
  • 2021 - 2021 : Sint Servaas bridge and star; {no holder or interim}
    \r\n
  • 2022 -            : Raven; Bert van Ravenswaaij (holder)
','\r',char(13)),'\n',char(10)),2,'rgb(158,131,74)'); -INSERT INTO NumistaType VALUES(56030,'https://en.numista.com/catalogue/pieces56030.html','1 Euro Cent - Philippe','coin','belgique',2014,2023,'Standard circulation coin',56030,56030,'Round',56030,56030,2.29999999999999982,16.25,NULL,1.66999999999999992,'medal',56030,56030,56030,NULL,NULL,NULL,replace(replace('(fr) Initiale FP de l'avers :
\r\n    "F" = Filip en néerlandais
\r\n    "P" = Philippe en français
\r\n
\r\nDifférents d'atelier :
\r\n    Tête de l'archange  St. Michel surmontée d'une croix - Monnaie royale de Belgique à Bruxelles (2014-2017)
\r\n    Caducée - Monnaie royale des Pays-Bas à Utrecht (2018-2020)
\r\n    Caducée - Monnaie royale des Pays-Bas à Houten (2020-présent)
\r\n
\r\nDifférents de graveur :
\r\n    Chat - Bernard Gillard (2014-2016)
\r\n    Blason - Ingrid van Herzele (2017-Présent)
\r\n    Aster et fiole - Giovanni Van de Velde (2023 - à présent)','\r',char(13)),'\n',char(10)),1,'rgb(193,119,51)'); -INSERT INTO NumistaType VALUES(56035,'https://en.numista.com/catalogue/pieces56035.html','50 Euro Cent - Philippe','coin','belgique',2014,2023,'Standard circulation coin',56035,56035,'Round',56035,56035,7.79999999999999982,24.25,NULL,2.37999999999999989,'medal',56035,56035,56035,NULL,NULL,NULL,replace(replace('Mint Marks:
\r\n
  • Head of archangel St. Michael - Brussels Mint (2014-2017)
    \r\n
  • Mercury's wand - Royal Dutch Mint (2018-Present)
    \r\n
Privy marks:
  • Cat, Mint Master Bernard Gillard, 2013-2016
    \r\n
  • Coat of arms, Ingrid van Herzele, 2017-
    \r\n
','\r',char(13)),'\n',char(10)),1,'rgb(156,132,60)'); -INSERT INTO NumistaType VALUES(61644,'https://en.numista.com/catalogue/pieces61644.html','5 Groszy (magnetic)','coin','pologne',2013,2023,'Standard circulation coin',61644,61644,'Round',61644,61644,2.58999999999999985,19.5,NULL,1.30000000000000004,'medal',61644,61644,61644,NULL,NULL,NULL,replace(replace('Design differences between the two versions:
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(199,182,121)'); -INSERT INTO NumistaType VALUES(67631,'https://en.numista.com/catalogue/pieces67631.html','1 Euro','coin','lituanie',2015,2023,'Standard circulation coin',67631,67631,'Round',67631,67631,7.5,23.25,NULL,2.33000000000000007,'medal',67631,67631,67631,NULL,NULL,NULL,NULL,1,'rgb(204,172,92)'); -INSERT INTO NumistaType VALUES(68395,'https://en.numista.com/catalogue/pieces68395.html','2 Euro','coin','andorre',2014,2023,'Standard circulation coin',68395,68395,'Round',68395,68395,8.5,25.75,NULL,2.20000000000000017,'medal',68395,68395,68395,NULL,NULL,NULL,replace('Mints: In even years, the coins were minted in Madrid (Spain), in odd years in Pessac (France)
\n
\nThe coat of arms of Andorra (Catalan: Escut d'Andorra) is the heraldic device consisting of a shield divided quarterly by the arms of the Bishop of Urgell and the Count of Foix – who have historically been the two co-princes of Andorra – in addition to the emblems of Catalonia and the Viscount of Béarn. Utilized unofficially since the Middle Ages, its status as the coat of arms of the Principality of Andorra was formalized in 1993 upon the implementation of their new constitution. The escutcheon is featured on the flag of Andorra.','\n',char(10)),1,'rgb(176.07142857142856,121.42857142857142,78.92857142857143)'); -INSERT INTO NumistaType VALUES(69263,'https://en.numista.com/catalogue/pieces69263.html','2 Euro (Bundesländer - "Hessen")','coin','allemagne',2015,2015,'Circulating commemorative coin',69263,69263,'Round',69263,69263,8.5,25.75,NULL,2.20000000000000017,'medal',69263,69263,69263,NULL,'German states','State of Hessen',NULL,1,'rgb(157.85714285714283,130.1020408163265,97.14285714285717)'); -INSERT INTO NumistaType VALUES(69264,'https://en.numista.com/catalogue/pieces69264.html','2 Euro (25 Years of German Unity)','coin','allemagne',2015,2015,'Circulating commemorative coin',69264,69264,'Round',69264,69264,8.5,25.75,NULL,2.20000000000000017,'medal',69264,69264,69264,NULL,NULL,'25 Years of German Unity',NULL,1,'rgb(153,131.8965517241379,102)'); -INSERT INTO NumistaType VALUES(69469,'https://en.numista.com/catalogue/pieces69469.html','1 Euro - Felipe VI','coin','espagne',2015,2023,'Standard circulation coin',69469,69469,'Round',69469,69469,7.5,23.25,NULL,2.33000000000000007,'medal',69469,69469,69469,NULL,NULL,NULL,replace(replace('Two types of  Obverse are known:
\r\nA -  Thick flat script.
\r\nB -  Thin bulged script.
\r\n
\r\nBusiness strike of type A is in 2015-2016,  of type B is in 2016-2018','\r',char(13)),'\n',char(10)),1,'rgb(132,92,52)'); -INSERT INTO NumistaType VALUES(70547,'https://en.numista.com/catalogue/pieces70547.html','5 Pence - Elizabeth II (5th portrait; Royal Shield)','coin','royaume-uni',2015,2022,'Standard circulation coin',70547,70547,'Round',70547,70547,3.25,18.0,NULL,1.69999999999999995,'medal',70547,70547,70547,NULL,NULL,NULL,replace(replace('Introduced in 2015 to mark the change from the Ian Rank-Broadley fourth portrait to the Jody Clark fifth portrait of The Queen. In 2018, the coins were released in BU and Proof sets only, with none issued for circulation.
\r\n
\r\nIn 2015 the Brilliant Uncirculated strike featured in the Fifth Portrait Annual set (1,563 sales) and the Fifth Portrait Definitive set (19,074 sales), whilst the Proof strike featured in the combined Fourth & Fifth Portrait Annual set (1,642 sales) and the combined Fourth & Fifth Portrait Definitive set (3,006 sales).
\r\n
\r\nIn 2016 the Brilliant Uncirculated strike featured in the Annual Coin set (22,786 sales) and the Definitive Coin set (7,419 sales). Whilst the Proof strike featured in the Collector Proof set (6,919 sales) and the Premium Proof set (3,409 sales)
\r\n
\r\nIn 2017 the Brilliant Uncirculated strike featured in the Annual Coin set (28,478 sales) and the Definitive Coin set (13,547 sales). Whilst the Proof strike featured in the Collector Proof set (7,701 sales) and the Premium Proof set (3,755 sales)
\r\n
\r\nIn 2018 the Brilliant Uncirculated strike featured in the Annual Coin set (18,900 sales) and the Definitive Coin set (5,855 sales). Whilst the Proof strike featured in the Proof set (5,788 sales) and the Premium Proof set (2,544 sales). There were no circulation strikes for 2018.
\r\n
\r\nIn 2019 the Brilliant Uncirculated strike featured in the Annual Coin set (23,326 sales), the Definitive Coin set (6,772 sales), a 'Hello Little One' Set (3,201 sales), a 'Hello Little One Baby Journal' and bear set (611 sales), and a 'My First Coins Baby Journal' (2,127 sales). Whilst the Proof strike featured in the Proof set (6,055 sales) and the Premium Proof set (2,053 sales).
\r\n
\r\nIn 2022, in addition to the circulation strikes and regular annual sets, a special Queen Elizabeth II Memorial Set featured on the obverse of the definitive types a privy mark which commemorated the life-span of The Queen (1926-2022).
\r\n
\r\n© The Royal Mint, 2022','\r',char(13)),'\n',char(10)),3,'rgb(135.59523809523813,135.59523809523813,119.40476190476188)'); -INSERT INTO NumistaType VALUES(80926,'https://en.numista.com/catalogue/pieces80926.html','2 Euros (Anniversary of the National Bank)','coin','autriche',2016,2016,'Circulating commemorative coin',80926,80926,'Round',80926,80926,8.5,25.75,NULL,2.20000000000000017,'medal',80926,80926,80926,NULL,NULL,'200th Anniversary of the National Bank',replace(replace('issued by Austrian mint in rolls with 25 coins
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(154.18604651162792,136.3953488372093,100.81395348837208)'); -INSERT INTO NumistaType VALUES(81058,'https://en.numista.com/catalogue/pieces81058.html','2 Euro (Aqueduct of Segovia)','coin','espagne',2016,2016,'Circulating commemorative coin',81058,81058,'Round',81058,81058,8.5,25.75,NULL,2.20000000000000017,'medal',81058,81058,81058,NULL,'UNESCO World Heritage','Old Town of Segovia and its Aqueduct','Segovia is a city in the autonomous region of Castile and León, Spain and capital of Segovia Province. In 1985 the old city of Segovia and its Aqueduct were declared World Heritage Sites by UNESCO. The Aqueduct, located in Plaza del Azoguejo, is the defining historical feature of the city, dating from the late 1st or early 2nd century CE. Acknowledged as the most important Roman civil engineering work in Spain, it consists of about 25,000 granite blocks held together without any mortar, and spans 818 meters with more than 170 arches, the highest being 29 metres high.',1,'rgb(126,113,52)'); -INSERT INTO NumistaType VALUES(82237,'https://en.numista.com/catalogue/pieces82237.html','2 Euro (EURO 2016 Football Championship)','coin','france',2016,2016,'Circulating commemorative coin',82237,82237,'Round',82237,82237,8.5,25.75,NULL,2.20000000000000017,'medal',82237,82237,82237,NULL,NULL,'EURO 2016 Football Championship',replace(replace('(fr) La compétition se déroule du 10 juin au 10 juillet 2016.
\r\n
\r\nOn distingue 2 types de tranches :
\r\nTranche A = 2 à l'endroit avec l'avers au dessus précédé de 2 étoiles la pointe vers le haut
\r\nTranche B = 2 à l'endroit avec l'avers au dessus précédé de 2 étoiles la pointe vers le bas
\r\n
\r\n
\r\n
\r\nDifférents de graveur
\r\nYves Sampo, depuis 2011 fleurette d'atelier','\r',char(13)),'\n',char(10)),1,'rgb(174.47368421052633,134.21052631578948,80.52631578947368)'); -INSERT INTO NumistaType VALUES(84061,'https://en.numista.com/catalogue/pieces84061.html','2 Euro (Portuguese Olympic Team for Rio 2016)','coin','portugal',2016,2016,'Circulating commemorative coin',84061,84061,'Round',84061,84061,8.5,25.75,NULL,2.20000000000000017,'medal',84061,84061,84061,NULL,NULL,'Portuguese Olympic Team for Rio 2016',replace(replace('Double die obverse varieties are known to exist.
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(177.55555555555554,124.66666666666667,77.44444444444444)'); -INSERT INTO NumistaType VALUES(87329,'https://en.numista.com/catalogue/pieces87329.html','2 Euro (25th of April bridge)','coin','portugal',2016,2016,'Circulating commemorative coin',87329,87329,'Round',87329,87329,8.5,25.75,NULL,2.20000000000000017,'medal',87329,87329,87329,NULL,NULL,'The 50th Anniversary of the 25th of April bridge',replace(replace('The coin dedicated to a suspension bridge connecting the city of Lisbon (Portugal), to the municipality of Almada on the left (south) bank of the Tagus river. It has a total length of 2,277 metres (7,470 ft), making it the 46th longest suspension bridge in the world.
\r\n
\r\nFrom its inauguration on 6 August 1966 up to 1974, the bridge was named Salazar Bridge (Ponte Salazar), after Portuguese Prime Minister António de Oliveira Salazar, who ordered its construction. After the Carnation Revolution, which overthrew the remnants of Salazar's regime, the bridge was renamed for April 25, the date of the revolution.
\r\n
\r\nLater changes had to be made due to the rapid increase in population. In the 1990s, a fifth car lane was added, and in 1999, a lower deck, used as a railway track, which was planned since the beginning, was finally built.[4] Today, the upper deck carries six car lanes while the lower deck carries a double track railway, electrified at 25 kV AC.','\r',char(13)),'\n',char(10)),1,'rgb(162.27272727272728,134.12337662337663,92.72727272727273)'); -INSERT INTO NumistaType VALUES(88649,'https://en.numista.com/catalogue/pieces88649.html','1 Krona - Carl XVI Gustaf','coin','suede',2016,2016,'Standard circulation coin',88649,88649,'Round',88649,88649,3.60000000000000008,19.5,NULL,1.79000000000000003,'medal',88649,88649,88649,NULL,NULL,NULL,NULL,1,'rgb(148,68,36)'); -INSERT INTO NumistaType VALUES(89870,'https://en.numista.com/catalogue/pieces89870.html','2 Pesos (Bicentennial of the Declaration of Independence Argentina)','coin','argentine',2016,2016,'Circulating commemorative coin',89870,89870,'Round',89870,89870,7.20000000000000017,24.5,NULL,2.20000000000000017,'medal',89870,89870,89870,NULL,NULL,'Bicentennial of the Declaration of Independence Argentina','',2,'rgb(220,164,60)'); -INSERT INTO NumistaType VALUES(91431,'https://en.numista.com/catalogue/pieces91431.html','2 Euro (François Mitterrand)','coin','france',2016,2016,'Circulating commemorative coin',91431,91431,'Round',91431,91431,8.5,25.75,NULL,2.20000000000000017,'medal',91431,91431,91431,NULL,NULL,'100th Anniversary of the birth of François Mitterrand','There are 2 different types of edges A and B depending on the specific star, more about: http://www.amisdeleuro.org/fr/121',1,'rgb(132,108,60)'); -INSERT INTO NumistaType VALUES(100658,'https://en.numista.com/catalogue/pieces100658.html','1 Pound - Elizabeth II (5th portrait; Nations of the Crown)','coin','royaume-uni',2016,2022,'Standard circulation coin',100658,100658,'Dodecagonal (12-sided)',100658,100658,8.75,23.3999999999999985,NULL,2.79999999999999982,'medal',100658,100658,100658,NULL,NULL,NULL,replace(replace('Launched for circulation by the Royal Mint on March 28th 2017, as 'The world's most secure coin'. 500 million circulation issues were struck with a 2016 date but were not released until 2017. There are a handful of known mules that show the obverse dated 2016 but have 2017 in the micro-lettering around the rim.
\r\n
\r\nThe 'latent image' on the obverse is like a hologram that changes from a ‘£’ symbol to the number '1' when the coin is viewed from different angles.
\r\n
\r\n* Diameter note: The 12 sides are slightly curved, giving a range of diameters from 23.03 to 23.43.
\r\n
\r\nSp#J39A (2016): A special edition 2016-dated two-coin set was released to commemorate the last round pound and the new 12-sided design in a Brilliant Uncirculated finish. The reverse of the 12-sided £1 coin features the Royal Mint's ‘cross crosslet’ mintmark with 9,850 packs sold in 2016.
\r\n
\r\n
\r\nIn 2017 the Brilliant Uncirculated strike featured in the Annual Coin set (28,478 sales) and the Definitive Coin set (13,547 sales). As well as being issued in BU individual packs (91,461 sales). Whilst the Proof strike featured in the Collector Proof set (7,701 sales) and the Premium Proof set (3,755 sales)
\r\n
\r\n©The Royal Mint, 2017
\r\n
\r\nThe 2017 coin was the second coin in the Strike Your Own range at The Royal Mint Experience in Llantrisant, Wales and was available to be struck between 01/01/2017 and 13/10/2017 (45,726 sales).
\r\n
\r\n
\r\nIn 2018 the Brilliant Uncirculated strike featured in the Annual Coin set (18,900 sales) and the Definitive Coin set (5,855 sales). Whilst the Proof strike featured in the Proof set (5,788 sales) and the Premium Proof set (2,544 sales).
\r\n
\r\nIn 2019 the Brilliant Uncirculated strike featured in the Annual Coin set (23,326 sales), the Definitive Coin set (6,772 sales), a 'Hello Little One' Set (3,201 sales), a 'Hello Little One Baby Journal' and bear set (611 sales), and a 'My First Coins Baby Journal' (2,127 sales). Whilst the Proof strike featured in the Proof set (6,055 sales) and the Premium Proof set (2,053 sales).
\r\n
\r\nIn 2022, in addition to the regular annual sets and the circulation strikes, a special Queen Elizabeth II Memorial Set featured on the obverse of the definitive types a privy mark which commemorated the life-span of The Queen (1926-2022).
\r\n
\r\n© The Royal Mint, 2022
\r\n
\r\nReports have been received of 2017-dated coins with two different latent images, having either 24 or 20 vertical lines.
\r\n
\r\nIn further years, the number of vertical lines also differs. Reports received suggest that year types are as below:
\r\n2016 - 24 lines
\r\n2017 - 24 lines and 20 lines
\r\n2018 - 24 lines - proof only
\r\n2018 - 20 lines
\r\n2019 - 24 lines - proof only
\r\n2019 - 20 lines - BUNC and circulation
\r\n2019 - 15 lines - circulation
\r\n2020 - 15 lines
\r\n2021 - 15 lines
\r\n2022 - 15 lines
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),2,'rgb(204,188,132)'); -INSERT INTO NumistaType VALUES(102445,'https://en.numista.com/catalogue/pieces102445.html','2 Euro (Bundesländer - "Rheinland-Pfalz")','coin','allemagne',2017,2017,'Circulating commemorative coin',102445,102445,'Round',102445,102445,8.5,25.75,NULL,2.20000000000000017,'medal',102445,102445,102445,NULL,'German states','State of Rhineland-Palatinate',replace(replace('Five mints currently share coin production. Each puts its own workshop letter on the coins it mints:
\r\nA - Berlin
\r\nD - Munich
\r\nF - Stuttgart
\r\nG - Karlsruhe
\r\nJ - Hamburg','\r',char(13)),'\n',char(10)),1,'rgb(59.500000000000014,127.49999999999994,195.49999999999997)'); -INSERT INTO NumistaType VALUES(105040,'https://en.numista.com/catalogue/pieces105040.html','2 Euro (150 Years of Public Security)','coin','portugal',2017,2017,'Circulating commemorative coin',105040,105040,'Round',105040,105040,8.5,25.75,NULL,2.20000000000000017,'medal',105040,105040,105040,NULL,NULL,'150 Years of Public Security',NULL,1,'rgb(204,180,132)'); -INSERT INTO NumistaType VALUES(122665,'https://en.numista.com/catalogue/pieces122665.html','250 Līrah / Livres (Nordic Gold thinner type)','coin','liban',2006,2018,'Standard circulation coin',122665,122665,'Round',122665,122665,5.0,23.5,NULL,1.64999999999999991,'coin',122665,122665,122665,NULL,NULL,NULL,replace('Differences between KM#36; Schön#40 & Schön#40a:
\n- Metal
\n- Thickness
\n- Date size
\n
\n© Edo Timmermans
\n
\nYear 2018
\n
\n© pksaha
\n
\nBrilliant Uncirculated Set (leather case) issued in 2010:
\nIssue Price: 50,000 LBP
\n
\n© Image courtesy of Banque du Liban
\n
\nMint Set (postcard) issued in 2010:
\nIssue Price: 10,000 LBP
\n
\n© Image courtesy of Banque du Liban
\n
\nMint Set (booklet) issued in 2010:
\nIssue Price: 15,000 LBP
\n
\n© Image courtesy of Banque du Liban','\n',char(10)),1,'rgb(196,160,99)'); -INSERT INTO NumistaType VALUES(122799,'https://en.numista.com/catalogue/pieces122799.html','2 Euros (Pink ribbon)','coin','france',2017,2017,'Circulating commemorative coins',122799,122799,'Round',122799,122799,8.5,25.75,NULL,2.20000000000000017,'medal',122799,122799,122799,NULL,NULL,'25th anniversary of the pink ribbon, symbol of the fight against breast cancer','Since the 1990s, the fight against breast cancer has been a major cause around the world. On the occasion of the 25th anniversary of the pink ribbon, an iconic symbol of this fight, Monnaie de Paris has decided to support this cause. For nearly 15 years, a pink ribbon prize has been presented every year to support research efforts and innovation.',1,'rgb(195.49999999999997,178.5,59.500000000000014)'); -INSERT INTO NumistaType VALUES(133815,'https://en.numista.com/catalogue/pieces133815.html','10 Bani (Eagle with crown)','coin','roumanie',2018,2023,'Standard circulation coin',133815,133815,'Round',133815,133815,4.0,20.3999999999999985,NULL,1.80000000000000004,'medal',133815,133815,133815,NULL,NULL,NULL,replace(replace('This type differs from the 2005-2017 coins because the eagle has a small crown on its head
\r\n
\r\n
\r\n
\r\n
\r\nThe crown was added because the national emblem of Romania was changed (the eagle was crowned).','\r',char(13)),'\n',char(10)),2,'rgb(92.92372881355931,92.92372881355931,162.0762711864407)'); -INSERT INTO NumistaType VALUES(133816,'https://en.numista.com/catalogue/pieces133816.html','50 Bani (Eagle with crown)','coin','roumanie',2018,2023,'Standard circulation coin',133816,133816,'Round',133816,133816,6.09999999999999964,23.75,NULL,1.89999999999999991,'medal',133816,133816,133816,NULL,NULL,NULL,replace(replace('The lettering can start from anywhere and can be laid on the obverse or on the reverse.
\r\n
\r\nThis type differs from the 2005-2017 coins because the eagle has a small crown on its head
\r\n
\r\n
\r\n
\r\n
\r\nThe crown was added because the national emblem of Romania was changed (the eagle was crowned).','\r',char(13)),'\n',char(10)),1,'rgb(158,117,66)'); -INSERT INTO NumistaType VALUES(134685,'https://en.numista.com/catalogue/pieces134685.html','2 Euro (Bleuet de France)','coin','france',2018,2018,'Circulating commemorative coin',134685,134685,'Round',134685,134685,8.5,25.75,NULL,2.20000000000000017,'medal',134685,134685,134685,NULL,NULL,'100th Anniversary of the end of the First World War (Bleuet de France)',replace(replace('For 100 years, the cornflower (Bleuet de France) has been the flower of remembrance and solidarity in France. It started as a means of helping injured veterans of the First World War, but before long had been adopted by the whole French nation as a symbol of gratitude for the sacrifices the soldiers had made to defend their country and their ideals.
\r\n
\r\nToday, as in the past, the cornflower still provides moral and financial support to veterans and victims of wars past and present and to victims of terrorism.
\r\n
\r\nIt also helps pass on to young people standards and values such as respect, peace and tolerance. This flower of remembrance honors all those who fought and are still fighting for our freedom today.
\r\n
\r\nTwo varieties of the Obverse are known:
\r\nDie A  – numeral 2 in date 2018 has single head.
\r\nDie B – numeral 2 in date 2018 has double head.
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(140.820895522388,142.72388059701495,112.27611940298506)'); -INSERT INTO NumistaType VALUES(157845,'https://en.numista.com/catalogue/pieces157845.html','2 Euro (600th Anniversary of the discovery of the Madeira archipelago)','coin','portugal',2019,2019,'Circulating commemorative coin',157845,157845,'Round',157845,157845,8.5,25.75,NULL,2.20000000000000017,'medal',157845,157845,157845,NULL,NULL,'600th Anniversary of the discovery of the Madeira archipelago',NULL,1,'rgb(185.45454545454547,135.2272727272727,69.54545454545455)'); -INSERT INTO NumistaType VALUES(192990,'https://en.numista.com/catalogue/pieces192990.html','2 Euro (General Charles de Gaulle)','coin','france',2020,2020,'Circulating commemorative coin',192990,192990,'Round',192990,192990,8.5,25.75,NULL,2.20000000000000017,'medal',192990,192990,192990,NULL,NULL,'General Charles de Gaulle','The number of circulation coins being struck (18,061,940 coins) was not chosen by chance. Split by groups of 2, then 2, then 4 digits, this number makes 18/06/1940 which is the date of the famous call to arms of the 18th June broadcast from London.',2,'rgb(196,172,84)'); -INSERT INTO NumistaType VALUES(197919,'https://en.numista.com/catalogue/pieces197919.html','2 Euros (75th anniversary of United Nations)','coin','portugal',2020,2020,'Circulating commemorative coin',197919,197919,'Round',197919,197919,8.5,25.75,NULL,2.20000000000000017,'medal',197919,197919,197919,NULL,NULL,'75th anniversary of United Nations',' @guise',1,'rgb(196,172,116)'); -INSERT INTO NumistaType VALUES(201619,'https://en.numista.com/catalogue/note201619.html','500 Forint','banknote','hongrie',2018,2022,'Standard banknote',201619,201619,'Rectangular',201619,NULL,NULL,NULL,NULL,NULL,NULL,201619,201619,NULL,201619,NULL,NULL,replace(replace('The banknote has a a security strip with the inscript "MNB 500" and on the right corner a see-through register,when hold to light it forms an "H".
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n© ByRussia45
\r\n
\r\nThe banknote contains orange glowing and turkic green UV on the obverse.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n© ByRussia45','\r',char(13)),'\n',char(10)),1,'rgb(196,84,94)'); -INSERT INTO NumistaType VALUES(201624,'https://en.numista.com/catalogue/note201624.html','5 Pounds - Elizabeth II (Sir Winston Churchill; polymer)','banknote','england',2015,2015,'Standard banknote',201624,201624,'Rectangular',201624,NULL,NULL,NULL,NULL,NULL,NULL,201624,201624,NULL,NULL,NULL,NULL,replace(replace('The note is copyrighted with the date 2015 but was introduced in 2016.
\r\nFor further detail please visit the Bank of England website
\r\n
\r\nUV activity:
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),1,'rgb(204.71830985915494,104.15492957746477,50.28169014084506)'); -INSERT INTO NumistaType VALUES(201676,'https://en.numista.com/catalogue/note201676.html','2 Leva','banknote','bulgarie',1999,2005,'Standard banknote',201676,201676,'Rectangular',201676,NULL,NULL,NULL,NULL,NULL,NULL,201676,201676,NULL,201676,NULL,NULL,replace(replace('UV activity:
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),2,'rgb(140.68965517241384,79.13793103448278,175.86206896551724)'); -INSERT INTO NumistaType VALUES(201959,'https://en.numista.com/catalogue/note201959.html','1 Rupee - Birendra Bir Bikram','banknote','nepal',1993,1999,'Standard banknote',201959,201959,'Rectangular',201959,NULL,NULL,NULL,NULL,NULL,NULL,201959,201959,NULL,201959,NULL,NULL,replace(replace('
\r\nSignature #12: Hari Shankar Tripathi
\r\nB. A. Banknote International, Canada

\r\n
\r\nSignature #13: Satyendra Pyara Shrestha
\r\nFrancois-Charles Oberthur Fiduciaire (France) - FCOF','\r',char(13)),'\n',char(10)),1,'rgb(212,172,124)'); -INSERT INTO NumistaType VALUES(202243,'https://en.numista.com/catalogue/note202243.html','20 Escudos','banknote','portugal',1978,1978,'Standard banknote',202243,202243,'Rectangular',202243,NULL,NULL,NULL,NULL,NULL,NULL,202243,202243,NULL,202243,NULL,NULL,replace(replace('UV activity:
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),1,'rgb(210.00000000000017,179.99999999999983,44.999999999999844)'); -INSERT INTO NumistaType VALUES(202244,'https://en.numista.com/catalogue/note202244.html','2 Dollars (MAS; polymer)','banknote','singapour',2006,2022,'Standard banknote',202244,202244,'Rectangular',202244,NULL,NULL,NULL,NULL,NULL,NULL,202244,202244,NULL,202244,'Portrait Series',NULL,replace(replace('UV activity:
\r\n
\r\n
\r\n© gyoschak

\r\nYears of issue are coded with geometrical symbols below word "EDUCATION" on reverse of note.','\r',char(13)),'\n',char(10)),1,'rgb(197.75510204081644,93.67346938775505,57.24489795918357)'); -INSERT INTO NumistaType VALUES(202279,'https://en.numista.com/catalogue/note202279.html','100 Dirhams','banknote','maroc',2012,2012,'Standard banknote',202279,NULL,'Rectangular',202279,NULL,NULL,NULL,NULL,NULL,NULL,202279,202279,NULL,NULL,NULL,NULL,NULL,1,'rgb(165,106,53)'); -INSERT INTO NumistaType VALUES(202287,'https://en.numista.com/catalogue/note202287.html','20 Dirhams','banknote','maroc',2012,2012,'Standard banknote',202287,202287,'Rectangular',202287,NULL,NULL,NULL,NULL,NULL,NULL,202287,202287,NULL,NULL,NULL,NULL,NULL,2,'rgb(93,79,166)'); -INSERT INTO NumistaType VALUES(202397,'https://en.numista.com/catalogue/note202397.html','5 Dollars (Federal Reserve Note; large portrait)','banknote','etats-unis',1999,2006,'Standard banknote',202397,202397,'Rectangular',202397,NULL,NULL,NULL,NULL,NULL,NULL,202397,202397,NULL,202397,NULL,NULL,'Beginning in 1996, series years are denoted by the first letter of a note's serial prefix, while its issuing Federal Reserve Branch is indicated by the second letter.',1,'rgb(191.25000000000003,157.69736842105257,63.74999999999997)'); -INSERT INTO NumistaType VALUES(202523,'https://en.numista.com/catalogue/note202523.html','10 Pounds - Elizabeth II (Jane Austen; polymer)','banknote','england',2017,2020,'Standard banknote',202523,202523,'Rectangular',202523,NULL,NULL,NULL,NULL,NULL,NULL,202523,202523,NULL,202523,NULL,NULL,replace(replace('Date first issued: 14 September 2017.
\r\nFor further detail on this banknote, please visit the Bank of England website.
\r\n
\r\nUV activity:
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),2,'rgb(75,157,203)'); -INSERT INTO NumistaType VALUES(204590,'https://en.numista.com/catalogue/note204590.html','2 Rupees','banknote','nepal',1981,2001,'Standard banknote',204590,204590,'Rectangular',204590,NULL,NULL,NULL,NULL,NULL,NULL,204590,204590,NULL,204590,NULL,NULL,'

p#29a: Denomination at lower left on front printed on king''s chest. Line from King''s lip extending downward.
p#29b.1: Denomination at lower left on front shifted left from king''s chest. Without line from King''s lip extending downward. Serial # 24 mm long.
p#29b.1: Serial # 24 mm long.
p#29c: Serial # 20 mm long
Signature Kalyana Bikram Adhikary P29
Signature Ganesh Bahadur Thapa P29
Signature Hari Shankar Tripathi P29
Signature Satyendra Pyara Shrestha P29
Signature Deependra Purush Dhakal P29

',1,'rgb(70.97938144329895,162.98969072164954,184.02061855670107)'); -INSERT INTO NumistaType VALUES(204777,'https://en.numista.com/catalogue/note204777.html','200 Escudos','banknote','cap-vert',2014,2014,'Standard banknote',204777,204777,'Rectangular',204777,NULL,NULL,NULL,NULL,NULL,NULL,204777,204777,NULL,NULL,NULL,NULL,replace(replace('https://www.delarue.com/media-center/banco-de-cabo-verde-issues-three-denominations-of-their-new-banknote-series
\r\n
\r\nUV activity:
\r\n
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),1,'rgb(206,153,102)'); -INSERT INTO NumistaType VALUES(205413,'https://en.numista.com/catalogue/note205413.html','500 Escudos','banknote','cap-vert',2007,2007,'Standard banknote',205413,NULL,'Rectangular',205413,NULL,NULL,NULL,NULL,NULL,NULL,205413,205413,NULL,205413,NULL,NULL,NULL,1,'rgb(152,52,64)'); -INSERT INTO NumistaType VALUES(205902,'https://en.numista.com/catalogue/note205902.html','20 Pesos','banknote','argentine',2017,2020,'Standard banknote',205902,205902,'Rectangular',205902,NULL,NULL,NULL,NULL,NULL,NULL,205902,205902,NULL,205902,NULL,NULL,replace(replace('The guanaco is a camelid native to South America, closely related to the llama.
\r\n
\r\nUV activity:
\r\n
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),1,'rgb(186,84,89)'); -INSERT INTO NumistaType VALUES(206382,'https://en.numista.com/catalogue/note206382.html','5 Lira (Purple)','banknote','turquie',2013,2022,'Standard banknote',206382,206382,'Rectangular',206382,NULL,NULL,NULL,NULL,NULL,NULL,206382,206382,NULL,206382,'E9 Emission Group',NULL,replace(replace('Signatures:
\r\nSeries A: Durmuş Yılmaz, Doç. Dr. Erdem Başçı
\r\nSeries B: Doç. Dr. Erdem Başçı, Doç. Dr. Mehmet Yörükoğlu
\r\nSeries C: Murat Çetinkaya, Erkan Kilimci
\r\nSeries D: Murat Uysal, Dr. Uğur Namık Küçük
\r\nSeries E: Dr. Şahap Kavcioğlu, Dr. Uğur Namık Küçük
\r\nSeries F: Prof. Dr. Şahap Kavcıoğlu, Taha Çakmak
\r\n
\r\nUV activity (P#222b) 5TL on head Kemal Atatürk obverse, serial number upper right reverse:
\r\n
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),2,'rgb(106,206,220)'); -INSERT INTO NumistaType VALUES(206385,'https://en.numista.com/catalogue/note206385.html','10 Lira','banknote','turquie',2009,2022,'Standard banknote',206385,206385,'Rectangular',206385,NULL,NULL,NULL,NULL,NULL,NULL,206385,206385,NULL,206385,'E9 Emission Group',NULL,replace(replace('Signatures:
\r\nSeries I: Durmuş Yılmaz &  Burhan Göklemez
\r\nSeries II: Doç. Dr. Erdem Başçı & Necati Şahin
\r\nSeries III: Murat Çetinkaya & Murat Uysal
\r\nSeries IV: Murat Uysal & Dr. Emrah Şener
\r\nSeries V: Prof. Dr. Şahap Kavcıoğlu & Dr. Emrah Şener
\r\nSeries VI: Prof. Dr. Şahap Kavcıoğlu & Mustafa Duman
\r\n
\r\n
\r\nFluorescent 10TL on head Kemal Atatürk
\r\nFluorescent serial # upper right reverse','\r',char(13)),'\n',char(10)),3,'rgb(236,108,156)'); -INSERT INTO NumistaType VALUES(206387,'https://en.numista.com/catalogue/note206387.html','20 Lira','banknote','turquie',2009,2022,'Standard banknote',206387,206387,'Rectangular',206387,NULL,NULL,NULL,NULL,NULL,NULL,206387,206387,NULL,206387,'E9 Emission Group',NULL,replace(replace('Signatures:
\r\nSeries I: Durmuş Yılmaz & Dr.M. İbrahim Turhan
\r\nSeries II: Doç. Dr. Erdem Başçı & Murat Çetinkaya
\r\nSeries III: Murat Çetinkaya & Dr. Uğur Namık Küçük
\r\nSeries IV: Murat Uysal & Dr. Oğuzhan Özbaş
\r\nSeries V: Dr. Şahap Kavcioğlu & Prof. Dr. Semih Tümen
\r\nSeries VI: Dr. Şahap Kavcıoğlu & Dr. Emrah Şener
\r\n
\r\n
\r\nFluorescent 20TL on head Kemal Atatürk
\r\nFluorescent serial # upper right on reverse','\r',char(13)),'\n',char(10)),1,'rgb(197,129,105)'); -INSERT INTO NumistaType VALUES(206732,'https://en.numista.com/catalogue/note206732.html','100 Pesos','banknote','argentine',2018,2019,'Standard banknote',206732,NULL,'Rectangular',206732,NULL,NULL,NULL,NULL,NULL,NULL,206732,206732,NULL,206732,NULL,NULL,NULL,1,'rgb(204,142,103)'); -INSERT INTO NumistaType VALUES(207353,'https://en.numista.com/catalogue/note207353.html','20 Dinars','banknote','tunisie',2017,2017,'Standard banknote',207353,207353,'Rectangular',207353,NULL,NULL,153.0,76.0,NULL,NULL,207353,207353,NULL,NULL,NULL,NULL,NULL,1,'rgb(204,65,87)'); -INSERT INTO NumistaType VALUES(208875,'https://en.numista.com/catalogue/note208875.html','10 Dinars','banknote','tunisie',2020,2020,'Standard banknote',208875,208875,'Rectangular',208875,NULL,NULL,148.0,73.0,NULL,NULL,208875,208875,NULL,208875,NULL,NULL,'

Dr. Tawhida Ben Cheikh (1909-2010), Tunisia’s first female medical doctor. Dr. Ben Cheikh practiced as a physician, pediatrician as well as a gynecologist and was the founder of Tunisia’s first family planning clinic.

',1,'rgb(62,173,199)'); -INSERT INTO NumistaType VALUES(209271,'https://en.numista.com/catalogue/note209271.html','10 Dinars','banknote','tunisie',2013,2013,'Standard banknote',209271,209271,'Rectangular',209271,NULL,NULL,148.0,73.0,NULL,NULL,209271,209271,NULL,209271,NULL,NULL,replace(replace('UV activity:
\r\n
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),1,'rgb(177,201,113)'); -INSERT INTO NumistaType VALUES(211537,'https://en.numista.com/catalogue/note211537.html','1000 Forint','banknote','hongrie',2017,2023,'Standard banknote',211537,211537,'Rectangular',211537,NULL,NULL,NULL,NULL,NULL,NULL,211537,211537,NULL,211537,NULL,NULL,replace(replace('Security strip with the inscription "MNB 1000" and see-through register:
\r\n
\r\n
\r\n© ByRussia45
\r\n
\r\nUV activity:
\r\n
\r\n© gyoschak','\r',char(13)),'\n',char(10)),1,'rgb(192,92,113)'); -INSERT INTO NumistaType VALUES(257573,'https://en.numista.com/catalogue/pieces257573.html','1 Dinar','coin','tunisie',2020,2020,'Standard circulation coin',257573,257573,'Round',257573,257573,9.5,28.0,NULL,2.10000000000000008,'coin',257573,257573,257573,NULL,NULL,NULL,NULL,1,'rgb(127.5,127.5,127.5)'); -INSERT INTO NumistaType VALUES(258832,'https://en.numista.com/catalogue/pieces258832.html','2 Euro (Presidency European Union)','coin','portugal',2021,2021,'Circulating commemorative coin',258832,258832,'Round',258832,258832,8.5,25.75,NULL,2.20000000000000017,'medal',258832,258832,258832,NULL,NULL,'Portuguese Presidency of the Council of the European Union',NULL,1,'rgb(66.11111111111113,108.61111111111113,188.88888888888889)'); -INSERT INTO NumistaType VALUES(264789,'https://en.numista.com/catalogue/pieces264789.html','2 Euro (Historic City of Toledo)','coin','espagne',2021,2021,'Circulating commemorative coin',264789,264789,'Round',264789,264789,8.5,25.75,NULL,2.20000000000000017,'medal',264789,264789,264789,NULL,'UNESCO World Heritage','Historic City of Toledo',replace(replace('Spain started the commemorative coin series Patrimonio de la Humanidad de la UNESCO (UNESCO World Heritage) in 2010, commemorating all of Spain's UNESCO World Heritage Sites, which could continue until 2050. The order in which the coin for a specific site is issued coincides with the order in which they were declared a UNESCO World Heritage site.
\r\nPuerta del Sol is a city gate of Toledo, Spain, built in the late 14th century by the Knights Hospitaller. The medallion above the arch of the gate depicts the ordination of the Visigothic Ildephonsus, Toledo's patron saint. The gate was named because of its orientation to the east, where the sun always rises.
\r\nThe Synagogue of El Tránsito (Spanish: Sinagoga del Tránsito) is a historic building in Toledo, famous for its rich stucco decoration, which bears comparison with the Alcazar of Seville and the Alhambra palaces in Granada.
\r\nThe synagogue was founded by Samuel ha-Levi Abulafia, Treasurer to Peter of Castile, in about 1356. After the expulsion of the city's Jews under the Alhambra decree in 1492, the Synagogue came under the Order of Calatrava, who converted the building into a church serving a priory dedicated to Saint Benedict. In the 17th century the church's name changed to Nuestra Señora del Tránsito: the name derives from a painting by Juan Correa de Vivar housed there, Transit of the Virgin. In 1877 the building became a national monument. The transformation of the building into the Sephardi Museum, as it is now officially called, started around 1910.','\r',char(13)),'\n',char(10)),1,'rgb(173.69565217391306,127.49999999999997,81.30434782608695)'); -INSERT INTO NumistaType VALUES(274850,'https://en.numista.com/catalogue/pieces274850.html','2 Euro (Tokyo Olympic Games)','coin','portugal',2021,2021,'Circulating commemorative coin',274850,274850,'Round',274850,274850,8.5,25.75,NULL,2.20000000000000017,'medal',274850,274850,274850,NULL,'2020 Olympics, Tokyo','Tokyo Olympic Games','This coin commemorates the Tokyo olympic games  originally scheduled to take place between 24 July and 9 August 2020, it was postponed in March 2020 as a result of the COVID-19 pandemic. It is the second time that Tokyo has hosted the Summer Olympic Games, the first being in 1964. It is also the first city in Asia to host the Summer Olympic Games twice, and overall the fourth Olympics to be held in Japan, which also hosted the Winter Olympics in 1972 (Sapporo) and 1998 (Nagano).',1,'rgb(180.36585365853657,140.97560975609755,74.63414634146342)'); -INSERT INTO NumistaType VALUES(275891,'https://en.numista.com/catalogue/pieces275891.html','2 Euro (UNICEF)','coin','france',2021,2021,'Circulating commemorative coin',275891,275891,'Round',275891,275891,8.5,25.75,NULL,2.20000000000000017,'medal',275891,275891,275891,NULL,NULL,'75 Years of UNICEF',replace(replace('(fr) On distingue 2 types de tranches :
\r\nTranche A = 2 à l'endroit avec l'avers au dessus précédé de 2 étoiles la pointe vers le haut
\r\nTranche B = 2 à l'endroit avec l'avers au dessus précédé de 2 étoiles la pointe vers le bas
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(117,85,44)'); -INSERT INTO NumistaType VALUES(302331,'https://en.numista.com/catalogue/note302331.html','5 Leva','banknote','bulgarie',2009,2009,'Standard banknote',302331,302331,'Rectangular',302331,NULL,NULL,NULL,NULL,NULL,NULL,302331,302331,NULL,302331,NULL,NULL,replace(replace('For similar notes dated 1999 with a green and red stripe next to the holographic strip, see P#116a.
\r\nFor similar notes dated 2020 with a red rectangle top left, see second link below.
\r\n
\r\n
\r\n
\r\n©Andrew D H Kelly
\r\nunder UV light','\r',char(13)),'\n',char(10)),1,'rgb(220,72,101)'); -INSERT INTO NumistaType VALUES(314709,'https://en.numista.com/catalogue/pieces314709.html','2 Euro (Bundesländer - "Thüringen")','coin','allemagne',2022,2022,'Circulating commemorative coin',314709,314709,'Round',314709,314709,8.5,25.75,NULL,2.20000000000000017,'medal',314709,314709,314709,NULL,'German states','Federal State of Thuringia','Wartburg Castle is a castle in Thuringia, located above the city of Eisenach. It was built around 1067 by Louis the Springer and has been a UNESCO World Heritage Site since 1999. The name means watch-, or guard castle.',2,'rgb(173.03571428571433,113.83928571428571,81.96428571428568)'); -INSERT INTO NumistaType VALUES(314962,'https://en.numista.com/catalogue/pieces314962.html','2 Euro (2nd type)','coin','france',2022,2023,'Standard circulation coin',314962,314962,'Round',314962,314962,8.5,25.75,NULL,2.20000000000000017,'medal',314962,314962,314962,NULL,NULL,NULL,replace(replace('BUNC Sets Released
\r\n
  • 2022 - BU, quadriptych set (1€ & 2€ 2021 & 2022), 10000 issues
    \r\n
  • 2022 - BU, New national sides coin set, 500 issues
    \r\n

\r\n
\r\n
\r\nPROOF Sets Released
\r\n
  • 2022 - Proof, quadriptych set (1€ & 2€ 2021 & 2022), 2022 issues
    \r\n
','\r',char(13)),'\n',char(10)),1,'rgb(156.55063291139237,142.02531645569618,98.44936708860764)'); -INSERT INTO NumistaType VALUES(318748,'https://en.numista.com/catalogue/pieces318748.html','2 Euro (Jacques Chirac)','coin','france',2022,2022,'Circulating commemorative coin',318748,318748,'Round',318748,318748,8.5,25.75,NULL,2.20000000000000017,'medal',318748,318748,318748,NULL,NULL,'Jacques Chirac','President of the French Republic for two terms, Jacques Chirac was a major architect of the European construction. As such, he was President when the Euro was introduced in 2002, whose 20th anniversary we celebrate at the beginning of this year.',1,'rgb(184.16666666666669,136.35416666666669,70.83333333333331)'); -INSERT INTO NumistaType VALUES(319351,'https://en.numista.com/catalogue/pieces319351.html','2 Rupees','coin','nepal',2020,2020,'Standard circulation coin',319351,319351,'Round',319351,319351,5.0,25.0,NULL,1.60000000000000008,'medal',319351,319351,319351,NULL,NULL,NULL,NULL,2,'rgb(108,73,51)'); -INSERT INTO NumistaType VALUES(321378,'https://en.numista.com/catalogue/pieces321378.html','2 Euro (Crossing of the South Atlantic by plane)','coin','portugal',2022,2022,'Circulating commemorative coin',321378,321378,'Round',321378,321378,8.5,25.75,NULL,2.20000000000000017,'medal',321378,321378,321378,NULL,NULL,'Centenary of the first crossing of the South Atlantic by plane',NULL,1,'rgb(198,182,132)'); -INSERT INTO NumistaType VALUES(327288,'https://en.numista.com/catalogue/pieces327288.html','5 Dinars (Habib Bourguiba; Magnetic)','coin','tunisie',2021,2021,'Circulating commemorative coin',327288,327288,'Round',327288,327288,9.19999999999999928,29.0,NULL,2.0,'coin',327288,327288,327288,NULL,NULL,'22nd anniversary of the death of President Habib Bourguiba',NULL,1,'rgb(204,172,142)'); -INSERT INTO NumistaType VALUES(331445,'https://en.numista.com/catalogue/pieces331445.html','2 Euro (Erasmus Programme)','coin','italie',2022,2022,'Circulating commemorative coin',331445,331445,'Round',331445,331445,8.5,25.75,NULL,2.20000000000000017,'medal',331445,331445,331445,NULL,'Erasmus Programme','35 Years of the Erasmus Programme.',NULL,1,'rgb(116,132,196)'); -INSERT INTO NumistaType VALUES(338338,'https://en.numista.com/catalogue/pieces338338.html','1 Euro (2nd map)','coin','croatie',2023,2023,'Standard circulation coin',338338,338338,'Round',338338,338338,7.5,23.25,NULL,2.33000000000000007,'medal',338338,338338,338338,NULL,NULL,NULL,replace(replace('BUNC Sets Released  © zdravko
\r\n
\r\n
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(172,124,76)'); -INSERT INTO NumistaType VALUES(338339,'https://en.numista.com/catalogue/pieces338339.html','2 Euro (2nd map)','coin','croatie',2023,2023,'Standard circulation coin',338339,338339,'Round',338339,338339,8.5,25.75,NULL,2.20000000000000017,'medal',338339,338339,338339,NULL,NULL,NULL,replace(replace('BUNC Sets Released  © zdravko
\r\n
\r\n
\r\n
\r\n
\r\n','\r',char(13)),'\n',char(10)),1,'rgb(240.00000000000006,154.99999999999991,14.999999999999947)'); -INSERT INTO NumistaType VALUES(352712,'https://en.numista.com/catalogue/pieces352712.html','2 Euros (Bundesländer - "Hamburg")','coin','allemagne',2023,2023,'Circulating commemorative coin',352712,352712,'Round',352712,352712,8.5,25.75,NULL,2.20000000000000017,'medal',352712,352712,352712,NULL,'German States 2','Federal State of Hamburg - Elbphilharmonie',NULL,1,'rgb(178.5,127.5,76.50000000000001)'); -INSERT INTO NumistaType VALUES(368994,'https://en.numista.com/catalogue/pieces368994.html','2 Euro (World Youth Day)','coin','portugal',2023,2023,'Circulating commemorative coin',368994,368994,'Round',368994,368994,8.5,25.75,NULL,2.20000000000000017,'medal',368994,368994,368994,NULL,NULL,'World Youth Day - Lisbon 2023',NULL,1,'rgb(145.18248175182484,126.56934306569339,109.81751824817516)'); -INSERT INTO NumistaType VALUES(369820,'https://en.numista.com/catalogue/pieces369820.html','2 Euro (Rugby World Cup 2023)','coin','france',2023,2023,'Circulating commemorative coin',369820,369820,'Round',369820,369820,8.5,25.75,NULL,2.20000000000000017,'medal',369820,369820,369820,NULL,'Rugby World Cup, France 2023','Rugby World Cup 2023',NULL,1,'rgb(174.9418604651163,124.53488372093017,80.05813953488372)'); -INSERT INTO NumistaType VALUES(377368,'https://en.numista.com/catalogue/pieces377368.html','25 Cents - Elizabeth II (4th portrait)','coin','canada',2003,2006,'Standard circulation coin',377368,377368,'Round',377368,377368,4.42999999999999971,23.879999999999999,NULL,1.58000000000000007,'medal',377368,377368,377368,NULL,NULL,NULL,'NOTE: 2006 last "P" (for plated) composition mark used on circulation coins and the RCM logo introduced as well.',1,'rgb(178.94736842105266,118.55263157894734,76.05263157894736)'); -CREATE TABLE RulerGroup ( - id INTEGER NOT NULL PRIMARY KEY, - name TEXT NOT NULL -); -INSERT INTO RulerGroup VALUES(36,'House of Braganza'); -INSERT INTO RulerGroup VALUES(44,'House of Bourbon'); -INSERT INTO RulerGroup VALUES(65,'Chakri dynasty'); -INSERT INTO RulerGroup VALUES(89,'Modern France'); -INSERT INTO RulerGroup VALUES(99,'House of Bernadotte'); -INSERT INTO RulerGroup VALUES(129,'Grand Dukes of Nassau-Weilburg'); -INSERT INTO RulerGroup VALUES(223,'Alaouite Kings'); -INSERT INTO RulerGroup VALUES(240,'Shah dynasty'); -INSERT INTO RulerGroup VALUES(377,'Co-Principality'); -INSERT INTO RulerGroup VALUES(527,'House of Windsor'); -INSERT INTO RulerGroup VALUES(530,'House of Belgium'); -INSERT INTO RulerGroup VALUES(750,'House of Orange-Nassau'); -INSERT INTO RulerGroup VALUES(797,'House of Windsor'); -INSERT INTO RulerGroup VALUES(825,'House of Windsor'); -INSERT INTO RulerGroup VALUES(827,'House of Windsor'); -INSERT INTO RulerGroup VALUES(834,'House of Windsor'); -CREATE TABLE Ruler ( - id INTEGER NOT NULL PRIMARY KEY, - name TEXT NOT NULL, - wikidata_id TEXT, - group_id INTEGER, - FOREIGN KEY (group_id) REFERENCES RulerGroup(id) -); -INSERT INTO Ruler VALUES(11,'Fifth Republic','Q200686',89); -INSERT INTO Ruler VALUES(149,'Second Republic','Q40',NULL); -INSERT INTO Ruler VALUES(150,'Felipe VI','Q191045',44); -INSERT INTO Ruler VALUES(151,'Juan Carlos I','Q19943',44); -INSERT INTO Ruler VALUES(152,'Francisco Franco','Q29179',NULL); -INSERT INTO Ruler VALUES(275,'Elizabeth II','Q9682',527); -INSERT INTO Ruler VALUES(335,'Shōwa','Q327567',NULL); -INSERT INTO Ruler VALUES(634,'Republic','Q258',NULL); -INSERT INTO Ruler VALUES(906,'Republic','Q334',NULL); -INSERT INTO Ruler VALUES(952,'Elizabeth II','Q9682',797); -INSERT INTO Ruler VALUES(1164,'Republic','Q38',NULL); -INSERT INTO Ruler VALUES(1170,'Albert II','Q3911',530); -INSERT INTO Ruler VALUES(1171,'Philippe','Q155004',530); -INSERT INTO Ruler VALUES(1254,'Third Hellenic Republic','Q17765809',NULL); -INSERT INTO Ruler VALUES(1290,'Luís I','Q156175',36); -INSERT INTO Ruler VALUES(1293,'First Republic','Q167360',NULL); -INSERT INTO Ruler VALUES(1294,'Second Republic','Q17748736',NULL); -INSERT INTO Ruler VALUES(1295,'Third Republic','Q1259200',NULL); -INSERT INTO Ruler VALUES(1302,'Juliana','Q154946',750); -INSERT INTO Ruler VALUES(1303,'Beatrix','Q29574',750); -INSERT INTO Ruler VALUES(1304,'Willem-Alexander','Q154952',750); -INSERT INTO Ruler VALUES(1310,'Republic','Q215',NULL); -INSERT INTO Ruler VALUES(1461,'Republic','Q218',NULL); -INSERT INTO Ruler VALUES(1500,'Khalifa bin Zayed Al Nahyan','Q1059948',NULL); -INSERT INTO Ruler VALUES(1572,'Soviet Union','Q15180',NULL); -INSERT INTO Ruler VALUES(1573,'Russian Federation','Q159',NULL); -INSERT INTO Ruler VALUES(1575,'Henri','Q16004',129); -INSERT INTO Ruler VALUES(1783,'Elizabeth II','Q9682',825); -INSERT INTO Ruler VALUES(1795,'Republic','Q229',NULL); -INSERT INTO Ruler VALUES(1801,'Republic','Q718422',NULL); -INSERT INTO Ruler VALUES(1905,'Bhumibol Adulyadej (Rama IX)','Q855252',65); -INSERT INTO Ruler VALUES(2044,'Republic','Q191',NULL); -INSERT INTO Ruler VALUES(2047,'Republic','Q43',NULL); -INSERT INTO Ruler VALUES(2055,'Republic','Q219',NULL); -INSERT INTO Ruler VALUES(2095,'Elizabeth II','Q9682',827); -INSERT INTO Ruler VALUES(2366,'Carl XVI Gustaf','Q45068',99); -INSERT INTO Ruler VALUES(2684,'Federative Republic of Brazil','Q155',NULL); -INSERT INTO Ruler VALUES(2857,'Federal State','Q355857',NULL); -INSERT INTO Ruler VALUES(2858,'Republic','Q27',NULL); -INSERT INTO Ruler VALUES(2860,'Federal Republic','Q183',NULL); -INSERT INTO Ruler VALUES(2864,'Republic','Q233',NULL); -INSERT INTO Ruler VALUES(2866,'Republic','Q37',NULL); -INSERT INTO Ruler VALUES(3278,'Republic','Q224',NULL); -INSERT INTO Ruler VALUES(3291,'Republic','Q33',NULL); -INSERT INTO Ruler VALUES(3299,'Republic','Q298',NULL); -INSERT INTO Ruler VALUES(3304,'Elizabeth II','Q9682',834); -INSERT INTO Ruler VALUES(3733,'People''s Democratic Republic','Q262',NULL); -INSERT INTO Ruler VALUES(3739,'Third Republic','Q1259201',NULL); -INSERT INTO Ruler VALUES(3758,'Republic','Q736',NULL); -INSERT INTO Ruler VALUES(3765,'Republic','Q214',NULL); -INSERT INTO Ruler VALUES(3831,'Mohammed VI','Q57553',223); -INSERT INTO Ruler VALUES(3964,'Birendra Bir Bikram Shah','Q162306',240); -INSERT INTO Ruler VALUES(3965,'Gyanendra Bir Bikram Shah','Q201327',240); -INSERT INTO Ruler VALUES(3966,'Federal Republic','Q837',NULL); -INSERT INTO Ruler VALUES(3983,'Federal Republic','Q414',NULL); -INSERT INTO Ruler VALUES(4012,'Republic','Q822',NULL); -INSERT INTO Ruler VALUES(4029,'United Mexican States/Mexican Republic','Q96',NULL); -INSERT INTO Ruler VALUES(4033,'Fourth Republic','Q786',NULL); -INSERT INTO Ruler VALUES(4088,'Republic','Q739',NULL); -INSERT INTO Ruler VALUES(4333,'Republic','Q1011',NULL); -INSERT INTO Ruler VALUES(4379,'Republic','Q750',NULL); -INSERT INTO Ruler VALUES(4380,'Plurinational State','Q750',NULL); -INSERT INTO Ruler VALUES(4700,'Joan Enric Vives i Sicília','Q57473',377); -INSERT INTO Ruler VALUES(4720,'Federal republic','Q30',NULL); -INSERT INTO Ruler VALUES(4957,'Republic','Q948',NULL); -CREATE TABLE TypeRuler ( - type_id INTEGER NOT NULL, - ruler_id INTEGER NOT NULL, - FOREIGN KEY (type_id) REFERENCES NumistaType(id), - FOREIGN KEY (ruler_id) REFERENCES Ruler(id), - UNIQUE(type_id, ruler_id) -); -INSERT INTO TypeRuler VALUES(596,3733); -INSERT INTO TypeRuler VALUES(68395,4700); -INSERT INTO TypeRuler VALUES(2217,3983); -INSERT INTO TypeRuler VALUES(27528,3983); -INSERT INTO TypeRuler VALUES(3256,3983); -INSERT INTO TypeRuler VALUES(89870,3983); -INSERT INTO TypeRuler VALUES(1702,1783); -INSERT INTO TypeRuler VALUES(1703,1783); -INSERT INTO TypeRuler VALUES(28191,149); -INSERT INTO TypeRuler VALUES(57,149); -INSERT INTO TypeRuler VALUES(58,149); -INSERT INTO TypeRuler VALUES(7905,149); -INSERT INTO TypeRuler VALUES(9761,149); -INSERT INTO TypeRuler VALUES(15296,952); -INSERT INTO TypeRuler VALUES(5010,952); -INSERT INTO TypeRuler VALUES(5012,952); -INSERT INTO TypeRuler VALUES(9224,952); -INSERT INTO TypeRuler VALUES(941,952); -INSERT INTO TypeRuler VALUES(49339,1171); -INSERT INTO TypeRuler VALUES(56030,1171); -INSERT INTO TypeRuler VALUES(56035,1171); -INSERT INTO TypeRuler VALUES(6293,1170); -INSERT INTO TypeRuler VALUES(6298,1170); -INSERT INTO TypeRuler VALUES(6307,1170); -INSERT INTO TypeRuler VALUES(73,1170); -INSERT INTO TypeRuler VALUES(74,1170); -INSERT INTO TypeRuler VALUES(75,1170); -INSERT INTO TypeRuler VALUES(78,1170); -INSERT INTO TypeRuler VALUES(79,1170); -INSERT INTO TypeRuler VALUES(13820,4379); -INSERT INTO TypeRuler VALUES(18054,4380); -INSERT INTO TypeRuler VALUES(3223,4379); -INSERT INTO TypeRuler VALUES(3224,4379); -INSERT INTO TypeRuler VALUES(3225,4379); -INSERT INTO TypeRuler VALUES(3228,4379); -INSERT INTO TypeRuler VALUES(4901,4379); -INSERT INTO TypeRuler VALUES(4902,4379); -INSERT INTO TypeRuler VALUES(2252,2684); -INSERT INTO TypeRuler VALUES(2253,2684); -INSERT INTO TypeRuler VALUES(666,2684); -INSERT INTO TypeRuler VALUES(8896,2684); -INSERT INTO TypeRuler VALUES(2375,2055); -INSERT INTO TypeRuler VALUES(2376,2055); -INSERT INTO TypeRuler VALUES(28608,2055); -INSERT INTO TypeRuler VALUES(28610,2055); -INSERT INTO TypeRuler VALUES(28611,2055); -INSERT INTO TypeRuler VALUES(5109,2055); -INSERT INTO TypeRuler VALUES(32604,2095); -INSERT INTO TypeRuler VALUES(377,2095); -INSERT INTO TypeRuler VALUES(377368,2095); -INSERT INTO TypeRuler VALUES(403,2095); -INSERT INTO TypeRuler VALUES(465,2095); -INSERT INTO TypeRuler VALUES(2842,3299); -INSERT INTO TypeRuler VALUES(1051,4088); -INSERT INTO TypeRuler VALUES(1073,4088); -INSERT INTO TypeRuler VALUES(2432,4088); -INSERT INTO TypeRuler VALUES(2433,4088); -INSERT INTO TypeRuler VALUES(7524,4088); -INSERT INTO TypeRuler VALUES(338338,3278); -INSERT INTO TypeRuler VALUES(338339,3278); -INSERT INTO TypeRuler VALUES(2173,1795); -INSERT INTO TypeRuler VALUES(2175,1795); -INSERT INTO TypeRuler VALUES(2178,1795); -INSERT INTO TypeRuler VALUES(2180,1795); -INSERT INTO TypeRuler VALUES(2504,4033); -INSERT INTO TypeRuler VALUES(3002,3758); -INSERT INTO TypeRuler VALUES(16586,2044); -INSERT INTO TypeRuler VALUES(16588,2044); -INSERT INTO TypeRuler VALUES(91,3291); -INSERT INTO TypeRuler VALUES(96,3291); -INSERT INTO TypeRuler VALUES(100,11); -INSERT INTO TypeRuler VALUES(11526,11); -INSERT INTO TypeRuler VALUES(12,11); -INSERT INTO TypeRuler VALUES(134685,11); -INSERT INTO TypeRuler VALUES(192990,11); -INSERT INTO TypeRuler VALUES(22652,11); -INSERT INTO TypeRuler VALUES(24276,11); -INSERT INTO TypeRuler VALUES(275891,11); -INSERT INTO TypeRuler VALUES(28330,11); -INSERT INTO TypeRuler VALUES(3,11); -INSERT INTO TypeRuler VALUES(314962,11); -INSERT INTO TypeRuler VALUES(318748,11); -INSERT INTO TypeRuler VALUES(3510,11); -INSERT INTO TypeRuler VALUES(369820,11); -INSERT INTO TypeRuler VALUES(4,11); -INSERT INTO TypeRuler VALUES(41904,11); -INSERT INTO TypeRuler VALUES(5,11); -INSERT INTO TypeRuler VALUES(5063,11); -INSERT INTO TypeRuler VALUES(6373,11); -INSERT INTO TypeRuler VALUES(6376,11); -INSERT INTO TypeRuler VALUES(681,11); -INSERT INTO TypeRuler VALUES(8,11); -INSERT INTO TypeRuler VALUES(82237,11); -INSERT INTO TypeRuler VALUES(9,11); -INSERT INTO TypeRuler VALUES(91431,11); -INSERT INTO TypeRuler VALUES(97,11); -INSERT INTO TypeRuler VALUES(98,11); -INSERT INTO TypeRuler VALUES(99,11); -INSERT INTO TypeRuler VALUES(102445,2860); -INSERT INTO TypeRuler VALUES(105,2860); -INSERT INTO TypeRuler VALUES(106,2860); -INSERT INTO TypeRuler VALUES(107,2860); -INSERT INTO TypeRuler VALUES(108,2860); -INSERT INTO TypeRuler VALUES(109,2860); -INSERT INTO TypeRuler VALUES(110,2860); -INSERT INTO TypeRuler VALUES(111,2860); -INSERT INTO TypeRuler VALUES(18666,2860); -INSERT INTO TypeRuler VALUES(2169,2860); -INSERT INTO TypeRuler VALUES(2201,2860); -INSERT INTO TypeRuler VALUES(2994,2860); -INSERT INTO TypeRuler VALUES(314709,2860); -INSERT INTO TypeRuler VALUES(6319,2860); -INSERT INTO TypeRuler VALUES(69263,2860); -INSERT INTO TypeRuler VALUES(69264,2860); -INSERT INTO TypeRuler VALUES(844,2860); -INSERT INTO TypeRuler VALUES(846,2860); -INSERT INTO TypeRuler VALUES(847,2860); -INSERT INTO TypeRuler VALUES(850,2860); -INSERT INTO TypeRuler VALUES(854,2860); -INSERT INTO TypeRuler VALUES(115,1254); -INSERT INTO TypeRuler VALUES(116,1254); -INSERT INTO TypeRuler VALUES(118,1254); -INSERT INTO TypeRuler VALUES(120,1254); -INSERT INTO TypeRuler VALUES(6350,1254); -INSERT INTO TypeRuler VALUES(1998,1801); -INSERT INTO TypeRuler VALUES(121,2858); -INSERT INTO TypeRuler VALUES(122,2858); -INSERT INTO TypeRuler VALUES(125,2858); -INSERT INTO TypeRuler VALUES(6329,2858); -INSERT INTO TypeRuler VALUES(6333,2858); -INSERT INTO TypeRuler VALUES(6334,2858); -INSERT INTO TypeRuler VALUES(129,1164); -INSERT INTO TypeRuler VALUES(130,1164); -INSERT INTO TypeRuler VALUES(131,1164); -INSERT INTO TypeRuler VALUES(132,1164); -INSERT INTO TypeRuler VALUES(133,1164); -INSERT INTO TypeRuler VALUES(136,1164); -INSERT INTO TypeRuler VALUES(20892,1164); -INSERT INTO TypeRuler VALUES(331445,1164); -INSERT INTO TypeRuler VALUES(1589,335); -INSERT INTO TypeRuler VALUES(122665,4012); -INSERT INTO TypeRuler VALUES(67631,2866); -INSERT INTO TypeRuler VALUES(137,1575); -INSERT INTO TypeRuler VALUES(138,1575); -INSERT INTO TypeRuler VALUES(139,1575); -INSERT INTO TypeRuler VALUES(144,1575); -INSERT INTO TypeRuler VALUES(6418,1575); -INSERT INTO TypeRuler VALUES(2183,2864); -INSERT INTO TypeRuler VALUES(587,4029); -INSERT INTO TypeRuler VALUES(589,4029); -INSERT INTO TypeRuler VALUES(591,4029); -INSERT INTO TypeRuler VALUES(27352,3831); -INSERT INTO TypeRuler VALUES(27395,3831); -INSERT INTO TypeRuler VALUES(3818,3831); -INSERT INTO TypeRuler VALUES(15575,3965); -INSERT INTO TypeRuler VALUES(1571,3964); -INSERT INTO TypeRuler VALUES(22544,3965); -INSERT INTO TypeRuler VALUES(26208,3965); -INSERT INTO TypeRuler VALUES(26791,3965); -INSERT INTO TypeRuler VALUES(26792,3964); -INSERT INTO TypeRuler VALUES(319351,3966); -INSERT INTO TypeRuler VALUES(5737,3965); -INSERT INTO TypeRuler VALUES(5737,3966); -INSERT INTO TypeRuler VALUES(6278,3964); -INSERT INTO TypeRuler VALUES(7461,3964); -INSERT INTO TypeRuler VALUES(7872,3964); -INSERT INTO TypeRuler VALUES(8862,3964); -INSERT INTO TypeRuler VALUES(145,1303); -INSERT INTO TypeRuler VALUES(146,1303); -INSERT INTO TypeRuler VALUES(147,1303); -INSERT INTO TypeRuler VALUES(149,1303); -INSERT INTO TypeRuler VALUES(152,1303); -INSERT INTO TypeRuler VALUES(54956,1304); -INSERT INTO TypeRuler VALUES(734,1302); -INSERT INTO TypeRuler VALUES(524,3739); -INSERT INTO TypeRuler VALUES(61644,3739); -INSERT INTO TypeRuler VALUES(10288,1295); -INSERT INTO TypeRuler VALUES(105040,1295); -INSERT INTO TypeRuler VALUES(11635,1295); -INSERT INTO TypeRuler VALUES(11691,1295); -INSERT INTO TypeRuler VALUES(11695,1295); -INSERT INTO TypeRuler VALUES(11952,1295); -INSERT INTO TypeRuler VALUES(1238,1295); -INSERT INTO TypeRuler VALUES(1241,1295); -INSERT INTO TypeRuler VALUES(1242,1295); -INSERT INTO TypeRuler VALUES(1243,1295); -INSERT INTO TypeRuler VALUES(13034,1295); -INSERT INTO TypeRuler VALUES(13038,1295); -INSERT INTO TypeRuler VALUES(153,1295); -INSERT INTO TypeRuler VALUES(154,1295); -INSERT INTO TypeRuler VALUES(155,1295); -INSERT INTO TypeRuler VALUES(156,1295); -INSERT INTO TypeRuler VALUES(157845,1295); -INSERT INTO TypeRuler VALUES(2047,1295); -INSERT INTO TypeRuler VALUES(2204,1295); -INSERT INTO TypeRuler VALUES(2384,1295); -INSERT INTO TypeRuler VALUES(258832,1295); -INSERT INTO TypeRuler VALUES(274850,1295); -INSERT INTO TypeRuler VALUES(321378,1295); -INSERT INTO TypeRuler VALUES(368994,1295); -INSERT INTO TypeRuler VALUES(4141,1290); -INSERT INTO TypeRuler VALUES(4729,1295); -INSERT INTO TypeRuler VALUES(5786,1295); -INSERT INTO TypeRuler VALUES(6258,1295); -INSERT INTO TypeRuler VALUES(6499,1295); -INSERT INTO TypeRuler VALUES(6500,1295); -INSERT INTO TypeRuler VALUES(7130,1295); -INSERT INTO TypeRuler VALUES(7193,1295); -INSERT INTO TypeRuler VALUES(7639,1295); -INSERT INTO TypeRuler VALUES(768,1290); -INSERT INTO TypeRuler VALUES(770,1295); -INSERT INTO TypeRuler VALUES(771,1295); -INSERT INTO TypeRuler VALUES(772,1294); -INSERT INTO TypeRuler VALUES(772,1295); -INSERT INTO TypeRuler VALUES(773,1295); -INSERT INTO TypeRuler VALUES(774,1294); -INSERT INTO TypeRuler VALUES(774,1295); -INSERT INTO TypeRuler VALUES(775,1294); -INSERT INTO TypeRuler VALUES(775,1295); -INSERT INTO TypeRuler VALUES(776,1294); -INSERT INTO TypeRuler VALUES(776,1295); -INSERT INTO TypeRuler VALUES(84061,1295); -INSERT INTO TypeRuler VALUES(87329,1295); -INSERT INTO TypeRuler VALUES(907,1294); -INSERT INTO TypeRuler VALUES(9826,1295); -INSERT INTO TypeRuler VALUES(9834,1295); -INSERT INTO TypeRuler VALUES(9894,1295); -INSERT INTO TypeRuler VALUES(9895,1295); -INSERT INTO TypeRuler VALUES(9896,1295); -INSERT INTO TypeRuler VALUES(991,1294); -INSERT INTO TypeRuler VALUES(991,1295); -INSERT INTO TypeRuler VALUES(133815,1461); -INSERT INTO TypeRuler VALUES(133816,1461); -INSERT INTO TypeRuler VALUES(4580,1573); -INSERT INTO TypeRuler VALUES(766,1572); -INSERT INTO TypeRuler VALUES(5086,3765); -INSERT INTO TypeRuler VALUES(242,1310); -INSERT INTO TypeRuler VALUES(243,1310); -INSERT INTO TypeRuler VALUES(2903,634); -INSERT INTO TypeRuler VALUES(10854,150); -INSERT INTO TypeRuler VALUES(10854,151); -INSERT INTO TypeRuler VALUES(10856,150); -INSERT INTO TypeRuler VALUES(10856,151); -INSERT INTO TypeRuler VALUES(10857,150); -INSERT INTO TypeRuler VALUES(10857,151); -INSERT INTO TypeRuler VALUES(10860,150); -INSERT INTO TypeRuler VALUES(10860,151); -INSERT INTO TypeRuler VALUES(10862,151); -INSERT INTO TypeRuler VALUES(1149,151); -INSERT INTO TypeRuler VALUES(1258,151); -INSERT INTO TypeRuler VALUES(1262,151); -INSERT INTO TypeRuler VALUES(1263,151); -INSERT INTO TypeRuler VALUES(1264,151); -INSERT INTO TypeRuler VALUES(1266,151); -INSERT INTO TypeRuler VALUES(1267,151); -INSERT INTO TypeRuler VALUES(1353,151); -INSERT INTO TypeRuler VALUES(19979,151); -INSERT INTO TypeRuler VALUES(2168,151); -INSERT INTO TypeRuler VALUES(2254,151); -INSERT INTO TypeRuler VALUES(2255,151); -INSERT INTO TypeRuler VALUES(2304,151); -INSERT INTO TypeRuler VALUES(2374,151); -INSERT INTO TypeRuler VALUES(264789,150); -INSERT INTO TypeRuler VALUES(2736,151); -INSERT INTO TypeRuler VALUES(2986,151); -INSERT INTO TypeRuler VALUES(3200,151); -INSERT INTO TypeRuler VALUES(3372,151); -INSERT INTO TypeRuler VALUES(3888,151); -INSERT INTO TypeRuler VALUES(3932,151); -INSERT INTO TypeRuler VALUES(42976,151); -INSERT INTO TypeRuler VALUES(4546,151); -INSERT INTO TypeRuler VALUES(5624,151); -INSERT INTO TypeRuler VALUES(6361,151); -INSERT INTO TypeRuler VALUES(7184,151); -INSERT INTO TypeRuler VALUES(7576,151); -INSERT INTO TypeRuler VALUES(779,151); -INSERT INTO TypeRuler VALUES(781,152); -INSERT INTO TypeRuler VALUES(782,151); -INSERT INTO TypeRuler VALUES(783,151); -INSERT INTO TypeRuler VALUES(784,151); -INSERT INTO TypeRuler VALUES(787,151); -INSERT INTO TypeRuler VALUES(81,151); -INSERT INTO TypeRuler VALUES(81058,150); -INSERT INTO TypeRuler VALUES(82,151); -INSERT INTO TypeRuler VALUES(83,151); -INSERT INTO TypeRuler VALUES(84,151); -INSERT INTO TypeRuler VALUES(85,151); -INSERT INTO TypeRuler VALUES(88,151); -INSERT INTO TypeRuler VALUES(8925,151); -INSERT INTO TypeRuler VALUES(946,151); -INSERT INTO TypeRuler VALUES(6926,2366); -INSERT INTO TypeRuler VALUES(88649,2366); -INSERT INTO TypeRuler VALUES(171,2857); -INSERT INTO TypeRuler VALUES(173,2857); -INSERT INTO TypeRuler VALUES(178,2857); -INSERT INTO TypeRuler VALUES(185,2857); -INSERT INTO TypeRuler VALUES(189,2857); -INSERT INTO TypeRuler VALUES(10004,1905); -INSERT INTO TypeRuler VALUES(1643,1905); -INSERT INTO TypeRuler VALUES(22038,1905); -INSERT INTO TypeRuler VALUES(3044,2047); -INSERT INTO TypeRuler VALUES(6163,2047); -INSERT INTO TypeRuler VALUES(6164,2047); -INSERT INTO TypeRuler VALUES(6165,2047); -INSERT INTO TypeRuler VALUES(7047,2047); -INSERT INTO TypeRuler VALUES(7048,2047); -INSERT INTO TypeRuler VALUES(40522,1500); -INSERT INTO TypeRuler VALUES(100658,275); -INSERT INTO TypeRuler VALUES(1324,275); -INSERT INTO TypeRuler VALUES(1376,275); -INSERT INTO TypeRuler VALUES(1384,275); -INSERT INTO TypeRuler VALUES(1389,275); -INSERT INTO TypeRuler VALUES(1390,275); -INSERT INTO TypeRuler VALUES(1395,275); -INSERT INTO TypeRuler VALUES(1397,275); -INSERT INTO TypeRuler VALUES(20700,275); -INSERT INTO TypeRuler VALUES(2236,275); -INSERT INTO TypeRuler VALUES(25746,275); -INSERT INTO TypeRuler VALUES(25766,275); -INSERT INTO TypeRuler VALUES(2763,275); -INSERT INTO TypeRuler VALUES(4038,275); -INSERT INTO TypeRuler VALUES(4039,275); -INSERT INTO TypeRuler VALUES(5628,275); -INSERT INTO TypeRuler VALUES(573,275); -INSERT INTO TypeRuler VALUES(6612,275); -INSERT INTO TypeRuler VALUES(664,275); -INSERT INTO TypeRuler VALUES(665,275); -INSERT INTO TypeRuler VALUES(70547,275); -INSERT INTO TypeRuler VALUES(7398,275); -INSERT INTO TypeRuler VALUES(861,275); -INSERT INTO TypeRuler VALUES(862,275); -INSERT INTO TypeRuler VALUES(863,275); -INSERT INTO TypeRuler VALUES(864,275); -INSERT INTO TypeRuler VALUES(865,275); -INSERT INTO TypeRuler VALUES(867,275); -INSERT INTO TypeRuler VALUES(868,275); -INSERT INTO TypeRuler VALUES(875,275); -INSERT INTO TypeRuler VALUES(876,275); -INSERT INTO TypeRuler VALUES(879,275); -INSERT INTO TypeRuler VALUES(42,4720); -INSERT INTO TypeRuler VALUES(43,4720); -INSERT INTO TypeRuler VALUES(44,4720); -INSERT INTO TypeRuler VALUES(53,4720); -INSERT INTO TypeRuler VALUES(55,4720); -INSERT INTO TypeRuler VALUES(614,4720); -INSERT INTO TypeRuler VALUES(648,4720); -INSERT INTO TypeRuler VALUES(649,4720); -INSERT INTO TypeRuler VALUES(908,4720); -INSERT INTO TypeRuler VALUES(201676,2055); -INSERT INTO TypeRuler VALUES(302331,2055); -INSERT INTO TypeRuler VALUES(202279,3831); -INSERT INTO TypeRuler VALUES(202287,3831); -INSERT INTO TypeRuler VALUES(202243,1295); -INSERT INTO TypeRuler VALUES(206382,2047); -INSERT INTO TypeRuler VALUES(206385,2047); -INSERT INTO TypeRuler VALUES(206387,2047); -INSERT INTO TypeRuler VALUES(201624,3304); -INSERT INTO TypeRuler VALUES(202523,3304); -INSERT INTO TypeRuler VALUES(202397,4720); -INSERT INTO TypeRuler VALUES(1366,1294); -INSERT INTO TypeRuler VALUES(1366,1295); -INSERT INTO TypeRuler VALUES(1237,1294); -INSERT INTO TypeRuler VALUES(3282,1294); -INSERT INTO TypeRuler VALUES(2383,1295); -INSERT INTO TypeRuler VALUES(1236,1294); -INSERT INTO TypeRuler VALUES(9285,1293); -INSERT INTO TypeRuler VALUES(9828,1295); -INSERT INTO TypeRuler VALUES(6071,1295); -INSERT INTO TypeRuler VALUES(7337,1295); -INSERT INTO TypeRuler VALUES(10126,1295); -INSERT INTO TypeRuler VALUES(5444,1294); -INSERT INTO TypeRuler VALUES(7338,1295); -INSERT INTO TypeRuler VALUES(5492,1295); -INSERT INTO TypeRuler VALUES(9831,1295); -INSERT INTO TypeRuler VALUES(6374,11); -INSERT INTO TypeRuler VALUES(112,2860); -INSERT INTO TypeRuler VALUES(87,151); -INSERT INTO TypeRuler VALUES(10861,151); -INSERT INTO TypeRuler VALUES(69469,150); -INSERT INTO TypeRuler VALUES(77,1170); -INSERT INTO TypeRuler VALUES(103,11); -INSERT INTO TypeRuler VALUES(6419,1575); -INSERT INTO TypeRuler VALUES(6383,1164); -INSERT INTO TypeRuler VALUES(5090,3765); -INSERT INTO TypeRuler VALUES(159,1295); -INSERT INTO TypeRuler VALUES(126,2858); -INSERT INTO TypeRuler VALUES(6290,1170); -INSERT INTO TypeRuler VALUES(150,1303); -INSERT INTO TypeRuler VALUES(6541,4333); -INSERT INTO TypeRuler VALUES(2560,4333); -INSERT INTO TypeRuler VALUES(9638,4333); -INSERT INTO TypeRuler VALUES(8884,4333); -INSERT INTO TypeRuler VALUES(10056,4333); -INSERT INTO TypeRuler VALUES(6185,4333); -INSERT INTO TypeRuler VALUES(59,149); -INSERT INTO TypeRuler VALUES(205902,3983); -INSERT INTO TypeRuler VALUES(204777,4333); -INSERT INTO TypeRuler VALUES(205413,4333); -INSERT INTO TypeRuler VALUES(201619,1801); -INSERT INTO TypeRuler VALUES(211537,1801); -INSERT INTO TypeRuler VALUES(7641,1801); -INSERT INTO TypeRuler VALUES(28734,1801); -INSERT INTO TypeRuler VALUES(808,1801); -INSERT INTO TypeRuler VALUES(810,1801); -INSERT INTO TypeRuler VALUES(206732,3983); -INSERT INTO TypeRuler VALUES(352712,2860); -INSERT INTO TypeRuler VALUES(197919,1295); -INSERT INTO TypeRuler VALUES(202244,906); -INSERT INTO TypeRuler VALUES(204590,3964); -INSERT INTO TypeRuler VALUES(201959,3964); -INSERT INTO TypeRuler VALUES(2190,1254); -INSERT INTO TypeRuler VALUES(2199,1164); -INSERT INTO TypeRuler VALUES(209271,4957); -INSERT INTO TypeRuler VALUES(208875,4957); -INSERT INTO TypeRuler VALUES(207353,4957); -INSERT INTO TypeRuler VALUES(327288,4957); -INSERT INTO TypeRuler VALUES(1202,4957); -INSERT INTO TypeRuler VALUES(1205,4957); -INSERT INTO TypeRuler VALUES(1206,4957); -INSERT INTO TypeRuler VALUES(257573,4957); -INSERT INTO TypeRuler VALUES(80926,149); -INSERT INTO TypeRuler VALUES(5091,3765); -INSERT INTO TypeRuler VALUES(122799,11); -INSERT INTO TypeRuler VALUES(9897,1295); -INSERT INTO TypeRuler VALUES(6384,1164); -CREATE TABLE TypeRelated ( - type1_id INTEGER NOT NULL, - type2_id INTEGER NOT NULL, - FOREIGN KEY (type1_id) REFERENCES NumistaType(id), - FOREIGN KEY (type2_id) REFERENCES NumistaType(id), - UNIQUE(type1_id, type2_id) -); -INSERT INTO TypeRelated VALUES(1702,1703); -INSERT INTO TypeRelated VALUES(1703,1702); -INSERT INTO TypeRelated VALUES(28191,28330); -INSERT INTO TypeRelated VALUES(6298,73); -INSERT INTO TypeRelated VALUES(73,6298); -INSERT INTO TypeRelated VALUES(13820,3223); -INSERT INTO TypeRelated VALUES(13820,3225); -INSERT INTO TypeRelated VALUES(13820,3228); -INSERT INTO TypeRelated VALUES(3223,3225); -INSERT INTO TypeRelated VALUES(3223,3228); -INSERT INTO TypeRelated VALUES(3223,13820); -INSERT INTO TypeRelated VALUES(3225,3223); -INSERT INTO TypeRelated VALUES(3225,3228); -INSERT INTO TypeRelated VALUES(3225,13820); -INSERT INTO TypeRelated VALUES(3228,3223); -INSERT INTO TypeRelated VALUES(3228,3225); -INSERT INTO TypeRelated VALUES(3228,13820); -INSERT INTO TypeRelated VALUES(2252,2253); -INSERT INTO TypeRelated VALUES(2252,666); -INSERT INTO TypeRelated VALUES(2252,8896); -INSERT INTO TypeRelated VALUES(2253,2252); -INSERT INTO TypeRelated VALUES(2253,666); -INSERT INTO TypeRelated VALUES(2253,8896); -INSERT INTO TypeRelated VALUES(666,2253); -INSERT INTO TypeRelated VALUES(666,2252); -INSERT INTO TypeRelated VALUES(666,8896); -INSERT INTO TypeRelated VALUES(8896,2253); -INSERT INTO TypeRelated VALUES(8896,2252); -INSERT INTO TypeRelated VALUES(8896,666); -INSERT INTO TypeRelated VALUES(36732,36739); -INSERT INTO TypeRelated VALUES(36732,36742); -INSERT INTO TypeRelated VALUES(36732,36733); -INSERT INTO TypeRelated VALUES(36732,36738); -INSERT INTO TypeRelated VALUES(36732,36735); -INSERT INTO TypeRelated VALUES(36732,36737); -INSERT INTO TypeRelated VALUES(36732,36734); -INSERT INTO TypeRelated VALUES(36732,36741); -INSERT INTO TypeRelated VALUES(36732,36740); -INSERT INTO TypeRelated VALUES(36732,36743); -INSERT INTO TypeRelated VALUES(36732,36736); -INSERT INTO TypeRelated VALUES(36733,36739); -INSERT INTO TypeRelated VALUES(36733,36742); -INSERT INTO TypeRelated VALUES(36733,36738); -INSERT INTO TypeRelated VALUES(36733,36735); -INSERT INTO TypeRelated VALUES(36733,36737); -INSERT INTO TypeRelated VALUES(36733,36734); -INSERT INTO TypeRelated VALUES(36733,36741); -INSERT INTO TypeRelated VALUES(36733,36740); -INSERT INTO TypeRelated VALUES(36733,36743); -INSERT INTO TypeRelated VALUES(36733,36736); -INSERT INTO TypeRelated VALUES(36734,36739); -INSERT INTO TypeRelated VALUES(36734,36742); -INSERT INTO TypeRelated VALUES(36734,36733); -INSERT INTO TypeRelated VALUES(36734,36738); -INSERT INTO TypeRelated VALUES(36734,36735); -INSERT INTO TypeRelated VALUES(36734,36737); -INSERT INTO TypeRelated VALUES(36734,36741); -INSERT INTO TypeRelated VALUES(36734,36740); -INSERT INTO TypeRelated VALUES(36734,36743); -INSERT INTO TypeRelated VALUES(36734,36736); -INSERT INTO TypeRelated VALUES(36735,36739); -INSERT INTO TypeRelated VALUES(36735,36742); -INSERT INTO TypeRelated VALUES(36735,36733); -INSERT INTO TypeRelated VALUES(36735,36738); -INSERT INTO TypeRelated VALUES(36735,36737); -INSERT INTO TypeRelated VALUES(36735,36734); -INSERT INTO TypeRelated VALUES(36735,36741); -INSERT INTO TypeRelated VALUES(36735,36740); -INSERT INTO TypeRelated VALUES(36735,36743); -INSERT INTO TypeRelated VALUES(36735,36736); -INSERT INTO TypeRelated VALUES(36736,36739); -INSERT INTO TypeRelated VALUES(36736,36742); -INSERT INTO TypeRelated VALUES(36736,36733); -INSERT INTO TypeRelated VALUES(36736,36738); -INSERT INTO TypeRelated VALUES(36736,36735); -INSERT INTO TypeRelated VALUES(36736,36737); -INSERT INTO TypeRelated VALUES(36736,36734); -INSERT INTO TypeRelated VALUES(36736,36741); -INSERT INTO TypeRelated VALUES(36736,36740); -INSERT INTO TypeRelated VALUES(36736,36743); -INSERT INTO TypeRelated VALUES(36737,36739); -INSERT INTO TypeRelated VALUES(36737,36742); -INSERT INTO TypeRelated VALUES(36737,36733); -INSERT INTO TypeRelated VALUES(36737,36738); -INSERT INTO TypeRelated VALUES(36737,36735); -INSERT INTO TypeRelated VALUES(36737,36734); -INSERT INTO TypeRelated VALUES(36737,36741); -INSERT INTO TypeRelated VALUES(36737,36740); -INSERT INTO TypeRelated VALUES(36737,36743); -INSERT INTO TypeRelated VALUES(36737,36736); -INSERT INTO TypeRelated VALUES(36738,36739); -INSERT INTO TypeRelated VALUES(36738,36742); -INSERT INTO TypeRelated VALUES(36738,36733); -INSERT INTO TypeRelated VALUES(36738,36735); -INSERT INTO TypeRelated VALUES(36738,36737); -INSERT INTO TypeRelated VALUES(36738,36734); -INSERT INTO TypeRelated VALUES(36738,36741); -INSERT INTO TypeRelated VALUES(36738,36740); -INSERT INTO TypeRelated VALUES(36738,36743); -INSERT INTO TypeRelated VALUES(36738,36736); -INSERT INTO TypeRelated VALUES(36739,36742); -INSERT INTO TypeRelated VALUES(36739,36733); -INSERT INTO TypeRelated VALUES(36739,36738); -INSERT INTO TypeRelated VALUES(36739,36735); -INSERT INTO TypeRelated VALUES(36739,36737); -INSERT INTO TypeRelated VALUES(36739,36734); -INSERT INTO TypeRelated VALUES(36739,36741); -INSERT INTO TypeRelated VALUES(36739,36740); -INSERT INTO TypeRelated VALUES(36739,36743); -INSERT INTO TypeRelated VALUES(36739,36736); -INSERT INTO TypeRelated VALUES(36740,36739); -INSERT INTO TypeRelated VALUES(36740,36742); -INSERT INTO TypeRelated VALUES(36740,36733); -INSERT INTO TypeRelated VALUES(36740,36738); -INSERT INTO TypeRelated VALUES(36740,36735); -INSERT INTO TypeRelated VALUES(36740,36737); -INSERT INTO TypeRelated VALUES(36740,36734); -INSERT INTO TypeRelated VALUES(36740,36741); -INSERT INTO TypeRelated VALUES(36740,36743); -INSERT INTO TypeRelated VALUES(36740,36736); -INSERT INTO TypeRelated VALUES(36741,36739); -INSERT INTO TypeRelated VALUES(36741,36742); -INSERT INTO TypeRelated VALUES(36741,36733); -INSERT INTO TypeRelated VALUES(36741,36738); -INSERT INTO TypeRelated VALUES(36741,36735); -INSERT INTO TypeRelated VALUES(36741,36737); -INSERT INTO TypeRelated VALUES(36741,36734); -INSERT INTO TypeRelated VALUES(36741,36740); -INSERT INTO TypeRelated VALUES(36741,36743); -INSERT INTO TypeRelated VALUES(36741,36736); -INSERT INTO TypeRelated VALUES(36742,36739); -INSERT INTO TypeRelated VALUES(36742,36733); -INSERT INTO TypeRelated VALUES(36742,36738); -INSERT INTO TypeRelated VALUES(36742,36735); -INSERT INTO TypeRelated VALUES(36742,36737); -INSERT INTO TypeRelated VALUES(36742,36734); -INSERT INTO TypeRelated VALUES(36742,36741); -INSERT INTO TypeRelated VALUES(36742,36740); -INSERT INTO TypeRelated VALUES(36742,36743); -INSERT INTO TypeRelated VALUES(36742,36736); -INSERT INTO TypeRelated VALUES(36743,36739); -INSERT INTO TypeRelated VALUES(36743,36742); -INSERT INTO TypeRelated VALUES(36743,36733); -INSERT INTO TypeRelated VALUES(36743,36738); -INSERT INTO TypeRelated VALUES(36743,36735); -INSERT INTO TypeRelated VALUES(36743,36737); -INSERT INTO TypeRelated VALUES(36743,36734); -INSERT INTO TypeRelated VALUES(36743,36741); -INSERT INTO TypeRelated VALUES(36743,36740); -INSERT INTO TypeRelated VALUES(36743,36736); -INSERT INTO TypeRelated VALUES(2173,2175); -INSERT INTO TypeRelated VALUES(2175,2173); -INSERT INTO TypeRelated VALUES(100,3510); -INSERT INTO TypeRelated VALUES(22652,24276); -INSERT INTO TypeRelated VALUES(24276,22652); -INSERT INTO TypeRelated VALUES(28330,28191); -INSERT INTO TypeRelated VALUES(314962,6376); -INSERT INTO TypeRelated VALUES(109,6319); -INSERT INTO TypeRelated VALUES(6319,109); -INSERT INTO TypeRelated VALUES(145,146); -INSERT INTO TypeRelated VALUES(145,147); -INSERT INTO TypeRelated VALUES(146,145); -INSERT INTO TypeRelated VALUES(146,147); -INSERT INTO TypeRelated VALUES(147,145); -INSERT INTO TypeRelated VALUES(147,146); -INSERT INTO TypeRelated VALUES(524,61644); -INSERT INTO TypeRelated VALUES(1241,773); -INSERT INTO TypeRelated VALUES(1241,771); -INSERT INTO TypeRelated VALUES(156,9895); -INSERT INTO TypeRelated VALUES(4141,768); -INSERT INTO TypeRelated VALUES(768,4141); -INSERT INTO TypeRelated VALUES(771,1241); -INSERT INTO TypeRelated VALUES(771,773); -INSERT INTO TypeRelated VALUES(773,1241); -INSERT INTO TypeRelated VALUES(773,771); -INSERT INTO TypeRelated VALUES(907,775); -INSERT INTO TypeRelated VALUES(907,11952); -INSERT INTO TypeRelated VALUES(907,1241); -INSERT INTO TypeRelated VALUES(9895,156); -INSERT INTO TypeRelated VALUES(991,776); -INSERT INTO TypeRelated VALUES(10854,83); -INSERT INTO TypeRelated VALUES(10856,81); -INSERT INTO TypeRelated VALUES(10857,82); -INSERT INTO TypeRelated VALUES(10862,88); -INSERT INTO TypeRelated VALUES(1263,784); -INSERT INTO TypeRelated VALUES(1263,1149); -INSERT INTO TypeRelated VALUES(1263,783); -INSERT INTO TypeRelated VALUES(1263,1266); -INSERT INTO TypeRelated VALUES(19979,42976); -INSERT INTO TypeRelated VALUES(19979,81058); -INSERT INTO TypeRelated VALUES(19979,264789); -INSERT INTO TypeRelated VALUES(264789,19979); -INSERT INTO TypeRelated VALUES(264789,42976); -INSERT INTO TypeRelated VALUES(264789,81058); -INSERT INTO TypeRelated VALUES(3372,84); -INSERT INTO TypeRelated VALUES(3932,782); -INSERT INTO TypeRelated VALUES(42976,19979); -INSERT INTO TypeRelated VALUES(42976,81058); -INSERT INTO TypeRelated VALUES(42976,264789); -INSERT INTO TypeRelated VALUES(6361,85); -INSERT INTO TypeRelated VALUES(782,3932); -INSERT INTO TypeRelated VALUES(81,10856); -INSERT INTO TypeRelated VALUES(81058,19979); -INSERT INTO TypeRelated VALUES(81058,42976); -INSERT INTO TypeRelated VALUES(81058,264789); -INSERT INTO TypeRelated VALUES(82,10857); -INSERT INTO TypeRelated VALUES(83,10854); -INSERT INTO TypeRelated VALUES(84,3372); -INSERT INTO TypeRelated VALUES(85,6361); -INSERT INTO TypeRelated VALUES(88,10862); -INSERT INTO TypeRelated VALUES(1643,22038); -INSERT INTO TypeRelated VALUES(22038,1643); -INSERT INTO TypeRelated VALUES(1384,1389); -INSERT INTO TypeRelated VALUES(1389,1384); -INSERT INTO TypeRelated VALUES(1390,1395); -INSERT INTO TypeRelated VALUES(1395,1390); -INSERT INTO TypeRelated VALUES(25746,2236); -INSERT INTO TypeRelated VALUES(25766,6612); -INSERT INTO TypeRelated VALUES(573,5628); -INSERT INTO TypeRelated VALUES(6612,876); -INSERT INTO TypeRelated VALUES(6612,25766); -INSERT INTO TypeRelated VALUES(70547,25766); -INSERT INTO TypeRelated VALUES(862,4038); -INSERT INTO TypeRelated VALUES(865,1376); -INSERT INTO TypeRelated VALUES(865,573); -INSERT INTO TypeRelated VALUES(865,5628); -INSERT INTO TypeRelated VALUES(867,868); -INSERT INTO TypeRelated VALUES(868,867); -INSERT INTO TypeRelated VALUES(876,6612); -INSERT INTO TypeRelated VALUES(42,43); -INSERT INTO TypeRelated VALUES(43,42); -INSERT INTO TypeRelated VALUES(201624,202523); -INSERT INTO TypeRelated VALUES(202523,201624); -COMMIT; diff --git a/prisma/schema.prisma b/prisma/schema.prisma deleted file mode 100644 index 2b40c94..0000000 --- a/prisma/schema.prisma +++ /dev/null @@ -1,199 +0,0 @@ -generator client { - provider = "prisma-client-js" - binaryTargets = ["native", "debian-openssl-3.0.x"] -} - -datasource db { - provider = "sqlite" - url = "file:./main.db" -} - -model Composition { - id Int @id @default(autoincrement()) - text String? - type NumistaType[] -} - -model Currency { - id Int @id @default(autoincrement()) - name String - full_name String - value Value[] -} - -model Demonetization { - id Int @id @default(autoincrement()) - is_demonetized Boolean - demonetization_date String? - type NumistaType[] -} - -model Edge { - id Int @id @default(autoincrement()) - engravers String? - designers String? - description String? - lettering String? - lettering_scripts String? - unabridged_legend String? - lettering_translation String? - picture String? - thumbnail String? - picture_copyright String? - picture_copyright_url String? - picture_license_name String? - picture_license_url String? - type NumistaType[] -} - -model Issuer { - iso String? - code String @id - name String - type NumistaType[] -} - -model NumistaType { - id Int @id @default(autoincrement()) - url String? - title String - category String - issuer_code String? - min_year Int? - max_year Int? - type String? - value_id Int? - demonetization_id Int? - shape String? - composition_id Int? - technique_id Int? - weight Float? - size Float? - thickness Float? - orientation String? - obverse_id Int? - reverse_id Int? - edge_id Int? - watermark_id Int? - series String? - commemorated_topic String? - comments String? - count Int @default(1) - color String? - watermark Watermark? @relation(fields: [watermark_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - edge Edge? @relation(fields: [edge_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - reverse Reverse? @relation(fields: [reverse_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - obverse Obverse? @relation(fields: [obverse_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - technique Technique? @relation(fields: [technique_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - composition Composition? @relation(fields: [composition_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - demonetization Demonetization? @relation(fields: [demonetization_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - value Value? @relation(fields: [value_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - issuer Issuer? @relation(fields: [issuer_code], references: [code], onDelete: NoAction, onUpdate: NoAction) - relatedB TypeRelated[] @relation("TypeRelated_type2_idToType") - relatedA TypeRelated[] @relation("TypeRelated_type1_idToType") - rulers TypeRuler[] -} - -model Obverse { - id Int @id @default(autoincrement()) - engravers String? - designers String? - description String? - lettering String? - lettering_scripts String? - unabridged_legend String? - lettering_translation String? - picture String? - thumbnail String? - picture_copyright String? - picture_copyright_url String? - picture_license_name String? - picture_license_url String? - type NumistaType[] -} - -model Reverse { - id Int @id @default(autoincrement()) - engravers String? - designers String? - description String? - lettering String? - lettering_scripts String? - unabridged_legend String? - lettering_translation String? - picture String? - thumbnail String? - picture_copyright String? - picture_copyright_url String? - picture_license_name String? - picture_license_url String? - type NumistaType[] -} - -model Ruler { - id Int @id @default(autoincrement()) - name String - wikidata_id String? - group_id Int? - group RulerGroup? @relation(fields: [group_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - TypeRuler TypeRuler[] -} - -model RulerGroup { - id Int @id @default(autoincrement()) - name String - rulers Ruler[] -} - -model Technique { - id Int @id @default(autoincrement()) - text String? - type NumistaType[] -} - -model TypeRelated { - type1_id Int - type2_id Int - type1 NumistaType @relation("TypeRelated_type2_idToType", fields: [type2_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - type2 NumistaType @relation("TypeRelated_type1_idToType", fields: [type1_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - - @@unique([type1_id, type2_id], map: "sqlite_autoindex_TypeRelated_1") -} - -model TypeRuler { - type_id Int - ruler_id Int - ruler Ruler @relation(fields: [ruler_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - type NumistaType @relation(fields: [type_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - - @@unique([type_id, ruler_id], map: "sqlite_autoindex_TypeRuler_1") -} - -model Value { - id Int @id @default(autoincrement()) - text String? - numeric_value Float? - numerator Int? - denominator Int? - currency_id Int? - type NumistaType[] - currency Currency? @relation(fields: [currency_id], references: [id], onDelete: NoAction, onUpdate: NoAction) -} - -model Watermark { - id Int @id @default(autoincrement()) - engravers String? - designers String? - description String? - lettering String? - lettering_scripts String? - unabridged_legend String? - lettering_translation String? - picture String? - thumbnail String? - picture_copyright String? - picture_copyright_url String? - picture_license_name String? - picture_license_url String? - type NumistaType[] -} diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 6fb85c5dab0a15bea4054d88f7a09f5614a418d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39727 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 Ifq_8yfA6`)ivR!s diff --git a/public/models/bahamas-cents-10.gltf b/public/models/bahamas-cents-10.gltf deleted file mode 100644 index c0f66e7..0000000 --- a/public/models/bahamas-cents-10.gltf +++ /dev/null @@ -1,104 +0,0 @@ -{ - "asset":{ - "generator":"Khronos glTF Blender I/O v3.6.6", - "version":"2.0" - }, - "scene":0, - "scenes":[ - { - "name":"Scene", - "nodes":[ - 0 - ] - } - ], - "nodes":[ - { - "mesh":0, - "name":"BahamasCents10" - } - ], - "meshes":[ - { - "name":"BahamasCents10", - "primitives":[ - { - "attributes":{ - "POSITION":0, - "TEXCOORD_0":1, - "NORMAL":2 - }, - "indices":3 - } - ] - } - ], - "accessors":[ - { - "bufferView":0, - "componentType":5126, - "count":386, - "max":[ - 0.9999998807907104, - 0.495593398809433, - 0.9999998807907104 - ], - "min":[ - -0.9999998807907104, - -0.495593398809433, - -0.9999998807907104 - ], - "type":"VEC3" - }, - { - "bufferView":1, - "componentType":5126, - "count":386, - "type":"VEC2" - }, - { - "bufferView":2, - "componentType":5126, - "count":386, - "type":"VEC3" - }, - { - "bufferView":3, - "componentType":5123, - "count":1140, - "type":"SCALAR" - } - ], - "bufferViews":[ - { - "buffer":0, - "byteLength":4632, - "byteOffset":0, - "target":34962 - }, - { - "buffer":0, - "byteLength":3088, - "byteOffset":4632, - "target":34962 - }, - { - "buffer":0, - "byteLength":4632, - "byteOffset":7720, - "target":34962 - }, - { - "buffer":0, - "byteLength":2280, - "byteOffset":12352, - "target":34963 - } - ], - "buffers":[ - { - "byteLength":14632, - "uri":"data:application/octet-stream;base64,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AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgInSDr8AAACAVHRUv4EENb8AAAAAgQQ1v4EENb8AAAAAgQQ1v1R0VL8AAAAAidIOv1R0VL8AAAAAidIOv4EENb8AAAAAgQQ1v4EENb8AAAAAgQQ1v1D8WL8AAACAZ9UHv1D8WL8AAACAZ9UHvwCRPr8AAACAY+4qvwCRPr8AAACAY+4qvwAAAL8AAACALbJdvwAAAL8AAACALbJdv6rxUr4AAAAA+n56v6rxUr4AAAAA+n56vyo6Er0AAAAArth/vyo6Er0AAAAArth/vwN4i70AAAAARGl/vwN4i70AAAAARGl/v2+BhL4AAAAAOUV3v2+BhL4AAAAAOUV3v3ct4b4AAAAA4ullv3ct4b4AAAAA4ullv3L5774AAAAA8x9iv3L5774AAAAA8x9ivy0hn74AAAAA+FNzvy0hn74AAAAA+FNzvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvy0hnz4AAACA+FNzvy0hnz4AAACA+FNzv3L57z4AAACA8x9iv3L57z4AAACA8x9iv3ct4T4AAACA4ullv3ct4T4AAACA4ullv2+BhD4AAAAAOUV3v2+BhD4AAAAAOUV3vwN4iz0AAAAARGl/vwN4iz0AAAAARGl/vyo6Ej0AAACArth/vyo6Ej0AAACArth/v6rxUj4AAACA+n56v6rxUj4AAACA+n56vwAAAD8AAAAALbJdvwAAAD8AAAAALbJdvwCRPj8AAAAAY+4qvwCRPj8AAAAAY+4qv1D8WD8AAAAAZ9UHv1D8WD8AAAAAZ9UHv1R0VD8AAAAAidIOv1R0VD8AAAAAidIOv4EENT8AAAAAgQQ1v4EENT8AAAAAgQQ1v4nSDj8AAAAAVHRUv4nSDj8AAAAAVHRUv2fVBz8AAAAAUPxYv2fVBz8AAAAAUPxYv2PuKj8AAACAAJE+v2PuKj8AAACAAJE+vy2yXT8AAACAAAAAvy2yXT8AAACAAAAAv/p+ej8AAAAAqvFSvvp+ej8AAAAAqvFSvq7Yfz8AAAAAKjoSva7Yfz8AAAAAKjoSvURpfz8AAACAA3iLvURpfz8AAACAA3iLvTlFdz8AAACAb4GEvjlFdz8AAACAb4GEvuLpZT8AAAAAdy3hvuLpZT8AAAAAdy3hvvMfYj8AAAAAcvnvvvMfYj8AAAAAcvnvvvhTcz8AAAAALSGfvvhTcz8AAAAALSGfvgAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAPhTcz8AAACALSGfPvhTcz8AAACALSGfPvMfYj8AAACAcvnvPvMfYj8AAACAcvnvPuLpZT8AAACAdy3hPuLpZT8AAACAdy3hPjlFdz8AAAAAb4GEPjlFdz8AAAAAb4GEPkRpfz8AAAAAA3iLPURpfz8AAAAAA3iLPa7Yfz8AAACAKjoSPa7Yfz8AAACAKjoSPfp+ej8AAACAqvFSPvp+ej8AAACAqvFSPi2yXT8AAAAAAAAAPy2yXT8AAAAAAAAAP2PuKj8AAAAAAJE+P2PuKj8AAAAAAJE+P2fVBz8AAAAAUPxYP2fVBz8AAAAAUPxYP4nSDj8AAACAVHRUP4nSDj8AAACAVHRUP4EENT8AAAAAgQQ1P4EENT8AAAAAgQQ1P1R0VD8AAAAAidIOP1R0VD8AAAAAidIOP1D8WD8AAACAZ9UHP1D8WD8AAACAZ9UHPwCRPj8AAACAY+4qPwCRPj8AAACAY+4qPwAAAD8AAACALbJdPwAAAD8AAACALbJdP6rxUj4AAAAA+n56P6rxUj4AAAAA+n56Pyo6Ej0AAAAArth/Pyo6Ej0AAAAArth/PwN4iz0AAAAARGl/PwN4iz0AAAAARGl/P2+BhD4AAAAAOUV3P2+BhD4AAAAAOUV3P3ct4T4AAAAA4ullP3ct4T4AAAAA4ullP3L57z4AAAAA8x9iP3L57z4AAAAA8x9iPy0hnz4AAAAA+FNzPy0hnz4AAAAA+FNzPwAAAIAAAAAAAACAPwAAAIAAAAAAAACAPy0hn74AAACA+FNzPy0hn74AAACA+FNzP3L5774AAACA8x9iP3L5774AAACA8x9iP3ct4b4AAACA4ullP3ct4b4AAACA4ullP2+BhL4AAAAAOUV3P2+BhL4AAAAAOUV3PwN4i70AAAAARGl/PwN4i70AAAAARGl/Pyo6Er0AAACArth/Pyo6Er0AAACArth/P6rxUr4AAACA+n56P6rxUr4AAACA+n56PwAAAL8AAAAALbJdPwAAAL8AAAAALbJdPwCRPr8AAAAAY+4qPwCRPr8AAAAAY+4qP1D8WL8AAAAAZ9UHP1D8WL8AAAAAZ9UHP1R0VL8AAAAAidIOP1R0VL8AAAAAidIOP4EENb8AAAAAgQQ1P4EENb8AAAAAgQQ1P4nSDr8AAAAAVHRUP4nSDr8AAAAAVHRUP2fVB78AAAAAUPxYP2fVB78AAAAAUPxYP2PuKr8AAACAAJE+P2PuKr8AAACAAJE+Py2yXb8AAACAAAAAPy2yXb8AAACAAAAAP/p+er8AAAAAqvFSPvp+er8AAAAAqvFSPq7Yf78AAAAAKjoSPa7Yf78AAAAAKjoSPURpf78AAACAA3iLPURpf78AAACAA3iLPTlFd78AAACAb4GEPjlFd78AAACAb4GEPuLpZb8AAAAAdy3hPuLpZb8AAAAAdy3hPvMfYr8AAAAAcvnvPvMfYr8AAAAAcvnvPvhTc78AAAAALSGfPvhTc78AAAAALSGfPgAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgPhTc78AAACALSGfvvhTc78AAACALSGfvvMfYr8AAACAcvnvvvMfYr8AAACAcvnvvuLpZb8AAACAdy3hvuLpZb8AAACAdy3hvjlFd78AAAAAb4GEvjlFd78AAAAAb4GEvkRpf78AAAAAA3iLvURpf78AAAAAA3iLva7Yf78AAACAKjoSva7Yf78AAACAKjoSvfp+er8AAACAqvFSvvp+er8AAACAqvFSvi2yXb8AAAAAAAAAvy2yXb8AAAAAAAAAv2PuKr8AAAAAAJE+v2PuKr8AAAAAAJE+v2fVB78AAAAAUPxYv2fVB78AAAAAUPxYv4nSDr8AAACAVHRUvwAAAIAAAIA/AAAAgMEAxQDDAMEAwwDCAMIAwwDHAMIAxwDGAMYAxwDJAMYAyQDIAMgAyQDLAMgAywDKAMoAywDNAMoAzQDMAMwAzQDPAMwAzwDOAM4AzwDRAM4A0QDQANAA0QDTANAA0wDSANIA0wDVANIA1QDUANQA1QDXANQA1wDWANYA1wDZANYA2QDYANgA2QDbANgA2wDaANoA2wDdANoA3QDcANwA3QDfANwA3wDeAN4A3wDhAN4A4QDgAOAA4QDjAOAA4wDiAOIA4wDlAOIA5QDkAOQA5QDnAOQA5wDmAOYA5wDpAOYA6QDoAOgA6QDrAOgA6wDqAOoA6wDtAOoA7QDsAOwA7QDvAOwA7wDuAO4A7wDxAO4A8QDwAPAA8QDzAPAA8wDyAPIA8wD1APIA9QD0APQA9QD3APQA9wD2APYA9wD5APYA+QD4APgA+QD7APgA+wD6APoA+wD9APoA/QD8APwA/QD/APwA/wD+AP4A/wABAf4AAQEAAQABAQEDAQABAwECAQIBAwEFAQIBBQEEAQQBBQEHAQQBBwEGAQYBBwEJAQYBCQEIAQgBCQELAQgBCwEKAQoBCwENAQoBDQEMAQwBDQEPAQwBDwEOAQ4BDwERAQ4BEQEQARABEQETARABEwESARIBEwEVARIBFQEUARQBFQEXARQBFwEWARYBFwEZARYBGQEYARgBGQEbARgBGwEaARoBGwEdARoBHQEcARwBHQEfARwBHwEeAR4BHwEhAR4BIQEgASABIQEjASABIwEiASIBIwElASIBJQEkASQBJQEnASQBJwEmASYBJwEpASYBKQEoASgBKQErASgBKwEqASoBKwEtASoBLQEsASwBLQEvASwBLwEuAS4BLwExAS4BMQEwATABMQEzATABMwEyATIBMwE1ATIBNQE0ATQBNQE3ATQBNwE2ATYBNwE5ATYBOQE4ATgBOQE7ATgBOwE6AToBOwE9AToBPQE8ATwBPQE/ATwBPwE+AT4BPwFBAT4BQQFAAUABQQFDAUABQwFCAUIBQwFFAUIBRQFEAUQBRQFHAUQBRwFGAUYBRwFJAUYBSQFIAUgBSQFLAUgBSwFKAUoBSwFNAUoBTQFMAUwBTQFPAUwBTwFOAU4BTwFRAU4BUQFQAVABUQFTAVABUwFSAVIBUwFVAVIBVQFUAVQBVQFXAVQBVwFWAVYBVwFZAVYBWQFYAVgBWQFbAVgBWwFaAVoBWwFdAVoBXQFcAVwBXQFfAVwBXwFeAV4BXwFhAV4BYQFgAWABYQFjAWABYwFiAWIBYwFlAWIBZQFkAWQBZQFnAWQBZwFmAWYBZwFpAWYBaQFoAWgBaQFrAWgBawFqAWoBawFtAWoBbQFsAWwBbQFvAWwBbwFuAW4BbwFxAW4BcQFwAXABcQFzAXABcwFyAXIBcwF1AXIBdQF0AXQBdQF3AXQBdwF2AXYBdwF5AXYBeQF4AXgBeQF7AXgBewF6AXoBewF9AXoBfQF8AXwBfQF/AXwBfwF+AYEBvQC7ALsAuQC3ALcAtQCzALsAtwCzAIEBuwCzAIEBswCxAAEAgQGxAK8ArQCrAAEAsQCvAAcABQADAAMAAQCvAK8AqwCpAKkApwClAKkApQCjAAMArwCpAAkABwADAA0ACwAJAA8ADQAJAAkAAwCpAAkAqQCjAA8ACQCjAA8AowChABEADwChAJ8AnQCbABEAoQCfABcAFQATABMAEQCfAJ8AmwCZAJkAlwCVAJkAlQCTABMAnwCZABkAFwATAB0AGwAZAB8AHQAZABkAEwCZABkAmQCTAB8AGQCTAB8AkwCRACEAHwCRAI8AjQCLACEAkQCPACcAJQAjACMAIQCPAI8AiwCJAIkAhwCFAIkAhQCDACMAjwCJACkAJwAjAC0AKwApAC8ALQApACkAIwCJACkAiQCDAC8AKQCDAC8AgwCBADEALwCBAH8AfQB7ADEAgQB/ADcANQAzADMAMQB/AH8AewB5AHkAdwB1AHkAdQBzADMAfwB5ADkANwAzAD0AOwA5AD8APQA5ADkAMwB5ADkAeQBzAD8AOQBzAD8AcwBxAEEAPwBxAG8AbQBrAEEAcQBvAEcARQBDAEMAQQBvAG8AawBpAGkAZwBlAGkAZQBjAEMAbwBpAEkARwBDAE0ASwBJAE8ATQBJAEkAQwBpAEkAaQBjAE8ASQBjAE8AYwBhAFEATwBhAF8AXQBbAFEAYQBfAFcAVQBTAFMAUQBfAF8AWwBZAFkAVwBTAF8AWQBTAH4BfwG/AH4BvwCAAYABvwDEAIABxADAAAIABAAGAAYACAAKAAoADAAOAAYACgAOAAIABgAOAAIADgAQAAAAAgAQABIAFAAWAAAAEAASALoAvAC+AL4AAAASABIAFgAYABgAGgAcABgAHAAeAL4AEgAYALgAugC+ALQAtgC4ALIAtAC4ALgAvgAYALgAGAAeALIAuAAeALIAHgAgALAAsgAgACIAJAAmALAAIAAiAKoArACuAK4AsAAiACIAJgAoACgAKgAsACgALAAuAK4AIgAoAKgAqgCuAKQApgCoAKIApACoAKgArgAoAKgAKAAuAKIAqAAuAKIALgAwAKAAogAwADIANAA2AKAAMAAyAJoAnACeAJ4AoAAyADIANgA4ADgAOgA8ADgAPAA+AJ4AMgA4AJgAmgCeAJQAlgCYAJIAlACYAJgAngA4AJgAOAA+AJIAmAA+AJIAPgBAAJAAkgBAAEIARABGAJAAQABCAIoAjACOAI4AkABCAEIARgBIAEgASgBMAEgATABOAI4AQgBIAIgAigCOAIQAhgCIAIIAhACIAIgAjgBIAIgASABOAIIAiABOAIIATgBQAIAAggBQAFIAVABWAIAAUABSAHoAfAB+AH4AgABSAFIAVgBYAFgAWgBcAFgAXABeAH4AUgBYAHgAegB+AHQAdgB4AHIAdAB4AHgAfgBYAHgAWABeAHIAeABeAHIAXgBgAHAAcgBgAGIAZABmAHAAYABiAGoAbABuAG4AcABiAGIAZgBoAGgAagBuAGIAaABuAA==" - } - ] -} diff --git a/public/models/bahamas-cents-15.gltf b/public/models/bahamas-cents-15.gltf deleted file mode 100644 index 008345e..0000000 --- a/public/models/bahamas-cents-15.gltf +++ /dev/null @@ -1,104 +0,0 @@ -{ - "asset":{ - "generator":"Khronos glTF Blender I/O v3.6.6", - "version":"2.0" - }, - "scene":0, - "scenes":[ - { - "name":"Scene", - "nodes":[ - 0 - ] - } - ], - "nodes":[ - { - "mesh":0, - "name":"BahamasCents15" - } - ], - "meshes":[ - { - "name":"BahamasCents15", - "primitives":[ - { - "attributes":{ - "POSITION":0, - "TEXCOORD_0":1, - "NORMAL":2 - }, - "indices":3 - } - ] - } - ], - "accessors":[ - { - "bufferView":0, - "componentType":5126, - "count":146, - "max":[ - 0.9979934692382812, - 0.4984160363674164, - 0.9979934692382812 - ], - "min":[ - -0.9979934692382812, - -0.4984160363674164, - -0.9979934692382812 - ], - "type":"VEC3" - }, - { - "bufferView":1, - "componentType":5126, - "count":146, - "type":"VEC2" - }, - { - "bufferView":2, - "componentType":5126, - "count":146, - "type":"VEC3" - }, - { - "bufferView":3, - "componentType":5123, - "count":420, - "type":"SCALAR" - } - ], - "bufferViews":[ - { - "buffer":0, - "byteLength":1752, - "byteOffset":0, - "target":34962 - }, - { - "buffer":0, - "byteLength":1168, - "byteOffset":1752, - "target":34962 - }, - { - "buffer":0, - "byteLength":1752, - "byteOffset":2920, - "target":34962 - }, - { - "buffer":0, - "byteLength":840, - "byteOffset":4672, - "target":34963 - } - ], - "buffers":[ - { - "byteLength":5512, - "uri":"data:application/octet-stream;base64,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LbI9PwAAAAAAAIC/AAAAgM07Dj8AAACAL91UP0Hxwz4AAACAtoRsP0vIRz4AAACAtRV7PwAAAAAAAAAAAACAP0vIR74AAACAtRV7P0Hxw74AAACAtoRsP807Dr8AAACAL91UP/rtK78AAACALbI9P/rtKz8AAAAALbI9P807Dr8AAACAL91UP0Hxw74AAACAtoRsP0vIR74AAACAtRV7PwAAAAAAAAAAAACAP0vIRz4AAACAtRV7P0Hxwz4AAACAtoRsP807Dj8AAACAL91UPwAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgC2yPT8AAAAA+u0rPwAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgPrtKz8AAAAALbI9vwAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgC2yPb8AAACA+u0rPwAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgPrtK78AAACALbI9PwAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgF4AGwAKAF4ACgAAAH4AbQBrAGsAaQBnAGcAZQBjAGMAYQBfAF8AEwBbAFsAWQBXAFcAVQBTAFMAUQBPAE8ATQABAAEAkQCPAI8AjQCLAIsAiQCHAIcAhQCDAIMAOQBvAG8AbgByAHIAdAB2AHYAeAB6AHoAfAB+AH4AawBnAGcAYwBfAF8AWwBXAFcAUwBPAE8AAQCPAI8AiwCHAIcAgwBvAG8AcgB2AHYAegB+AH4AZwBfAF8AVwBPAE8AjwCHAIcAbwB2AHYAfgBfAF8ATwCHAF8AhwB2AJAASwBKAEoATgBQAFAAUgBUAFQAVgBYAFgAWgBdAF0AXABgAGAAYgBkAGQAZgBoAGgAagBsAGwAfwB9AH0AewB5AHkAdwB1AHUAcwBxAHEALwCBAIEAgACEAIQAhgCIAIgAigCMAIwAjgCQAJAASgBQAFAAVABYAFgAXQBgAGAAZABoAGgAbAB9AH0AeQB1AHUAcQCBAIEAhACIAIgAjACQAJAAUABYAFgAYABoAGgAfQB1AHUAgQCIAIgAkABYAFgAaAB1AFgAdQCIAAkATAAIAAkACAALAAsACAAHAAsABwAMAAwABwAGAAwABgANAA0ABgAFAA0ABQAOAA4ABQAEAA4ABAAPAA8ABAADAA8AAwAQABAAAwACABAAAgARABEAAgAAABEAAAAKAEwACQBCAEwAQgA4ABsAXgAaABsAGgAdAB0AGgAZAB0AGQAeAB4AGQAYAB4AGAAfAB8AGAAXAB8AFwAgACAAFwAWACAAFgAhACEAFgAVACEAFQAiACIAFQAUACIAFAAjACMAFAASACMAEgAcACQAcAA3ACQANwAmACYANwA2ACYANgAnACcANgA1ACcANQAoACgANQA0ACgANAAqACkAMwAyACkAMgArACsAMgAxACsAMQAsACwAMQAwACwAMAAtAC0AMAAuAC0ALgAlACUALgAcACUAHAASAEEAggBAAEEAQABDAEMAQAA/AEMAPwBEAEQAPwA+AEQAPgBFAEUAPgA9AEUAPQBGAEYAPQA8AEYAPABHAEcAPAA7AEcAOwBIAEgAOwA6AEgAOgBJAEkAOgA4AEkAOABCAIIAQQBwAIIAcAAkAA==" - } - ] -} diff --git a/public/models/euro-cents-20.gltf b/public/models/euro-cents-20.gltf deleted file mode 100644 index 169c59f..0000000 --- a/public/models/euro-cents-20.gltf +++ /dev/null @@ -1,104 +0,0 @@ -{ - "asset":{ - "generator":"Khronos glTF Blender I/O v3.6.6", - "version":"2.0" - }, - "scene":0, - "scenes":[ - { - "name":"Scene", - "nodes":[ - 0 - ] - } - ], - "nodes":[ - { - "mesh":0, - "name":"EuroCents20" - } - ], - "meshes":[ - { - "name":"EuroCents20", - "primitives":[ - { - "attributes":{ - "POSITION":0, - "TEXCOORD_0":1, - "NORMAL":2 - }, - "indices":3 - } - ] - } - ], - "accessors":[ - { - "bufferView":0, - "componentType":5126, - "count":324, - "max":[ - 0.999995768070221, - 0.5, - 0.999995768070221 - ], - "min":[ - -0.9899212718009949, - -0.5, - -0.999995768070221 - ], - "type":"VEC3" - }, - { - "bufferView":1, - "componentType":5126, - "count":324, - "type":"VEC2" - }, - { - "bufferView":2, - "componentType":5126, - "count":324, - "type":"VEC3" - }, - { - "bufferView":3, - "componentType":5123, - "count":912, - "type":"SCALAR" - } - ], - "bufferViews":[ - { - "buffer":0, - "byteLength":3888, - "byteOffset":0, - "target":34962 - }, - { - "buffer":0, - "byteLength":2592, - "byteOffset":3888, - "target":34962 - }, - { - "buffer":0, - "byteLength":3888, - "byteOffset":6480, - "target":34962 - }, - { - "buffer":0, - "byteLength":1824, - "byteOffset":10368, - "target":34963 - } - ], - "buffers":[ - { - "byteLength":12192, - "uri":"data:application/octet-stream;base64,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JAAEAKkAqQCoAM0ArwCiABQBJACpAM0AzQCvABQBFAEQAfcA9wD5ACQAJADNABQB9wAkABQB6AB6ADYA6AA2AOkAHQFBAIUAHQGFAM8A6QA2AFMA6QBTABcBFwFTACkAFwEpAAIBAwEqACsAAwErAPUA9QArAAgA9QAIAPYAzgARAIYAzgCGAD4B9gAIADsB9gA7AR4BPQGZAHsAPQF7AOoA8ACIABMA8AATAPIA6gB7AAIA6gACAOsA6wACACwB6wAsAcEAwgAtAXcAwgB3ALEAsQB3AP0AsQD9ALIAHwFxAAkAHwEJABgBpgCVAIcApgCHAPEAvABbAEYAvABGAAYBGAEJAFAAGAFQAMgAyABQAFEAyABRALkAugBSAFoAugBaALsAuwBaAFsAuwBbALwABAFkAHAABAFwAAUBKQFmACgBKQEoAbMAJgH4AEgAJgFIACEBQwFPAGUAQwFlAD8BswAoATIBswAyAbQAtAAyAREBtAARAcMAxAASAQoAxAAKADcBNwEKAPgANwH4ACYBrABAAfMArADzAKsAqgD0AGoAqgBqAPsA+gBMAI0A+gCNACoB5AA5AA8B5AAPAdQAKgGNAC0AKgEtAOMA4wAtAFQA4wBUAOAA4QBVAJAA4QCQAOIA4gCQADkA4gA5AOQA0wDvADwA0wA8AAgBBwFgAEEBBwFBAdYA1QBvAO0A1QDtANwAzABcAG4AzABuACUB3ADtADsA3AA7ADgBOAE7AI4AOAGOAMkAygCPABkBygAZAcsAywAZAVwAywBcAMwAJAEYAD4AJAE+AAoBCQGDAAEBCQEBAdkA2AD/ADIA2AAyAC4BsgD9APwAsgD8AKcA2gAxAQ8A2gAPANsALgEyAAABLgEAAaMAowAAATMBowAzAaQA5gDFAGEA5gBhAOcAlQCmAKcAlQCnAPwAYAAHAQgBYAAIATwAgwAJAQoBgwAKAT4APwALAecAPwDnAGEAMQHaAAwBMQEMATABegDoANsAegDbAA8AQQAdAR4BQQAeATsBEQDOAM8AEQDPAIUAmQA9AT4BmQA+AYYAiADwAPEAiADxAIcAcQAfAfIAcQDyABMAZAAEAQYBZAAGAUYAZgApAT8BZgA/AWUAQAGsACEBQAEhAUgA9ACqAKsA9ACrAPMATAD6APsATAD7AGoA7wDTANQA7wDUAA8BbwDVANYAbwDWAEEBGAAkASUBGAAlAW4A/wDYANkA/wDZAAEBXQBWADMAMwA0AAwADAANABoAhACWABsAMwAMABoAhAAbADUAMwAaAIQACwBdADMAngB/AAsAIgCeAAsACwAzAIQAhAA1AFcAVwAHAAAAAAA3AGIAYgBCAJgAlwASAJoAAABiAJgAlwCaAAEAAACYAJcAhABXAAAAIgALAIQATQBrACEAIQAiAIQAhAAAAJcAlwABACwALABYAHIAcgBzAF8AXwBeAEQAQwBFAGMAcgBfAEQAQwBjADgAcgBEAEMAlwAsAHIAIQCEAJcAlABNACEAkgCTAJQAkQA6AJIAgQCdAJEAIACBAJEAkQCSAJQAlAAhAJcAlwByAEMAQwA4AFkAWQB8AH0AfQB+AEcARwAUAIAAHACbAB0AfQBHAIAAHAAdAHQAfQCAABwAQwBZAH0AlACXAEMAIACRAJQAbQCcAD0APQAgAJQAlABDAH0AfQAcAHQAdAB1AIoAigAFAGwAbABJAGcAbABnAGkAdACKAGwAlAB9AHQAbQA9AJQALwAwAG0AJgAuAC8AHwB2ACYAaAAeAB8AdABsAGkAaAAfACYAdABpAGgAbQCUAHQAJgAvAG0AdABoACYAdAAmAG0ATgBCAQUBTgAFAXAA" - } - ] -} diff --git a/public/models/squiggly-circle.gltf b/public/models/squiggly-circle.gltf deleted file mode 100644 index 1dae50d..0000000 --- a/public/models/squiggly-circle.gltf +++ /dev/null @@ -1,309 +0,0 @@ -{ - "asset": { - "generator": "Khronos glTF Blender I/O v3.6.6", - "version": "2.0" - }, - "scene": 0, - "scenes": [ - { - "name": "Scene", - "nodes": [0, 1] - } - ], - "nodes": [ - { - "mesh": 0, - "name": "Cylinder" - }, - { - "mesh": 1, - "name": "Cube" - } - ], - "materials": [ - { - "doubleSided": true, - "name": "Material.001", - "pbrMetallicRoughness": { - "baseColorFactor": [0.800000011920929, 0, 0, 1], - "metallicFactor": 0, - "roughnessFactor": 0.5 - } - }, - { - "doubleSided": true, - "name": "Material.002", - "pbrMetallicRoughness": { - "baseColorFactor": [0, 0.800000011920929, 0, 1], - "metallicFactor": 0, - "roughnessFactor": 0.5 - } - }, - { - "doubleSided": true, - "name": "Material.003", - "pbrMetallicRoughness": { - "baseColorFactor": [0, 0, 0.800000011920929, 1], - "metallicFactor": 0, - "roughnessFactor": 0.5 - } - } - ], - "meshes": [ - { - "name": "Cylinder.001", - "primitives": [ - { - "attributes": { - "POSITION": 0, - "TEXCOORD_0": 1, - "NORMAL": 2 - }, - "indices": 3, - "material": 0 - }, - { - "attributes": { - "POSITION": 4, - "TEXCOORD_0": 5, - "NORMAL": 6 - }, - "indices": 7, - "material": 1 - }, - { - "attributes": { - "POSITION": 8, - "TEXCOORD_0": 9, - "NORMAL": 10 - }, - "indices": 11, - "material": 2 - } - ] - }, - { - "name": "Cube.001", - "primitives": [ - { - "attributes": { - "POSITION": 12, - "TEXCOORD_0": 13, - "NORMAL": 14 - }, - "indices": 15 - } - ] - } - ], - "accessors": [ - { - "bufferView": 0, - "componentType": 5126, - "count": 194, - "max": [0.9712389707565308, 0.495593398809433, 0.9712389707565308], - "min": [-0.9712389707565308, -0.495593398809433, -0.9712389707565308], - "type": "VEC3" - }, - { - "bufferView": 1, - "componentType": 5126, - "count": 194, - "type": "VEC2" - }, - { - "bufferView": 2, - "componentType": 5126, - "count": 194, - "type": "VEC3" - }, - { - "bufferView": 3, - "componentType": 5123, - "count": 576, - "type": "SCALAR" - }, - { - "bufferView": 4, - "componentType": 5126, - "count": 96, - "max": [0.9712389707565308, 0.495593398809433, 0.9712389707565308], - "min": [-0.9712389707565308, 0.495593398809433, -0.9712389707565308], - "type": "VEC3" - }, - { - "bufferView": 5, - "componentType": 5126, - "count": 96, - "type": "VEC2" - }, - { - "bufferView": 6, - "componentType": 5126, - "count": 96, - "type": "VEC3" - }, - { - "bufferView": 7, - "componentType": 5123, - "count": 282, - "type": "SCALAR" - }, - { - "bufferView": 8, - "componentType": 5126, - "count": 96, - "max": [0.971238911151886, -0.495593398809433, 0.971238911151886], - "min": [-0.971238911151886, -0.495593398809433, -0.971238911151886], - "type": "VEC3" - }, - { - "bufferView": 9, - "componentType": 5126, - "count": 96, - "type": "VEC2" - }, - { - "bufferView": 10, - "componentType": 5126, - "count": 96, - "type": "VEC3" - }, - { - "bufferView": 11, - "componentType": 5123, - "count": 282, - "type": "SCALAR" - }, - { - "bufferView": 12, - "componentType": 5126, - "count": 24, - "max": [1, 1, 1], - "min": [-1, -1, -1], - "type": "VEC3" - }, - { - "bufferView": 13, - "componentType": 5126, - "count": 24, - "type": "VEC2" - }, - { - "bufferView": 14, - "componentType": 5126, - "count": 24, - "type": "VEC3" - }, - { - "bufferView": 15, - "componentType": 5123, - "count": 36, - "type": "SCALAR" - } - ], - "bufferViews": [ - { - "buffer": 0, - "byteLength": 2328, - "byteOffset": 0, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 1552, - "byteOffset": 2328, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 2328, - "byteOffset": 3880, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 1152, - "byteOffset": 6208, - "target": 34963 - }, - { - "buffer": 0, - "byteLength": 1152, - "byteOffset": 7360, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 768, - "byteOffset": 8512, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 1152, - "byteOffset": 9280, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 564, - "byteOffset": 10432, - "target": 34963 - }, - { - "buffer": 0, - "byteLength": 1152, - "byteOffset": 10996, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 768, - "byteOffset": 12148, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 1152, - "byteOffset": 12916, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 564, - "byteOffset": 14068, - "target": 34963 - }, - { - "buffer": 0, - "byteLength": 288, - "byteOffset": 14632, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 192, - "byteOffset": 14920, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 288, - "byteOffset": 15112, - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 72, - "byteOffset": 15400, - "target": 34963 - } - ], - "buffers": [ - { - "byteLength": 15472, - "uri": "data:application/octet-stream;base64,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FAATABMAFAAWABMAFgAVABUAFgAYABUAGAAXABcAGAAaABcAGgAZABkAGgAcABkAHAAbABsAHAAeABsAHgAdAB0AHgAgAB0AIAAfAB8AIAAiAB8AIgAhACEAIgAkACEAJAAjACMAJAAmACMAJgAlACUAJgAoACUAKAAnACcAKAAqACcAKgApACkAKgAsACkALAArACsALAAuACsALgAtAC0ALgAwAC0AMAAvAC8AMAAyAC8AMgAxADEAMgA0ADEANAAzADMANAA2ADMANgA1ADUANgA4ADUAOAA3ADcAOAA6ADcAOgA5ADkAOgA8ADkAPAA7ADsAPAA+ADsAPgA9AD0APgBAAD0AQAA/AD8AQABCAD8AQgBBAEEAQgBEAEEARABDAEMARABGAEMARgBFAEUARgBIAEUASABHAEcASABKAEcASgBJAEkASgBMAEkATABLAEsATABOAEsATgBNAE0ATgBQAE0AUABPAE8AUABSAE8AUgBRAFEAUgBUAFEAVABTAFMAVABWAFMAVgBVAFUAVgBYAFUAWABXAFcAWABaAFcAWgBZAFkAWgBcAFkAXABbAFsAXABeAFsAXgBdAF0AXgBgAF0AYABfAF8AYABiAF8AYgBhAGEAYgBkAGEAZABjAGMAZABmAGMAZgBlAGUAZgBoAGUAaABnAGcAaABqAGcAagBpAGkAagBsAGkAbABrAGsAbABuAGsAbgBtAG0AbgBwAG0AcABvAG8AcAByAG8AcgBxAHEAcgB0AHEAdABzAHMAdAB2AHMAdgB1AHUAdgB4AHUAeAB3AHcAeAB6AHcAegB5AHkAegB8AHkAfAB7AHsAfAB+AHsAfgB9AH0AfgCAAH0AgAB/AH8AgACCAH8AggCBAIEAggCEAIEAhACDAIMAhACGAIMAhgCFAIUAhgCIAIUAiACHAIcAiACKAIcAigCJAIkAigCMAIkAjACLAIsAjACOAIsAjgCNAI0AjgCQAI0AkACPAI8AkACSAI8AkgCRAJEAkgCUAJEAlACTAJMAlACWAJMAlgCVAJUAlgCYAJUAmACXAJcAmACaAJcAmgCZAJkAmgCcAJkAnACbAJsAnACeAJsAngCdAJ0AngCgAJ0AoACfAJ8AoACiAJ8AogChAKEAogCkAKEApACjAKMApACmAKMApgClAKUApgCoAKUAqACnAKcAqACqAKcA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AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgF8AXgBdAF0AXABbAFsAWgBZAF0AWwBZAF8AXQBZAF8AWQBYAAAAXwBYAFcAVgBVAAAAWABXAAMAAgABAAEAAABXAFcAVQBUAFQAUwBSAFQAUgBRAAEAVwBUAAQAAwABAAYABQAEAAcABgAEAAQAAQBUAAQAVABRAAcABABRAAcAUQBQAAgABwBQAE8ATgBNAAgAUABPAAsACgAJAAkACABPAE8ATQBMAEwASwBKAEwASgBJAAkATwBMAAwACwAJAA4ADQAMAA8ADgAMAAwACQBMAAwATABJAA8ADABJAA8ASQBIABAADwBIAEcARgBFABAASABHABMAEgARABEAEABHAEcARQBEAEQAQwBCAEQAQgBBABEARwBEABQAEwARABYAFQAUABcAFgAUABQAEQBEABQARABBABcAFABBABcAQQBAABgAFwBAAD8APgA9ABgAQAA/ABsAGgAZABkAGAA/AD8APQA8ADwAOwA6ADwA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AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAEAAgADAAMABAAFAAUABgAHAAMABQAHAAEAAwAHAAEABwAIAAAAAQAIAAkACgALAAAACAAJAF0AXgBfAF8AAAAJAAkACwAMAAwADQAOAAwADgAPAF8ACQAMAFwAXQBfAFoAWwBcAFkAWgBcAFwAXwAMAFwADAAPAFkAXAAPAFkADwAQAFgAWQAQABEAEgATAFgAEAARAFUAVgBXAFcAWAARABEAEwAUABQAFQAWABQAFgAXAFcAEQAUAFQAVQBXAFIAUwBUAFEAUgBUAFQAVwAUAFQAFAAXAFEAVAAXAFEAFwAYAFAAUQAYABkAGgAbAFAAGAAZAE0ATgBPAE8AUAAZABkAGwAcABwAHQAeABwAHgAfAE8AGQAcAEwATQBPAEoASwBMAEkASgBMAEwATwAcAEwAHAAfAEkATAAfAEkAHwAgAEgASQAgACEAIgAjAEgAIAAhAEUARgBHAEcASAAhACEAIwAkACQAJQAmACQAJgAnAEcAIQAkAEQARQBHAEIAQwBEAEEAQgBEAEQARwAkAEQAJAAnAEEARAAnAEEAJwAoAEAAQQAoACkAKgArAEAAKAApAD0APgA/AD8AQAApACkAKwAsACwALQAuACwALgAvAD8AKQAsADwAPQA/ADoAOwA8ADkAOgA8ADwAPwAsADwALAAvADkAPAAvADkALwAwADgAOQAwADEAMgAzADgAMAAxADUANgA3ADcAOAAxADEAMwA0ADQANQA3ADEANAA3AAAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAAD4AAIA+AADAPgAAAAAAAMA+AACAPwAAID8AAAAAAAAgPwAAgD8AAGA/AACAPgAAAD4AAAA/AADAPgAAQD8AAMA+AABAPwAAID8AAEA/AAAgPwAAQD8AAGA/AAAAPwAAwD4AAIA+AADAPgAAgD4AAMA+AACAPgAAID8AAIA+AAAgPwAAgD4AACA/AACAPgAAwD4AAAA/AADAPgAAAD8AAMA+AAAAPwAAID8AAAA/AAAgPwAAAD8AACA/AAAAPwAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAgL8AAAAAAAAAgAAAAAAAAAAAAACAPwAAgL8AAAAAAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAgL8AAAAAAAAAgAAAAAAAAAAAAACAvwAAgL8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAgD8AAAAAAAAAgAAAAAAAAAAAAACAPwAAAAAAAIA/AAAAgAAAgD8AAAAAAAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAgD8AAAAAAAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAgD8AAAAAAAAAgAIABAAJAAIACQAHAAgACgAVAAgAFQATABQAFwARABQAEQAOAA0ADwADAA0AAwABAAYAEgAMAAYADAAAABYACwAFABYABQAQAA==" - } - ] -} diff --git a/public/models/tostao-furado.gltf b/public/models/tostao-furado.gltf deleted file mode 100644 index 2e25c23..0000000 --- a/public/models/tostao-furado.gltf +++ /dev/null @@ -1,104 +0,0 @@ -{ - "asset":{ - "generator":"Khronos glTF Blender I/O v3.6.6", - "version":"2.0" - }, - "scene":0, - "scenes":[ - { - "name":"Scene", - "nodes":[ - 0 - ] - } - ], - "nodes":[ - { - "mesh":0, - "name":"TostaoFurado" - } - ], - "meshes":[ - { - "name":"TostaoFurado", - "primitives":[ - { - "attributes":{ - "POSITION":0, - "TEXCOORD_0":1, - "NORMAL":2 - }, - "indices":3 - } - ] - } - ], - "accessors":[ - { - "bufferView":0, - "componentType":5126, - "count":260, - "max":[ - 1, - 0.5, - 1 - ], - "min":[ - -1, - -0.5, - -1 - ], - "type":"VEC3" - }, - { - "bufferView":1, - "componentType":5126, - "count":260, - "type":"VEC2" - }, - { - "bufferView":2, - "componentType":5126, - "count":260, - "type":"VEC3" - }, - { - "bufferView":3, - "componentType":5123, - "count":768, - "type":"SCALAR" - } - ], - "bufferViews":[ - { - "buffer":0, - "byteLength":3120, - "byteOffset":0, - "target":34962 - }, - { - "buffer":0, - "byteLength":2080, - "byteOffset":3120, - "target":34962 - }, - { - "buffer":0, - "byteLength":3120, - "byteOffset":5200, - "target":34962 - }, - { - "buffer":0, - "byteLength":1536, - "byteOffset":8320, - "target":34963 - } - ], - "buffers":[ - { - "byteLength":9856, - "uri":"data:application/octet-stream;base64,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AAAAgAAAAIAAAIC/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgC/dVL8AAAAAzTsOPwAAAIAAAIC/AAAAgC/dVL8AAAAAzTsOPwAAAAAAAIA/AAAAgAAAAIAAAIC/AAAAgLaEbL8AAAAAQfHDPgAAAAAAAIA/AAAAgLaEbL8AAAAAQfHDPgAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAIAAAIC/AAAAgLaEbL8AAAAAQfHDvgAAAAAAAIA/AAAAgLaEbL8AAAAAQfHDvgAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgIEENb8AAAAAgQQ1vwAAAIAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIC/AAAAgM07Dr8AAAAAL91Uv807Dr8AAAAAL91UvwAAAIAAAIA/AAAAgEHxw74AAAAAtoRsvwAAAIAAAIC/AAAAgEHxw74AAAAAtoRsvwAAAIAAAIA/AAAAgEvIR74AAAAAtRV7v0vIRz4AAAAAtRV7P0vIR74AAAAAtRV7vwAAAIAAAIA/AAAAgAAAAAAAAAAAAACAvwAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAAAAAACAv0vIRz4AAAAAtRV7vwAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgAAAAAAAAIC/AAAAgEHxwz4AAAAAtoRsv0Hxwz4AAAAAtoRsvwAAAIAAAIA/AAAAgM07Dj8AAAAAL91UvwAAAAAAAIC/AAAAgM07Dj8AAAAAL91UvwAAAIAAAIA/AAAAgIEENT8AAAAAgQQ1vwAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgIEENT8AAAAAgQQ1vy/dVD8AAAAAzTsOvwAAAAAAAIC/AAAAgAAAAIAAAIA/AAAAgAAAAIAAAIA/AAAAgLaEbD8AAAAAQfHDvgAAAAAAAIC/AAAAgLaEbD8AAAAAQfHDvgAAAIAAAIA/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qgCrAMQA2wBPAMIAxABPAE8AqwCuAE8ArgCwAFYAwgBPALwAVgBPAE8AsABGAE8ARgC2ALkAvABPAE8AtgC5ANcAAgEDAdcAAwGcAJwAAwHeAJwA3gCaAHwAfQABAAEABAAIAAgADAARABEAFQAYABgAHAAgACAAJQAoACgALQAxADEANAA5ADkA8QCtADkArQCsACgAMQA5ABgAIAAoAAgAEQAYAHwAAQAIAAAAfAAIAAgAGAAoACgAOQCsACgArACmAIIAAAAIAOEAggAIACgApgCkACgApAAsAOIA4QAIABAA4gAIACgALACeACgAngAkABAACAAoAJAAEAAoACgAJAAhACgAIQAdAJEAkAAoACgAHQCRAK0A8QBBAEEARQBIAEgATQBRAFEAVQBZAFkAXQBgAGAAZQBpAGkAbABwAHAAdAB5AHkAfQB8AHkAfAB4AGkAcAB5AFkAYABpAEgAUQBZAK0AQQBIAK8ArQBIAEgAWQBpAGkAeQB4AGkAeAABAbEArwBIALQAsQBIAGkAAQFxAGkAcQDOALoAtABIALsAugBIAGkAzgDLAGkAywBkALsASABpAL0AuwBpAGkAZADFAGkAxQDDAMAAvQBpAGkAwwDAAIQAgQAFAIQABQAGAAYABQAJAAYACQALAAsACQANAAsADQAPAA8ADQDcAA8A3ACOABYAjgDcABYA3AAUABsAFgAUABsAFAAZAOgAGwAZAOgAGQDnAOoA6ADnAOoA5wDpAOsA6gDpAOsA6QCdACsA6wCdACsAnQApAO0AKwApAO0AKQCjAO8A7QCjAO8AowAwADYA7wAwADYAMAA1ADoANgA1ADoANQA4AD4AOgA4AD4AOAA8AEMAPgA8AEMAPABAALUAQwBAALUAQABEAEQASQBKAEQASgC1AE4ASgBJAE4ASQBMAFMATgBMAFMATABQAFMAUABUAFMAVADBAMEAVABYAMEAWABaAFoAWABcAFoAXABeAF4AXABhAF4AYQBjAGMAYQDKAGMAygDMAMwAygBoAMwAaABqAGoAaABtAGoAbQBvAG8AbQAAAW8AAAFyAHIAAAF1AHIAdQB2AHYAdQD2AHYA9gB6ANkA2gB6ANkAegD2ANkAgACDANkAgwDaAA==" - } - ] -} diff --git a/src/api.ts b/src/api.ts new file mode 100644 index 0000000..3ba7ed1 --- /dev/null +++ b/src/api.ts @@ -0,0 +1,33 @@ +import { LRUCache } from 'lru-cache'; +import type { IssuerCount } from '@/db/types'; +import type { PieceFilters, PiecesResponse } from '@/filter-types'; + +const cache = new LRUCache>({ max: 32 }); + +function fetchOnce(url: string): Promise { + const hit = cache.get(url); + if (hit) return hit as Promise; + const promise = fetch(url).then((r) => r.json() as Promise); + cache.set(url, promise); + return promise; +} + +function serializeFilters(filters?: PieceFilters): string { + if (!filters) return ''; + const params = new URLSearchParams(); + if (filters.countries?.length) params.set('countries', filters.countries.join(',')); + if (filters.currencies?.length) params.set('currencies', filters.currencies.join(',')); + if (filters.faceValue !== undefined) params.set('face_value', String(filters.faceValue)); + if (filters.categories?.length) params.set('categories', filters.categories.join(',')); + if (filters.editions?.length) params.set('editions', filters.editions.join(',')); + if (filters.shapes?.length) params.set('shapes', filters.shapes.join(',')); + if (filters.yearMin !== undefined) params.set('year_min', String(filters.yearMin)); + if (filters.yearMax !== undefined) params.set('year_max', String(filters.yearMax)); + const qs = params.toString(); + return qs ? `?${qs}` : ''; +} + +export const fetchPieces = (filters?: PieceFilters) => + fetchOnce(`/api/pieces${serializeFilters(filters)}`); + +export const fetchCountryCounts = () => fetchOnce('/api/country-counts'); diff --git a/src/api/countries/get-countries.ts b/src/api/countries/get-countries.ts deleted file mode 100644 index 8450210..0000000 --- a/src/api/countries/get-countries.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { prisma } from '@/api'; - -export const getCountries = async (filter?: string) => { - return await prisma.issuer.findMany({ - ...(filter && { - orderBy: { name: 'asc' }, - where: { - name: { contains: filter } - } - }) - }); -}; diff --git a/src/api/countries/get-country-counts.ts b/src/api/countries/get-country-counts.ts deleted file mode 100644 index 839d881..0000000 --- a/src/api/countries/get-country-counts.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { prisma } from '@/api'; - -export const getCountryCounts = async (category?: 'coins' | 'banknotes') => { - const countryBanknoteCounts = - category !== 'coins' - ? await prisma.numistaType.groupBy({ - _count: true, - _sum: { - count: true - }, - by: ['issuer_code'], - where: { - category: { - equals: 'banknote' - } - } - }) - : []; - - const countryCoinCounts = - category !== 'banknotes' - ? await prisma.numistaType.groupBy({ - _count: true, - _sum: { - count: true - }, - by: ['issuer_code'], - where: { - category: { - not: 'banknote' - } - } - }) - : []; - - const countries = await prisma.issuer.findMany({ - orderBy: { - name: 'asc' - } - }); - - const map = countries.map(country => { - const banknoteCounts = countryBanknoteCounts.find(({ issuer_code }) => issuer_code === country.code); - const coinCounts = countryCoinCounts.find(({ issuer_code }) => issuer_code === country.code); - - return { - ...country, - ...(banknoteCounts && { - banknotes: { - count: banknoteCounts?._count, - sum: banknoteCounts?._sum?.count - } - }), - ...(coinCounts && { - coins: { - count: coinCounts?._count, - sum: coinCounts?._sum?.count - } - }) - }; - }); - - return map; -}; diff --git a/src/api/currencies/get-currencies.ts b/src/api/currencies/get-currencies.ts deleted file mode 100644 index c04984e..0000000 --- a/src/api/currencies/get-currencies.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { prisma } from '@/api'; - -export const getCurrencies = async (filter?: string) => { - return ( - await prisma.currency.groupBy({ - by: 'name', - ...(filter && { - where: { - OR: [ - { - full_name: { contains: filter }, - name: { contains: filter } - } - ] - } - }) - }) - ).map(({ name }) => name); -}; diff --git a/src/api/index.ts b/src/api/index.ts deleted file mode 100644 index 9b6c4ce..0000000 --- a/src/api/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { PrismaClient } from '@prisma/client'; - -export const prisma = new PrismaClient(); diff --git a/src/api/types/get-random-type.ts b/src/api/types/get-random-type.ts deleted file mode 100644 index b90064c..0000000 --- a/src/api/types/get-random-type.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { include } from './relations'; -import { prisma } from '@/api'; - -const baseTypes = await prisma.numistaType.findMany({ - select: { - count: true, - id: true - }, - where: { - category: { - not: 'banknote' - } - } -}); - -const total = baseTypes.reduce((total, type) => total + (type.count ?? 1), 0); - -export const getRandomType = async () => { - const target = Math.random() * total; - let iter = 0; - let typeId = 0; - - baseTypes.some((type, index) => { - iter += baseTypes[index].count ?? 1; - - if (iter >= target) { - typeId = type.id; - - return true; - } - }); - - if (!typeId) { - return; - } - - return await prisma.numistaType.findFirst({ - include, - where: { - id: typeId - } - }); -}; diff --git a/src/api/types/get-type.ts b/src/api/types/get-type.ts deleted file mode 100644 index e726b51..0000000 --- a/src/api/types/get-type.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NumistaType } from '@/types/numista'; -import { include } from './relations'; -import { prisma } from '@/api'; - -export const getType = async (id: number) => { - const type = await prisma.numistaType.findUnique({ - include, - where: { - id - } - }); - - return type as unknown as NumistaType | null; -}; diff --git a/src/api/types/get-types.ts b/src/api/types/get-types.ts deleted file mode 100644 index 06e430d..0000000 --- a/src/api/types/get-types.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { NumistaType } from '@/types/numista'; -import { Prisma } from '@prisma/client'; -import { include } from './relations'; -import { prisma } from '@/api'; - -type Props = { - category?: 'coins' | 'banknotes'; - countries?: string[]; - currencies?: string[]; - faceValue?: number; - search?: string; - special?: 'yes' | 'no' | 'both'; - yearRange?: [number, number]; -}; - -export const getTypes = async ({ category, countries, currencies, faceValue, search, special, yearRange }: Props) => { - const AND: Prisma.NumistaTypeWhereInput[] = []; - const OR: Prisma.NumistaTypeWhereInput[] = []; - - if (category === 'banknotes') { - AND.push({ - category: 'banknote' - }); - } - - if (category === 'coins') { - AND.push({ - category: { - not: 'banknote' - } - }); - } - - if (currencies?.length) { - AND.push({ - value: { - OR: currencies.map(currency => ({ - currency: { - OR: [{ name: currency }, { full_name: currency }] - } - })) - } - }); - } - - if (countries?.length) { - AND.push({ - issuer: { - OR: countries.map(country => ({ - OR: [ - { - code: country - }, - { - name: country - } - ] - })) - } - }); - } - - if (faceValue) { - AND.push({ - value: { - numeric_value: { - equals: faceValue - } - } - }); - } - - if (yearRange?.length === 2) { - AND.push({ - AND: { - max_year: { - lte: yearRange[1] - }, - min_year: { - gte: yearRange[0] - } - } - }); - } - - if (special === 'yes') { - AND.push({ - NOT: { - type: { - contains: 'Standard' - } - } - }); - } - - if (special === 'no') { - AND.push({ - type: { - contains: 'Standard' - } - }); - } - - if (search) { - OR.push({ title: { contains: search } }); - OR.push({ - issuer: { - OR: [ - { - code: { contains: search } - }, - { - name: { contains: search } - } - ] - } - }); - - OR.push({ - value: { - currency: { - OR: [{ name: { contains: search } }, { full_name: { contains: search } }] - } - } - }); - } - - if (AND.length) { - OR.push({ AND }); - } - - const types = await prisma.numistaType.findMany({ - include, - ...(OR.length > 0 - ? { - where: { - OR - } - } - : {}), - orderBy: [ - { - min_year: 'asc' - }, - { - max_year: 'asc' - }, - { - value: { - numeric_value: 'asc' - } - } - ] - }); - - return types as unknown as NumistaType[]; -}; diff --git a/src/api/types/relations.ts b/src/api/types/relations.ts deleted file mode 100644 index 6613b7d..0000000 --- a/src/api/types/relations.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Prisma } from '@prisma/client'; - -export const include: Prisma.NumistaTypeInclude = { - edge: true, - issuer: true, - obverse: true, - reverse: true, - value: { - include: { - currency: true - } - } -}; diff --git a/src/atlas-layout.ts b/src/atlas-layout.ts new file mode 100644 index 0000000..77f0dfc --- /dev/null +++ b/src/atlas-layout.ts @@ -0,0 +1,6 @@ +export const ATLAS_LAYOUT = { + 256: { width: 256, height: 144, tile: 128, stripH: 16 }, + 1024: { width: 1024, height: 576, tile: 512, stripH: 64 }, +} as const; + +export type AtlasSize = keyof typeof ATLAS_LAYOUT; diff --git a/src/components/banknote/index.tsx b/src/components/banknote/index.tsx deleted file mode 100644 index 73be931..0000000 --- a/src/components/banknote/index.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import * as THREE from 'three'; -import { Dispatch, SetStateAction, useEffect, useMemo, useState } from 'react'; -import { NumistaType } from '@/types/numista'; -import { useLoader } from '@react-three/fiber'; - -const textureProps = { - bumpScale: 1 / 16, - metalness: 0, - roughness: 0.75 -}; - -const SafeMaterial = ({ - bumpMap, - setWidth, - side, - url -}: { - bumpMap: THREE.Texture; - setWidth?: Dispatch>; - side: 'obverse' | 'reverse'; - url: string; -}) => { - const texture: THREE.Texture = useLoader(THREE.TextureLoader, url); - - const index = useMemo(() => { - switch (side) { - case 'obverse': - return 4; - - default: - return 5; - } - }, [side]); - - useEffect(() => { - if (!setWidth) { - return; - } - - setWidth(() => { - try { - return (2 * texture.source.data.width) / texture.source.data.height; - } catch { - return 4; - } - }); - }, [setWidth, texture]); - - return ( - - ); -}; - -export const BanknoteInstance = ({ obverse, reverse }: NumistaType) => { - const [width, setWidth] = useState(0); - - const obverseNormalTexture = useMemo(() => { - const texture = new THREE.TextureLoader().load('/photos/seamless-paper-normal-map.webp'); - - texture.repeat = new THREE.Vector2(2, 0.25); - texture.wrapS = THREE.RepeatWrapping; - texture.wrapT = THREE.RepeatWrapping; - texture.offset = new THREE.Vector2(Math.random(), Math.random()); - - return texture; - }, []); - - const reverseNormalTexture = useMemo(() => { - const texture = obverseNormalTexture.clone(); - texture.repeat = new THREE.Vector2(-2, 0.25); - - return texture; - }, [obverseNormalTexture]); - - return ( - <> - - - {Array.from({ length: 4 }, (_, index) => ( - - ))} - - {obverse?.picture ? ( - - ) : ( - - )} - - {reverse?.picture ? ( - - ) : ( - - )} - - ); -}; diff --git a/src/components/coin/base.tsx b/src/components/coin/base.tsx deleted file mode 100644 index 42c0a1e..0000000 --- a/src/components/coin/base.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import * as THREE from 'three'; -import { NumistaType } from '@/types/numista'; -import { coinMaterialProps } from './index'; -import { getTextureUrl } from '@/core/utils/texture-urls'; -import { useEffect, useMemo } from 'react'; -import { useShowcaseStore } from '../showcase/store'; - -const SafeCoinMaterial = ({ - color, - orientation, - side, - url -}: Pick & { - side: 'edge' | 'obverse' | 'reverse'; - url?: string; -}) => { - const hasTextureBase = useShowcaseStore(state => state.textureBase); - const hasTextureBump = useShowcaseStore(state => state.textureBump); - const texture = useMemo(() => { - try { - if (hasTextureBase) { - return new THREE.TextureLoader().load(url as string); - } - } catch { - // Safe loading - } - }, [url, hasTextureBase]); - - const textureBump = useMemo(() => { - try { - if (hasTextureBump) { - return new THREE.TextureLoader().load(getTextureUrl(url, 'bump')); - } - } catch { - // Safe loading - } - }, [url, hasTextureBump]); - - const index = useMemo(() => { - switch (side) { - case 'edge': - return 0; - - case 'obverse': - return 1; - - default: - return 2; - } - }, [side]); - - useEffect(() => { - if (!texture) { - return; - } - - switch (side) { - case 'edge': - texture.repeat = new THREE.Vector2(4, 1); - texture.offset = new THREE.Vector2(0.5, 0); - texture.wrapS = THREE.MirroredRepeatWrapping; - texture.wrapT = THREE.MirroredRepeatWrapping; - break; - - case 'reverse': - if (orientation === 'medal') { - texture.center = new THREE.Vector2(0.5, 0.5); - texture.rotation = Math.PI; - } - - break; - - default: - break; - } - }, [orientation, texture, side]); - - useEffect(() => { - if (!textureBump) { - return; - } - - switch (side) { - case 'reverse': - if (orientation === 'medal') { - textureBump.center = new THREE.Vector2(0.5, 0.5); - textureBump.rotation = Math.PI; - } - - break; - - default: - break; - } - }, [orientation, textureBump, side]); - - if (!texture && !textureBump) { - return ; - } - - return ( - - ); -}; - -export const BaseCoin = ({ color, edge, obverse, orientation, reverse, shape }: NumistaType) => { - const sides = useMemo(() => { - const parsed = shape && Number(/(\d+)/.exec(shape)?.[0]); - - if(parsed && parsed <= 10) { - return parsed - } - - return 32; - }, [shape]); - - return ( - <> - - - - - - - - - ); -}; diff --git a/src/components/coin/custom.tsx b/src/components/coin/custom.tsx deleted file mode 100644 index 269a3d6..0000000 --- a/src/components/coin/custom.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import * as THREE from 'three'; -import { NumistaType } from '@/types/numista'; -import { coinMaterialProps } from './index'; -import { useGLTF } from '@react-three/drei'; -import { useMemo } from 'react'; -import { useShowcaseStore } from '../showcase/store'; - -const models = { - BahamasCents10: '/models/bahamas-cents-10.gltf', - BahamasCents15: '/models/bahamas-cents-15.gltf', - EuroCents20: '/models/euro-cents-20.gltf', - TostaoFurado: '/models/tostao-furado.gltf' -} as const; - -type Props = { - coin: NumistaType; - model: keyof typeof models; -}; - -export function SpecialCoin({ coin, model }: Props) { - // @ts-expect-error property `nodes` actually exists - const { nodes } = useGLTF(models[model]); - const showTextureBase = useShowcaseStore(state => state.textureBase); - const showTextureBump = useShowcaseStore(state => state.textureBump); - const texture = useMemo(() => { - try { - if (showTextureBase) { - return new THREE.TextureLoader().load(`/api/merge-textures/${coin.id}`); - } - } catch { - // Safe loading - } - }, [coin.id, showTextureBase]); - - const textureBump = useMemo(() => { - try { - if (showTextureBump) { - return new THREE.TextureLoader().load(`api/merge-textures/${coin.id}?type=bump`); - } - } catch { - // Safe loading - } - }, [coin.id, showTextureBump]); - - return ( - <> - - - - - ); -} diff --git a/src/components/coin/index.tsx b/src/components/coin/index.tsx deleted file mode 100644 index 43ff6e2..0000000 --- a/src/components/coin/index.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { BaseCoin } from './base'; -import { NumistaType } from '@/types/numista'; -import { SpecialCoin } from './custom'; -import { useMemo } from 'react'; - -export const coinMaterialProps = { - bumpScale: -1 / 16, - metalness: 1, - roughness: 0.5 -}; - -export const CoinInstance = (coin: NumistaType) => { - const model = useMemo(() => { - if ( - (coin.value?.numeric_value === 0.2 && coin.value?.currency?.name === 'Euro') || - (coin.value?.numeric_value === 50 && - coin.value?.currency?.name === 'Peseta' && - coin.min_year && - coin.min_year >= 1990) - ) { - return 'EuroCents20'; - } - - if ( - coin.value?.numeric_value === 25 && - coin.value?.currency?.name === 'Peseta' && - coin.min_year && - coin.min_year >= 1990 - ) { - return 'TostaoFurado'; - } - - if (coin.value?.currency?.name === 'Dollar' && coin.issuer?.code === 'bahamas') { - switch (coin.value?.numeric_value) { - case 0.15: - return 'BahamasCents15'; - - case 0.1: - return 'BahamasCents10'; - - default: - break; - } - } - }, [coin]); - - if (model) { - return ; - } - - return ; -}; diff --git a/src/components/filters/check-row.tsx b/src/components/filters/check-row.tsx new file mode 100644 index 0000000..c57f3d1 --- /dev/null +++ b/src/components/filters/check-row.tsx @@ -0,0 +1,28 @@ +import { Checkbox } from 'react-aria-components'; +import CheckIcon from './icons/check.svg?react'; + +export function CheckRow({ + value, + label, + count, + isDisabled, +}: { + value: string; + label: string; + count: number; + isDisabled?: boolean; +}) { + return ( + +
+ +
+ {label} + {count} +
+ ); +} diff --git a/src/components/filters/face-value-slider.tsx b/src/components/filters/face-value-slider.tsx new file mode 100644 index 0000000..8b6c37b --- /dev/null +++ b/src/components/filters/face-value-slider.tsx @@ -0,0 +1,55 @@ +import { Label, Slider, SliderOutput, SliderThumb, SliderTrack } from 'react-aria-components'; + +// Face value slider with "Any" as the leftmost stop. Position 0 == any (null), position k+1 == +// steps[k]. +export function FaceValueSlider({ + steps, + value, + onChange, +}: { + steps: number[]; + value: number | null; + onChange: (v: number | null) => void; +}) { + const sliderIndex = value === null ? 0 : Math.max(0, steps.indexOf(value)) + 1; + const label = sliderIndex === 0 ? 'Any' : String(steps[sliderIndex - 1]); + + return ( + { + const i = v as number; + onChange(i === 0 ? null : (steps[i - 1] ?? null)); + }} + minValue={0} + maxValue={steps.length} + step={1} + className="flex flex-col gap-2" + > + + + {({ state }) => ( + <> +
+ {sliderIndex > 0 && ( +
+ )} + + + )} + + +
+ Any + {steps.map((s) => ( + {s} + ))} +
+ + ); +} diff --git a/src/components/filters/icons/check.svg b/src/components/filters/icons/check.svg new file mode 100644 index 0000000..93e60c1 --- /dev/null +++ b/src/components/filters/icons/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/filters/icons/chevron.svg b/src/components/filters/icons/chevron.svg new file mode 100644 index 0000000..72494ec --- /dev/null +++ b/src/components/filters/icons/chevron.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/filters/icons/filters.svg b/src/components/filters/icons/filters.svg new file mode 100644 index 0000000..ec44b8a --- /dev/null +++ b/src/components/filters/icons/filters.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/filters/index.tsx b/src/components/filters/index.tsx deleted file mode 100644 index d9d26a5..0000000 --- a/src/components/filters/index.tsx +++ /dev/null @@ -1,359 +0,0 @@ -import { InputNumber } from 'primereact/inputnumber'; -import { MultiSelectCountriesFilter } from './multi-select-countries'; -import { MultiSelectCurrenciesFilter } from '@/components/filters/multi-select-currencies'; -import { MultiToggleFilter } from '@/components/filters/multi-toggle'; -import { ParsedUrlQuery } from 'querystring'; -import { Sidebar, SidebarProps } from 'primereact/sidebar'; -import { Slider } from 'primereact/slider'; -import { useEffect, useMemo, useReducer } from 'react'; -import { useRouter } from 'next/router'; -import { useShowcaseStore } from '@/components/showcase/store'; - -type Props = SidebarProps & { - filterBanknotes?: boolean; - filterTextures?: boolean; - query: ParsedUrlQuery; -}; - -type State = { - banknotes: boolean; - coins: boolean; - countries: string[]; - currencies: string[]; - faceValue?: number; - search: string; - special: boolean; - standard: boolean; - yearRange: [number, number]; -}; - -type Action = - | { - key: 'currency'; - payload: string; - } - | { - key: 'country'; - payload: string; - } - | { - key: 'special' | 'standard' | 'coins' | 'banknotes'; - payload?: boolean; - } - | { - key: 'yearRange'; - payload?: number | [number, number]; - } - | { - key: 'faceValue'; - payload?: number | [number, number] | null; - }; - -const validFaceValues = [ - 0.01, 0.02, 0.05, 0.1, 0.2, 0.25, 0.5, 1, 1.5, 2, 2.5, 3, 4, 5, 10, 15, 20, 25, 50, 100, 200, 250, 500, 1000 -]; - -const currentYear = new Date().getFullYear(); - -const arrayToggle = (array: T[], value: T) => { - if (array.includes(value)) { - return array.filter(inner => inner !== value); - } - - return [...array, value]; -}; - -const reducer = (state: State, { key, payload }: Action) => { - switch (key) { - case 'currency': - return { - ...state, - currencies: arrayToggle(state.currencies, payload) - }; - - case 'country': - return { - ...state, - countries: arrayToggle(state.countries, payload) - }; - - case 'special': - case 'standard': - case 'coins': - case 'banknotes': - return { - ...state, - [key]: !!payload - }; - - case 'yearRange': - return { - ...state, - ...(Array.isArray(payload) && { yearRange: payload }) - }; - - case 'faceValue': - if (Array.isArray(payload)) { - return state; - } - - if (!payload) { - return { - ...state, - faceValue: undefined - }; - } - - return { - ...state, - faceValue: payload - }; - - default: - return state; - } -}; - -const stringifyState = (state: State) => { - const searchParams = new URLSearchParams(); - - if (state.search.length) { - searchParams.set('search', state.search); - } - - state.currencies.forEach(currency => { - searchParams.append('currencies', currency); - }); - - state.countries.forEach(country => { - searchParams.append('countries', country); - }); - - if (state.faceValue) { - searchParams.set('faceValue', String(state.faceValue)); - } - - if (state.special && !state.standard) { - searchParams.set('special', 'yes'); - } - - if (!state.special && state.standard) { - searchParams.set('special', 'no'); - } - - if (state.coins && !state.banknotes) { - searchParams.set('category', 'coins'); - } - - if (!state.coins && state.banknotes) { - searchParams.set('category', 'banknotes'); - } - - if (state.yearRange[0] !== 1800 || state.yearRange[1] !== currentYear) { - searchParams.append('yearRange', String(state.yearRange[0])); - searchParams.append('yearRange', String(state.yearRange[1])); - } - - return searchParams.toString(); -}; - -const parseArray = (value?: string | string[]) => { - if (Array.isArray(value)) { - return value; - } - - return value ? [value] : []; -}; - -const getDefaultParams = (query: ParsedUrlQuery) => { - return { - banknotes: !query.category || query.category === 'banknotes', - coins: !query.category || query.category === 'coins', - countries: parseArray(query.countries), - currencies: parseArray(query.currencies), - faceValue: validFaceValues.includes(Number(query.faceValue)) - ? (101 * validFaceValues.indexOf(Number(query.faceValue))) / validFaceValues.length - : undefined, - search: typeof query.search === 'string' ? query.search : '', - special: !query.special || query.special === 'yes', - standard: !query.special || query.special === 'no', - yearRange: (() => { - if (Array.isArray(query.yearRange)) { - return [ - Math.max(1800, Math.min(currentYear, Number(query.yearRange[0]))), - Math.min(currentYear, Math.max(1800, Number(query.yearRange[1]))) - ]; - } - - return [1800, currentYear]; - })() as [number, number] - }; -}; - -export const Filters = ({ filterBanknotes, filterTextures, query, ...sidebarProps }: Props) => { - const router = useRouter(); - const setTextureBase = useShowcaseStore(state => state.setTextureBase); - const setTextureBump = useShowcaseStore(state => state.setTextureBump); - const textureBase = useShowcaseStore(state => state.textureBase); - const textureBump = useShowcaseStore(state => state.textureBump); - const [state, dispatch] = useReducer(reducer, getDefaultParams(query)); - - const [validFaceValue, stringifiedState] = useMemo(() => { - const validFaceValue = state.faceValue - ? validFaceValues[Math.floor((validFaceValues.length * state.faceValue) / 101)] - : undefined; - - return [validFaceValue, stringifyState({ ...state, faceValue: validFaceValue })]; - }, [state]); - - useEffect(() => { - if (router.asPath !== `${router.pathname}?${stringifiedState}`) { - router.replace(`${router.pathname}?${stringifiedState}`, undefined, { - shallow: true - }); - } - }, [router, stringifiedState]); - - return ( - -
- {filterTextures && ( -
- setTextureBase(!!payload), - value: textureBase - }, - { - name: 'bump', - set: payload => setTextureBump(!!payload), - value: textureBump - } - ]} - /> -
- )} - {!filterBanknotes && ( -
- dispatch({ key: 'coins', payload }), - value: state.coins - }, - { - name: 'banknotes', - set: payload => dispatch({ key: 'banknotes', payload }), - value: state.banknotes - } - ]} - /> -
- )} -
- dispatch({ key: 'country', payload })} - /> -
-
- dispatch({ key: 'currency', payload })} - /> -
-
- - null} - pt={{ - input: { - root: { style: { pointerEvents: 'none', width: '100%' } } - } - }} - style={{ cursor: 'not-allowed', marginBottom: 8, width: '100%' }} - value={validFaceValue} - /> - dispatch({ key: 'faceValue', payload: value })} - value={state.faceValue} - /> -
-
- dispatch({ key: 'special', payload }), - value: state.special - }, - { - name: 'standard', - set: payload => dispatch({ key: 'standard', payload }), - value: state.standard - } - ]} - /> -
-
- -
- null} - pt={{ - input: { - root: { style: { pointerEvents: 'none', width: '100%' } } - } - }} - style={{ cursor: 'not-allowed' }} - value={state.yearRange[0]} - /> - {'-'} - null} - pt={{ - input: { - root: { - style: { - pointerEvents: 'none', - textAlign: 'right', - width: '100%' - } - } - } - }} - style={{ cursor: 'not-allowed' }} - value={state.yearRange[1]} - /> -
- dispatch({ key: 'yearRange', payload: value })} - range - value={state.yearRange} - /> -
-
-
- ); -}; diff --git a/src/components/filters/inverted-group.tsx b/src/components/filters/inverted-group.tsx new file mode 100644 index 0000000..1e96bf1 --- /dev/null +++ b/src/components/filters/inverted-group.tsx @@ -0,0 +1,50 @@ +import { CheckboxGroup } from 'react-aria-components'; +import { CheckRow } from '@/components/filters/check-row'; + +export function InvertedGroup({ + options, + labels, + facetCounts, + selected, + excluded, + onChange, +}: { + options: readonly T[]; + labels: Record; + facetCounts: Map; + selected: readonly T[]; + // Options forced off + disabled (rendered unchecked, can't be toggled, never appear in onChange's + // next value). When non-empty, onChange never collapses to null — the explicit list has to stay + // in the URL so the exclusion sticks. + excluded?: readonly T[]; + onChange: (next: T[] | null) => void; +}) { + const excludedSet = new Set(excluded ?? []); + const displayed = (selected.length === 0 ? options : selected).filter((o) => !excludedSet.has(o)); + + return ( + { + const next = (v as T[]).filter((o) => !excludedSet.has(o)); + if (next.length === 0) return; + const isAll = excludedSet.size === 0 && next.length === options.length; + onChange(isAll ? null : next); + }} + className="flex flex-col" + > + {options.map((opt) => { + const isLast = displayed.length === 1 && displayed[0] === opt; + return ( + + ); + })} + + ); +} diff --git a/src/components/filters/labels.ts b/src/components/filters/labels.ts new file mode 100644 index 0000000..7d50985 --- /dev/null +++ b/src/components/filters/labels.ts @@ -0,0 +1,23 @@ +import type { Category, Edition, ShapeVariant } from '@/filter-types'; + +export const CATEGORY_LABELS: Record = { + coin: 'Coins', + banknote: 'Banknotes', + exonumia: 'Exonumia', +}; + +export const EDITION_LABELS: Record = { + standard: 'Standard', + special: 'Special', +}; + +export const SHAPE_LABELS: Record = { + round: 'Round', + polygon: 'Polygon', + 'holed-round': 'Holed round', + 'holed-polygon': 'Holed polygon', + 'notched-round': 'Flower', + 'sine-round': 'Wavy', + rectangular: 'Rectangular', + irregular: 'Irregular', +}; diff --git a/src/components/filters/multi-select-countries.tsx b/src/components/filters/multi-select-countries.tsx deleted file mode 100644 index 0ffd2c4..0000000 --- a/src/components/filters/multi-select-countries.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { Issuer } from '@prisma/client'; -import { MultiSelect, MultiSelectProps } from 'primereact/multiselect'; -import { getFlagEmoji } from '@/core/utils/flags'; -import { useMemo } from 'react'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; - -type Props = MultiSelectProps & { - selectedValues: string[]; - toggleValue: (value: string) => void; -}; - -const Option = (name: string) => { - const queryClient = useQueryClient(); - const country = queryClient.getQueryData(['countries'])?.find(country => country.name === name); - - return `${getFlagEmoji(country?.iso)} ${name}`; -}; - -export const MultiSelectCountriesFilter = ({ selectedValues, toggleValue, ...props }: Props) => { - const { data } = useQuery({ - queryFn: async () => { - const res = await fetch('/api/countries'); - - return await res.json(); - }, - queryKey: ['countries'] - }); - - const countries = useMemo(() => data?.map(({ iso, name }) => `${getFlagEmoji(iso)} ${name}`), [data]); - const selectedWithFlags = useMemo( - () => - selectedValues.map( - name => { - const country = data?.find(country => country.name === name); - - return `${getFlagEmoji(country?.iso)} ${name}`; - }, - [data] - ), - [data, selectedValues] - ); - - return ( - <> - - toggleValue(e.selectedOption.split(' ').slice(1).join(' '))} - options={countries ?? selectedValues} - value={selectedWithFlags} - {...props} - /> - - ); -}; diff --git a/src/components/filters/multi-select-currencies.tsx b/src/components/filters/multi-select-currencies.tsx deleted file mode 100644 index 12eeefb..0000000 --- a/src/components/filters/multi-select-currencies.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { MultiSelect, MultiSelectProps } from 'primereact/multiselect'; -import { useQuery } from '@tanstack/react-query'; - -export type Props = MultiSelectProps & { - selectedValues: string[]; - toggleValue: (value: string) => void; -}; - -export const MultiSelectCurrenciesFilter = ({ selectedValues, toggleValue, ...props }: Props) => { - const { data } = useQuery({ - queryFn: async () => { - const res = await fetch('/api/currencies'); - - return await res.json(); - }, - queryKey: ['currencies'] - }); - - return ( - <> - - toggleValue(e.selectedOption)} - options={data ?? selectedValues} - value={selectedValues} - {...props} - /> - - ); -}; diff --git a/src/components/filters/multi-select.tsx b/src/components/filters/multi-select.tsx new file mode 100644 index 0000000..8adc71b --- /dev/null +++ b/src/components/filters/multi-select.tsx @@ -0,0 +1,82 @@ +import { Button, DialogTrigger, ListBox, ListBoxItem, Popover } from 'react-aria-components'; +import CheckIcon from './icons/check.svg?react'; +import ChevronIcon from './icons/chevron.svg?react'; + +export type MultiSelectOption = { + value: T; + label: string; + count: number; + flag?: string | null; +}; + +export function MultiSelect({ + placeholder, + options, + value, + onChange, +}: { + placeholder: string; + options: MultiSelectOption[]; + value: T[]; + onChange: (val: T[] | null) => void; +}) { + const labelById = new Map(options.map((o) => [o.value, o.label])); + // Hide URL values that aren't in the current facet so the button label and the dropdown stay + // consistent. We don't proactively clean up the URL — any hidden values fall out the next time + // the user interacts with this field. + const visibleValue = value.filter((v) => labelById.has(v)); + const display = + visibleValue.length === 0 + ? placeholder + : visibleValue.length <= 2 + ? visibleValue.map((v) => labelById.get(v) ?? v).join(', ') + : `${visibleValue.length} selected`; + + return ( + + + + { + if (keys === 'all') return; + const arr = Array.from(keys) as T[]; + onChange(arr.length ? arr : null); + }} + aria-label={placeholder} + items={options} + className="outline-none py-1" + > + {(option) => ( + + + {option.flag !== undefined && option.flag !== null && ( + + )} + {option.label} + {option.count} + + )} + + + + ); +} diff --git a/src/components/filters/multi-toggle.tsx b/src/components/filters/multi-toggle.tsx deleted file mode 100644 index bb48ca2..0000000 --- a/src/components/filters/multi-toggle.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Checkbox } from 'primereact/checkbox'; - -type Props = { - baseName: string; - items: Array<{ - name: string; - set: (value?: boolean) => void; - value: boolean; - }>; -}; - -export const MultiToggleFilter = ({ baseName, items }: Props) => { - return ( - <> - -
- {items.map(({ name, set, value }) => ( -
- set(target.checked)} - value={name} - /> - -
- ))} -
- - ); -}; diff --git a/src/components/filters/section.tsx b/src/components/filters/section.tsx new file mode 100644 index 0000000..b8c451f --- /dev/null +++ b/src/components/filters/section.tsx @@ -0,0 +1,8 @@ +export function Section({ title, children }: { title: string; children: React.ReactNode }) { + return ( +
+

{title}

+ {children} +
+ ); +} diff --git a/src/components/filters/sidebar.tsx b/src/components/filters/sidebar.tsx new file mode 100644 index 0000000..fd4aff6 --- /dev/null +++ b/src/components/filters/sidebar.tsx @@ -0,0 +1,217 @@ +import { startTransition, use, useState } from 'react'; +import { Button, Link } from 'react-aria-components'; +import { fetchPieces } from '@/api'; +import { FaceValueSlider } from '@/components/filters/face-value-slider'; +import FiltersIcon from '@/components/filters/icons/filters.svg?react'; +import { InvertedGroup } from '@/components/filters/inverted-group'; +import { CATEGORY_LABELS, EDITION_LABELS, SHAPE_LABELS } from '@/components/filters/labels'; +import { MultiSelect } from '@/components/filters/multi-select'; +import { Section } from '@/components/filters/section'; +import { isAnyFilterActive, useFilters } from '@/components/filters/state'; +import { YearRangeSlider } from '@/components/filters/year-range-slider'; +import { CATEGORIES, type Category, EDITIONS } from '@/filter-types'; + +const TOP_BAR_HEIGHT = 'h-14'; // 56px — sets the offset for the drawer below +const navLinkClass = + 'caps text-mini px-2.5 h-8 flex items-center text-ink-dim outline-none transition-colors data-[hovered]:text-brass data-[pressed]:text-brass-deep data-[focus-visible]:text-brass'; + +export function FilterSidebar({ + other, + excludedCategories, +}: { + other: 'pile' | 'showcase'; + excludedCategories?: readonly Category[]; +}) { + const [isOpen, setIsOpen] = useState(false); + const { filters, setState } = useFilters(); + const { facets } = use(fetchPieces(filters)); + + const update = (changes: Parameters[0]) => { + startTransition(() => { + void setState(changes); + }); + }; + + const clearAll = () => { + update({ + countries: null, + currencies: null, + face_value: null, + categories: null, + editions: null, + shapes: null, + year_min: null, + year_max: null, + }); + }; + + const faceValueSteps = facets.faceValues.map((f) => f.value); + const yearMin = facets.yearRange?.min ?? null; + const yearMax = facets.yearRange?.max ?? null; + const yearRangeUsable = yearMin !== null && yearMax !== null && yearMin < yearMax; + + const categoryCounts = new Map(facets.categories.map((c) => [c.category, c.count])); + const editionCounts = new Map(facets.editions.map((e) => [e.edition, e.count])); + + // Preserve query string so filters survive cross-page nav. Read at render time — the host page + // re-renders on nuqs state change, so this stays current. + const search = typeof window !== 'undefined' ? window.location.search : ''; + const otherHref = `/${other}${search}`; + const otherLabel = other === 'pile' ? 'Pile' : 'Showcase'; + + return ( + <> + {/* Top bar — always visible, same width as the drawer. The drawer slides + in below it so the nav stays accessible whether the drawer is open + or closed. */} +
+
+ + home + + · + + {otherLabel.toLowerCase()} + +
+
+ +
+ + {/* Drawer — anchored below the top bar, slides in from the right. + Plain animated div (no react-aria Modal) so the canvas keeps full + pointer events even when the drawer is open. */} + + + ); +} diff --git a/src/components/filters/state.ts b/src/components/filters/state.ts new file mode 100644 index 0000000..3e2035b --- /dev/null +++ b/src/components/filters/state.ts @@ -0,0 +1,64 @@ +import { + parseAsArrayOf, + parseAsFloat, + parseAsInteger, + parseAsString, + parseAsStringLiteral, + useQueryStates, +} from 'nuqs'; +import { startTransition, useMemo } from 'react'; +import { CATEGORIES, EDITIONS, type PieceFilters, SHAPE_VARIANTS } from '@/filter-types'; + +// URL parameter shape: +// ?countries=portugal,espagne +// ?currencies=Euro,Peseta +// ?face_value=1 +// ?categories=coin,banknote +// ?editions=standard,special +// ?year_min=1990&year_max=2010 +const parsers = { + countries: parseAsArrayOf(parseAsString).withDefault([]), + currencies: parseAsArrayOf(parseAsString).withDefault([]), + face_value: parseAsFloat, + categories: parseAsArrayOf(parseAsStringLiteral(CATEGORIES)).withDefault([]), + editions: parseAsArrayOf(parseAsStringLiteral(EDITIONS)).withDefault([]), + shapes: parseAsArrayOf(parseAsStringLiteral(SHAPE_VARIANTS)).withDefault([]), + year_min: parseAsInteger, + year_max: parseAsInteger, +}; + +export function useFilters() { + // startTransition keeps the previous render alive while the new fetch resolves, so filter changes + // don't bounce through the outer Suspense fallback (which would unmount the Canvas and lose the + // WebGL context). + const [state, setState] = useQueryStates(parsers, { startTransition }); + + const filters: PieceFilters = useMemo( + () => ({ + countries: state.countries.length ? state.countries : undefined, + currencies: state.currencies.length ? state.currencies : undefined, + faceValue: state.face_value ?? undefined, + categories: state.categories.length ? state.categories : undefined, + editions: state.editions.length ? state.editions : undefined, + shapes: state.shapes.length ? state.shapes : undefined, + yearMin: state.year_min ?? undefined, + yearMax: state.year_max ?? undefined, + }), + [state], + ); + + return { filters, state, setState }; +} + +export function isAnyFilterActive(filters: PieceFilters): boolean { + return ( + !!filters.countries?.length || + !!filters.currencies?.length || + filters.faceValue !== undefined || + !!filters.categories?.length || + !!filters.editions?.length || + !!filters.shapes?.length || + filters.yearMin !== undefined || + filters.yearMax !== undefined + ); +} diff --git a/src/components/filters/year-range-slider.tsx b/src/components/filters/year-range-slider.tsx new file mode 100644 index 0000000..1b30fcf --- /dev/null +++ b/src/components/filters/year-range-slider.tsx @@ -0,0 +1,75 @@ +import { + Button, + Label, + Slider, + SliderOutput, + SliderThumb, + SliderTrack, +} from 'react-aria-components'; + +export function YearRangeSlider({ + bounds, + value, + active, + onChange, +}: { + bounds: [number, number]; + value: [number, number]; + active: boolean; + onChange: (min: number | null, max: number | null) => void; +}) { + return ( + { + const [min, max] = v as [number, number]; + onChange(min === bounds[0] ? null : min, max === bounds[1] ? null : max); + }} + minValue={bounds[0]} + maxValue={bounds[1]} + step={1} + className="flex flex-col gap-2" + > +
+ + {active && ( + + )} +
+ + {({ state }) => ( + <> +
+
+ + + + )} + + +
+ {bounds[0]} + {bounds[1]} +
+ + ); +} diff --git a/src/components/hail/coin-mesh.tsx b/src/components/hail/coin-mesh.tsx deleted file mode 100644 index f70834e..0000000 --- a/src/components/hail/coin-mesh.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { CoinInstance } from '@/components/coin'; -import { Mesh } from 'three'; -import { MeshProps, useFrame } from '@react-three/fiber'; -import { NumistaType } from '@/types/numista'; -import { Suspense, useMemo, useRef } from 'react'; - -export const CoinMesh = ({ spawningWidth, ...props }: NumistaType & { spawningWidth: number }) => { - const meshRef = useRef(null!); - const [meshProps, deltaMults] = useMemo( - () => [ - { - position: [ - 4 * spawningWidth * (Math.random() - 0.5), - 4 * (Math.random() - 0.5) + 20, - 4 * (Math.random() - 0.5) - 16 - ], - rotation: [2 * Math.PI * Math.random(), 2 * Math.PI * Math.random(), 2 * Math.PI * Math.random()] - } as MeshProps, - { - position: [2 * (Math.random() - 0.5), -4 * (Math.random() + 0.5), 2 * (Math.random() - 0.5)], - rotation: [2 * Math.random() - 1, 2 * Math.random() - 1, 2 * Math.random() - 1] - } - ], - // eslint-disable-next-line react-hooks/exhaustive-deps - [props.id] - ); - - useFrame((_, delta) => { - meshRef.current.rotation.x += delta * deltaMults.rotation[0]; - meshRef.current.rotation.y += delta * deltaMults.rotation[1]; - meshRef.current.rotation.z += delta * deltaMults.rotation[2]; - meshRef.current.position.x += delta * deltaMults.position[0]; - meshRef.current.position.y += delta * deltaMults.position[1]; - meshRef.current.position.z += delta * deltaMults.position[2]; - }); - - return ( - - - - - - ); -}; diff --git a/src/components/hail/index.module.css b/src/components/hail/index.module.css deleted file mode 100644 index 5fc577b..0000000 --- a/src/components/hail/index.module.css +++ /dev/null @@ -1,8 +0,0 @@ -.wrapper { - position: absolute; - inset: 0; -} - -.canvas { - height: 100%; -} diff --git a/src/components/hail/index.tsx b/src/components/hail/index.tsx index 0f36b8d..0529c52 100644 --- a/src/components/hail/index.tsx +++ b/src/components/hail/index.tsx @@ -1,53 +1,50 @@ -import { Canvas } from '@react-three/fiber'; -import { CoinMesh } from './coin-mesh'; -import { NumistaType } from '@/types/numista'; -import { useEffect, useState } from 'react'; -import { useQuery } from '@tanstack/react-query'; -import styles from './index.module.css'; +import { Canvas, useThree } from '@react-three/fiber'; +import { useMemo } from 'react'; +import { HailSlot, SPAWN_Y } from '@/components/hail/slot'; +import type { PieceWithIssuer } from '@/db/types'; -const totalVisible = 8; +const NUM_SLOTS = 10; -export const Hail = () => { - const [coins, setCoins] = useState(Array.from({ length: totalVisible })); - const [activeIndex, setActiveIndex] = useState(0); - const [spawningWidth, setSpawningWidth] = useState(0); +function HailScene({ pool }: { pool: PieceWithIssuer[] }) { + const { camera, size } = useThree(); - useEffect(() => { - const updateWidth = () => { - const verticalFOV = 75; - const aspect = window.innerWidth / window.innerHeight; - const verticalFOVRadians = verticalFOV * (Math.PI / 180); - const horizontalFOV = 2 * Math.atan(aspect * Math.tan(verticalFOVRadians / 2)); - setSpawningWidth(8 * Math.tan(horizontalFOV / 2)); - }; + // Compute viewport width at z=0 from camera params. + const spawnWidth = useMemo(() => { + const aspect = size.width / size.height; + const fov = 'fov' in camera ? (camera.fov as number) : 50; + const distance = camera.position.length(); + const visibleHeight = 2 * distance * Math.tan((fov * Math.PI) / 360); + return visibleHeight * aspect * 1.1; + }, [camera, size]); - updateWidth(); - - window.addEventListener('resize', updateWidth); - - return () => window.removeEventListener('resize', updateWidth); - }, []); - - useQuery({ - queryFn: async () => { - const res = await fetch('/api/types/random'); - const coin = await res.json(); - setCoins(coins => [...coins.slice(0, activeIndex), coin, ...coins.slice(activeIndex + 1)]); - setActiveIndex(index => (index + 1) % totalVisible); - - return coin; - }, - queryKey: ['types/random'], - refetchInterval: 2000 - }); + // Stagger initial Y above the camera frustum so coins enter from the top, never mid-screen. + // Higher slots take longer to fall in — that's intentional, gives the build-up a sense of inertia + // rather than a wall of coins on first paint. + const initialYs = useMemo( + () => Array.from({ length: NUM_SLOTS }, (_, i) => SPAWN_Y + i * 0.05), + [], + ); return ( -
- - - - {coins.map((coin, index) => coin && )} + <> + + + + {initialYs.map((y) => ( + + ))} + + ); +} + +export function Hail({ pool }: { pool: PieceWithIssuer[] }) { + if (!pool.length) return null; + + return ( +
+ +
); -}; +} diff --git a/src/components/hail/slot.tsx b/src/components/hail/slot.tsx new file mode 100644 index 0000000..f516736 --- /dev/null +++ b/src/components/hail/slot.tsx @@ -0,0 +1,76 @@ +import { useFrame } from '@react-three/fiber'; +import { Suspense, useEffect, useRef, useState } from 'react'; +import type { Group } from 'three'; +import { pickCoin, rand } from '@/components/hail/utils'; +import { Coin } from '@/components/piece/coin'; +import type { PieceWithIssuer } from '@/db/types'; + +const FALL_SPEED_MIN = 0.03; // m/sec +const FALL_SPEED_MAX = 0.08; +const TUMBLE_SPEED = 1.4; // rad/sec, max magnitude (unitless) + +export const SPAWN_Y = 0.22; +const DESPAWN_Y = -0.22; + +export function HailSlot({ + pool, + spawnWidth, + initialY, +}: { + pool: PieceWithIssuer[]; + spawnWidth: number; + initialY: number; +}) { + const ref = useRef(null); + const [coin, setCoin] = useState(() => pickCoin(pool)); + const mountedRef = useRef(false); + + const motion = useRef({ + fallSpeed: rand(FALL_SPEED_MIN, FALL_SPEED_MAX), + tx: rand(-TUMBLE_SPEED, TUMBLE_SPEED), + ty: rand(-TUMBLE_SPEED, TUMBLE_SPEED), + tz: rand(-TUMBLE_SPEED, TUMBLE_SPEED), + }); + + // coin.id is the trigger for respawn positioning. The effect body branches on mountedRef rather + // than reading the id directly, but it must re-run when the slot's coin changes. + // biome-ignore lint/correctness/useExhaustiveDependencies: see comment above + useEffect(() => { + if (!ref.current) return; + // First mount uses the staggered initialY (already above the camera frustum); every respawn + // after that uses SPAWN_Y + a small jitter so coins never appear in view. + const y = mountedRef.current ? SPAWN_Y + rand(0, 0.03) : initialY; + ref.current.position.set(rand(-spawnWidth / 2, spawnWidth / 2), y, rand(-0.04, 0)); + ref.current.rotation.set(rand(0, Math.PI * 2), rand(0, Math.PI * 2), rand(0, Math.PI * 2)); + mountedRef.current = true; + }, [coin.id, initialY, spawnWidth]); + + useFrame((_, delta) => { + const g = ref.current; + if (!g) return; + + g.position.y -= motion.current.fallSpeed * delta; + g.rotation.x += motion.current.tx * delta; + g.rotation.y += motion.current.ty * delta; + g.rotation.z += motion.current.tz * delta; + + if (g.position.y < DESPAWN_Y) { + motion.current = { + fallSpeed: rand(FALL_SPEED_MIN, FALL_SPEED_MAX), + tx: rand(-TUMBLE_SPEED, TUMBLE_SPEED), + ty: rand(-TUMBLE_SPEED, TUMBLE_SPEED), + tz: rand(-TUMBLE_SPEED, TUMBLE_SPEED), + }; + // Position will be reset by the useEffect when coin changes. + setCoin(pickCoin(pool)); + } + }); + + return ( + + + + + + ); +} diff --git a/src/components/hail/utils.ts b/src/components/hail/utils.ts new file mode 100644 index 0000000..ee2d412 --- /dev/null +++ b/src/components/hail/utils.ts @@ -0,0 +1,15 @@ +import type { PieceWithIssuer } from '@/db/types'; + +export function rand(min: number, max: number): number { + return min + Math.random() * (max - min); +} + +export function pickCoin(pool: PieceWithIssuer[]): PieceWithIssuer { + const total = pool.reduce((sum, c) => sum + c.count, 0); + let r = Math.random() * total; + for (const c of pool) { + r -= c.count; + if (r < 0) return c; + } + return pool[pool.length - 1]; +} diff --git a/src/components/header/index.tsx b/src/components/header/index.tsx deleted file mode 100644 index 0d72fb7..0000000 --- a/src/components/header/index.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { Button } from 'primereact/button'; -import { useRouter } from 'next/router'; -import Link from 'next/link'; - -type Props = { - onOpenDrawer?: () => void; - route: 'pile' | 'showcase'; -}; - -export const Header = ({ onOpenDrawer, route }: Props) => { - const router = useRouter(); - const searchParams = router.asPath.split('?')[1] ?? ''; - - return ( -
- - - -
- {route !== 'pile' && ( - - {'Pile'} - - )} - {route !== 'showcase' && ( - - {'Showcase'} - - )} -
-
- ); -}; diff --git a/src/components/loading.tsx b/src/components/loading.tsx new file mode 100644 index 0000000..57a7bd0 --- /dev/null +++ b/src/components/loading.tsx @@ -0,0 +1,7 @@ +export function Loading() { + return ( +
+ loading… +
+ ); +} diff --git a/src/components/piece/banknote/geometry.ts b/src/components/piece/banknote/geometry.ts new file mode 100644 index 0000000..b456225 --- /dev/null +++ b/src/components/piece/banknote/geometry.ts @@ -0,0 +1,163 @@ +import * as THREE from 'three'; + +// V^^ fold: creases at 0.25, 0.5, 0.75 of the long axis, with bend angles [+θ, -θ, -θ] (valley, +// peak, peak). Working out the cumulative slope so the two endpoints land at the same height gives +// heights [0, 0, +h, +h, 0] — flat panel, then a plateau over the middle-right two panels. θ is +// small so the displacement reads as "slightly folded" rather than crumpled. +const CREASE_BENDS = [+0.12, -0.12, -0.12] as const; +const CREASE_FRACTIONS = [0.25, 0.5, 0.75] as const; + +// Side strips have no atlas presence — UVs collapse to a single point and the side material is a +// flat dominant-colour fill (set by the caller). +const SIDE_UV: [number, number] = [0.5, 0.5]; + +// Material group indices on the resulting BufferGeometry. The caller mounts the mesh with +// `material={[faceMaterial, sideMaterial]}`. +export const BANKNOTE_GROUP_FACES = 0; +export const BANKNOTE_GROUP_SIDES = 1; + +type Vec3 = [number, number, number]; + +// Heights at the 5 control fractions [0, 0.25, 0.5, 0.75, 1] of the long axis. Math worked out in +// the file-level comment. +function foldProfile(longAxisLength: number): number[] { + const slopes = [0, 0, 0, 0]; + for (let i = 0; i < CREASE_BENDS.length; i++) { + slopes[i + 1] = slopes[i] + CREASE_BENDS[i]; + } + const xs = [0, ...CREASE_FRACTIONS, 1].map((f) => f * longAxisLength); + const ys = [0]; + for (let i = 0; i < 4; i++) { + ys.push(ys[i] + slopes[i] * (xs[i + 1] - xs[i])); + } + return ys; +} + +// Builds a thin-box geometry for a folded banknote. +// +// width, height: Numista dims (long/short of the rectangle), scene units thickness: face-to-face +// thickness +// +// Local frame matches the coin (cylinder) convention so it slots into the same PieceStage rotation: +// faces perpendicular to local Y (obverse on +Y, reverse on −Y), long axis along local X, short +// axis along local Z. Two material groups (faces / sides) — see BANKNOTE_GROUP_* exports. +export function buildBanknoteGeometry( + width: number, + height: number, + thickness: number, +): THREE.BufferGeometry { + const longerIsWidth = width >= height; + const longLen = longerIsWidth ? width : height; + const shortLen = longerIsWidth ? height : width; + + const yProfile = foldProfile(longLen); + const xs = [0, ...CREASE_FRACTIONS, 1].map((f) => f * longLen - longLen / 2); + const zs: [number, number] = [-shortLen / 2, shortLen / 2]; + + const positions: number[] = []; + const normals: number[] = []; + const uvs: number[] = []; + const indices: number[] = []; + + // Vertex layout: obverse face = +Y side, indices 0..9 (5 cols × 2 rows). Reverse face = −Y side, + // indices 10..19. Side-strip vertices are duplicated separately so they get their own + // normals/UVs. + const obvIdx = (col: number, row: number) => col * 2 + row; + const revIdx = (col: number, row: number) => 10 + col * 2 + row; + + // Obverse — top half of atlas (V 0..0.5). + for (let col = 0; col < 5; col++) { + for (let row = 0; row < 2; row++) { + positions.push(xs[col], yProfile[col] + thickness / 2, zs[row]); + normals.push(0, 1, 0); + uvs.push(1 - col / 4, row * 0.5); + } + } + // Reverse — bottom half of atlas (V 0.5..1). + for (let col = 0; col < 5; col++) { + for (let row = 0; row < 2; row++) { + positions.push(xs[col], yProfile[col] - thickness / 2, zs[row]); + normals.push(0, -1, 0); + uvs.push(col / 4, 0.5 + row * 0.5); + } + } + + // Faces group: triangulate obverse + reverse face quads. With a/b/c/d laid out at (-x,-z), + // (+x,-z), (+x,+z), (-x,+z), the CCW order viewed from +Y is a→d→c→b. (Earlier I had a→b→c which + // is CW from +Y — geometric normal ended up −Y while vertex normals said +Y, so RectAreaLight lit + // the wrong side.) + const facesIndexStart = indices.length; + for (let col = 0; col < 4; col++) { + const a = obvIdx(col, 0); + const b = obvIdx(col + 1, 0); + const c = obvIdx(col + 1, 1); + const d = obvIdx(col, 1); + indices.push(a, d, c, a, c, b); + } + for (let col = 0; col < 4; col++) { + const a = revIdx(col, 0); + const b = revIdx(col + 1, 0); + const c = revIdx(col + 1, 1); + const d = revIdx(col, 1); + indices.push(a, b, c, a, c, d); + } + const facesIndexEnd = indices.length; + + // Side strips: duplicate the face vertices into fresh slots so each strand can carry its own + // normal and the collapsed side UV. + type StrandSpec = { obvPair: [number, number]; revPair: [number, number]; normal: Vec3 }; + const strands: StrandSpec[] = []; + // Near / far long-axis strands (z = zs[0] and zs[1]): 4 segments each. + for (const row of [0, 1] as const) { + for (let col = 0; col < 4; col++) { + strands.push({ + obvPair: [obvIdx(col, row), obvIdx(col + 1, row)], + revPair: [revIdx(col, row), revIdx(col + 1, row)], + normal: row === 0 ? [0, 0, -1] : [0, 0, 1], + }); + } + } + // Left / right short-axis strands (x = xs[0] and xs[4]): 1 segment each. + for (const col of [0, 4] as const) { + strands.push({ + obvPair: [obvIdx(col, 0), obvIdx(col, 1)], + revPair: [revIdx(col, 0), revIdx(col, 1)], + normal: col === 0 ? [-1, 0, 0] : [1, 0, 0], + }); + } + + for (const s of strands) { + // Quad winding: obv-a → obv-b → rev-b → rev-a, so the outward face matches the strand normal + // under both long-axis and short-axis strand orientations. + const verts = [s.obvPair[0], s.obvPair[1], s.revPair[1], s.revPair[0]]; + const baseIdx = positions.length / 3; + for (const v of verts) { + positions.push(positions[v * 3], positions[v * 3 + 1], positions[v * 3 + 2]); + normals.push(...s.normal); + uvs.push(...SIDE_UV); + } + indices.push(baseIdx, baseIdx + 1, baseIdx + 2, baseIdx, baseIdx + 2, baseIdx + 3); + } + const sidesIndexEnd = indices.length; + + const geometry = new THREE.BufferGeometry(); + geometry.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3)); + geometry.setAttribute('normal', new THREE.Float32BufferAttribute(normals, 3)); + geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2)); + geometry.setIndex(indices); + + geometry.addGroup(facesIndexStart, facesIndexEnd - facesIndexStart, BANKNOTE_GROUP_FACES); + geometry.addGroup(facesIndexEnd, sidesIndexEnd - facesIndexEnd, BANKNOTE_GROUP_SIDES); + + // Portrait banknotes (height > width): rotate around the face normal (Y) so the long axis + // (originally local X) lands on local Z. + if (!longerIsWidth) { + geometry.rotateY(Math.PI / 2); + } + + // Flip upright. + geometry.rotateY(Math.PI); + + geometry.computeBoundingSphere(); + return geometry; +} diff --git a/src/components/piece/banknote/index.tsx b/src/components/piece/banknote/index.tsx new file mode 100644 index 0000000..921bfee --- /dev/null +++ b/src/components/piece/banknote/index.tsx @@ -0,0 +1,72 @@ +import { useTexture } from '@react-three/drei'; +import { useMemo } from 'react'; +import * as THREE from 'three'; +import type { AtlasSize } from '@/atlas-layout'; +import { buildBanknoteGeometry } from '@/components/piece/banknote/geometry'; +import type { Piece as PieceRow } from '@/db/types'; + +// Numista doesn't carry a thickness for banknotes. Dummy value, visible edge-on, invisible head-on. +// Mm in pile scene, m in showcase — caller multiplies if needed. +const BANKNOTE_THICKNESS_MM = 0.12; + +// Paper-ish PBR profile so banknotes don't pick up coin-style speculars. `color` tints the texture: +// at 1.0 the lights (calibrated for the coins' shiny metalness=1) overexpose the diffuse-only +// banknote; ~0.5 brings it back into the same visual range without touching the rig. +const BANKNOTE_FACE_TINT = 0.5; + +// Banknotes at true scale dwarf the showcase frame — a 154mm note is ~6× a typical coin's diameter. +// Shrink so they read comparable. +const SHOWCASE_BANKNOTE_SCALE = 1 / 4; + +type Props = { + banknote: PieceRow; + atlas: AtlasSize; +}; + +function useBanknoteFaceMaterial(banknote: PieceRow, atlas: AtlasSize): THREE.MeshStandardMaterial { + const texture = useTexture(`/atlases/${banknote.id}-${atlas}.webp`); + return useMemo(() => { + texture.colorSpace = THREE.SRGBColorSpace; + texture.wrapS = THREE.ClampToEdgeWrapping; + texture.wrapT = THREE.ClampToEdgeWrapping; + texture.needsUpdate = true; + return new THREE.MeshStandardMaterial({ + map: texture, + color: new THREE.Color(BANKNOTE_FACE_TINT, BANKNOTE_FACE_TINT, BANKNOTE_FACE_TINT), + metalness: 0, + roughness: 0.85, + }); + }, [texture]); +} + +// Banknote side material: flat dominant colour, sourced from the DB row. +function useBanknoteSideMaterial(banknote: PieceRow): THREE.MeshStandardMaterial { + return useMemo( + () => + new THREE.MeshStandardMaterial({ + color: new THREE.Color(banknote.color_hex), + metalness: 0, + roughness: 0.9, + }), + [banknote.color_hex], + ); +} + +export function Banknote({ banknote, atlas }: Props) { + // Scene unit = 1 metre in showcase; Numista dims are mm, so /1000. + const widthM = ((banknote.width ?? 150) / 1000) * SHOWCASE_BANKNOTE_SCALE; + const heightM = ((banknote.height ?? 70) / 1000) * SHOWCASE_BANKNOTE_SCALE; + const thicknessM = (BANKNOTE_THICKNESS_MM / 1000) * SHOWCASE_BANKNOTE_SCALE; + + const faceMaterial = useBanknoteFaceMaterial(banknote, atlas); + const sideMaterial = useBanknoteSideMaterial(banknote); + + const geometry = useMemo( + () => buildBanknoteGeometry(widthM, heightM, thicknessM), + [widthM, heightM, thicknessM], + ); + + return ( + + ); +} diff --git a/src/components/piece/coin/extrude.ts b/src/components/piece/coin/extrude.ts new file mode 100644 index 0000000..0ca3d29 --- /dev/null +++ b/src/components/piece/coin/extrude.ts @@ -0,0 +1,229 @@ +import * as THREE from 'three'; +import { ATLAS_LAYOUT, type AtlasSize } from '@/atlas-layout'; + +export type ExtrudeParams = { + // Outer outline in the X–Z plane, CCW viewed from above. + outer: THREE.Vector2[]; + // Optional concentric inner outline (a hole). Must have the SAME length as `outer` and be CCW + // (the geometry builder reverses it where needed). + inner?: THREE.Vector2[]; + thickness: number; + // Half-diameter used to normalise cap UVs into the unit disc inscribed in the [0,1]² UV square. + // Pass the coin's radius (the outer outline's max distance from origin). + uvRadius: number; + atlas: AtlasSize; +}; + +// Builds an extruded coin geometry matching `buildCoinGeometry`'s UV conventions on a per-shape +// basis (so the same atlas texture renders correctly on polygon prisms, holed annuli, flower +// scalloped extrusions, and the rest without per-shape remap logic). +// +// Layout (cylinder convention, axis along Y): +// - Top cap at y = +halfH, normal +Y, samples the obverse tile. +// - Bottom cap at y = −halfH, normal −Y, samples the reverse tile. +// - Side wall connects them; samples the edge strip. +// - If inner outline is provided, an inner side wall (normal pointing toward the central axis) is +// added so the hole looks like a hollow tube rather than a flat ring. +export function buildExtrudedCoinGeometry(params: ExtrudeParams): THREE.BufferGeometry { + const { outer, inner, thickness, uvRadius, atlas } = params; + const { tile, height } = ATLAS_LAYOUT[atlas]; + const tileV = tile / height; + const stripV = 1 - tileV; + const halfH = thickness / 2; + const N = outer.length; + + if (inner && inner.length !== N) { + throw new Error( + `extrude: inner outline must have same length as outer (got ${inner.length} vs ${N})`, + ); + } + + const positions: number[] = []; + const uvs: number[] = []; + const normals: number[] = []; + const indices: number[] = []; + + const pushVertex = ( + x: number, + y: number, + z: number, + u: number, + v: number, + nx: number, + ny: number, + nz: number, + ): number => { + const idx = positions.length / 3; + positions.push(x, y, z); + uvs.push(u, v); + normals.push(nx, ny, nz); + return idx; + }; + + // Cap UV. Same recipe as `buildCoinGeometry`: + // 1. Normalise the cap point (x, z) into the unit disc inscribed in [0,1]². + // 2. For the bottom cap, V-mirror around 0.5 — this is what three.js's CylinderGeometry does + // internally for its bottom cap, so the reverse picture reads correctly when viewed from + // below. + // 3. Rotate 90° within the unit square: (u, v) → (v, 1 − u). Lines up picture-up with the cap's + // local −Z direction (= world +Y after the scene's [π/2, 0, 0] rotation). + // 4. Map into the obverse half (U ∈ [0, 0.5]) or reverse half (U ∈ [0.5, 1]) of the atlas tile + // band, and into V ∈ [stripV, 1]. + // CylinderGeometry's cap UVs use (cos θ · 0.5 + 0.5, sin θ · 0.5 + 0.5), where its vertex + // positions are (R sin θ, halfH, R cos θ). That means the default UV.x is driven by the vertex's + // Z coordinate and UV.y by its X coordinate — the opposite of the naive "U = x, V = z". Match the + // cylinder convention exactly so the same atlas reads correctly on both shapes; without this the + // procedural caps render rotated 90° in opposite directions on the two faces, looking like a + // mirror across them. + const capUV = (x: number, z: number, isObverse: boolean): [number, number] => { + const u = z / (2 * uvRadius) + 0.5; + let v = x / (2 * uvRadius) + 0.5; + if (!isObverse) v = 1 - v; + const uRot = v; + const vRot = 1 - u; + const tileU = isObverse ? uRot * 0.5 : 0.5 + uRot * 0.5; + const tileVOut = stripV + vRot * tileV; + return [tileU, tileVOut]; + }; + + // Side-wall UV: U is the perimeter fraction (passed in, computed by the caller because the seam + // needs a doubled vertex with U=0 vs U=1), and V is bottom-or-top of the edge strip. + const sideUV = (perimeterFraction: number, isTop: boolean): [number, number] => [ + perimeterFraction, + isTop ? stripV : 0, + ]; + + // Outward 2D normal at outline vertex i, computed from the chord direction of the two adjacent + // edges. Position-normalised would be wrong for non-radial shapes (diamond corners, flower lobes + // between scallops). + const outlineNormal = (outline: THREE.Vector2[], i: number): [number, number] => { + const len = outline.length; + const prev = outline[(i - 1 + len) % len]; + const next = outline[(i + 1) % len]; + // Tangent: from previous to next. Outward normal for a CCW-from-above polygon in the X–Z plane + // (with Y up) is (tangent.z, -tangent.x). + const tx = next.x - prev.x; + const tz = next.y - prev.y; + const nx = tz; + const nz = -tx; + const nLen = Math.hypot(nx, nz) || 1; + return [nx / nLen, nz / nLen]; + }; + + // ===== Top cap (obverse, y = +halfH) ===== + const topStart = positions.length / 3; + if (!inner) { + // Fan from centre. + pushVertex(0, halfH, 0, ...capUV(0, 0, true), 0, 1, 0); + for (let i = 0; i < N; i++) { + const p = outer[i]; + pushVertex(p.x, halfH, p.y, ...capUV(p.x, p.y, true), 0, 1, 0); + } + for (let i = 0; i < N; i++) { + indices.push(topStart, topStart + 1 + i, topStart + 1 + ((i + 1) % N)); + } + } else { + // Strip between inner and outer ring (annulus). + for (let i = 0; i < N; i++) { + const op = outer[i]; + const ip = inner[i]; + pushVertex(op.x, halfH, op.y, ...capUV(op.x, op.y, true), 0, 1, 0); + pushVertex(ip.x, halfH, ip.y, ...capUV(ip.x, ip.y, true), 0, 1, 0); + } + for (let i = 0; i < N; i++) { + const o0 = topStart + 2 * i; + const i0 = topStart + 2 * i + 1; + const o1 = topStart + 2 * ((i + 1) % N); + const i1 = topStart + 2 * ((i + 1) % N) + 1; + // Two triangles per segment, winding CCW from above so normals point +Y. + indices.push(o0, o1, i1); + indices.push(o0, i1, i0); + } + } + + // ===== Bottom cap (reverse, y = −halfH) ===== + const botStart = positions.length / 3; + if (!inner) { + pushVertex(0, -halfH, 0, ...capUV(0, 0, false), 0, -1, 0); + for (let i = 0; i < N; i++) { + const p = outer[i]; + pushVertex(p.x, -halfH, p.y, ...capUV(p.x, p.y, false), 0, -1, 0); + } + for (let i = 0; i < N; i++) { + // Reverse winding so normals point −Y. + indices.push(botStart, botStart + 1 + ((i + 1) % N), botStart + 1 + i); + } + } else { + for (let i = 0; i < N; i++) { + const op = outer[i]; + const ip = inner[i]; + pushVertex(op.x, -halfH, op.y, ...capUV(op.x, op.y, false), 0, -1, 0); + pushVertex(ip.x, -halfH, ip.y, ...capUV(ip.x, ip.y, false), 0, -1, 0); + } + for (let i = 0; i < N; i++) { + const o0 = botStart + 2 * i; + const i0 = botStart + 2 * i + 1; + const o1 = botStart + 2 * ((i + 1) % N); + const i1 = botStart + 2 * ((i + 1) % N) + 1; + // Reverse winding for −Y normal. + indices.push(o0, i1, o1); + indices.push(o0, i0, i1); + } + } + + // ===== Outer side wall ===== Build with N+1 vertex pairs so the seam (last segment) closes with + // U=1 adjacent to U=0 at the same world position. Without the doubled seam vertex, the texture + // would interpolate backwards across the wrap. + const sideStart = positions.length / 3; + for (let i = 0; i <= N; i++) { + const p = outer[i % N]; + const [nx, nz] = outlineNormal(outer, i % N); + const t = i / N; + pushVertex(p.x, halfH, p.y, ...sideUV(t, true), nx, 0, nz); + pushVertex(p.x, -halfH, p.y, ...sideUV(t, false), nx, 0, nz); + } + for (let i = 0; i < N; i++) { + const top0 = sideStart + 2 * i; + const bot0 = sideStart + 2 * i + 1; + const top1 = sideStart + 2 * (i + 1); + const bot1 = sideStart + 2 * (i + 1) + 1; + // CCW outline from above → outward face winding is (top0, bot0, bot1) / (top0, bot1, top1) so + // the right-hand normal points outward. + indices.push(top0, bot0, bot1); + indices.push(top0, bot1, top1); + } + + // ===== Inner side wall (if there's a hole) ===== The hole's wall faces inward (towards the + // central axis), so we flip the outline normal and reverse winding. UVs reuse the edge strip — + // the hole wall isn't normally visible in a settled pile or showcase view, but it shouldn't be + // untextured either. + if (inner) { + const innerStart = positions.length / 3; + for (let i = 0; i <= N; i++) { + const p = inner[i % N]; + // Inner wall normals point INWARD relative to the coin's outline, i.e., away from the hole's + // centre into the coin material — which is the opposite of the inner outline's outward + // (toward origin) tangent normal. So we negate the outlineNormal. + const [nx, nz] = outlineNormal(inner, i % N); + const t = i / N; + pushVertex(p.x, halfH, p.y, ...sideUV(t, true), -nx, 0, -nz); + pushVertex(p.x, -halfH, p.y, ...sideUV(t, false), -nx, 0, -nz); + } + for (let i = 0; i < N; i++) { + const top0 = innerStart + 2 * i; + const bot0 = innerStart + 2 * i + 1; + const top1 = innerStart + 2 * (i + 1); + const bot1 = innerStart + 2 * (i + 1) + 1; + // Reverse winding (compared to outer wall) so inward face is the front. + indices.push(top0, bot1, bot0); + indices.push(top0, top1, bot1); + } + } + + const geom = new THREE.BufferGeometry(); + geom.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3)); + geom.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2)); + geom.setAttribute('normal', new THREE.Float32BufferAttribute(normals, 3)); + geom.setIndex(indices); + return geom; +} diff --git a/src/components/piece/coin/geometry.ts b/src/components/piece/coin/geometry.ts new file mode 100644 index 0000000..f61d8dc --- /dev/null +++ b/src/components/piece/coin/geometry.ts @@ -0,0 +1,60 @@ +import * as THREE from 'three'; +import { ATLAS_LAYOUT, type AtlasSize } from '@/atlas-layout'; + +const DEFAULT_ROUND_SEGMENTS = 32; + +export function buildCoinGeometry( + radius: number, + thickness: number, + atlas: AtlasSize, + radialSegments: number = DEFAULT_ROUND_SEGMENTS, +): THREE.CylinderGeometry { + // Odd-sided prisms render flat-side-down by default if we don't offset; even-sided ones look + // natural at thetaStart=0. Matches the old project. + const thetaStart = radialSegments % 2 === 0 ? 0 : Math.PI / 2; + const geometry = new THREE.CylinderGeometry( + radius, + radius, + thickness, + radialSegments, + 1, + false, + thetaStart, + ); + const { tile, height } = ATLAS_LAYOUT[atlas]; + const tileV = tile / height; + const stripV = 1 - tileV; + + // CylinderGeometry vertex order: + // side: (radialSegments + 1) * 2 top cap: radialSegments (fan centers) + (radialSegments + 1) + // (ring) bottom cap: same + const sideCount = (radialSegments + 1) * 2; + const capCount = 2 * radialSegments + 1; + + const uv = geometry.attributes.uv; + const arr = uv.array as Float32Array; + + for (let i = 0; i < sideCount; i++) { + arr[i * 2 + 1] = arr[i * 2 + 1] * stripV; + } + + // Cap UVs rotated 90° within the tile so picture-up lands on local -Z (= world +Y once the scene + // rotates the cylinder to face the camera). + for (let i = sideCount; i < sideCount + capCount; i++) { + const u = arr[i * 2]; + const v = arr[i * 2 + 1]; + arr[i * 2] = v * 0.5; + arr[i * 2 + 1] = stripV + (1 - u) * tileV; + } + + for (let i = sideCount + capCount; i < sideCount + 2 * capCount; i++) { + const u = arr[i * 2]; + const v = arr[i * 2 + 1]; + arr[i * 2] = 0.5 + v * 0.5; + arr[i * 2 + 1] = stripV + (1 - u) * tileV; + } + + uv.needsUpdate = true; + geometry.clearGroups(); + return geometry; +} diff --git a/src/components/piece/coin/index.tsx b/src/components/piece/coin/index.tsx new file mode 100644 index 0000000..124afd8 --- /dev/null +++ b/src/components/piece/coin/index.tsx @@ -0,0 +1,75 @@ +import { useTexture } from '@react-three/drei'; +import { useMemo } from 'react'; +import * as THREE from 'three'; +import type { AtlasSize } from '@/atlas-layout'; +import { buildExtrudedCoinGeometry } from '@/components/piece/coin/extrude'; +import { buildCoinGeometry } from '@/components/piece/coin/geometry'; +import { buildShapeFromVariant, type SpecialShape } from '@/components/piece/coin/shape-variants'; +import type { Piece as PieceRow } from '@/db/types'; + +type Props = { + coin: PieceRow; + atlas: AtlasSize; +}; + +// Scene unit = 1 metre. Numista values are in mm, so divide by 1000 at the boundary. +function coinDimensions(coin: PieceRow): { radius: number; thickness: number } { + return { + radius: (coin.diameter ?? 24) / 2 / 1000, + thickness: (coin.thickness ?? 2) / 1000, + }; +} + +export function useCoinMaterial(coin: PieceRow, atlas: AtlasSize): THREE.MeshStandardMaterial { + const texture = useTexture(`/atlases/${coin.id}-${atlas}.webp`); + + return useMemo(() => { + texture.colorSpace = THREE.SRGBColorSpace; + texture.wrapS = THREE.RepeatWrapping; + texture.wrapT = THREE.ClampToEdgeWrapping; + texture.needsUpdate = true; + return new THREE.MeshStandardMaterial({ map: texture, metalness: 1, roughness: 0.45 }); + }, [texture]); +} + +function NormalCoin({ coin, atlas }: Props) { + const { radius, thickness } = coinDimensions(coin); + const material = useCoinMaterial(coin, atlas); + const geometry = useMemo( + () => buildCoinGeometry(radius, thickness, atlas, 32), + [radius, thickness, atlas], + ); + return ; +} + +function SpecialCoin({ coin, atlas, shape }: Props & { shape: SpecialShape }) { + const { radius, thickness } = coinDimensions(coin); + const material = useCoinMaterial(coin, atlas); + const geometry = useMemo( + () => + buildExtrudedCoinGeometry({ + outer: shape.outer, + inner: shape.inner, + thickness, + uvRadius: radius, + atlas, + }), + [shape, thickness, radius, atlas], + ); + return ; +} + +// Procedural-extrude path (SpecialCoin) for variants with outlines; cylinder path (NormalCoin) for +// round / irregular. +export function Coin({ coin, atlas }: Props) { + const { radius } = coinDimensions(coin); + const shape = useMemo( + () => buildShapeFromVariant(coin.shape_variant, coin.shape_params, radius), + [coin.shape_variant, coin.shape_params, radius], + ); + return shape ? ( + + ) : ( + + ); +} diff --git a/src/components/piece/coin/outlines.ts b/src/components/piece/coin/outlines.ts new file mode 100644 index 0000000..3d81ee0 --- /dev/null +++ b/src/components/piece/coin/outlines.ts @@ -0,0 +1,296 @@ +import { Vector2 } from 'three'; + +// Minimum effective corner-fillet radius (as a fraction of rMax). A true zero produces a single +// hard vertex on the side wall that the extrude builder's smooth-normal averaging round-shades on +// the rim, which reads worse than a barely-rounded arc. See `polygonOutline`. +const CORNER_ROUNDNESS_FLOOR = 0.01; + +// All outlines live in a 2D plane (Vector2.x = world X, Vector2.y = world Z) at y = ±halfThickness +// when extruded. Points are listed counter-clockwise when viewed from above (looking down −Y), so +// the right-hand normal points outward from the coin. +// +// Conventions: +// - Outline starts at angle θ = 0 (which is at local +Z, picture-up direction after the scene's +// [π/2, 0, 0] rotation), going CCW. +// - That puts vertex i at angle θ = i / N · 2π, with x = R·sin(θ), z = R·cos(θ). Matches the +// convention `buildCoinGeometry` uses for cylinder cap vertices (three.js's CylinderGeometry +// does the same). + +export function circleOutline(radius: number, segments: number): Vector2[] { + const points: Vector2[] = []; + for (let i = 0; i < segments; i++) { + const theta = (i / segments) * Math.PI * 2; + points.push(new Vector2(Math.sin(theta) * radius, Math.cos(theta) * radius)); + } + return points; +} + +// Spanish-flower outline: a circle whose radius is modulated by a cosine with `lobes` periods +// around the circumference. Smooth scalloping — every point on the perimeter is slightly displaced. +// Not quite right for the 20 Euro cent (see `notchedCircleOutline` for that) but kept around for +// general gently-lobed shapes. +// +// segments = total points around the perimeter (should be a multiple of `lobes` so each lobe is +// sampled identically). +export function flowerOutline( + baseRadius: number, + scallopAmp: number, + lobes: number, + segments: number, +): Vector2[] { + const points: Vector2[] = []; + for (let i = 0; i < segments; i++) { + const theta = (i / segments) * Math.PI * 2; + const r = baseRadius + scallopAmp * Math.cos(lobes * theta); + points.push(new Vector2(Math.sin(theta) * r, Math.cos(theta) * r)); + } + return points; +} + +// Regular N-gon whose maximum extent from origin equals `radius`. With all three knobs at zero this +// is a sharp regular polygon with vertex 0 at +Z (picture-up). The result is strictly convex for +// all parameter combinations in [0, 1]³. The outline is dynamically rescaled so that its farthest +// point from origin lands exactly at `radius` regardless of cornerRoundness or edgeRoundness — +// without rescaling, cornerRoundness > 0 would shrink the silhouette (the corner-arc apex sits +// inside the original vertex circle). +// +// edgeRoundness ∈ [0, 1]: +// Each side is a circular arc through the two adjacent vertices, bulging outward with sagitta = +// edgeRoundness · R · (1 − cos(α/2)). At 0 the arc degenerates to the straight chord; at 1 it's +// a sector of the circumscribed circle and the overall shape becomes the full circumscribed +// circle (adjacent arcs share a tangent at the vertex). +// +// cornerRoundness ∈ [0, 1]: +// A circular fillet of radius r = cornerRoundness · R · sin(α/2) · tan(β/2) is placed at each +// vertex, internally tangent to both adjacent edge arcs (or to both adjacent straight chords +// when edgeRoundness=0). Floored at CORNER_ROUNDNESS_FLOOR (0.01) — a mathematically sharp +// vertex shades worse on the rim than a barely- rounded one (the extrude builder smooths +// side-wall normals across vertices, which round-shades a single hard vertex but reads +// correctly when there's any actual arc geometry there). No real coin has a perfectly sharp +// corner anyway. +// +// phase: rotation in units of α = 2π/sides. Parity-independent: phase=1 +// rotates the polygon by a full segment (identity), phase=0.5 puts vertices at original edge +// midpoints, etc. +// +// Convexity guarantee: both the corner fillets and the edge arcs have their centres on the +// polygon-interior side of the perimeter (the corner fillet centre at distance d_c from origin +// along the vertex-radial; the edge arc centre on the chord-midpoint radial at signed distance d_e +// from origin). Because both kinds of arc curve toward those interior centres, the perimeter's +// curvature direction is consistent everywhere, and the construction ensures C¹ contact at each +// tangent point. No inflection points, no kinks. +export function polygonOutline( + radius: number, + sides: number, + cornerRoundness: number, + edgeRoundness: number, + phase: number, + segmentsPerCorner: number, + segmentsPerEdge: number, +): Vector2[] { + const N = sides; + const alpha = (Math.PI * 2) / N; + const beta = ((N - 2) * Math.PI) / N; + const phaseRad = phase * alpha; + const cosHalfAlpha = Math.cos(alpha / 2); + const sinHalfAlpha = Math.sin(alpha / 2); + + // Every dimensional quantity below is linear in R, so we compute the shape's silhouette in + // "unit-R" units first, derive the max-extent factor, then inflate R to compensate. The polygon's + // farthest point from origin is the corner-arc apex at distance (dC + rFillet) when rFillet > 0, + // otherwise it's the vertex at distance R. + const cornerClamped = Math.max(CORNER_ROUNDNESS_FLOOR, Math.min(1, cornerRoundness)); + const rFilletPerR = cornerClamped * sinHalfAlpha * Math.tan(beta / 2); + const sagittaPerR = edgeRoundness * (1 - cosHalfAlpha); + const halfChordPerR = sinHalfAlpha; + const useEdgeArc = sagittaPerR > 1e-9; + const A_ePerR = useEdgeArc + ? (halfChordPerR * halfChordPerR + sagittaPerR * sagittaPerR) / (2 * sagittaPerR) + : 0; + const d_ePerR = useEdgeArc + ? cosHalfAlpha - Math.sqrt(Math.max(0, A_ePerR * A_ePerR - halfChordPerR * halfChordPerR)) + : 0; + let dCPerR: number; + if (useEdgeArc) { + const disc = (A_ePerR - rFilletPerR) ** 2 - d_ePerR * d_ePerR * sinHalfAlpha * sinHalfAlpha; + dCPerR = d_ePerR * cosHalfAlpha + Math.sqrt(Math.max(0, disc)); + } else { + dCPerR = 1 - rFilletPerR / cosHalfAlpha; + } + + const extentFactor = rFilletPerR > 0 ? dCPerR + rFilletPerR : 1; + const R = radius / extentFactor; + + // Lift the per-R quantities to absolute values for the sampling loops. + const A_e = A_ePerR * R; + const d_e = d_ePerR * R; + const rFillet = rFilletPerR * R; + const dC = dCPerR * R; + + // Precompute corner centres + incoming/outgoing tangent points so the edge-sampling loop can + // reach across the wrap-around boundary. + const cornerCx = new Array(N); + const cornerCz = new Array(N); + const pInX = new Array(N); + const pInZ = new Array(N); + const pOutX = new Array(N); + const pOutZ = new Array(N); + + for (let i = 0; i < N; i++) { + const vAngle = i * alpha + phaseRad; + const cx = dC * Math.sin(vAngle); + const cz = dC * Math.cos(vAngle); + cornerCx[i] = cx; + cornerCz[i] = cz; + + if (useEdgeArc && rFillet > 0) { + // Tangent point on each adjacent edge arc lies on the line from the edge arc centre through + // the corner centre, projected out to the edge arc surface (radius A_e from the edge arc + // centre). + const ce1X = d_e * Math.sin(vAngle - alpha / 2); + const ce1Z = d_e * Math.cos(vAngle - alpha / 2); + const dx1 = cx - ce1X; + const dz1 = cz - ce1Z; + const len1 = Math.hypot(dx1, dz1) || 1; + pInX[i] = ce1X + (dx1 / len1) * A_e; + pInZ[i] = ce1Z + (dz1 / len1) * A_e; + + const ce2X = d_e * Math.sin(vAngle + alpha / 2); + const ce2Z = d_e * Math.cos(vAngle + alpha / 2); + const dx2 = cx - ce2X; + const dz2 = cz - ce2Z; + const len2 = Math.hypot(dx2, dz2) || 1; + pOutX[i] = ce2X + (dx2 / len2) * A_e; + pOutZ[i] = ce2Z + (dz2 / len2) * A_e; + } else if (rFillet > 0) { + // Straight edges: tangent points on the chord, at angle ±α/2 from the vertex direction + // (corner centre + rFillet · chord-perpendicular). + pInX[i] = cx + Math.sin(vAngle - alpha / 2) * rFillet; + pInZ[i] = cz + Math.cos(vAngle - alpha / 2) * rFillet; + pOutX[i] = cx + Math.sin(vAngle + alpha / 2) * rFillet; + pOutZ[i] = cz + Math.cos(vAngle + alpha / 2) * rFillet; + } else { + // Sharp corner: tangent points collapse to the vertex itself (which equals the corner centre + // at rFillet=0). + pInX[i] = cx; + pInZ[i] = cz; + pOutX[i] = cx; + pOutZ[i] = cz; + } + } + + const points: Vector2[] = []; + + // A vertex with coinciding incoming/outgoing tangent points has no kink for the fillet to round — + // this happens at edgeRoundness=1, where both adjacent edge arcs lie on the circumscribed circle + // and share a tangent at the vertex. Skip the corner arc in that case and just emit the vertex + // point. + const TANGENT_COINCIDE_EPS = 1e-6 * R; + + for (let i = 0; i < N; i++) { + const cx = cornerCx[i]; + const cz = cornerCz[i]; + + const tangentSpread = Math.hypot(pOutX[i] - pInX[i], pOutZ[i] - pInZ[i]); + const hasCornerArc = rFillet > 1e-9 && tangentSpread > TANGENT_COINCIDE_EPS; + + if (hasCornerArc) { + const angleIn = Math.atan2(pInX[i] - cx, pInZ[i] - cz); + const angleOut = Math.atan2(pOutX[i] - cx, pOutZ[i] - cz); + let sweep = angleOut - angleIn; + // Normalise to the shorter arc — corner sweep is always less than π. + if (sweep > Math.PI) sweep -= 2 * Math.PI; + else if (sweep < -Math.PI) sweep += 2 * Math.PI; + for (let s = 0; s <= segmentsPerCorner; s++) { + const a = angleIn + (s / segmentsPerCorner) * sweep; + points.push(new Vector2(cx + Math.sin(a) * rFillet, cz + Math.cos(a) * rFillet)); + } + } else { + points.push(new Vector2(pInX[i], pInZ[i])); + } + + // Edge from this vertex's outgoing tangent to the next vertex's incoming tangent. Interior + // samples only (endpoints already pushed). + const next = (i + 1) % N; + if (useEdgeArc) { + const eMidAngle = i * alpha + phaseRad + alpha / 2; + const ceX = d_e * Math.sin(eMidAngle); + const ceZ = d_e * Math.cos(eMidAngle); + const startAngle = Math.atan2(pOutX[i] - ceX, pOutZ[i] - ceZ); + const endAngle = Math.atan2(pInX[next] - ceX, pInZ[next] - ceZ); + let sweep = endAngle - startAngle; + if (sweep > Math.PI) sweep -= 2 * Math.PI; + else if (sweep < -Math.PI) sweep += 2 * Math.PI; + for (let p = 1; p < segmentsPerEdge; p++) { + const a = startAngle + (p / segmentsPerEdge) * sweep; + points.push(new Vector2(ceX + Math.sin(a) * A_e, ceZ + Math.cos(a) * A_e)); + } + } else { + for (let p = 1; p < segmentsPerEdge; p++) { + const u = p / segmentsPerEdge; + points.push( + new Vector2( + pOutX[i] + u * (pInX[next] - pOutX[i]), + pOutZ[i] + u * (pInZ[next] - pOutZ[i]), + ), + ); + } + } + } + + return points; +} + +// Circle whose radius varies sinusoidally around the perimeter — the shape of e.g. the Bahamas 10c. +// Max radius equals `radius`, min radius equals `radius · (1 − 2·amplitude)`. `amplitude` is the +// peak-to-mean displacement as a fraction of `radius`, so the trough sits at `2·amplitude` below +// the peak. `phase` rotates the wave in units of one peak period (parity-independent, same +// convention as `polygonOutline`): phase=0 puts a peak at θ=0 (+Z), phase=0.5 puts a trough there, +// phase=1 is the identity. +// +// R(θ) = radius · ((1 − amplitude) + amplitude · sin(peaks · θ − 2π · phase)) +// +// Pass amplitude < 0.5; in practice 0.03–0.08 is right for visible-but- gentle waviness. +export function sineRoundOutline( + radius: number, + amplitude: number, + peaks: number, + phase: number, + segments: number, +): Vector2[] { + const points: Vector2[] = []; + const phaseShift = Math.PI * 2 * phase; + for (let i = 0; i < segments; i++) { + const theta = (i / segments) * Math.PI * 2; + const r = radius * (1 - amplitude + amplitude * Math.sin(peaks * theta - phaseShift)); + points.push(new Vector2(Math.sin(theta) * r, Math.cos(theta) * r)); + } + return points; +} + +// Circle with N narrow, localized indents — the actual shape of the 20 Euro cent's "Spanish +// flower". Almost the entire perimeter is at `baseRadius`; at N evenly-spaced angles the outline +// dips inward to (1 − notchDepth) · baseRadius. Higher `sharpness` makes each notch narrower and +// more cusp-like; ~6–10 reads as a definite dip without being a hard corner. +// +// R(θ) = baseRadius · (1 − notchDepth · max(0, cos(N·θ))^sharpness) +// +// `segments` should be high enough to sample each notch smoothly. With `sharpness = 8` the notch is +// significant within ~15° of its centre, so budget ~30+ segments per notch. +export function notchedCircleOutline( + baseRadius: number, + notchDepth: number, + notches: number, + segments: number, + sharpness = 8, +): Vector2[] { + const points: Vector2[] = []; + for (let i = 0; i < segments; i++) { + const theta = (i / segments) * Math.PI * 2; + const c = Math.cos(notches * theta); + const indent = c > 0 ? c ** sharpness : 0; + const r = baseRadius * (1 - notchDepth * indent); + points.push(new Vector2(Math.sin(theta) * r, Math.cos(theta) * r)); + } + return points; +} diff --git a/src/components/piece/coin/shape-variants.ts b/src/components/piece/coin/shape-variants.ts new file mode 100644 index 0000000..518e082 --- /dev/null +++ b/src/components/piece/coin/shape-variants.ts @@ -0,0 +1,118 @@ +import type { Vector2 } from 'three'; +import { + circleOutline, + notchedCircleOutline, + polygonOutline, + sineRoundOutline, +} from '@/components/piece/coin/outlines'; +import type { ShapeParams, ShapeVariant } from '@/db/types'; + +export type SpecialShape = { + outer: Vector2[]; + inner?: Vector2[]; +}; + +const ROUND_SEGMENTS = 64; +const NOTCHED_SEGMENTS = 280; +const SINE_SEGMENTS = 280; +const POLYGON_SEGMENTS_PER_CORNER = 12; +const POLYGON_SEGMENTS_PER_EDGE = 12; + +// Parse `shape_params` for a specific variant. Returns null if the variant is parameterless (round +// / irregular), or if the JSON is missing/invalid. +function parseParams( + variant: V, + paramsJson: string | null, +): ShapeParams[V] | null { + if (variant === 'round' || variant === 'irregular' || variant === 'rectangular') return null; + if (paramsJson === null) return null; + try { + return JSON.parse(paramsJson) as ShapeParams[V]; + } catch { + return null; + } +} + +// Build a polygon outline from the parsed params object. Shared between `polygon` and +// `holed-polygon` since both want the same outer shape. +function polygonFromParams( + p: { sides: number; corner_roundness?: number; edge_roundness?: number; phase?: number }, + radius: number, +): Vector2[] { + return polygonOutline( + radius, + Math.max(3, p.sides), + p.corner_roundness ?? 0, + p.edge_roundness ?? 0, + p.phase ?? 0, + POLYGON_SEGMENTS_PER_CORNER, + POLYGON_SEGMENTS_PER_EDGE, + ); +} + +// Builds the outline(s) for an extruded coin from the variant + params. Returns null when the +// variant should render as a plain cylinder (round / irregular) — the caller (NormalCoin) takes +// that path via `buildCoinGeometry`. +export function buildShapeFromVariant( + variant: ShapeVariant, + paramsJson: string | null, + radius: number, +): SpecialShape | null { + switch (variant) { + case 'round': + case 'irregular': + // Handled by NormalCoin's cylinder geometry. + return null; + + case 'rectangular': + // Banknote-only; rendered via category dispatch elsewhere, not this outline pipeline. + return null; + + case 'polygon': { + const p = parseParams('polygon', paramsJson); + if (!p) return null; + return { outer: polygonFromParams(p, radius) }; + } + + case 'notched-round': { + const p = parseParams('notched-round', paramsJson); + if (!p) return null; + return { + outer: notchedCircleOutline( + radius, + p.notch_depth, + p.notches, + NOTCHED_SEGMENTS, + p.sharpness, + ), + }; + } + + case 'sine-round': { + const p = parseParams('sine-round', paramsJson); + if (!p) return null; + return { + outer: sineRoundOutline(radius, p.amplitude, p.peaks, p.phase ?? 0, SINE_SEGMENTS), + }; + } + + case 'holed-round': { + const p = parseParams('holed-round', paramsJson); + if (!p) return null; + return { + outer: circleOutline(radius, ROUND_SEGMENTS), + inner: circleOutline(radius * p.hole_ratio, ROUND_SEGMENTS), + }; + } + + case 'holed-polygon': { + const p = parseParams('holed-polygon', paramsJson); + if (!p) return null; + const outer = polygonFromParams(p, radius); + // Inner hole stays circular (overwhelmingly the case for Numista's "Holed N-sided" coins). + // Resample to match the outer point count so the extrude builder can pair vertices across the + // annulus. + return { outer, inner: circleOutline(radius * p.hole_ratio, outer.length) }; + } + } +} diff --git a/src/components/piece/index.tsx b/src/components/piece/index.tsx new file mode 100644 index 0000000..b828f13 --- /dev/null +++ b/src/components/piece/index.tsx @@ -0,0 +1,19 @@ +import type { AtlasSize } from '@/atlas-layout'; +import { Banknote } from '@/components/piece/banknote'; +import { Coin } from '@/components/piece/coin'; +import type { Piece as PieceRow } from '@/db/types'; + +type Props = { + piece: PieceRow; + atlas: AtlasSize; +}; + +// Dispatch a piece (coin / banknote / exonumia) to the right renderer based on its category. Used +// by showcase, the only surface that renders both coins and banknotes; hail and pile use `` +// directly. +export function Piece({ piece, atlas }: Props) { + if (piece.category === 'banknote') { + return ; + } + return ; +} diff --git a/src/components/pile/coin-instances.tsx b/src/components/pile/coin-instances.tsx deleted file mode 100644 index fba9983..0000000 --- a/src/components/pile/coin-instances.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { CoinInstance } from '../coin'; -import { InstancedMesh } from 'three'; -import { NumistaType } from '@/types/numista'; -import { useCylinder } from '@react-three/cannon'; -import { useEffect, useRef } from 'react'; - -export const CoinInstances = (coinProps: NumistaType) => { - const didInit = useRef(false); - const count = coinProps.count ?? 1; - const size = coinProps.size ?? 16; - const thickness = coinProps.thickness ?? 2; - const weight = coinProps.weight ?? 4; - - const [ref, { at }] = useCylinder( - () => ({ - args: [(1 + size) / 16, (1 + size) / 16, thickness / 16, 8], - mass: weight, - position: [0, -3, 0] - }), - useRef(null) - ); - - useEffect(() => { - if (didInit.current) { - return; - } - - didInit.current = true; - Array.from({ length: count }).forEach((_, index) => { - at(index).position.set(8 * (Math.random() * 2 - 1), Math.random() * 8 + 16, 8 * (Math.random() * 2 - 1)); - at(index).rotation.set( - Math.PI * (Math.random() * 2 - 1), - Math.PI * (Math.random() * 2 - 1), - Math.PI * (Math.random() * 2 - 1) - ); - - at(index).scaleOverride([size / 16, thickness / 16, size / 16]); - }); - }, [at, count, size, thickness]); - - return ( - - - - ); -}; diff --git a/src/components/pile/coin.tsx b/src/components/pile/coin.tsx new file mode 100644 index 0000000..b939666 --- /dev/null +++ b/src/components/pile/coin.tsx @@ -0,0 +1,145 @@ +import { + CylinderCollider, + InstancedRigidBodies, + type InstancedRigidBodyProps, +} from '@react-three/rapier'; +import { useMemo } from 'react'; +import { useCoinMaterial } from '@/components/piece/coin'; +import { buildExtrudedCoinGeometry } from '@/components/piece/coin/extrude'; +import { buildCoinGeometry } from '@/components/piece/coin/geometry'; +import { buildShapeFromVariant, type SpecialShape } from '@/components/piece/coin/shape-variants'; +import type { Piece as PieceRow } from '@/db/types'; + +type Props = { + coin: PieceRow; + count: number; +}; + +// Pile scene uses 1 unit = 1 mm. Numista values land in directly with no conversion; gravity, +// positions, and Rapier's internal tolerances all sit at numerically friendly magnitudes (coin ~24 +// units wide, not 0.024). +const DROP_X = 80; +const DROP_Z = 80; +// Above the camera's ~135 mm visible top, so coins enter from offscreen. +const DROP_Y_MIN = 160; +const DROP_Y_MAX = 360; + +function coinDimensions(coin: PieceRow): { radius: number; thickness: number } { + return { + radius: (coin.diameter ?? 24) / 2, + thickness: coin.thickness ?? 2, + }; +} + +function makeInstances(coinId: number, count: number): InstancedRigidBodyProps[] { + return Array.from({ length: count }, (_, i) => ({ + key: `${coinId}-${i}`, + position: [ + (Math.random() - 0.5) * 2 * DROP_X, + DROP_Y_MIN + Math.random() * (DROP_Y_MAX - DROP_Y_MIN), + (Math.random() - 0.5) * 2 * DROP_Z, + ], + rotation: [ + Math.random() * Math.PI * 2, + Math.random() * Math.PI * 2, + Math.random() * Math.PI * 2, + ], + })); +} + +// Shared rigid-body wrapper. Always uses a `CylinderCollider` matching the coin's diameter and +// thickness, regardless of the visual geometry. This is approximate for GLTF specials (flower, +// holed, diamond-square) but acceptable at this scale; a custom mesh collider is the next +// refinement if pile dynamics ever look wrong on a non-cylinder. +function CoinBodies({ + coin, + count, + children, +}: { + coin: PieceRow; + count: number; + children: React.ReactNode; +}) { + const { radius, thickness } = coinDimensions(coin); + + // Density in g/mm³, consistent with our mm-scale gravity (mm/s²) and Numista weight (g). + const density = useMemo(() => { + const volume = Math.PI * radius * radius * thickness; // mm³ + return (coin.weight ?? 8) / volume; + }, [coin.weight, radius, thickness]); + + const instances = useMemo(() => makeInstances(coin.id, count), [coin.id, count]); + + return ( + , + ]} + > + {children} + + ); +} + +function NormalPileCoin({ coin, count }: Props) { + const { radius, thickness } = coinDimensions(coin); + const material = useCoinMaterial(coin, 256); + const geometry = useMemo( + () => buildCoinGeometry(radius, thickness, 256, 32), + [radius, thickness], + ); + + return ( + + + + ); +} + +function SpecialPileCoin({ coin, count, shape }: Props & { shape: SpecialShape }) { + const { radius, thickness } = coinDimensions(coin); + const material = useCoinMaterial(coin, 256); + const geometry = useMemo( + () => + buildExtrudedCoinGeometry({ + outer: shape.outer, + inner: shape.inner, + thickness, + uvRadius: radius, + atlas: 256, + }), + [shape, thickness, radius], + ); + + return ( + + + + ); +} + +export function PileCoin({ coin, count }: Props) { + const { radius } = coinDimensions(coin); + const shape = useMemo( + () => buildShapeFromVariant(coin.shape_variant, coin.shape_params, radius), + [coin.shape_variant, coin.shape_params, radius], + ); + return shape ? ( + + ) : ( + + ); +} diff --git a/src/components/pile/custom-sleep.tsx b/src/components/pile/custom-sleep.tsx new file mode 100644 index 0000000..f547546 --- /dev/null +++ b/src/components/pile/custom-sleep.tsx @@ -0,0 +1,64 @@ +import { useFrame } from '@react-three/fiber'; +import { useRapier } from '@react-three/rapier'; +import { useRef } from 'react'; + +// Rapier's island sleep needs every body in a contact island below threshold for 2 s. In a 200-coin +// pile that's one big island, so a single occasional impulse jitter from any coin resets the whole +// pile's timer. Park bodies individually after a much shorter quiet window; rapier still wakes them +// on real contact. Rollers have linvel ≈ radius × angvel, so a rolling coin has high linear +// velocity even at moderate angvel; the low LIN gate excludes them. Wobblers (in-place jitter) have +// near-zero linear motion, so a high ANG gate scoops them up without sweeping up rollers. +const QUIET_SECONDS = 0.3; +const QUIET_LIN = 3; // mm/s +const QUIET_ANG = 3; // rad/s + +export function CustomSleep() { + const { world } = useRapier(); + const timers = useRef(new Map()); + // Bodies we've already parked once. Used to skip the QUIET_SECONDS timer when rapier auto-wakes + // them from incidental contact — if they're still quiet, we know they were settled and can + // re-park immediately. + const settled = useRef(new Set()); + + useFrame((_, dt) => { + world.forEachRigidBody((body) => { + if (!body.isDynamic()) return; + + if (body.isSleeping()) { + timers.current.delete(body.handle); + return; + } + + const lv = body.linvel(); + const av = body.angvel(); + const linMag = Math.hypot(lv.x, lv.y, lv.z); + const angMag = Math.hypot(av.x, av.y, av.z); + const quiet = linMag < QUIET_LIN && angMag < QUIET_ANG; + + if (!quiet) { + // Real motion — drop both the timer and the settled mark. + timers.current.delete(body.handle); + settled.current.delete(body.handle); + return; + } + + // Previously settled and woken without real motion — re-park. + if (settled.current.has(body.handle)) { + body.sleep(); + timers.current.delete(body.handle); + return; + } + + const t = (timers.current.get(body.handle) ?? 0) + dt; + if (t >= QUIET_SECONDS) { + body.sleep(); + settled.current.add(body.handle); + timers.current.delete(body.handle); + } else { + timers.current.set(body.handle, t); + } + }); + }); + + return null; +} diff --git a/src/components/pile/floor.tsx b/src/components/pile/floor.tsx new file mode 100644 index 0000000..f66876c --- /dev/null +++ b/src/components/pile/floor.tsx @@ -0,0 +1,13 @@ +import { CuboidCollider, RigidBody } from '@react-three/rapier'; + +export function Floor() { + return ( + + + + + + + + ); +} diff --git a/src/components/pile/index.module.css b/src/components/pile/index.module.css deleted file mode 100644 index cb983d8..0000000 --- a/src/components/pile/index.module.css +++ /dev/null @@ -1,3 +0,0 @@ -.canvas { - height: 100%; -} diff --git a/src/components/pile/index.tsx b/src/components/pile/index.tsx deleted file mode 100644 index 5414654..0000000 --- a/src/components/pile/index.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { Canvas, SpotLightProps } from '@react-three/fiber'; -import { CoinInstances } from './coin-instances'; -import { Mesh, Vector3 } from 'three'; -import { Message } from 'primereact/message'; -import { OrbitControls } from '@react-three/drei'; -import { Physics, PlaneProps, usePlane } from '@react-three/cannon'; -import { StageLightModel } from './stage-light-model'; -import { Suspense, useMemo, useRef } from 'react'; -import { useNumistaTypes } from '@/core/hooks/use-types'; -import { useShowcaseStore } from '@/components/showcase/store'; -import styles from './index.module.css'; - -const Plane = (props: PlaneProps) => { - const [ref] = usePlane(() => ({ ...props }), useRef(null)); - - return ( - - - - - ); -}; - -const StageLight = ( - props: Omit & { - position: readonly [x: number, y: number, z: number]; - } -) => { - const pos = new Vector3(...props.position); - - return ( - <> - - - - - - - - ); -}; - -export const Pile = () => { - const hasTextureBase = useShowcaseStore(state => state.textureBase); - const hasTextureBump = useShowcaseStore(state => state.textureBump); - const coins = useNumistaTypes({ filterBanknotes: true }); - const count = useMemo(() => { - return coins?.reduce((total, coin) => total + (coin.count ?? 1), 0) ?? 0; - }, [coins]); - - return ( - <> - {count > 200 && ( -
- - {`Existem ${count} moedas que cumprem estes requisitos.`} -
{'Faz uma pesquisa mais específica.'} - - } - /> -
- )} - - - - - - - - - {count < 200 && - coins?.map(coinProps => ( - - - - ))} - - - - - - ); -}; diff --git a/src/components/pile/scene.tsx b/src/components/pile/scene.tsx new file mode 100644 index 0000000..d7f8928 --- /dev/null +++ b/src/components/pile/scene.tsx @@ -0,0 +1,63 @@ +import { ContactShadows, OrbitControls, PerspectiveCamera } from '@react-three/drei'; +import { Physics } from '@react-three/rapier'; +import { Suspense } from 'react'; +import { PileCoin } from '@/components/pile/coin'; +import { CustomSleep } from '@/components/pile/custom-sleep'; +import { Floor } from '@/components/pile/floor'; +import { StageLight } from '@/components/pile/stage-light'; +import type { PieceWithIssuer } from '@/db/types'; + +// Pile scene uses 1 unit = 1 mm. Real g would be 9810 mm/s²; we use much less so the entire fall is +// visible inside the camera's ~190 mm tall view. +const GRAVITY: [number, number, number] = [0, -300, 0]; + +// Double the default 1/60 rate. More solver work per real second, the canonical fix for thin-disk +// stack chatter (Blender's coin demo uses 1/240 + 50 iters). +const TIME_STEP = 1 / 120; + +export function PileScene({ coins }: { coins: PieceWithIssuer[] }) { + return ( + <> + + + + + + + + {/* + Local Suspense around the suspending subtree (rapier's WASM init and + the per-coin useTexture loaders). Without this, their suspensions bubble + up to the outer Suspense in pile-entry.tsx, which unmounts Pile entirely + and disposes the WebGL context — fatal in dev under StrictMode's + mount/unmount/remount cycle. + */} + + + + + {coins.map((coin) => ( + + ))} + + + + + + + + ); +} diff --git a/src/components/pile/stage-light-model.tsx b/src/components/pile/stage-light-model.tsx deleted file mode 100644 index 522fb1a..0000000 --- a/src/components/pile/stage-light-model.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Group } from 'three'; -import { GroupProps } from '@react-three/fiber'; -import { useGLTF } from '@react-three/drei'; -import { useLayoutEffect, useRef } from 'react'; - -export function StageLightModel(props: GroupProps) { - // @ts-expect-error properties `nodes` and `materials` actually exist - const { materials, nodes } = useGLTF('/models/stage-light.gltf'); - const ref = useRef(null!); - - useLayoutEffect(() => { - ref.current.lookAt(32 * (Math.random() - 0.5), 32 * (Math.random() - 0.5), 32 * (Math.random() - 0.5)); - ref.current.rotateY(-Math.PI / 2); - }, []); - - return ( - - - - - ); -} - -useGLTF.preload('/models/stage-light.gltf'); diff --git a/src/components/pile/stage-light.tsx b/src/components/pile/stage-light.tsx new file mode 100644 index 0000000..8ec08b4 --- /dev/null +++ b/src/components/pile/stage-light.tsx @@ -0,0 +1,99 @@ +import { useGLTF } from '@react-three/drei'; +import { Suspense, useLayoutEffect, useRef } from 'react'; +import type { Group, Mesh, MeshStandardMaterial } from 'three'; + +useGLTF.preload('/models/stage-light.gltf'); + +type StageLightGLTF = { + nodes: { + Cube001: Mesh; + Cube001_1: Mesh; + }; + materials: { + Base: MeshStandardMaterial; + Light: MeshStandardMaterial; + }; +}; + +// GLTF authored in old project's ~1unit=16mm scale; bring it into our mm world. +const FIXTURE_SCALE = 16; +// Random aim point lives in a box around the pile so the lids cast a different gobo on the floor +// per fixture. +const AIM_RANGE = 150; + +function StageLightModel({ position }: { position: [number, number, number] }) { + const { materials, nodes } = useGLTF('/models/stage-light.gltf') as unknown as StageLightGLTF; + const ref = useRef(null); + + useLayoutEffect(() => { + if (!ref.current) return; + ref.current.lookAt( + AIM_RANGE * (Math.random() - 0.5), + AIM_RANGE * (Math.random() - 0.5), + AIM_RANGE * (Math.random() - 0.5), + ); + ref.current.rotateY(-Math.PI / 2); + }, []); + + return ( + + + + + ); +} + +type Props = { + position: [number, number, number]; + intensity?: number; +}; + +export function StageLight({ position, intensity = 150000 }: Props) { + const [x, y, z] = position; + + // Vertical pole, offset slightly "outward" from the fixture so it doesn't clip through the model. + // Runs from the light down to the floor. + const poleOffset = 30; + const poleX = x + Math.sign(x || 1) * poleOffset; + const poleZ = z + Math.sign(z || 1) * poleOffset; + const poleBottomY = -5; + const poleHeight = y - poleBottomY; + const poleCenterY = (y + poleBottomY) / 2; + + return ( + <> + + + + + + + + + + ); +} diff --git a/src/components/showcase/index.module.css b/src/components/showcase/index.module.css deleted file mode 100644 index 81bc0f8..0000000 --- a/src/components/showcase/index.module.css +++ /dev/null @@ -1,8 +0,0 @@ -.wrapper { - position: absolute; - inset: -25% 0 0; -} - -.canvas { - height: 100%; -} diff --git a/src/components/showcase/index.tsx b/src/components/showcase/index.tsx deleted file mode 100644 index 80f89a5..0000000 --- a/src/components/showcase/index.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { Canvas } from '@react-three/fiber'; -import { InfoBox } from './info-box'; -import { OrbitControls } from '@react-three/drei'; -import { Row } from './row'; -import { useEffect } from 'react'; -import { useNumistaTypes } from '@/core/hooks/use-types'; -import { useShowcaseStore } from './store'; -import styles from './index.module.css'; - -export const Showcase = () => { - const setTypes = useShowcaseStore(state => state.setTypes); - const isSpinning = useShowcaseStore(state => state.isSpinning); - const nextIndex = useShowcaseStore(state => state.nextIndex); - const previousIndex = useShowcaseStore(state => state.previousIndex); - const toggleSpin = useShowcaseStore(state => state.toggleSpin); - const setOrbitControlsRef = useShowcaseStore(state => state.setOrbitControlsRef); - const hasTextureBase = useShowcaseStore(state => state.textureBase); - const hasTextureBump = useShowcaseStore(state => state.textureBump); - - useNumistaTypes({ onSuccess: setTypes }); - - useEffect(() => { - const onKeyDown = ({ key }: KeyboardEvent) => { - switch (key) { - case 'ArrowLeft': - return previousIndex(); - - case 'ArrowRight': - return nextIndex(); - - case ' ': - return toggleSpin(); - - default: - return; - } - }; - - document.addEventListener('keydown', onKeyDown); - - return () => document.removeEventListener('keydown', onKeyDown); - }, [nextIndex, previousIndex, toggleSpin]); - - return ( -
- - - - - - - - -
- ); -}; diff --git a/src/components/showcase/info-box.tsx b/src/components/showcase/info-box.tsx deleted file mode 100644 index bbb8d46..0000000 --- a/src/components/showcase/info-box.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { Button } from 'primereact/button'; -import { getFlagEmoji } from '@/core/utils/flags'; -import { useShowcaseStore } from './store'; - -export const InfoBox = () => { - const isSpinning = useShowcaseStore(state => state.isSpinning); - const getType = useShowcaseStore(state => state.getType); - const toggleSpin = useShowcaseStore(state => state.toggleSpin); - const currentIndex = useShowcaseStore(state => state.currentIndex); - const nextIndex = useShowcaseStore(state => state.nextIndex); - const previousIndex = useShowcaseStore(state => state.previousIndex); - const total = useShowcaseStore(state => state.types.length); - - const currentType = getType(); - - if (!currentType) { - return; - } - - const { category, count = 1, issuer, max_year, min_year, size, thickness, title, weight } = currentType; - - return ( -
-
- - {`${getFlagEmoji(issuer?.iso)} `} - {issuer?.name} - -

{title}

-

{min_year !== max_year ? `${min_year} - ${max_year}` : min_year}

- {`${count ?? 1} in collection`} - {category === 'coin' && ( - <> - {weight &&

{`${weight}g`}

} - {size &&

{`${size}mm`}

} - {thickness &&

{`${thickness}mm`}

} - - )} -
- -
-
- ); -}; diff --git a/src/components/showcase/info-panel.tsx b/src/components/showcase/info-panel.tsx new file mode 100644 index 0000000..586ff15 --- /dev/null +++ b/src/components/showcase/info-panel.tsx @@ -0,0 +1,66 @@ +import type { PieceWithIssuer } from '@/db/types'; + +export function InfoPanel({ piece }: { piece: PieceWithIssuer }) { + const subtitle = [ + piece.currency_numeric_value !== null && piece.currency_name + ? `${piece.currency_numeric_value} ${piece.currency_name}` + : null, + piece.year_min + ? piece.year_max && piece.year_max !== piece.year_min + ? `${piece.year_min}–${piece.year_max}` + : `${piece.year_min}` + : null, + ] + .filter(Boolean) + .join(' · '); + + const data = ( + piece.category === 'banknote' + ? [piece.width ? `↔ ${piece.width} mm` : null, piece.height ? `↕ ${piece.height} mm` : null] + : [ + piece.diameter ? `⌀ ${piece.diameter} mm` : null, + piece.thickness ? `↕ ${piece.thickness} mm` : null, + piece.weight ? `${piece.weight} g` : null, + ] + ) + .filter(Boolean) + .join(' '); + + return ( +
+
+ {piece.issuer_flag_path && ( + + )} + {piece.issuer_name} +
+ +
+

{piece.title}

+ {piece.count > 1 && ×{piece.count}} +
+ + {subtitle &&

{subtitle}

} + + {data && ( + <> +
+

{data}

+ + )} + + + view on numista ↗ + +
+ ); +} diff --git a/src/components/showcase/lights.tsx b/src/components/showcase/lights.tsx new file mode 100644 index 0000000..3997556 --- /dev/null +++ b/src/components/showcase/lights.tsx @@ -0,0 +1,41 @@ +import { useFrame, useThree } from '@react-three/fiber'; +import { type ReactNode, useRef } from 'react'; +import type { Group, RectAreaLight } from 'three'; + +export function LightRig({ children }: { children: ReactNode }) { + const { camera } = useThree(); + const ref = useRef(null); + useFrame(() => { + if (ref.current) ref.current.quaternion.copy(camera.quaternion); + }); + return {children}; +} + +export function StudioLight({ + position, + color = '#ffffff', + intensity, + width, + height, +}: { + position: [number, number, number]; + color?: string; + intensity: number; + width: number; + height: number; +}) { + const ref = useRef(null); + useFrame(() => { + ref.current?.lookAt(0, 0, 0); + }); + return ( + + ); +} diff --git a/src/components/showcase/nav-button.tsx b/src/components/showcase/nav-button.tsx new file mode 100644 index 0000000..a93a7fd --- /dev/null +++ b/src/components/showcase/nav-button.tsx @@ -0,0 +1,22 @@ +import type { ReactNode } from 'react'; +import { Button } from 'react-aria-components'; + +export function NavButton({ + onPress, + label, + children, +}: { + onPress: () => void; + label: string; + children: ReactNode; +}) { + return ( + + ); +} diff --git a/src/components/showcase/piece-stage.tsx b/src/components/showcase/piece-stage.tsx new file mode 100644 index 0000000..42384ac --- /dev/null +++ b/src/components/showcase/piece-stage.tsx @@ -0,0 +1,166 @@ +import { useFrame } from '@react-three/fiber'; +import { type RefObject, Suspense, useRef, useState } from 'react'; +import type { Group } from 'three'; +import { Piece } from '@/components/piece'; +import type { PieceWithIssuer } from '@/db/types'; + +const SLIDE_DISTANCE = 0.1; +const TRANSITION_MS = 400; +const SPIN_SPEED = 1.5; + +function easeOutCubic(t: number): number { + return 1 - (1 - t) ** 3; +} + +function spinAxis(piece: PieceWithIssuer): 'x' | 'y' { + return piece.orientation === 'coin' ? 'x' : 'y'; +} + +// Three permanent slots: current, +1 (next), -1 (prev). All mount the next/prev atlases up front so +// navigation has zero load latency. +// +// On nav, the "behind" slot teleports off-screen to the opposite side with a fresh look-ahead piece +// — invisible to the user because it's outside the camera frustum the whole time. The other two +// slots animate into / out of view. +export function PieceStage({ + pieces, + index, + spin, + transitioningRef, +}: { + pieces: PieceWithIssuer[]; + index: number; + spin: boolean; + transitioningRef: RefObject; +}) { + const N = pieces.length; + + const slot0Ref = useRef(null); + const slot1Ref = useRef(null); + const slot2Ref = useRef(null); + const slotRefs = [slot0Ref, slot1Ref, slot2Ref] as const; + + const [slotPieces, setSlotPieces] = useState<(PieceWithIssuer | null)[]>(() => [ + pieces[index] ?? null, + pieces[(index + 1) % N] ?? null, + pieces[(index - 1 + N) % N] ?? null, + ]); + + // Which slot index (0..2) currently sits at center. The other two are at ±D — (center+1)%3 is the + // +D ("next") slot, (center+2)%3 is the −D ("prev") slot. + const centerSlotRef = useRef(0); + const slotSpinsRef = useRef([0, 0, 0]); + const handledIdxRef = useRef(index); + const txRef = useRef<{ direction: 1 | -1; startedAt: number } | null>(null); + + useFrame((_, delta) => { + // 1. Detect a nav (only if no transition is already in flight). + if (index !== handledIdxRef.current && !txRef.current) { + const c = centerSlotRef.current; + const nextSlot = (c + 1) % 3; + const prevSlot = (c + 2) % 3; + const targetId = pieces[index]?.id; + + // Direction is whichever side currently holds the target piece. + let d: 1 | -1 | 0 = 0; + if (slotPieces[nextSlot]?.id === targetId) d = 1; + else if (slotPieces[prevSlot]?.id === targetId) d = -1; + + if (d === 0) { + // Target isn't in the prev/next window (URL jump, browser back-back-back, etc.). Snap + // without animation. + setSlotPieces([ + pieces[index] ?? null, + pieces[(index + 1) % N] ?? null, + pieces[(index - 1 + N) % N] ?? null, + ]); + slotSpinsRef.current = [0, 0, 0]; + centerSlotRef.current = 0; + handledIdxRef.current = index; + } else { + const teleportSlot = d === 1 ? prevSlot : nextSlot; + const lookAheadIdx = (index + d + N) % N; + + setSlotPieces((cur) => { + const next = [...cur]; + next[teleportSlot] = pieces[lookAheadIdx] ?? null; + return next; + }); + const teleportRef = slotRefs[teleportSlot].current; + if (teleportRef) teleportRef.position.x = d * SLIDE_DISTANCE; + slotSpinsRef.current[teleportSlot] = 0; + + txRef.current = { direction: d, startedAt: performance.now() }; + transitioningRef.current = true; + handledIdxRef.current = index; + } + } + + // 2. Spin per-slot (independent accumulators so each piece keeps its phase). + if (spin) { + for (let i = 0; i < 3; i++) { + if (slotPieces[i]) slotSpinsRef.current[i] += delta * SPIN_SPEED; + } + } + for (let i = 0; i < 3; i++) { + const slot = slotRefs[i].current; + const piece = slotPieces[i]; + if (!slot || !piece) continue; + slot.rotation.set(0, 0, 0); + slot.rotation[spinAxis(piece)] = slotSpinsRef.current[i]; + } + + // 3. Positions: either static (no tx) or animating. + const tx = txRef.current; + if (!tx) { + const c = centerSlotRef.current; + for (let i = 0; i < 3; i++) { + const slot = slotRefs[i].current; + if (!slot) continue; + if (i === c) slot.position.x = 0; + else if (i === (c + 1) % 3) slot.position.x = SLIDE_DISTANCE; + else slot.position.x = -SLIDE_DISTANCE; + } + return; + } + + const elapsed = performance.now() - tx.startedAt; + const t = Math.min(1, elapsed / TRANSITION_MS); + const eased = easeOutCubic(t); + + const c = centerSlotRef.current; + const slidingOut = c; + const slidingIn = tx.direction === 1 ? (c + 1) % 3 : (c + 2) % 3; + // The third slot is the teleported one — already pinned at d*SLIDE_DISTANCE. + + if (slotRefs[slidingOut].current) { + slotRefs[slidingOut].current.position.x = -tx.direction * SLIDE_DISTANCE * eased; + } + if (slotRefs[slidingIn].current) { + slotRefs[slidingIn].current.position.x = tx.direction * SLIDE_DISTANCE * (1 - eased); + } + + if (t >= 1) { + txRef.current = null; + transitioningRef.current = false; + centerSlotRef.current = slidingIn; + } + }); + + return ( + <> + {[0, 1, 2].map((i) => { + const slotPiece = slotPieces[i]; + return ( + + + + {slotPiece && } + + + + ); + })} + + ); +} diff --git a/src/components/showcase/row.tsx b/src/components/showcase/row.tsx deleted file mode 100644 index 2fa9c66..0000000 --- a/src/components/showcase/row.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { BanknoteInstance } from '@/components/banknote'; -import { CoinInstance } from '@/components/coin'; -import { Mesh } from 'three'; -import { MeshProps, useFrame } from '@react-three/fiber'; -import { NumistaType } from '@/types/numista'; -import { Suspense, useEffect, useRef, useState } from 'react'; -import { usePrevious } from '@/core/hooks/use-previous'; -import { useShowcaseStore } from './store'; - -const SpinninType = ({ - isSelected, - typeProps, - ...props -}: MeshProps & { - isSelected?: boolean; - typeProps?: NumistaType; -}) => { - const ref = useRef(null!); - const isSpinning = useShowcaseStore(state => state.isSpinning); - const isTransitioning = useShowcaseStore(state => state.isTransitioning); - const Instance = typeProps?.category === 'banknote' ? BanknoteInstance : CoinInstance; - - useFrame((_state, delta) => { - if (!isSelected || !isSpinning || !typeProps) { - return; - } - - if (typeProps.category === 'banknote') { - ref.current.rotation.x += delta; - - return; - } - - switch (typeProps.orientation) { - case 'medal': - ref.current.rotation.x += delta; - break; - - default: - ref.current.rotation.z += delta; - break; - } - }); - - if (!typeProps) { - return; - } - - const size = typeProps.size ?? 16; - const thickness = typeProps.thickness ?? 2; - - return ( - - - - - - ); -}; - -export const Row = () => { - const ref = useRef(null!); - const currentIndex = useShowcaseStore(state => state.currentIndex); - const getType = useShowcaseStore(state => state.getType); - const isTransitioning = useShowcaseStore(state => state.isTransitioning); - const endTransition = useShowcaseStore(state => state.endTransition); - const beginTransition = useShowcaseStore(state => state.beginTransition); - const types = useShowcaseStore(state => state.types); - const [spacing, setSpacing] = useState(0); - const delayedIndex = usePrevious(currentIndex); - - useEffect(() => { - const updateSpacing = () => { - setSpacing(Math.sqrt((48 * window.innerWidth) / window.innerHeight)); - beginTransition(); - }; - - updateSpacing(); - - window.addEventListener('resize', updateSpacing); - - return () => window.removeEventListener('resize', updateSpacing); - }, [beginTransition]); - - useFrame(() => { - if (!isTransitioning) { - return; - } - - const target = -currentIndex * spacing; - const diff = ref.current.position.x - target; - - if (Math.abs(diff) > 1 / 32) { - ref.current.position.x -= diff / 16; - } else { - endTransition(); - } - }); - - return ( - - {types?.map( - (type, index) => - Math.abs(index - delayedIndex) <= 2 && ( - - - - ) - )} - - ); -}; diff --git a/src/components/showcase/store.ts b/src/components/showcase/store.ts deleted file mode 100644 index 22f3c33..0000000 --- a/src/components/showcase/store.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { MutableRefObject, createRef } from 'react'; -import { NumistaType } from '@/types/numista'; -import { OrbitControls } from 'three-stdlib'; -import { create } from 'zustand'; - -interface ShowcaseStore { - beginTransition: () => void; - currentIndex: number; - endTransition: () => void; - getType: (index?: number) => NumistaType | undefined; - isSpinning: boolean; - isTransitioning: boolean; - nextIndex: () => void; - orbitControlsRef: MutableRefObject; - previousIndex: () => void; - setOrbitControlsRef: (ref: OrbitControls | null) => void; - setTextureBase: (value: boolean) => void; - setTextureBump: (value: boolean) => void; - setTypes: (types?: NumistaType[] | null) => void; - textureBase: boolean; - textureBump: boolean; - toggleSpin: () => void; - types: NumistaType[]; -} - -export const useShowcaseStore = create((set, get) => ({ - beginTransition: () => set(() => ({ isTransitioning: true })), - currentIndex: 0, - endTransition: () => set(() => ({ isTransitioning: false })), - getType: index => { - const { currentIndex, types } = get(); - - return types[index ?? currentIndex]; - }, - isSpinning: true, - isTransitioning: false, - nextIndex: () => - set(state => { - state.orbitControlsRef.current?.setAzimuthalAngle(0); - state.orbitControlsRef.current?.setPolarAngle(Math.PI / 2); - const currentIndex = Math.min(state.currentIndex + 1, state.types.length - 1); - - return { - currentIndex, - currentType: state.types[currentIndex], - isTransitioning: true - }; - }), - orbitControlsRef: createRef(), - previousIndex: () => - set(state => { - state.orbitControlsRef.current?.setAzimuthalAngle(0); - state.orbitControlsRef.current?.setPolarAngle(Math.PI / 2); - const currentIndex = Math.max(state.currentIndex - 1, 0); - - return { - currentIndex, - currentType: state.types[currentIndex], - isTransitioning: true - }; - }), - setOrbitControlsRef: instance => - set(() => ({ - orbitControlsRef: { current: instance } - })), - setTextureBase: value => - set(() => ({ - textureBase: value - })), - setTextureBump: value => - set(() => ({ - textureBump: value - })), - setTypes: types => - set(() => ({ - currentIndex: 0, - isSpinning: true, - isTransitioning: true, - types: Array.isArray(types) ? types : [] - })), - textureBase: true, - textureBump: true, - toggleSpin: () => - set(state => { - if (!state.isSpinning) { - state.orbitControlsRef.current?.setAzimuthalAngle(0); - state.orbitControlsRef.current?.setPolarAngle(Math.PI / 2); - - return { isSpinning: true }; - } - - return { isSpinning: false }; - }), - types: [] -})); diff --git a/src/core/hooks/use-media-query.ts b/src/core/hooks/use-media-query.ts deleted file mode 100644 index 038453b..0000000 --- a/src/core/hooks/use-media-query.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { useEffect, useState } from 'react'; - -const breakpoints = { - md: 992, - ms: 768, - sm: 576 -} as const; - -type Breakpoint = keyof typeof breakpoints; - -export function useMediaQuery(which: 'max' | 'min', breakpoint: Breakpoint): boolean { - const [matches, setMatches] = useState(false); - - useEffect(() => { - const media = window.matchMedia(`(${which}-width: ${breakpoints[breakpoint]}px)`); - const listener = () => setMatches(media.matches); - listener(); - - media.addEventListener('change', listener); - - return () => { - media.removeEventListener('change', listener); - }; - }, [breakpoint, which]); - - return matches; -} diff --git a/src/core/hooks/use-previous.ts b/src/core/hooks/use-previous.ts deleted file mode 100644 index aa2dfdc..0000000 --- a/src/core/hooks/use-previous.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { useEffect, useRef } from 'react'; - -export function usePrevious(value: T): T { - const ref = useRef(value); - - useEffect(() => { - ref.current = value; - }, [value]); - - return ref.current; -} diff --git a/src/core/hooks/use-types.ts b/src/core/hooks/use-types.ts deleted file mode 100644 index b0903b4..0000000 --- a/src/core/hooks/use-types.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { NumistaType } from '@/types/numista'; -import { useQuery } from '@tanstack/react-query'; -import { useRouter } from 'next/router'; - -export const useNumistaTypes = (options?: { - filterBanknotes?: boolean; - onSuccess?: (value?: NumistaType[] | null) => void; -}) => { - const router = useRouter(); - const searchParams = router.asPath.split('?')[1]; - const { data: coins } = useQuery({ - keepPreviousData: true, - queryFn: async () => { - const res = await fetch(`/api/types?${searchParams}` ?? ''); - const types = await res.json(); - options?.onSuccess?.(types); - - return types; - }, - queryKey: ['types', searchParams], - refetchOnReconnect: false, - refetchOnWindowFocus: false - }); - - if (options?.filterBanknotes) { - return coins?.filter(({ category }) => category !== 'banknote'); - } - - return coins; -}; diff --git a/src/core/utils/flags.ts b/src/core/utils/flags.ts deleted file mode 100644 index 06cdecb..0000000 --- a/src/core/utils/flags.ts +++ /dev/null @@ -1,21 +0,0 @@ -export function getFlagEmoji(countryCode?: string | null) { - if (!countryCode?.length) { - return ''; - } - - switch (countryCode) { - case 'GB-ENG': - return '🏴󠁧󠁢󠁥󠁮󠁧󠁿'; - - case 'SUHH': - return '☭'; - - default: - return String.fromCodePoint( - ...countryCode - .toUpperCase() - .split('') - .map(char => 127397 + char.charCodeAt(0)) - ); - } -} diff --git a/src/core/utils/merge-textures.ts b/src/core/utils/merge-textures.ts deleted file mode 100644 index 07731ec..0000000 --- a/src/core/utils/merge-textures.ts +++ /dev/null @@ -1,144 +0,0 @@ -/* eslint-disable no-console */ -import { getTextureUrl } from '@/core/utils/texture-urls'; -import { getType } from '@/api/types/get-type'; -import { readFile } from 'fs/promises'; -import { spawn } from 'child_process'; -import path from 'path'; - -const SIZE = 2048; - -const asyncSpawn = (command: string, args: string[]) => { - return new Promise((resolve, reject) => { - const child = spawn(command, args, { - stdio: 'inherit' - }); - - child.on('error', reject); - child.stdout?.on('data', process.stdout.write); - child.stderr?.on('data', process.stderr.write); - child.on('close', code => { - if (code === 0) { - resolve(code); - } else { - reject(code); - } - }); - }); -}; - -const getEdgeRepeatNumber = (shape?: string) => { - switch (shape?.toLowerCase?.()) { - case 'spanish flower': - return 7; - - default: - return 4; - } -}; - -const getPreviousResult = async (id: number, type: string) => { - try { - return await readFile(path.join('./public/photos/joined', `${id}-${type}.webp`)); - } catch { - return; - } -}; - -type CoinProps = Awaited>; - -export const generateImage = async (coinProps: CoinProps | number, type: 'base' | 'bump') => { - const id = typeof coinProps === 'number' ? coinProps : coinProps?.id; - - if (!id) { - return; - } - - const previousResult = await getPreviousResult(id, type); - - if (previousResult) { - return previousResult; - } - - const coin = typeof coinProps === 'number' ? await getType(id) : coinProps; - const edgeRepeatNumber = getEdgeRepeatNumber(coin?.shape); - - if (!coin) { - return; - } - - let notFounds = 0; - - try { - await asyncSpawn('magick', [ - path.join('./public', getTextureUrl(coin.obverse?.picture, type)), - '-resize', - `${SIZE}x${SIZE}!`, - path.join('./public/photos/joined', `${id}-${type}-obverse.webp`) - ]); - } catch { - notFounds++; - await asyncSpawn('magick', [ - '-size', - `${SIZE}x${SIZE}!`, - `xc:${coin.color}`, - path.join('./public/photos/joined', `${id}-${type}-obverse.webp`) - ]); - } - - try { - await asyncSpawn('magick', [ - path.join('./public', getTextureUrl(coin.reverse?.picture, type)), - '-resize', - `${SIZE}x${SIZE}!`, - ...(coin.orientation === 'coin' ? ['-rotate', '180'] : []), - path.join('./public/photos/joined', `${id}-${type}-reverse.webp`) - ]); - } catch { - notFounds++; - await asyncSpawn('magick', [ - '-size', - `${SIZE}x${SIZE}!`, - `xc:${coin.color}`, - path.join('./public/photos/joined', `${id}-${type}-reverse.webp`) - ]); - } - - try { - await asyncSpawn('magick', [ - path.join('./public', getTextureUrl(coin.edge?.picture, type)), - '-resize', - `${SIZE * 2}x${SIZE / edgeRepeatNumber}!`, - path.join('./public/photos/joined', `${id}-${type}-edge.webp`) - ]); - } catch { - notFounds++; - await asyncSpawn('magick', [ - '-size', - `${SIZE * 2}x${SIZE / edgeRepeatNumber}!`, - `xc:${coin.color}`, - path.join('./public/photos/joined', `${id}-${type}-edge.webp`) - ]); - } - - if (notFounds >= 3) { - return; - } - - await asyncSpawn('magick', [ - path.join('./public/photos/joined', `${id}-${type}-obverse.webp`), - path.join('./public/photos/joined', `${id}-${type}-reverse.webp`), - '+append', - path.join('./public/photos/joined', `${id}-${type}.webp`) - ]); - - for (let index = 0; index < edgeRepeatNumber; index++) { - await asyncSpawn('magick', [ - path.join('./public/photos/joined', `${id}-${type}.webp`), - path.join('./public/photos/joined', `${id}-${type}-edge.webp`), - '-append', - path.join('./public/photos/joined', `${id}-${type}.webp`) - ]); - } - - return await readFile(path.join('./public/photos/joined', `${id}-${type}.webp`)); -}; diff --git a/src/core/utils/numista.ts b/src/core/utils/numista.ts deleted file mode 100644 index 12ff157..0000000 --- a/src/core/utils/numista.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { NumistaType } from '@/types/numista'; - -export const sortTypes = (types: NumistaType[]) => - types - .sort((a, b) => { - if (a.value?.numeric_value && b.value?.numeric_value) { - return a.value.numeric_value - b.value.numeric_value; - } - - return 0; - }) - .sort((a, b) => { - if (a.value?.currency?.full_name && b.value?.currency?.full_name) { - return a.value.currency.full_name.localeCompare(b.value.currency.full_name); - } - - return 0; - }) - .sort((a, b) => { - if (a.issuer && b.issuer) { - return a.issuer.name.localeCompare(b.issuer.name); - } - - return 0; - }) - .sort((a, b) => { - if (a.max_year && b.max_year) { - return a.max_year - b.max_year; - } - - return 0; - }) - .sort((a, b) => { - if (a.min_year && b.min_year) { - return a.min_year - b.min_year; - } - - return 0; - }); diff --git a/src/core/utils/texture-urls.ts b/src/core/utils/texture-urls.ts deleted file mode 100644 index 51cb6af..0000000 --- a/src/core/utils/texture-urls.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function getTextureUrl(url?: string, type?: 'base' | 'bump') { - if (!url) { - throw new Error(); - } - - if (type === 'bump') { - return url?.replace(/(\.[^/.]+)$/, '_bump.webp'); - } - - return url; -} diff --git a/src/db/filters.ts b/src/db/filters.ts new file mode 100644 index 0000000..78cfec0 --- /dev/null +++ b/src/db/filters.ts @@ -0,0 +1,177 @@ +import type { SQLQueryBindings } from 'bun:sqlite'; +import { db } from '@/db'; +import type { PieceWithIssuer } from '@/db/types'; +import type { + Category, + Edition, + PieceFacets, + PieceFilters, + PiecesResponse, + ShapeVariant, +} from '@/filter-types'; + +type FilterKey = + | 'countries' + | 'currencies' + | 'faceValue' + | 'categories' + | 'editions' + | 'shapes' + | 'years'; + +function buildClauses( + filters: PieceFilters, + exclude?: FilterKey, +): { clauses: string[]; params: SQLQueryBindings[] } { + const clauses: string[] = []; + const params: SQLQueryBindings[] = []; + + if (exclude !== 'countries' && filters.countries?.length) { + clauses.push(`c.issuer_code IN (${filters.countries.map(() => '?').join(',')})`); + params.push(...filters.countries); + } + if (exclude !== 'currencies' && filters.currencies?.length) { + clauses.push(`c.currency_name IN (${filters.currencies.map(() => '?').join(',')})`); + params.push(...filters.currencies); + } + if (exclude !== 'faceValue' && filters.faceValue !== undefined) { + clauses.push('c.currency_numeric_value = ?'); + params.push(filters.faceValue); + } + if (exclude !== 'categories' && filters.categories?.length) { + clauses.push(`c.category IN (${filters.categories.map(() => '?').join(',')})`); + params.push(...filters.categories); + } + if (exclude !== 'editions' && filters.editions?.length) { + const specials = filters.editions.map((e) => (e === 'special' ? 1 : 0)); + clauses.push(`c.is_special IN (${specials.map(() => '?').join(',')})`); + params.push(...specials); + } + if (exclude !== 'shapes' && filters.shapes?.length) { + clauses.push(`c.shape_variant IN (${filters.shapes.map(() => '?').join(',')})`); + params.push(...filters.shapes); + } + if (exclude !== 'years') { + // Year overlap: a coin (year_min..year_max) overlaps the filter range if coin.year_min <= + // filter.yearMax and coin.year_max >= filter.yearMin. Treat NULL years as "always overlaps". + if (filters.yearMin !== undefined && filters.yearMax !== undefined) { + clauses.push('(c.year_min IS NULL OR c.year_min <= ?)'); + clauses.push('(c.year_max IS NULL OR c.year_max >= ?)'); + params.push(filters.yearMax, filters.yearMin); + } else if (filters.yearMin !== undefined) { + clauses.push('(c.year_max IS NULL OR c.year_max >= ?)'); + params.push(filters.yearMin); + } else if (filters.yearMax !== undefined) { + clauses.push('(c.year_min IS NULL OR c.year_min <= ?)'); + params.push(filters.yearMax); + } + } + + return { clauses, params }; +} + +function whereOf(clauses: string[]): string { + return clauses.length ? `WHERE ${clauses.join(' AND ')}` : ''; +} + +export function queryPieces(filters: PieceFilters): PiecesResponse { + const { clauses, params } = buildClauses(filters); + const pieces = db + .prepare(` + SELECT c.*, i.name AS issuer_name, i.flag_path AS issuer_flag_path + FROM coins c + LEFT JOIN issuers i ON i.code = c.issuer_code + ${whereOf(clauses)} + ORDER BY i.name, c.year_min, c.currency_numeric_value + `) + .all(...params) as PieceWithIssuer[]; + + return { pieces, facets: queryFacets(filters) }; +} + +function queryFacets(filters: PieceFilters): PieceFacets { + const c = buildClauses(filters, 'countries'); + const countries = db + .prepare(` + SELECT c.issuer_code AS code, i.name, i.flag_path, COUNT(*) AS count + FROM coins c + LEFT JOIN issuers i ON i.code = c.issuer_code + ${whereOf(c.clauses)} + GROUP BY c.issuer_code, i.name, i.flag_path + ORDER BY i.name + `) + .all(...c.params) as { code: string; name: string; flag_path: string | null; count: number }[]; + + const cu = buildClauses(filters, 'currencies'); + cu.clauses.push('c.currency_name IS NOT NULL'); + const currencies = db + .prepare(` + SELECT c.currency_name AS name, COUNT(*) AS count + FROM coins c + ${whereOf(cu.clauses)} + GROUP BY c.currency_name + ORDER BY c.currency_name + `) + .all(...cu.params) as { name: string; count: number }[]; + + const fv = buildClauses(filters, 'faceValue'); + fv.clauses.push('c.currency_numeric_value IS NOT NULL'); + const faceValues = db + .prepare(` + SELECT c.currency_numeric_value AS value, COUNT(*) AS count + FROM coins c + ${whereOf(fv.clauses)} + GROUP BY c.currency_numeric_value + ORDER BY c.currency_numeric_value + `) + .all(...fv.params) as { value: number; count: number }[]; + + const cat = buildClauses(filters, 'categories'); + const categories = db + .prepare(` + SELECT c.category, COUNT(*) AS count + FROM coins c + ${whereOf(cat.clauses)} + GROUP BY c.category + ORDER BY c.category + `) + .all(...cat.params) as { category: Category; count: number }[]; + + const ed = buildClauses(filters, 'editions'); + const editionsRaw = db + .prepare(` + SELECT c.is_special, COUNT(*) AS count + FROM coins c + ${whereOf(ed.clauses)} + GROUP BY c.is_special + ORDER BY c.is_special + `) + .all(...ed.params) as { is_special: number; count: number }[]; + const editions = editionsRaw.map((r) => ({ + edition: (r.is_special === 1 ? 'special' : 'standard') as Edition, + count: r.count, + })); + + const sh = buildClauses(filters, 'shapes'); + const shapes = db + .prepare(` + SELECT c.shape_variant AS shape, COUNT(*) AS count + FROM coins c + ${whereOf(sh.clauses)} + GROUP BY c.shape_variant + ORDER BY c.shape_variant + `) + .all(...sh.params) as { shape: ShapeVariant; count: number }[]; + + const y = buildClauses(filters, 'years'); + const yr = db + .prepare(` + SELECT MIN(c.year_min) AS min, MAX(c.year_max) AS max + FROM coins c + ${whereOf(y.clauses)} + `) + .get(...y.params) as { min: number | null; max: number | null } | undefined; + const yearRange = yr && yr.min !== null && yr.max !== null ? { min: yr.min, max: yr.max } : null; + + return { countries, currencies, faceValues, categories, editions, shapes, yearRange }; +} diff --git a/src/db/index.ts b/src/db/index.ts new file mode 100644 index 0000000..08537bc --- /dev/null +++ b/src/db/index.ts @@ -0,0 +1,19 @@ +import { Database } from 'bun:sqlite'; +import { mkdirSync, readFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; + +export const dataDir = process.env.COINS_DATA_DIR ?? './data'; + +mkdirSync(dataDir, { recursive: true }); +mkdirSync(join(dataDir, 'atlases'), { recursive: true }); +mkdirSync(join(dataDir, 'flags'), { recursive: true }); +mkdirSync(join(dataDir, 'sources'), { recursive: true }); + +const dbPath = join(dataDir, 'catalogue.db'); + +export const db = new Database(dbPath, { create: true }); +db.exec('PRAGMA journal_mode = WAL'); +db.exec('PRAGMA foreign_keys = ON'); + +const schemaPath = join(dirname(import.meta.path), 'schema.sql'); +db.exec(readFileSync(schemaPath, 'utf8')); diff --git a/src/db/parse-filters.ts b/src/db/parse-filters.ts new file mode 100644 index 0000000..0ab9b5a --- /dev/null +++ b/src/db/parse-filters.ts @@ -0,0 +1,40 @@ +import { CATEGORIES, EDITIONS, type PieceFilters, SHAPE_VARIANTS } from '@/filter-types'; + +function parseList(raw: string | null): string[] | undefined { + if (!raw) return undefined; + const parts = raw + .split(',') + .map((s) => s.trim()) + .filter(Boolean); + return parts.length ? parts : undefined; +} + +function parseEnumList( + raw: string | null, + allowed: readonly T[], +): T[] | undefined { + const parts = parseList(raw); + if (!parts) return undefined; + const filtered = parts.filter((s): s is T => (allowed as readonly string[]).includes(s)); + return filtered.length ? filtered : undefined; +} + +function parseNumber(raw: string | null): number | undefined { + if (!raw) return undefined; + const n = Number(raw); + return Number.isFinite(n) ? n : undefined; +} + +export function parseFiltersFromUrl(url: URL): PieceFilters { + const sp = url.searchParams; + return { + countries: parseList(sp.get('countries')), + currencies: parseList(sp.get('currencies')), + faceValue: parseNumber(sp.get('face_value')), + categories: parseEnumList(sp.get('categories'), CATEGORIES), + editions: parseEnumList(sp.get('editions'), EDITIONS), + shapes: parseEnumList(sp.get('shapes'), SHAPE_VARIANTS), + yearMin: parseNumber(sp.get('year_min')), + yearMax: parseNumber(sp.get('year_max')), + }; +} diff --git a/src/db/queries.ts b/src/db/queries.ts new file mode 100644 index 0000000..9d5ad3f --- /dev/null +++ b/src/db/queries.ts @@ -0,0 +1,26 @@ +import { db } from '@/db'; +import type { Issuer, IssuerCount, Piece, PieceWithIssuer } from '@/db/types'; + +export const queries = { + allPieces: db.query(` + SELECT c.*, i.name AS issuer_name, i.flag_path AS issuer_flag_path + FROM coins c + LEFT JOIN issuers i ON i.code = c.issuer_code + ORDER BY i.name, c.year_min, c.currency_numeric_value + `), + pieceById: db.query('SELECT * FROM coins WHERE id = ?'), + issuerCounts: db.query(` + SELECT i.code, i.name, i.flag_path, + SUM(CASE WHEN c.category != 'banknote' THEN 1 ELSE 0 END) AS coin_count, + COALESCE(SUM(CASE WHEN c.category != 'banknote' THEN c.count ELSE 0 END), 0) AS coin_sum, + SUM(CASE WHEN c.category = 'banknote' THEN 1 ELSE 0 END) AS banknote_count, + COALESCE(SUM(CASE WHEN c.category = 'banknote' THEN c.count ELSE 0 END), 0) AS banknote_sum + FROM issuers i + LEFT JOIN coins c ON c.issuer_code = i.code + GROUP BY i.code + HAVING COUNT(c.id) > 0 + ORDER BY i.name + `), + issuerByCode: db.query('SELECT * FROM issuers WHERE code = ?'), + allIssuers: db.query('SELECT * FROM issuers ORDER BY name'), +}; diff --git a/src/db/schema.sql b/src/db/schema.sql new file mode 100644 index 0000000..4e261c7 --- /dev/null +++ b/src/db/schema.sql @@ -0,0 +1,59 @@ +CREATE TABLE IF NOT EXISTS issuers ( + code TEXT PRIMARY KEY, + name TEXT NOT NULL, + wikidata_id TEXT, + flag_path TEXT, + added_at INTEGER NOT NULL DEFAULT (unixepoch()) +); + +CREATE TABLE IF NOT EXISTS coins ( + id INTEGER PRIMARY KEY, + title TEXT NOT NULL, + issuer_code TEXT NOT NULL REFERENCES issuers(code) ON DELETE RESTRICT, + category TEXT NOT NULL CHECK (category IN ('coin', 'banknote', 'exonumia')), + currency_name TEXT, + currency_numeric_value REAL, + year_min INTEGER, + year_max INTEGER, + -- `shape_variant` tells the renderer which procedural outline to use; + -- `shape_params` is JSON whose schema depends on the variant. Variants + -- that don't take params (round, irregular) must have NULL params; all + -- other variants must have a JSON object. Validity is enforced by SQLite + -- (the cross-column CHECK below + json_valid on the params column). + shape_variant TEXT NOT NULL DEFAULT 'round' CHECK ( + shape_variant IN ( + 'round', + 'polygon', + 'holed-round', + 'holed-polygon', + 'notched-round', + 'sine-round', + 'rectangular', + 'irregular' + ) + ), + shape_params TEXT CHECK (shape_params IS NULL OR json_valid(shape_params)), + diameter REAL, + width REAL, + height REAL, + thickness REAL, + weight REAL, + orientation TEXT NOT NULL CHECK (orientation IN ('coin', 'medal')) DEFAULT 'medal', + color_hex TEXT NOT NULL DEFAULT '#888888', + is_special INTEGER NOT NULL DEFAULT 0, + count INTEGER NOT NULL DEFAULT 1, + obverse_src TEXT, + reverse_src TEXT, + edge_src TEXT, + added_at INTEGER NOT NULL DEFAULT (unixepoch()), + -- Variant-params consistency: parameterless variants must have NULL params, + -- parameter-taking variants must NOT. + CHECK ( + (shape_variant IN ('round', 'irregular', 'rectangular') AND shape_params IS NULL) + OR (shape_variant NOT IN ('round', 'irregular', 'rectangular') AND shape_params IS NOT NULL) + ) +); + +CREATE INDEX IF NOT EXISTS idx_coins_issuer ON coins(issuer_code); +CREATE INDEX IF NOT EXISTS idx_coins_category ON coins(category); +CREATE INDEX IF NOT EXISTS idx_coins_currency ON coins(currency_name); diff --git a/src/db/types.ts b/src/db/types.ts new file mode 100644 index 0000000..4251766 --- /dev/null +++ b/src/db/types.ts @@ -0,0 +1,85 @@ +export type Issuer = { + code: string; + name: string; + wikidata_id: string | null; + flag_path: string | null; + added_at: number; +}; + +export const SHAPE_VARIANTS = [ + 'round', + 'polygon', + 'holed-round', + 'holed-polygon', + 'notched-round', + 'sine-round', + 'rectangular', + 'irregular', +] as const; +export type ShapeVariant = (typeof SHAPE_VARIANTS)[number]; + +// Shape of `shape_params` JSON per variant (after JSON.parse). `null` means the column is NULL +// (parameterless variants only). The actual DB column is always a JSON string or NULL — see +// `parseShapeParams` for safe access. +export type ShapeParams = { + round: null; + polygon: { + sides: number; + corner_roundness?: number; + edge_roundness?: number; + phase?: number; + }; + 'holed-round': { hole_ratio: number }; + 'holed-polygon': { + sides: number; + hole_ratio: number; + corner_roundness?: number; + edge_roundness?: number; + phase?: number; + }; + 'notched-round': { notches: number; notch_depth: number; sharpness: number }; + 'sine-round': { peaks: number; amplitude: number; phase?: number }; + rectangular: null; + irregular: null; +}; + +export type Piece = { + id: number; + title: string; + issuer_code: string; + category: 'coin' | 'banknote' | 'exonumia'; + currency_name: string | null; + currency_numeric_value: number | null; + year_min: number | null; + year_max: number | null; + shape_variant: ShapeVariant; + shape_params: string | null; // JSON, schema depends on shape_variant + diameter: number | null; + width: number | null; + height: number | null; + thickness: number | null; + weight: number | null; + orientation: 'coin' | 'medal'; + color_hex: string; + is_special: number; + count: number; + obverse_src: string | null; + reverse_src: string | null; + edge_src: string | null; + added_at: number; +}; + +export type PieceWithIssuer = Piece & { + issuer_name: string; + issuer_flag_path: string | null; +}; + +export type IssuerCount = { + code: string; + name: string; + flag_path: string | null; + coin_count: number; + coin_sum: number; + banknote_count: number; + banknote_sum: number; +}; diff --git a/src/filter-types.ts b/src/filter-types.ts new file mode 100644 index 0000000..2be13b4 --- /dev/null +++ b/src/filter-types.ts @@ -0,0 +1,39 @@ +// Pure types + runtime constants shared by client and server. Kept free of any runtime dependency +// on bun:sqlite so it can be imported from the client. + +import type { PieceWithIssuer } from '@/db/types'; +import { SHAPE_VARIANTS, type ShapeVariant } from '@/db/types'; + +export const CATEGORIES = ['coin', 'banknote', 'exonumia'] as const; +export type Category = (typeof CATEGORIES)[number]; + +export const EDITIONS = ['standard', 'special'] as const; +export type Edition = (typeof EDITIONS)[number]; + +export { SHAPE_VARIANTS, type ShapeVariant }; + +export type PieceFilters = { + countries?: string[]; + currencies?: string[]; + faceValue?: number; + categories?: Category[]; + editions?: Edition[]; + shapes?: ShapeVariant[]; + yearMin?: number; + yearMax?: number; +}; + +export type PieceFacets = { + countries: { code: string; name: string; flag_path: string | null; count: number }[]; + currencies: { name: string; count: number }[]; + faceValues: { value: number; count: number }[]; + categories: { category: Category; count: number }[]; + editions: { edition: Edition; count: number }[]; + shapes: { shape: ShapeVariant; count: number }[]; + yearRange: { min: number; max: number } | null; +}; + +export type PiecesResponse = { + pieces: PieceWithIssuer[]; + facets: PieceFacets; +}; diff --git a/src/ingest/atlas.ts b/src/ingest/atlas.ts new file mode 100644 index 0000000..ee4d5f8 --- /dev/null +++ b/src/ingest/atlas.ts @@ -0,0 +1,157 @@ +import { writeFile } from 'node:fs/promises'; +import { join } from 'node:path'; +import sharp from 'sharp'; +import { ATLAS_LAYOUT, type AtlasSize } from '@/atlas-layout'; +import { dataDir } from '@/db'; +import { dominantHex } from '@/ingest/dominant-color'; +import { cropRim } from '@/ingest/rim-crop'; + +const atlasesDir = join(dataDir, 'atlases'); + +type Sources = { + obverse: Buffer | null; + reverse: Buffer | null; + edge: Buffer | null; +}; + +type AtlasOpts = { + orientation: 'coin' | 'medal'; +}; + +const SIZES: readonly AtlasSize[] = [256, 1024]; + +function placeholder(w: number, h: number, color: string): sharp.Sharp { + return sharp({ create: { width: w, height: h, channels: 3, background: color } }); +} + +async function composeAtlas( + sources: Sources, + size: AtlasSize, + fallback: string, + opts: AtlasOpts, +): Promise { + const { width, height, tile, stripH } = ATLAS_LAYOUT[size]; + + const obverse = sources.obverse + ? await sharp(sources.obverse).resize(tile, tile, { fit: 'cover' }).png().toBuffer() + : await placeholder(tile, tile, fallback).png().toBuffer(); + + const reverseBase = sources.reverse + ? sharp(sources.reverse).rotate(opts.orientation === 'coin' ? 180 : 0) + : placeholder(tile, tile, fallback); + const reverse = await reverseBase.resize(tile, tile, { fit: 'cover' }).png().toBuffer(); + + let edge: Buffer; + if (sources.edge) { + const cropped = await cropRim(sources.edge); + const meta = await sharp(cropped).metadata(); + if (meta.width === undefined || meta.height === undefined) { + throw new Error('cropped rim image is missing width/height metadata'); + } + const srcW = meta.width; + const srcH = meta.height; + + const cropLeft = Math.floor(srcW * 0.25); + const cropW = Math.floor(srcW * 0.5); + const tileW = Math.ceil(width / 4); + + const tile = await sharp(cropped) + .extract({ left: cropLeft, top: 0, width: cropW, height: srcH }) + .resize(tileW, stripH, { fit: 'fill' }) + .png() + .toBuffer(); + const tileMirrored = await sharp(tile).flop().png().toBuffer(); + + edge = await sharp({ + create: { width, height: stripH, channels: 3, background: fallback }, + }) + .composite([ + { input: tile, top: 0, left: 0 }, + { input: tileMirrored, top: 0, left: tileW }, + { input: tile, top: 0, left: tileW * 2 }, + { input: tileMirrored, top: 0, left: tileW * 3 }, + ]) + .png() + .toBuffer(); + } else { + edge = await placeholder(width, stripH, fallback).png().toBuffer(); + } + + return sharp({ + create: { width, height, channels: 3, background: fallback }, + }) + .composite([ + { input: obverse, top: 0, left: 0 }, + { input: reverse, top: 0, left: tile }, + { input: edge, top: tile, left: 0 }, + ]) + .webp({ quality: 90 }) + .toBuffer(); +} + +export async function bakeAtlases( + id: number, + sources: Sources, + opts: AtlasOpts, +): Promise<{ colorHex: string }> { + let colorHex = '#888888'; + if (sources.obverse) colorHex = await dominantHex(sources.obverse); + else if (sources.reverse) colorHex = await dominantHex(sources.reverse); + + for (const size of SIZES) { + const atlas = await composeAtlas(sources, size, colorHex, opts); + await writeFile(join(atlasesDir, `${id}-${size}.webp`), atlas); + } + + return { colorHex }; +} + +// Banknotes: stacked obverse-on-reverse, no edge, atlas dimensions follow the banknote's own aspect +// (width × height in mm) — Numista banknotes range from squarish to long-portrait, so there's no +// fixed atlas layout. Resolution targets: the face's long mm-edge maps to `size` (256 / 1024 px), +// so per-face pixel density stays comparable across orientations. +export async function bakeBanknoteAtlases( + id: number, + sources: Sources, + dims: { width: number; height: number }, +): Promise<{ colorHex: string }> { + let colorHex = '#888888'; + if (sources.obverse) colorHex = await dominantHex(sources.obverse); + else if (sources.reverse) colorHex = await dominantHex(sources.reverse); + + const longMm = Math.max(dims.width, dims.height); + + for (const size of SIZES) { + const scale = size / longMm; + const faceW = Math.max(1, Math.round(dims.width * scale)); + const faceH = Math.max(1, Math.round(dims.height * scale)); + + const obverse = sources.obverse + ? await sharp(sources.obverse).resize(faceW, faceH, { fit: 'cover' }).png().toBuffer() + : await placeholder(faceW, faceH, colorHex).png().toBuffer(); + const reverse = sources.reverse + ? await sharp(sources.reverse).resize(faceW, faceH, { fit: 'cover' }).png().toBuffer() + : await placeholder(faceW, faceH, colorHex).png().toBuffer(); + + const atlas = await sharp({ + create: { width: faceW, height: faceH * 2, channels: 3, background: colorHex }, + }) + .composite([ + { input: obverse, top: 0, left: 0 }, + { input: reverse, top: faceH, left: 0 }, + ]) + .webp({ quality: 90 }) + .toBuffer(); + + await writeFile(join(atlasesDir, `${id}-${size}.webp`), atlas); + } + + return { colorHex }; +} + +export async function removeAtlases(id: number): Promise { + const { rm } = await import('node:fs/promises'); + for (const size of SIZES) { + await rm(join(atlasesDir, `${id}-${size}.webp`), { force: true }); + } +} diff --git a/src/ingest/cli.ts b/src/ingest/cli.ts new file mode 100644 index 0000000..e6e5fe9 --- /dev/null +++ b/src/ingest/cli.ts @@ -0,0 +1,63 @@ +import { add, rebake, refetch, remove, setCount } from '@/ingest/commands'; + +const usage = `usage: + bun run ingest add [+count] + bun run ingest remove + bun run ingest set-count + bun run ingest refetch + bun run ingest rebake + +note: 'add' increments count by [+count] (default 1) on existing rows.`; + +function requireId(raw: string | undefined): number { + const id = Number(raw); + + if (!Number.isInteger(id) || id <= 0) { + console.error(`invalid id: ${raw}\n\n${usage}`); + process.exit(1); + } + + return id; +} + +const [, , command, ...args] = process.argv; + +switch (command) { + case 'add': { + const id = requireId(args[0]); + const count = args[1] ? Number(args[1]) : 1; + if (!Number.isInteger(count) || count < 1) { + console.error(`invalid count: ${args[1]}\n\n${usage}`); + process.exit(1); + } + await add(id, count); + break; + } + case 'remove': { + const id = requireId(args[0]); + await remove(id); + break; + } + case 'set-count': { + const id = requireId(args[0]); + const n = Number(args[1]); + if (!Number.isInteger(n) || n < 0) { + console.error(`invalid count: ${args[1]}\n\n${usage}`); + process.exit(1); + } + setCount(id, n); + break; + } + case 'refetch': { + const id = requireId(args[0]); + await refetch(id); + break; + } + case 'rebake': { + await rebake(); + break; + } + default: + console.error(usage); + process.exit(command ? 1 : 0); +} diff --git a/src/ingest/commands.ts b/src/ingest/commands.ts new file mode 100644 index 0000000..d33a18a --- /dev/null +++ b/src/ingest/commands.ts @@ -0,0 +1,149 @@ +import { readdirSync, unlinkSync } from 'node:fs'; +import { join } from 'node:path'; +import { db } from '@/db'; +import type { Piece } from '@/db/types'; +import { bakeAtlases, bakeBanknoteAtlases, removeAtlases } from '@/ingest/atlas'; +import { downloadImage, loadCachedSources, sourcesDir } from '@/ingest/images'; +import { ensureIssuer, retryMissingFlags } from '@/ingest/issuers'; +import { normalize } from '@/ingest/normalize'; +import { fetchNumistaType } from '@/ingest/numista'; +import { resolveShape } from '@/ingest/prompts'; + +function upsert(coin: Omit) { + const cols = Object.keys(coin) as (keyof typeof coin)[]; + const placeholders = cols.map(() => '?').join(', '); + const updates = cols + .filter((c) => c !== 'id') + .map((c) => `${c} = excluded.${c}`) + .join(', '); + const values = cols.map((c) => coin[c] as string | number | null); + + db.query( + `INSERT INTO coins (${cols.join(', ')}) VALUES (${placeholders}) + ON CONFLICT(id) DO UPDATE SET ${updates}`, + ).run(...values); +} + +async function ingest(id: number, count: number) { + console.log(`[${id}] fetching numista...`); + const raw = await fetchNumistaType(id); + console.log(`[${id}] ${raw.title}`); + + if (!raw.issuer) { + throw new Error(`numista ${id}: response has no issuer`); + } + + const issuer = await ensureIssuer(raw.issuer.code, raw.issuer.name); + + const orientation = raw.orientation === 'coin' ? 'coin' : 'medal'; + + console.log(`[${id}] downloading images...`); + const sources = { + obverse: raw.obverse?.picture ? await downloadImage(id, 'obverse', raw.obverse.picture) : null, + reverse: raw.reverse?.picture ? await downloadImage(id, 'reverse', raw.reverse.picture) : null, + edge: raw.edge?.picture ? await downloadImage(id, 'edge', raw.edge.picture) : null, + }; + + console.log(`[${id}] baking atlases...`); + let colorHex: string; + if (raw.category === 'banknote') { + if (raw.size === undefined || raw.size2 === undefined) { + throw new Error(`numista ${id}: banknote missing width/height (size/size2)`); + } + ({ colorHex } = await bakeBanknoteAtlases(id, sources, { + width: raw.size, + height: raw.size2, + })); + } else { + ({ colorHex } = await bakeAtlases(id, sources, { orientation })); + } + + const initialCoin = normalize(raw, { count, colorHex, issuerCode: issuer.code }); + let coin = initialCoin; + // Banknotes are always rectangular and have nothing to prompt about; only coin / exonumia rows go + // through the shape resolver. + if (initialCoin.category !== 'banknote') { + const { variant, paramsJson } = await resolveShape( + initialCoin.shape_variant, + initialCoin.shape_params, + raw.shape, + ); + coin = { ...initialCoin, shape_variant: variant, shape_params: paramsJson }; + } + + upsert(coin); + console.log(`[${id}] done: ${issuer.name} / ${coin.title} (count=${coin.count})`); +} + +export async function add(id: number, count: number) { + const existing = db.query('SELECT * FROM coins WHERE id = ?').get(id); + + if (existing) { + const next = existing.count + count; + db.query('UPDATE coins SET count = ? WHERE id = ?').run(next, id); + console.log(`[${id}] +${count} → ${existing.title} (count: ${existing.count} → ${next})`); + return; + } + + await ingest(id, count); +} + +export async function refetch(id: number) { + const existing = db.query('SELECT * FROM coins WHERE id = ?').get(id); + + if (!existing) { + console.error(`coin ${id} not found — use \`add\` to create`); + process.exit(1); + } + + await ingest(id, existing.count); +} + +export async function remove(id: number) { + const result = db.query('DELETE FROM coins WHERE id = ?').run(id); + + if (result.changes === 0) { + console.error(`coin ${id} not found`); + process.exit(1); + } + + await removeAtlases(id); + + const prefix = `${id}-`; + for (const f of readdirSync(sourcesDir).filter((f) => f.startsWith(prefix))) { + unlinkSync(join(sourcesDir, f)); + } + + console.log(`removed ${id}`); +} + +export function setCount(id: number, n: number) { + const result = db.query('UPDATE coins SET count = ? WHERE id = ?').run(n, id); + if (result.changes === 0) { + console.error(`coin ${id} not found`); + process.exit(1); + } + console.log(`coin ${id}: count = ${n}`); +} + +export async function rebake() { + await retryMissingFlags(); + + const pieces = db.query('SELECT * FROM coins').all(); + + for (const piece of pieces) { + console.log(`[${piece.id}] rebaking...`); + const sources = await loadCachedSources(piece.id); + if (piece.category === 'banknote') { + if (piece.width === null || piece.height === null) { + console.warn(`[${piece.id}] banknote missing width/height; skipping`); + continue; + } + await bakeBanknoteAtlases(piece.id, sources, { width: piece.width, height: piece.height }); + } else { + await bakeAtlases(piece.id, sources, { orientation: piece.orientation }); + } + } + + console.log(`done: ${pieces.length} pieces`); +} diff --git a/src/ingest/dominant-color.ts b/src/ingest/dominant-color.ts new file mode 100644 index 0000000..8a6ec18 --- /dev/null +++ b/src/ingest/dominant-color.ts @@ -0,0 +1,13 @@ +import { Vibrant } from 'node-vibrant/node'; + +export async function dominantHex(buf: Buffer): Promise { + const palette = await Vibrant.from(buf).getPalette(); + const swatch = + palette.Vibrant ?? + palette.Muted ?? + palette.LightVibrant ?? + palette.DarkVibrant ?? + palette.LightMuted ?? + palette.DarkMuted; + return swatch?.hex ?? '#888888'; +} diff --git a/src/ingest/images.ts b/src/ingest/images.ts new file mode 100644 index 0000000..2eef48b --- /dev/null +++ b/src/ingest/images.ts @@ -0,0 +1,52 @@ +import { readdirSync, writeFileSync } from 'node:fs'; +import { extname, join } from 'node:path'; +import { dataDir } from '@/db'; + +export const sourcesDir = join(dataDir, 'sources'); + +const headers = { + 'User-Agent': 'coins/0.1 (personal collection viewer)', + Referer: 'https://en.numista.com/', +}; + +export type Side = 'obverse' | 'reverse' | 'edge'; + +function findCached(id: number, side: Side): string | null { + const prefix = `${id}-${side}.`; + const match = readdirSync(sourcesDir).find((f) => f.startsWith(prefix)); + return match ? join(sourcesDir, match) : null; +} + +export async function downloadImage(id: number, side: Side, url: string): Promise { + const cached = findCached(id, side); + + if (cached) { + return Buffer.from(await Bun.file(cached).arrayBuffer()); + } + + const res = await fetch(url, { headers }); + + if (!res.ok) { + console.warn(`[images] ${id}-${side}: HTTP ${res.status}, skipping`); + return null; + } + + const ext = extname(new URL(url).pathname) || '.jpg'; + const buf = Buffer.from(await res.arrayBuffer()); + writeFileSync(join(sourcesDir, `${id}-${side}${ext}`), buf); + return buf; +} + +export async function loadCachedSources(id: number): Promise> { + return { + obverse: await loadSide(id, 'obverse'), + reverse: await loadSide(id, 'reverse'), + edge: await loadSide(id, 'edge'), + }; +} + +async function loadSide(id: number, side: Side): Promise { + const path = findCached(id, side); + if (!path) return null; + return Buffer.from(await Bun.file(path).arrayBuffer()); +} diff --git a/src/ingest/issuers.ts b/src/ingest/issuers.ts new file mode 100644 index 0000000..a97278d --- /dev/null +++ b/src/ingest/issuers.ts @@ -0,0 +1,108 @@ +import { writeFile } from 'node:fs/promises'; +import { join } from 'node:path'; +import { dataDir, db } from '@/db'; +import type { Issuer } from '@/db/types'; +import { fetchCommonsFile, fetchFlagFilename } from '@/ingest/wikidata'; + +const NUMISTA_BASE = 'https://api.numista.com/api/v3'; +const flagsDir = join(dataDir, 'flags'); +const FLAG_EXTS = ['svg', 'png', 'jpg', 'jpeg', 'webp'] as const; + +type NumistaIssuer = { + code: string; + name: string; + wikidata_id?: string; +}; + +let cachedIssuers: NumistaIssuer[] | null = null; + +async function getNumistaIssuers(): Promise { + if (cachedIssuers) return cachedIssuers; + + const apiKey = process.env.NUMISTA_API_KEY; + if (!apiKey) throw new Error('NUMISTA_API_KEY env var not set'); + + const res = await fetch(`${NUMISTA_BASE}/issuers`, { + headers: { 'Numista-API-Key': apiKey }, + }); + + if (!res.ok) throw new Error(`numista /issuers: HTTP ${res.status}`); + + const data = (await res.json()) as { issuers?: NumistaIssuer[] } | NumistaIssuer[]; + cachedIssuers = Array.isArray(data) ? data : (data.issuers ?? []); + return cachedIssuers; +} + +async function findFlagOnDisk(code: string): Promise { + for (const ext of FLAG_EXTS) { + const filename = `${code}.${ext}`; + if (await Bun.file(join(flagsDir, filename)).exists()) return filename; + } + return null; +} + +async function downloadFlag(code: string, wikidataId: string): Promise { + const filename = await fetchFlagFilename(wikidataId); + if (!filename) return null; + + const buf = await fetchCommonsFile(filename); + if (!buf) return null; + + const ext = FLAG_EXTS.find((e) => filename.toLowerCase().endsWith(`.${e}`)) ?? 'svg'; + const localName = `${code}.${ext}`; + await writeFile(join(flagsDir, localName), buf); + return localName; +} + +async function resolveFlag(code: string, wikidataId: string | null): Promise { + const onDisk = await findFlagOnDisk(code); + if (onDisk) return onDisk; + if (!wikidataId) return null; + return downloadFlag(code, wikidataId); +} + +export async function ensureIssuer(code: string, name: string): Promise { + const existing = db.query('SELECT * FROM issuers WHERE code = ?').get(code); + if (existing) return existing; + + console.log(`[issuer] new: ${code} (${name})`); + + const all = await getNumistaIssuers(); + const wikidataId = all.find((i) => i.code === code)?.wikidata_id ?? null; + const flagPath = await resolveFlag(code, wikidataId); + + if (!flagPath) { + console.warn( + `[issuer] ${code}: no flag found. Drop one at data/flags/${code}.svg (or .png) and re-run \`bun run ingest rebake\`.`, + ); + } + + db.query('INSERT INTO issuers (code, name, wikidata_id, flag_path) VALUES (?, ?, ?, ?)').run( + code, + name, + wikidataId, + flagPath, + ); + + const row = db.query('SELECT * FROM issuers WHERE code = ?').get(code); + if (!row) throw new Error(`issuer ${code} failed to insert`); + return row; +} + +export async function retryMissingFlags(): Promise { + const issuers = db.query('SELECT * FROM issuers').all(); + let updated = 0; + + for (const issuer of issuers) { + const flagPath = await resolveFlag(issuer.code, issuer.wikidata_id); + if (flagPath && flagPath !== issuer.flag_path) { + db.query('UPDATE issuers SET flag_path = ? WHERE code = ?').run(flagPath, issuer.code); + console.log(`[issuer] ${issuer.code}: flag updated → ${flagPath}`); + updated++; + } else if (!flagPath && !issuer.flag_path) { + console.warn(`[issuer] ${issuer.code}: still no flag`); + } + } + + console.log(`flag retry: ${updated} updated, ${issuers.length} total`); +} diff --git a/src/ingest/normalize.ts b/src/ingest/normalize.ts new file mode 100644 index 0000000..037f9d4 --- /dev/null +++ b/src/ingest/normalize.ts @@ -0,0 +1,141 @@ +import type { Piece, ShapeVariant } from '@/db/types'; +import type { NumistaRaw } from '@/ingest/numista'; + +const namedPolygons: Record = { + triangular: 3, + pentagonal: 5, + hexagonal: 6, + heptagonal: 7, + octagonal: 8, + nonagonal: 9, + decagonal: 10, + dodecagonal: 12, +}; + +// Numista's free-text `shape` field → our `(variant, params)` pair. Defaults here are starting +// points — the CLI flags non-round variants after ingest so the user can tweak shape_params on +// individual rows without touching code. +export function classifyShape(raw: string | undefined): { + variant: ShapeVariant; + params: object | null; +} { + if (!raw) return { variant: 'round', params: null }; + + const s = raw.toLowerCase().trim(); + + if (s === '' || s === 'round') return { variant: 'round', params: null }; + + if (s === 'spanish flower' || s === 'flower') { + return { + variant: 'notched-round', + params: { notches: 7, notch_depth: 0.03, sharpness: 8 }, + }; + } + + if (s.includes('hole')) { + // "Holed octagonal", "Holed hexagonal", … — polygon outer + circular hole. + const holedPoly = /^holed\s+(\w+)/.exec(s); + if (holedPoly) { + const polySides = parsePolygonName(holedPoly[1]); + if (polySides) { + return { + variant: 'holed-polygon', + params: { + sides: polySides, + hole_ratio: 0.28, + corner_roundness: 0, + edge_roundness: 0, + phase: 0, + }, + }; + } + } + // Plain "Round with a round hole" and anything else holed → round + hole. + return { variant: 'holed-round', params: { hole_ratio: 0.28 } }; + } + + if (s.includes('square')) { + // 4-sided polygon. Defaulting to diamond orientation (phase=0, vertices at ±Z/±X) because + // Numista's holdings in this category are heavily Bahamas-15-cent-shaped; the user can flip to + // axis-aligned by setting phase=0.5 on the row. + return { + variant: 'polygon', + params: { sides: 4, corner_roundness: 0.4, edge_roundness: 0, phase: 0 }, + }; + } + + const polySides = parsePolygonName(s); + if (polySides) { + return { + variant: 'polygon', + params: { sides: polySides, corner_roundness: 0, edge_roundness: 0, phase: 0 }, + }; + } + + console.warn(`[normalize] unknown shape "${raw}", defaulting to irregular`); + return { variant: 'irregular', params: null }; +} + +function parsePolygonName(name: string): number | null { + if (namedPolygons[name]) return namedPolygons[name]; + const m = /(\d+)/.exec(name); + if (m) { + const n = Number(m[1]); + if (n >= 3 && n <= 20) return n; + } + return null; +} + +function classifyOrientation(raw: string | undefined): Piece['orientation'] { + return raw === 'coin' ? 'coin' : 'medal'; +} + +function classifyCategory(raw: string): Piece['category'] { + if (raw === 'banknote') return 'banknote'; + if (raw === 'exonumia') return 'exonumia'; + return 'coin'; +} + +function classifyIsSpecial(type: string | undefined): 0 | 1 { + if (!type) return 0; + return type.toLowerCase().includes('standard') ? 0 : 1; +} + +export function normalize( + raw: NumistaRaw, + extras: { count: number; colorHex: string; issuerCode: string }, +): Omit { + const category = classifyCategory(raw.category); + const isBanknote = category === 'banknote'; + + // Banknotes are always rectangular; classifyShape is only run for coin / exonumia rows. `size` / + // `size2` are width × height for banknotes and `size` alone is the diameter for coins. + const { variant, params } = isBanknote + ? { variant: 'rectangular' as const, params: null } + : classifyShape(raw.shape); + + return { + id: raw.id, + title: raw.title, + issuer_code: extras.issuerCode, + category, + currency_name: raw.value?.currency?.name ?? null, + currency_numeric_value: raw.value?.numeric_value ?? null, + year_min: raw.min_year ?? null, + year_max: raw.max_year ?? null, + shape_variant: variant, + shape_params: params ? JSON.stringify(params) : null, + diameter: isBanknote ? null : (raw.size ?? null), + width: isBanknote ? (raw.size ?? null) : null, + height: isBanknote ? (raw.size2 ?? null) : null, + thickness: raw.thickness ?? null, + weight: raw.weight ?? null, + orientation: classifyOrientation(raw.orientation), + color_hex: extras.colorHex, + is_special: classifyIsSpecial(raw.type), + count: extras.count, + obverse_src: raw.obverse?.picture ?? null, + reverse_src: raw.reverse?.picture ?? null, + edge_src: raw.edge?.picture ?? null, + }; +} diff --git a/src/ingest/numista.ts b/src/ingest/numista.ts new file mode 100644 index 0000000..7c0e9b9 --- /dev/null +++ b/src/ingest/numista.ts @@ -0,0 +1,47 @@ +const NUMISTA_BASE = 'https://api.numista.com/api/v3'; + +export type NumistaRaw = { + id: number; + title: string; + category: 'coin' | 'banknote' | 'exonumia'; + type?: string; + issuer?: { code: string; iso?: string; name: string }; + value?: { numeric_value?: number; currency?: { name: string } }; + min_year?: number; + max_year?: number; + shape?: string; + size?: number; + size2?: number; + thickness?: number; + weight?: number; + orientation?: 'coin' | 'medal' | 'variable' | 'three' | 'nine'; + obverse?: { picture?: string }; + reverse?: { picture?: string }; + edge?: { picture?: string }; +}; + +export async function fetchNumistaType(id: number): Promise { + const apiKey = process.env.NUMISTA_API_KEY; + + if (!apiKey) { + throw new Error('NUMISTA_API_KEY env var not set'); + } + + const res = await fetch(`${NUMISTA_BASE}/types/${id}`, { + headers: { 'Numista-API-Key': apiKey }, + }); + + if (res.status === 404) { + throw new Error(`numista type ${id} not found`); + } + + if (res.status === 401 || res.status === 403) { + throw new Error('numista auth failed; check NUMISTA_API_KEY'); + } + + if (!res.ok) { + throw new Error(`numista ${id}: HTTP ${res.status}`); + } + + return res.json() as Promise; +} diff --git a/src/ingest/prompts.ts b/src/ingest/prompts.ts new file mode 100644 index 0000000..ef77bd4 --- /dev/null +++ b/src/ingest/prompts.ts @@ -0,0 +1,168 @@ +import { isCancel, log, select, text } from '@clack/prompts'; +import type { ShapeVariant } from '@/db/types'; + +type ParamSpec = { + name: string; + type: 'int' | 'float'; +}; + +// Source of truth for "what params does each variant take". Same data is used both for prompt +// iteration order and for default-value lookups. +const PARAM_SPECS: Record = { + round: [], + polygon: [ + { name: 'sides', type: 'int' }, + { name: 'corner_roundness', type: 'float' }, + { name: 'edge_roundness', type: 'float' }, + { name: 'phase', type: 'float' }, + ], + 'holed-round': [{ name: 'hole_ratio', type: 'float' }], + 'holed-polygon': [ + { name: 'sides', type: 'int' }, + { name: 'hole_ratio', type: 'float' }, + { name: 'corner_roundness', type: 'float' }, + { name: 'edge_roundness', type: 'float' }, + { name: 'phase', type: 'float' }, + ], + 'notched-round': [ + { name: 'notches', type: 'int' }, + { name: 'notch_depth', type: 'float' }, + { name: 'sharpness', type: 'int' }, + ], + 'sine-round': [ + { name: 'peaks', type: 'int' }, + { name: 'amplitude', type: 'float' }, + { name: 'phase', type: 'float' }, + ], + rectangular: [], + irregular: [], +}; + +// Generic defaults — used when the user picks a variant that wasn't auto- mapped from Numista's +// shape string (so we have nothing per-coin to seed the prompt with). Auto-mapped variants come +// pre-filled with normalize.ts's derivations and these are only the fallback. +function defaultParamsFor(variant: ShapeVariant): Record | null { + switch (variant) { + case 'polygon': + return { sides: 8, corner_roundness: 0, edge_roundness: 0, phase: 0 }; + case 'holed-round': + return { hole_ratio: 0.28 }; + case 'holed-polygon': + return { + sides: 8, + hole_ratio: 0.28, + corner_roundness: 0, + edge_roundness: 0, + phase: 0, + }; + case 'notched-round': + return { notches: 7, notch_depth: 0.03, sharpness: 8 }; + case 'sine-round': + return { peaks: 12, amplitude: 0.04, phase: 0 }; + default: + return null; + } +} + +const VARIANT_OPTIONS: { value: ShapeVariant; label: string; hint: string }[] = [ + { value: 'round', label: 'round', hint: 'no params' }, + { value: 'polygon', label: 'polygon', hint: 'N-sided prism' }, + { value: 'holed-round', label: 'holed-round', hint: 'circle with circular hole' }, + { value: 'holed-polygon', label: 'holed-polygon', hint: 'N-gon with circular hole' }, + { value: 'notched-round', label: 'notched-round', hint: 'circle with sharp notches' }, + { value: 'sine-round', label: 'sine-round', hint: 'circle with sinusoidal perimeter' }, + { value: 'irregular', label: 'irregular', hint: 'no params, falls back to round' }, +]; + +async function pickVariant(rawShape: string | undefined): Promise { + const result = await select({ + message: `Numista shape "${rawShape ?? '(none)'}" wasn't auto-mapped. Pick variant:`, + options: VARIANT_OPTIONS, + }); + if (isCancel(result)) { + log.warn('Cancelled; falling back to irregular.'); + return 'irregular'; + } + return result; +} + +async function promptParams( + variant: ShapeVariant, + defaults: Record, +): Promise> { + const specs = PARAM_SPECS[variant]; + const params: Record = {}; + + for (let i = 0; i < specs.length; i++) { + const spec = specs[i]; + const def = defaults[spec.name]; + const defStr = def !== undefined ? String(def) : ''; + + const result = await text({ + message: `${spec.name} (${spec.type})`, + placeholder: defStr, + defaultValue: defStr, + validate: (value) => { + const trimmed = (value ?? '').trim(); + if (trimmed === '') return undefined; // Enter → use default + const n = Number(trimmed); + if (!Number.isFinite(n)) return 'must be a number'; + if (spec.type === 'int' && !Number.isInteger(n)) return 'must be an integer'; + return undefined; + }, + }); + + if (isCancel(result)) { + // Keep defaults for this and every remaining param, then break. + for (let j = i; j < specs.length; j++) { + const remaining = specs[j]; + const remDef = defaults[remaining.name]; + if (remDef !== undefined) params[remaining.name] = remDef; + } + log.warn('Cancelled; using defaults for the rest.'); + break; + } + + const trimmed = (result as string).trim(); + params[spec.name] = trimmed === '' ? def : Number(trimmed); + } + + return params; +} + +// Top-level entry point called from the ingest flow. Given the auto-mapped variant + params from +// normalize.ts and the original Numista shape string, runs the interactive prompts (variant picker +// if needed, then per-param inputs) and returns the resolved (variant, JSON params) pair to upsert. +export async function resolveShape( + initialVariant: ShapeVariant, + initialParamsJson: string | null, + rawShape: string | undefined, +): Promise<{ variant: ShapeVariant; paramsJson: string | null }> { + let variant = initialVariant; + + // Numista shape didn't map to a known variant — let the user pick one. + if (variant === 'irregular' && rawShape && rawShape.trim() !== '') { + variant = await pickVariant(rawShape); + } + + if (variant === 'round' || variant === 'irregular' || variant === 'rectangular') { + return { variant, paramsJson: null }; + } + + // Defaults: if the variant didn't change from what normalize derived, use those concrete values; + // otherwise fall back to generic defaults. + let defaults: Record | null = null; + if (variant === initialVariant && initialParamsJson) { + try { + defaults = JSON.parse(initialParamsJson) as Record; + } catch { + defaults = defaultParamsFor(variant); + } + } else { + defaults = defaultParamsFor(variant); + } + + log.info(`shape_variant: ${variant}`); + const params = await promptParams(variant, defaults ?? {}); + return { variant, paramsJson: JSON.stringify(params) }; +} diff --git a/src/ingest/rim-crop.ts b/src/ingest/rim-crop.ts new file mode 100644 index 0000000..c63de2a --- /dev/null +++ b/src/ingest/rim-crop.ts @@ -0,0 +1,58 @@ +import sharp from 'sharp'; + +// Find the rim band in an edge photograph by row-luminance deviation from the corner-pixel +// background, and crop down to it. Bails on extreme matches. +export async function cropRim(buf: Buffer): Promise { + const { data, info } = await sharp(buf).greyscale().raw().toBuffer({ resolveWithObject: true }); + const { width, height } = info; + + const cornerSize = Math.max(1, Math.min(10, Math.floor(width / 20), Math.floor(height / 20))); + const corners: [number, number][] = [ + [0, 0], + [0, width - cornerSize], + [height - cornerSize, 0], + [height - cornerSize, width - cornerSize], + ]; + let bgSum = 0; + let bgCount = 0; + for (const [cy, cx] of corners) { + for (let dy = 0; dy < cornerSize; dy++) { + for (let dx = 0; dx < cornerSize; dx++) { + bgSum += data[(cy + dy) * width + (cx + dx)] ?? 0; + bgCount++; + } + } + } + const bgAvg = bgSum / bgCount; + + const rowAvgs = new Float32Array(height); + for (let y = 0; y < height; y++) { + let sum = 0; + for (let x = 0; x < width; x++) sum += data[y * width + x] ?? 0; + rowAvgs[y] = sum / width; + } + + const THRESHOLD = 30; + let bestStart = 0; + let bestLen = 0; + let curStart = 0; + let curLen = 0; + for (let y = 0; y < height; y++) { + if (Math.abs(rowAvgs[y] - bgAvg) > THRESHOLD) { + if (curLen === 0) curStart = y; + curLen++; + if (curLen > bestLen) { + bestStart = curStart; + bestLen = curLen; + } + } else { + curLen = 0; + } + } + + if (bestLen < height * 0.05 || bestLen > height * 0.95) { + return buf; + } + + return sharp(buf).extract({ left: 0, top: bestStart, width, height: bestLen }).png().toBuffer(); +} diff --git a/src/ingest/wikidata.ts b/src/ingest/wikidata.ts new file mode 100644 index 0000000..79e1a2a --- /dev/null +++ b/src/ingest/wikidata.ts @@ -0,0 +1,51 @@ +const headers = { 'User-Agent': 'coins-ingest/0.1' }; + +type WikidataEntityResponse = { + entities?: Record< + string, + { + claims?: Record< + string, + Array<{ + mainsnak?: { + datavalue?: { value?: unknown }; + }; + }> + >; + } + >; +}; + +export async function fetchFlagFilename(qid: string): Promise { + const res = await fetch(`https://www.wikidata.org/wiki/Special:EntityData/${qid}.json`, { + headers, + }); + + if (!res.ok) { + console.warn(`[wikidata] ${qid}: HTTP ${res.status}`); + return null; + } + + const data = (await res.json()) as WikidataEntityResponse; + const entity = data.entities?.[qid]; + const p41 = entity?.claims?.P41; + + if (!p41 || p41.length === 0) { + return null; + } + + const value = p41[0]?.mainsnak?.datavalue?.value; + return typeof value === 'string' ? value : null; +} + +export async function fetchCommonsFile(filename: string): Promise { + const url = `https://commons.wikimedia.org/wiki/Special:FilePath/${encodeURIComponent(filename)}`; + const res = await fetch(url, { headers, redirect: 'follow' }); + + if (!res.ok) { + console.warn(`[commons] ${filename}: HTTP ${res.status}`); + return null; + } + + return Buffer.from(await res.arrayBuffer()); +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..3cd0e0d --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,41 @@ +import { NuqsAdapter } from 'nuqs/adapters/react'; +import { StrictMode, Suspense } from 'react'; +import { RouterProvider } from 'react-aria-components'; +import { createRoot } from 'react-dom/client'; +import { Route, Switch, useLocation } from 'wouter'; +import { Loading } from '@/components/loading'; +import { Home } from '@/pages/home'; +import { Pile } from '@/pages/pile'; +import { ShapeTest } from '@/pages/shape-test'; +import { Showcase } from '@/pages/showcase'; +import '@/styles.css'; + +function App() { + const [, navigate] = useLocation(); + return ( + + + }> + + + + + + + + + + ); +} + +const root = document.getElementById('root'); + +if (!root) { + throw new Error('#root not found'); +} + +createRoot(root).render( + + + , +); diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx deleted file mode 100644 index 567baa7..0000000 --- a/src/pages/_app.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import '@/styles/globals.css'; -import '@/styles/theme.css'; -import 'primeicons/primeicons.css'; -import 'primereact/resources/primereact.min.css'; -import { AppProps } from 'next/app'; -import { PrimeReactProvider } from 'primereact/api'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import Div100vh from 'react-div-100vh'; - -const queryClient = new QueryClient(); - -export default function MyApp({ Component, pageProps }: AppProps) { - return ( - <> - - - - - - - - - - - ); -} diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx deleted file mode 100644 index 32dc903..0000000 --- a/src/pages/_document.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Head, Html, Main, NextScript } from 'next/document'; - -export default function Document() { - return ( - - - -
- - - - ); -} diff --git a/src/pages/api/countries.ts b/src/pages/api/countries.ts deleted file mode 100644 index 6dad18e..0000000 --- a/src/pages/api/countries.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* eslint-disable no-console */ -import { NextApiHandler } from 'next'; -import { getCountries } from '@/api/countries/get-countries'; - -const handler: NextApiHandler = async ({ query }, res) => { - if (Array.isArray(query.filter)) { - res.status(400).json({ - message: `Invalid filter ${JSON.stringify(query.filter)}` - }); - - return; - } - - try { - const countries = await getCountries(query.filter); - - res.status(200).json(countries); - } catch (error) { - console.error(error); - res.status(500).json({ - error: String(error), - message: `Something went wrong` - }); - } -}; - -export default handler; diff --git a/src/pages/api/country-counts.ts b/src/pages/api/country-counts.ts deleted file mode 100644 index 2155ff1..0000000 --- a/src/pages/api/country-counts.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* eslint-disable no-console */ -import { NextApiHandler } from 'next'; -import { getCountryCounts } from '@/api/countries/get-country-counts'; - -const handler: NextApiHandler = async (_req, res) => { - try { - const countryCounts = await getCountryCounts(); - - res.status(200).json(countryCounts); - } catch (error) { - console.error(error); - res.status(500).json({ - error: String(error), - message: `Something went wrong` - }); - } -}; - -export default handler; diff --git a/src/pages/api/currencies.ts b/src/pages/api/currencies.ts deleted file mode 100644 index 7e19df7..0000000 --- a/src/pages/api/currencies.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* eslint-disable no-console */ -import { NextApiHandler } from 'next'; -import { getCurrencies } from '@/api/currencies/get-currencies'; - -const handler: NextApiHandler = async ({ query }, res) => { - if (Array.isArray(query.filter)) { - res.status(400).json({ - message: `Invalid filter ${JSON.stringify(query.filter)}` - }); - - return; - } - - try { - const currencies = await getCurrencies(query.filter); - - res.status(200).json(currencies); - } catch (error) { - console.error(error); - res.status(500).json({ - error: String(error), - message: `Something went wrong` - }); - } -}; - -export default handler; diff --git a/src/pages/api/merge-textures/[id].ts b/src/pages/api/merge-textures/[id].ts deleted file mode 100644 index 37d4926..0000000 --- a/src/pages/api/merge-textures/[id].ts +++ /dev/null @@ -1,46 +0,0 @@ -/* eslint-disable no-console */ -import { NextApiHandler } from 'next'; -import { generateImage } from '@/core/utils/merge-textures'; - -const handler: NextApiHandler = async ({ query: { id, type } }, res) => { - if (!Number(id)) { - res.status(400).json({ - message: `Invalid id ${JSON.stringify(id)}` - }); - - return; - } - - if (type && !['bump', 'base'].includes(type as string)) { - res.status(400).json({ - message: `Invalid type ${JSON.stringify(type)}` - }); - - return; - } - - const parsedType = (type ?? 'base') as 'base' | 'bump'; - - try { - const image = await generateImage(Number(id), parsedType); - - if (!image) { - res.status(404).json({ - message: `Texture "${parsedType}" for coin ${id} not found` - }); - - return; - } - - res.setHeader('Content-Type', 'image/webp'); - res.status(200).send(image); - } catch (error) { - console.error(error); - res.status(500).json({ - error: String(error), - message: `Something went wrong` - }); - } -}; - -export default handler; diff --git a/src/pages/api/types/index.ts b/src/pages/api/types/index.ts deleted file mode 100644 index 8147e28..0000000 --- a/src/pages/api/types/index.ts +++ /dev/null @@ -1,75 +0,0 @@ -/* eslint-disable no-console */ -import { NextApiHandler } from 'next'; -import { getTypes } from '@/api/types/get-types'; - -const handler: NextApiHandler = async ({ query }, res) => { - if (Array.isArray(query.search)) { - res.status(400).json({ - message: `Invalid search ${JSON.stringify(query.search)}` - }); - - return; - } - - if (Array.isArray(query.faceValue) || (query.faceValue && !Number(query.faceValue))) { - res.status(400).json({ - message: `Invalid faceValue ${JSON.stringify(query.faceValue)}` - }); - - return; - } - - if (Array.isArray(query.category) || (query.category && !['coins', 'banknotes'].includes(query.category))) { - res.status(400).json({ - message: `Invalid category ${JSON.stringify(query.category)}` - }); - - return; - } - - if (Array.isArray(query.special) || (query.special && !['yes', 'no', 'both'].includes(query.special))) { - res.status(400).json({ - message: `Invalid special filter ${JSON.stringify(query.special)}` - }); - - return; - } - - if (Array.isArray(query.yearRange) && (query.yearRange.length !== 2 || query.yearRange.some(year => !Number(year)))) { - res.status(400).json({ - message: `Invalid year range ${JSON.stringify(query.yearRange)}` - }); - - return; - } - - try { - const coins = await getTypes({ - category: query.category as 'coins' | 'banknotes' | undefined, - faceValue: query.faceValue ? Number(query.faceValue) : undefined, - search: query.search, - special: query.special as 'yes' | 'no' | 'both' | undefined, - yearRange: Array.isArray(query.yearRange) ? (query.yearRange.map(Number) as [number, number]) : undefined, - ...(query.currencies && { - currencies: Array.isArray(query.currencies) ? query.currencies : [query.currencies] - }), - ...(query.countries && { - countries: Array.isArray(query.countries) ? query.countries : [query.countries] - }) - }); - - if (!coins.length) { - return res.status(404).json(coins); - } - - res.status(200).json(coins); - } catch (error) { - console.error(error); - res.status(500).json({ - error: String(error), - message: `Something went wrong` - }); - } -}; - -export default handler; diff --git a/src/pages/api/types/random.ts b/src/pages/api/types/random.ts deleted file mode 100644 index eb62953..0000000 --- a/src/pages/api/types/random.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* eslint-disable no-console */ -import { NextApiHandler } from 'next'; -import { getRandomType } from '@/api/types/get-random-type'; - -const handler: NextApiHandler = async (_, res) => { - try { - const type = await getRandomType(); - - res.status(200).json(type); - } catch (error) { - console.error(error); - res.status(500).json({ - error: String(error), - message: `Something went wrong` - }); - } -}; - -export default handler; diff --git a/src/pages/home.tsx b/src/pages/home.tsx new file mode 100644 index 0000000..d28ba05 --- /dev/null +++ b/src/pages/home.tsx @@ -0,0 +1,84 @@ +import { use } from 'react'; +import { Link } from 'wouter'; +import { fetchCountryCounts, fetchPieces } from '@/api'; +import { Hail } from '@/components/hail'; + +function formatCountLine(noun: string, count: number, sum: number): string | null { + if (count === 0) return null; + const plural = sum === 1 ? noun : `${noun}s`; + return count === sum ? `${sum} ${plural}` : `${sum} ${plural} (${count} unique)`; +} + +export function Home() { + // Kick off both fetches in parallel before the first use() can suspend. Hail renders + // directly, so the pool must exclude banknotes. + const countsPromise = fetchCountryCounts(); + const piecesPromise = fetchPieces({ categories: ['coin'] }); + + const countries = use(countsPromise); + const { pieces: hailPool } = use(piecesPromise); + + return ( +
+ + +
+
+

Coins

+

a personal collection

+
+ + {countries.length === 0 ? ( +

+ No coins ingested yet. Try{' '} + + bun run ingest add <id> + + . +

+ ) : ( +
    + {countries.map((c) => ( +
  • + {c.flag_path ? ( + + ) : ( +
    + )} +
    +

    {c.name}

    +

    + {[ + formatCountLine('coin', c.coin_count, c.coin_sum), + formatCountLine('banknote', c.banknote_count, c.banknote_sum), + ] + .filter(Boolean) + .join(' · ')} +

    +
    +
    + + showcase + + + pile + +
    +
  • + ))} +
+ )} +
+
+ ); +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx deleted file mode 100644 index 68ac0ed..0000000 --- a/src/pages/index.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { GetStaticProps, NextPage } from 'next'; -import { Hail } from '@/components/hail'; -import { getCountryCounts } from '@/api/countries/get-country-counts'; -import { getFlagEmoji } from '@/core/utils/flags'; -import Head from 'next/head'; -import Link from 'next/link'; - -type Props = { - countryCounts: Awaited>; -}; - -const CountriesPage: NextPage = ({ countryCounts }) => { - return ( - <> - - {'Coins'} - - - - - -
-
-
- {countryCounts.map(country => ( -
- {`${getFlagEmoji(country.iso)} ${ - country.name - }`} - -
- {country.coins?.count ? ( - <> - {`pile (${country.coins.sum})`} - - {`coins (${country.coins.count})`} - - - ) : ( - <> -
-
- - )} - - {country.banknotes?.count ? ( - - {`banknotes (${country.banknotes.count})`} - - ) : ( -
- )} -
-
- ))} -
-
-
- - ); -}; - -export const getStaticProps: GetStaticProps = async () => { - const countryCounts = await getCountryCounts(); - - return { - props: { - countryCounts - } - }; -}; - -export default CountriesPage; diff --git a/src/pages/pile.tsx b/src/pages/pile.tsx index 05faa49..ae41302 100644 --- a/src/pages/pile.tsx +++ b/src/pages/pile.tsx @@ -1,46 +1,67 @@ -import { Filters } from '@/components/filters'; -import { GetServerSidePropsContext, GetServerSidePropsResult, NextPage } from 'next'; -import { Header } from '@/components/header'; -import { ParsedUrlQuery } from 'querystring'; -import { Pile } from '@/components/pile'; -import { useState } from 'react'; -import Head from 'next/head'; -import styles from '@/styles/search.module.css'; +import { Canvas } from '@react-three/fiber'; +import { use, useEffect, useMemo } from 'react'; +import { fetchPieces } from '@/api'; +import { FilterSidebar } from '@/components/filters/sidebar'; +import { useFilters } from '@/components/filters/state'; +import { PileScene } from '@/components/pile/scene'; +import { CATEGORIES, type Category } from '@/filter-types'; -type Props = { query: ParsedUrlQuery }; +const PILE_EXCLUDED_CATEGORIES: readonly Category[] = ['banknote']; -const PilePage: NextPage = ({ query }) => { - const [drawerVisible, setDrawerVisible] = useState(false); +export function Pile() { + const { filters, state, setState } = useFilters(); + + // Pile never shows banknotes. Mirror that into the URL so the disabled checkbox in the sidebar + // matches the actual filter state — and so a cross-page nav back to /showcase carries no surprise + // inclusions either. + useEffect(() => { + const base = state.categories.length === 0 ? CATEGORIES : state.categories; + const next = base.filter((c) => !PILE_EXCLUDED_CATEGORIES.includes(c)); + const same = + next.length === state.categories.length && next.every((c, i) => c === state.categories[i]); + if (!same) { + void setState({ categories: next }); + } + }, [state.categories, setState]); + + // Strip banknote from the filter passed to fetch synchronously, so the very first render after a + // URL with categories=banknote doesn't flash banknotes into the pile before the effect-driven URL + // sync lands. + const effectiveFilters = useMemo(() => { + if (!filters.categories) { + return { ...filters, categories: CATEGORIES.filter((c) => c !== 'banknote') }; + } + return { + ...filters, + categories: filters.categories.filter((c) => c !== 'banknote'), + }; + }, [filters]); + + const { pieces: coins } = use(fetchPieces(effectiveFilters)); + + const total = useMemo(() => coins.reduce((sum, c) => sum + c.count, 0), [coins]); return ( - <> - - {'Coin pile'} - - - - +
+ + + -
setDrawerVisible(true)} route={'pile'} /> + {coins.length === 0 ? ( +
+

no coins match

+
+ ) : ( +
+

+ {total} coin{total === 1 ? '' : 's'} + · + {coins.length} type{coins.length === 1 ? '' : 's'} +

+
+ )} - setDrawerVisible(false)} - query={query} - visible={drawerVisible} - /> - - - + +
); -}; - -export const getServerSideProps = ({ query }: GetServerSidePropsContext): GetServerSidePropsResult => ({ - props: { - query - } -}); - -export default PilePage; +} diff --git a/src/pages/shape-test.tsx b/src/pages/shape-test.tsx new file mode 100644 index 0000000..0f3dee0 --- /dev/null +++ b/src/pages/shape-test.tsx @@ -0,0 +1,367 @@ +import { OrbitControls, PerspectiveCamera, useTexture } from '@react-three/drei'; +import { Canvas } from '@react-three/fiber'; +import { Suspense, use, useCallback, useMemo, useState } from 'react'; +import { + Button, + Label, + ListBox, + ListBoxItem, + Popover, + Select, + SelectValue, + Slider, + SliderOutput, + SliderThumb, + SliderTrack, +} from 'react-aria-components'; +import * as THREE from 'three'; +import { RectAreaLightUniformsLib } from 'three/addons/lights/RectAreaLightUniformsLib.js'; +import { fetchPieces } from '@/api'; +import { buildExtrudedCoinGeometry } from '@/components/piece/coin/extrude'; +import { buildShapeFromVariant } from '@/components/piece/coin/shape-variants'; +import { LightRig, StudioLight } from '@/components/showcase/lights'; + +RectAreaLightUniformsLib.init(); + +const RADIUS = 0.012; +const THICKNESS = 0.002; + +// The variants this page can tweak. Round / irregular / rectangular have no params (rectangular is +// banknote-only anyway), so they're not listed. +const TEST_VARIANTS = [ + 'polygon', + 'holed-polygon', + 'holed-round', + 'notched-round', + 'sine-round', +] as const; +type TestVariant = (typeof TEST_VARIANTS)[number]; + +const VARIANT_LABELS: Record = { + polygon: 'polygon', + 'holed-polygon': 'holed-polygon', + 'holed-round': 'holed-round', + 'notched-round': 'notched-round', + 'sine-round': 'sine-round', +}; + +// Param keys used across all variants. We keep one flat state record so switching variants in the +// selector doesn't wipe values the user set under a different variant — only the JSON we emit + the +// sliders we render depend on the active variant. +type ParamKey = + | 'sides' + | 'corner_roundness' + | 'edge_roundness' + | 'phase' + | 'hole_ratio' + | 'notches' + | 'notch_depth' + | 'sharpness' + | 'peaks' + | 'amplitude'; + +type Params = Record; + +// Slider bounds + step per param. `sides`, `notches`, `peaks`, `sharpness` are integer sliders; the +// rest are floats with 0.01 resolution. +const SLIDER_CONFIG: Record = { + sides: { min: 3, max: 20, step: 1 }, + corner_roundness: { min: 0, max: 1, step: 0.01 }, + edge_roundness: { min: 0, max: 1, step: 0.01 }, + phase: { min: 0, max: 1, step: 0.01 }, + hole_ratio: { min: 0, max: 0.9, step: 0.01 }, + notches: { min: 3, max: 20, step: 1 }, + notch_depth: { min: 0, max: 0.3, step: 0.01 }, + sharpness: { min: 1, max: 30, step: 1 }, + peaks: { min: 3, max: 30, step: 1 }, + amplitude: { min: 0, max: 0.2, step: 0.01 }, +}; + +// Param order matches the ingest pipeline so the emitted SQL diffs minimally against existing rows. +const VARIANT_PARAMS: Record = { + polygon: ['sides', 'corner_roundness', 'edge_roundness', 'phase'], + 'holed-polygon': ['sides', 'hole_ratio', 'corner_roundness', 'edge_roundness', 'phase'], + 'holed-round': ['hole_ratio'], + 'notched-round': ['notches', 'notch_depth', 'sharpness'], + 'sine-round': ['peaks', 'amplitude', 'phase'], +}; + +const DEFAULT_PARAMS: Params = { + sides: 6, + corner_roundness: 0, + edge_roundness: 0, + phase: 0, + hole_ratio: 0.28, + notches: 7, + notch_depth: 0.03, + sharpness: 8, + peaks: 12, + amplitude: 0.04, +}; + +function pickParams(variant: TestVariant, params: Params): Record { + const out: Record = {}; + for (const k of VARIANT_PARAMS[variant]) out[k] = params[k]; + return out; +} + +function TexturedMesh({ geometry, pieceId }: { geometry: THREE.BufferGeometry; pieceId: number }) { + const texture = useTexture(`/atlases/${pieceId}-1024.webp`); + const material = useMemo(() => { + texture.colorSpace = THREE.SRGBColorSpace; + texture.wrapS = THREE.RepeatWrapping; + texture.wrapT = THREE.ClampToEdgeWrapping; + texture.needsUpdate = true; + return new THREE.MeshStandardMaterial({ map: texture, metalness: 1, roughness: 0.45 }); + }, [texture]); + return ; +} + +function WhiteMesh({ geometry }: { geometry: THREE.BufferGeometry }) { + const material = useMemo( + () => new THREE.MeshStandardMaterial({ color: '#ffffff', metalness: 0.1, roughness: 0.4 }), + [], + ); + return ; +} + +function ShapeMesh({ + variant, + params, + pieceId, +}: { + variant: TestVariant; + params: Params; + pieceId: number | null; +}) { + const geometry = useMemo(() => { + const paramsJson = JSON.stringify(pickParams(variant, params)); + const shape = buildShapeFromVariant(variant, paramsJson, RADIUS); + if (!shape) { + // All TEST_VARIANTS go through the extrude path; this is just a type-narrowing fallback (an + // empty BufferGeometry is harmless). + return new THREE.BufferGeometry(); + } + return buildExtrudedCoinGeometry({ + outer: shape.outer, + inner: shape.inner, + thickness: THICKNESS, + uvRadius: RADIUS, + atlas: 1024, + }); + }, [variant, params]); + + return pieceId !== null ? ( + + ) : ( + + ); +} + +function ParamSlider({ + paramKey, + value, + onChange, +}: { + paramKey: ParamKey; + value: number; + onChange: (v: number) => void; +}) { + const { min, max, step } = SLIDER_CONFIG[paramKey]; + return ( + onChange(v as number)} + minValue={min} + maxValue={max} + step={step} + className="flex flex-col gap-1" + > +
+ + +
+ + {({ state }) => ( + <> +
+
+ + + )} + + + ); +} + +function VariantSelect({ + value, + onChange, +}: { + value: TestVariant; + onChange: (v: TestVariant) => void; +}) { + return ( + + ); +} + +// One-shot read of `?id` from the URL. Sliders initialise from the matching piece's shape_params +// (when its variant is one we support) but don't sync back to the URL or to subsequent piece +// changes — once mounted, the test page is purely a local sandbox. +function readInitialId(): number | null { + const raw = new URLSearchParams(window.location.search).get('id'); + if (!raw) return null; + const n = Number(raw); + return Number.isFinite(n) ? n : null; +} + +function isTestVariant(v: string): v is TestVariant { + return (TEST_VARIANTS as readonly string[]).includes(v); +} + +export function ShapeTest() { + const initialId = useMemo(readInitialId, []); + const piece = + initialId !== null ? (use(fetchPieces()).pieces.find((p) => p.id === initialId) ?? null) : null; + + // Seed variant + params from the piece (when its variant is supported). Unsupported variants + // (round, irregular, rectangular) just fall back to the polygon defaults so the page still + // renders something useful. + const initial = useMemo<{ variant: TestVariant; params: Params }>(() => { + const params: Params = { ...DEFAULT_PARAMS }; + if (!piece || !isTestVariant(piece.shape_variant)) { + return { variant: 'polygon', params }; + } + if (piece.shape_params) { + try { + const parsed = JSON.parse(piece.shape_params) as Partial; + for (const k of Object.keys(parsed) as ParamKey[]) { + if (k in params && typeof parsed[k] === 'number') params[k] = parsed[k] as number; + } + } catch { + // Fall through with defaults. + } + } + return { variant: piece.shape_variant, params }; + }, [piece]); + + const [variant, setVariant] = useState(() => initial.variant); + const [params, setParams] = useState(() => initial.params); + + const setParam = useCallback((key: ParamKey, value: number) => { + setParams((prev) => ({ ...prev, [key]: value })); + }, []); + + const heading = piece ? `Shape test · #${piece.id} ${piece.title}` : 'Shape test'; + + // SQL UPDATE for the loaded piece using the current variant + params. + const sqlUpdate = useMemo(() => { + if (!piece) return null; + const json = JSON.stringify(pickParams(variant, params)); + return `UPDATE coins SET shape_variant='${variant}', shape_params='${json}' WHERE id=${piece.id};`; + }, [piece, variant, params]); + + const [copied, setCopied] = useState(false); + const handleCopy = useCallback(() => { + if (!sqlUpdate) return; + navigator.clipboard.writeText(sqlUpdate).then(() => { + setCopied(true); + setTimeout(() => setCopied(false), 1500); + }); + }, [sqlUpdate]); + + const activeParamKeys = VARIANT_PARAMS[variant]; + + return ( +
+ + + + + + + + + {/* Local Suspense barrier: useTexture suspends inside this tree + while the atlas loads. Without containing it here the outer + app-level Suspense unmounts the Canvas, which under StrictMode's + double-mount can lose the WebGL context (see PLAN.md "Known + oddities"). */} + + + + + + + +
+

{heading}

+ + {activeParamKeys.map((k) => ( + setParam(k, v)} /> + ))} + {sqlUpdate && ( +
+ + {sqlUpdate} + + +
+ )} +
+
+ ); +} diff --git a/src/pages/showcase.tsx b/src/pages/showcase.tsx index 352ec50..fbccaaa 100644 --- a/src/pages/showcase.tsx +++ b/src/pages/showcase.tsx @@ -1,45 +1,134 @@ -import { Filters } from '@/components/filters'; -import { GetServerSidePropsContext, GetServerSidePropsResult, NextPage } from 'next'; -import { Header } from '@/components/header'; -import { ParsedUrlQuery } from 'querystring'; -import { Showcase } from '@/components/showcase'; -import { useState } from 'react'; -import Head from 'next/head'; -import styles from '@/styles/search.module.css'; +import { OrbitControls, PerspectiveCamera } from '@react-three/drei'; +import { Canvas } from '@react-three/fiber'; +import { parseAsBoolean, parseAsInteger, useQueryState } from 'nuqs'; +import { use, useCallback, useEffect, useMemo, useRef } from 'react'; +import { RectAreaLightUniformsLib } from 'three/addons/lights/RectAreaLightUniformsLib.js'; +import { fetchPieces } from '@/api'; +import { FilterSidebar } from '@/components/filters/sidebar'; +import { useFilters } from '@/components/filters/state'; +import { InfoPanel } from '@/components/showcase/info-panel'; +import { LightRig, StudioLight } from '@/components/showcase/lights'; +import { NavButton } from '@/components/showcase/nav-button'; +import { PieceStage } from '@/components/showcase/piece-stage'; -type Props = { query: ParsedUrlQuery }; +RectAreaLightUniformsLib.init(); -const ShowcasePage: NextPage = ({ query }) => { - const [drawerVisible, setDrawerVisible] = useState(false); +export function Showcase() { + const [id, setId] = useQueryState('id', parseAsInteger); + const [spin, setSpin] = useQueryState('spin', parseAsBoolean.withDefault(true)); + const { filters } = useFilters(); + const transitioningRef = useRef(false); + + const { pieces } = use(fetchPieces(filters)); + + const index = useMemo(() => { + if (id === null) return 0; + const i = pieces.findIndex((c) => c.id === id); + return i >= 0 ? i : 0; + }, [pieces, id]); + + const current = pieces[index]; + + useEffect(() => { + if (current && current.id !== id) setId(current.id); + }, [current, id, setId]); + + const navPrev = useCallback(() => { + if (transitioningRef.current || pieces.length === 0) return; + const prev = (index - 1 + pieces.length) % pieces.length; + setId(pieces[prev].id); + }, [pieces, index, setId]); + + const navNext = useCallback(() => { + if (transitioningRef.current || pieces.length === 0) return; + const next = (index + 1) % pieces.length; + setId(pieces[next].id); + }, [pieces, index, setId]); + + const toggleSpin = useCallback(() => { + setSpin((s) => !s); + }, [setSpin]); + + useEffect(() => { + const onKey = (e: KeyboardEvent) => { + if (e.key === 'ArrowLeft') navPrev(); + else if (e.key === 'ArrowRight') navNext(); + else if (e.key === ' ') { + e.preventDefault(); + toggleSpin(); + } + }; + window.addEventListener('keydown', onKey); + return () => window.removeEventListener('keydown', onKey); + }, [navPrev, navNext, toggleSpin]); return ( - <> - - {'Showcase'} - - - - +
+ + {/* ~100mm full-frame lens equivalent: flat perspective, good for product shots. */} + + + + + + + {current && ( + + )} + + -
setDrawerVisible(true)} route={'showcase'} /> + {!current ? ( +
+

no pieces match

+
+ ) : ( + <> + - setDrawerVisible(false)} - query={query} - visible={drawerVisible} - /> +
+ + ← + + + {spin ? '⏸' : '▶'} + + + → + +
- - +
+ ← → cycle · space toggle spin · {index + 1} /{' '} + {pieces.length} +
+ + )} + + +
); -}; - -export const getServerSideProps = ({ query }: GetServerSidePropsContext): GetServerSidePropsResult => ({ - props: { - query - } -}); - -export default ShowcasePage; +} diff --git a/src/server/index.ts b/src/server/index.ts new file mode 100644 index 0000000..b77d2b0 --- /dev/null +++ b/src/server/index.ts @@ -0,0 +1,33 @@ +import { join } from 'node:path'; +import { dataDir } from '@/db'; +import { queryPieces } from '@/db/filters'; +import { parseFiltersFromUrl } from '@/db/parse-filters'; +import { queries } from '@/db/queries'; + +const port = Number(process.env.PORT ?? 3000); + +const server = Bun.serve({ + port, + routes: { + '/api/health': () => Response.json({ ok: true }), + '/api/pieces': (req) => { + const filters = parseFiltersFromUrl(new URL(req.url)); + return Response.json(queryPieces(filters)); + }, + '/api/country-counts': () => Response.json(queries.issuerCounts.all()), + // Dev routes after this point: in prod, the static server takes over and this is never reached. + '/atlases/:file': (req) => { + const file = Bun.file(join(dataDir, 'atlases', req.params.file)); + return new Response(file); + }, + '/flags/:file': (req) => { + const file = Bun.file(join(dataDir, 'flags', req.params.file)); + return new Response(file); + }, + }, + fetch() { + return new Response('Not found', { status: 404 }); + }, +}); + +console.log(`server listening on ${server.url}`); diff --git a/src/sharp.d.ts b/src/sharp.d.ts new file mode 100644 index 0000000..5dc2620 --- /dev/null +++ b/src/sharp.d.ts @@ -0,0 +1,4 @@ +declare module 'sharp' { + import sharp = require('../node_modules/sharp/lib/index'); + export = sharp; +} diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..c41283b --- /dev/null +++ b/src/styles.css @@ -0,0 +1,130 @@ +@import "tailwindcss"; + +@theme { + --font-sans: "EB Garamond", ui-serif, Georgia, "Times New Roman", serif; + --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace; + + /* Vitrine palette — warm near-black + parchment ivory + antique brass. */ + --color-page: #0f0d09; + --color-card: #15120d; + --color-ink: #e8e2d0; + --color-ink-dim: #a89d83; + --color-ink-faint: #615847; + --color-rule: #2a2620; + --color-rule-strong: #3a342b; + --color-brass: #b8945f; + --color-brass-deep: #9e7c47; + + --text-mini: 1rem; /* 16px — small-caps labels */ + --text-mini--line-height: 1.45; + --text-data: 1.1875rem; /* 19px — tabular data rows + body */ + --text-data--line-height: 1.5; + + --text-xs: 0.9375rem; /* 15px */ + --text-sm: 1.09375rem; /* 17.5px */ + --text-base: 1.25rem; /* 20px */ + --text-lg: 1.40625rem; /* 22.5px */ + --text-xl: 1.5625rem; /* 25px */ + --text-2xl: 1.875rem; /* 30px */ + --text-3xl: 2.34375rem; /* 37.5px */ + --text-4xl: 2.8125rem; /* 45px */ + --text-5xl: 3.75rem; /* 60px */ + --text-6xl: 4.6875rem; /* 75px */ + --text-7xl: 5.625rem; /* 90px */ + + --animate-slide-in-right: slide-in-right 250ms cubic-bezier(0.16, 1, 0.3, 1); + --animate-slide-out-right: slide-out-right 200ms cubic-bezier(0.7, 0, 0.84, 0); + --animate-fade-in: fade-in 250ms ease-out; + --animate-fade-out: fade-out 200ms ease-in; + --animate-pop-in: pop-in 150ms cubic-bezier(0.16, 1, 0.3, 1); + --animate-pop-out: pop-out 100ms ease-in; +} + +@keyframes slide-in-right { + from { + transform: translateX(100%); + } + to { + transform: translateX(0); + } +} +@keyframes slide-out-right { + from { + transform: translateX(0); + } + to { + transform: translateX(100%); + } +} +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes fade-out { + from { + opacity: 1; + } + to { + opacity: 0; + } +} +@keyframes pop-in { + from { + opacity: 0; + transform: scale(0.96) translateY(-4px); + } + to { + opacity: 1; + transform: scale(1) translateY(0); + } +} +@keyframes pop-out { + from { + opacity: 1; + transform: scale(1); + } + to { + opacity: 0; + transform: scale(0.96); + } +} + +@utility caps { + font-variant-caps: all-small-caps; + letter-spacing: 0.12em; + text-transform: lowercase; +} + +@utility tnum { + font-variant-numeric: tabular-nums lining-nums; +} + +@utility onum { + font-variant-numeric: oldstyle-nums proportional-nums; +} + +@layer base { + html { + font-family: var(--font-sans); + font-feature-settings: + "kern" 1, + "liga" 1, + "calt" 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + } + + body { + @apply bg-page text-ink; + } + + ::selection { + background-color: color-mix(in srgb, var(--color-brass) 35%, transparent); + color: var(--color-ink); + } +} diff --git a/src/styles/globals.css b/src/styles/globals.css deleted file mode 100644 index 1e78c8e..0000000 --- a/src/styles/globals.css +++ /dev/null @@ -1,18 +0,0 @@ -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; - background-color: #111; - color: white; - font-family: var(--font-family); -} - -a.p-button { - text-decoration: none; -} diff --git a/src/styles/search.module.css b/src/styles/search.module.css deleted file mode 100644 index 34c7f9f..0000000 --- a/src/styles/search.module.css +++ /dev/null @@ -1,3 +0,0 @@ -.sidebar { - width: min(100vw, 480px) !important; -} diff --git a/src/styles/theme.css b/src/styles/theme.css deleted file mode 100644 index fade2cc..0000000 --- a/src/styles/theme.css +++ /dev/null @@ -1,6861 +0,0 @@ -:root { - --surface-a: #071426; - --surface-b: #040d19; - --surface-c: rgba(255, 255, 255, 0.03); - --surface-d: #0b213f; - --surface-e: #071426; - --surface-f: #071426; - --text-color: rgba(255, 255, 255, 0.87); - --text-color-secondary: rgba(255, 255, 255, 0.6); - --primary-color: #e5a50a; - --primary-color-text: #1c2127; - --font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, - Segoe UI Emoji, Segoe UI Symbol; - --surface-0: #040d19; - --surface-50: #1d2530; - --surface-100: #363d47; - --surface-200: #4f565e; - --surface-300: #686e75; - --surface-400: #82868c; - --surface-500: #9b9ea3; - --surface-600: #b4b6ba; - --surface-700: #cdcfd1; - --surface-800: #e6e7e8; - --surface-900: #ffffff; - --gray-50: #e6e7e8; - --gray-100: #cdcfd1; - --gray-200: #b4b6ba; - --gray-300: #9b9ea3; - --gray-400: #82868c; - --gray-500: #686e75; - --gray-600: #4f565e; - --gray-700: #363d47; - --gray-800: #1d2530; - --gray-900: #040d19; - --content-padding: 1.25rem; - --inline-spacing: 0.5rem; - --border-radius: 8px; - --surface-ground: #040d19; - --surface-section: #040d19; - --surface-card: #071426; - --surface-overlay: #071426; - --surface-border: #0b213f; - --surface-hover: rgba(255, 255, 255, 0.03); - --focus-ring: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - --maskbg: rgba(0, 0, 0, 0.4); - --highlight-bg: rgba(165, 180, 252, 0.16); - --highlight-text-color: rgba(255, 255, 255, 0.87); - color-scheme: dark; -} -* { - box-sizing: border-box; -} -.p-component { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol'; - font-size: 1rem; - font-weight: normal; -} -.p-component-overlay { - background-color: rgba(0, 0, 0, 0.4); - transition-duration: 0.2s; -} -.p-disabled, -.p-component:disabled { - opacity: 0.25; -} -.p-error { - color: #fca5a5; -} -.p-text-secondary { - color: rgba(255, 255, 255, 0.6); -} -.pi { - font-size: 1rem; -} -.p-icon { - width: 1rem; - height: 1rem; -} -.p-link { - font-size: 1rem; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol'; - border-radius: 8px; -} -.p-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-component-overlay-enter { - animation: p-component-overlay-enter-animation 150ms forwards; -} -.p-component-overlay-leave { - animation: p-component-overlay-leave-animation 150ms forwards; -} -@keyframes p-component-overlay-enter-animation { - from { - background-color: rgba(0, 0, 0, 0); - } - to { - background-color: var(--maskbg); - } -} -@keyframes p-component-overlay-leave-animation { - from { - background-color: var(--maskbg); - } - to { - background-color: rgba(0, 0, 0, 0); - } -} -:root { - --blue-50: #f5f9ff; - --blue-100: #d0e1fd; - --blue-200: #abc9fb; - --blue-300: #85b2f9; - --blue-400: #609af8; - --blue-500: #3b82f6; - --blue-600: #326fd1; - --blue-700: #295bac; - --blue-800: #204887; - --blue-900: #183462; - --green-50: #f4fcf7; - --green-100: #caf1d8; - --green-200: #a0e6ba; - --green-300: #76db9b; - --green-400: #4cd07d; - --green-500: #22c55e; - --green-600: #1da750; - --green-700: #188a42; - --green-800: #136c34; - --green-900: #0e4f26; - --yellow-50: #fefbf3; - --yellow-100: #faedc4; - --yellow-200: #f6de95; - --yellow-300: #f2d066; - --yellow-400: #eec137; - --yellow-500: #eab308; - --yellow-600: #c79807; - --yellow-700: #a47d06; - --yellow-800: #816204; - --yellow-900: #5e4803; - --cyan-50: #f3fbfd; - --cyan-100: #c3edf5; - --cyan-200: #94e0ed; - --cyan-300: #65d2e4; - --cyan-400: #35c4dc; - --cyan-500: #06b6d4; - --cyan-600: #059bb4; - --cyan-700: #047f94; - --cyan-800: #036475; - --cyan-900: #024955; - --pink-50: #fef6fa; - --pink-100: #fad3e7; - --pink-200: #f7b0d3; - --pink-300: #f38ec0; - --pink-400: #f06bac; - --pink-500: #ec4899; - --pink-600: #c93d82; - --pink-700: #a5326b; - --pink-800: #822854; - --pink-900: #5e1d3d; - --indigo-50: #f7f7fe; - --indigo-100: #dadafc; - --indigo-200: #bcbdf9; - --indigo-300: #9ea0f6; - --indigo-400: #8183f4; - --indigo-500: #6366f1; - --indigo-600: #5457cd; - --indigo-700: #4547a9; - --indigo-800: #363885; - --indigo-900: #282960; - --teal-50: #f3fbfb; - --teal-100: #c7eeea; - --teal-200: #9ae0d9; - --teal-300: #6dd3c8; - --teal-400: #41c5b7; - --teal-500: #14b8a6; - --teal-600: #119c8d; - --teal-700: #0e8174; - --teal-800: #0b655b; - --teal-900: #084a42; - --orange-50: #fff8f3; - --orange-100: #feddc7; - --orange-200: #fcc39b; - --orange-300: #fba86f; - --orange-400: #fa8e42; - --orange-500: #f97316; - --orange-600: #d46213; - --orange-700: #ae510f; - --orange-800: #893f0c; - --orange-900: #642e09; - --bluegray-50: #f7f8f9; - --bluegray-100: #dadee3; - --bluegray-200: #bcc3cd; - --bluegray-300: #9fa9b7; - --bluegray-400: #818ea1; - --bluegray-500: #64748b; - --bluegray-600: #556376; - --bluegray-700: #465161; - --bluegray-800: #37404c; - --bluegray-900: #282e38; - --purple-50: #fbf7ff; - --purple-100: #ead6fd; - --purple-200: #dab6fc; - --purple-300: #c996fa; - --purple-400: #b975f9; - --purple-500: #a855f7; - --purple-600: #8f48d2; - --purple-700: #763cad; - --purple-800: #5c2f88; - --purple-900: #432263; - --red-50: #fff5f5; - --red-100: #ffd0ce; - --red-200: #ffaca7; - --red-300: #ff8780; - --red-400: #ff6259; - --red-500: #ff3d32; - --red-600: #d9342b; - --red-700: #b32b23; - --red-800: #8c221c; - --red-900: #661814; - --primary-50: #fefbf3; - --primary-100: #f9e9c4; - --primary-200: #f4d896; - --primary-300: #efc767; - --primary-400: #eab639; - --primary-500: #e5a50a; - --primary-600: #c38c09; - --primary-700: #a07407; - --primary-800: #7e5b06; - --primary-900: #5c4204; -} -.p-autocomplete .p-autocomplete-loader { - right: 0.75rem; -} -.p-autocomplete.p-autocomplete-dd .p-autocomplete-loader { - right: 3.75rem; -} -.p-autocomplete .p-autocomplete-multiple-container { - padding: 0.375rem 0.75rem; -} -.p-autocomplete .p-autocomplete-multiple-container:not(.p-disabled):hover { - border-color: #a5b4fc; -} -.p-autocomplete .p-autocomplete-multiple-container:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token { - padding: 0.375rem 0; -} -.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-input-token input { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol'; - font-size: 1rem; - color: rgba(255, 255, 255, 0.87); - padding: 0; - margin: 0; -} -.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token { - padding: 0.375rem 0.75rem; - margin-right: 0.5rem; - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); - border-radius: 8px; -} -.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token .p-autocomplete-token-icon { - margin-left: 0.5rem; -} -.p-autocomplete.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; -} -.p-autocomplete-panel { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-autocomplete-panel .p-autocomplete-items { - padding: 0.75rem 0; -} -.p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item { - margin: 0; - padding: 0.75rem 1.25rem; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); - transition: box-shadow 0.2s; - border-radius: 0; -} -.p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item:hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-autocomplete-panel .p-autocomplete-items .p-autocomplete-item-group { - margin: 0; - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: #091a32; - font-weight: 700; -} -.p-calendar.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; -} -.p-datepicker { - padding: 0.5rem; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; -} -.p-datepicker:not(.p-datepicker-inline) { - background: #071426; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-datepicker:not(.p-datepicker-inline) .p-datepicker-header { - background: #071426; -} -.p-datepicker .p-datepicker-header { - padding: 0.5rem; - color: rgba(255, 255, 255, 0.87); - background: #071426; - font-weight: 700; - margin: 0; - border-bottom: 1px solid #0b213f; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-datepicker .p-datepicker-header .p-datepicker-prev, -.p-datepicker .p-datepicker-header .p-datepicker-next { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover, -.p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-datepicker .p-datepicker-header .p-datepicker-prev:focus, -.p-datepicker .p-datepicker-header .p-datepicker-next:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-datepicker .p-datepicker-header .p-datepicker-title { - line-height: 2rem; -} -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year, -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { - color: rgba(255, 255, 255, 0.87); - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - font-weight: 700; - padding: 0.5rem; -} -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover, -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover { - color: #e5a50a; -} -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { - margin-right: 0.5rem; -} -.p-datepicker table { - font-size: 1rem; - margin: 0.5rem 0; -} -.p-datepicker table th { - padding: 0.5rem; -} -.p-datepicker table th > span { - width: 2.5rem; - height: 2.5rem; -} -.p-datepicker table td { - padding: 0.5rem; -} -.p-datepicker table td > span { - width: 2.5rem; - height: 2.5rem; - border-radius: 50%; - transition: box-shadow 0.2s; - border: 1px solid rgba(0, 0, 0, 0); -} -.p-datepicker table td > span.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-datepicker table td > span:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-datepicker table td.p-datepicker-today > span { - background: rgba(0, 0, 0, 0); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-datepicker table td.p-datepicker-today > span.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-datepicker .p-datepicker-buttonbar { - padding: 1rem 0; - border-top: 1px solid #0b213f; -} -.p-datepicker .p-datepicker-buttonbar .p-button { - width: auto; -} -.p-datepicker .p-timepicker { - border-top: 1px solid #0b213f; - padding: 0.5rem; -} -.p-datepicker .p-timepicker button { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-datepicker .p-timepicker button:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-datepicker .p-timepicker button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-datepicker .p-timepicker button:last-child { - margin-top: 0.2em; -} -.p-datepicker .p-timepicker span { - font-size: 1.25rem; -} -.p-datepicker .p-timepicker > div { - padding: 0 0.5rem; -} -.p-datepicker.p-datepicker-timeonly .p-timepicker { - border-top: 0 none; -} -.p-datepicker .p-monthpicker { - margin: 0.5rem 0; -} -.p-datepicker .p-monthpicker .p-monthpicker-month { - padding: 0.5rem; - transition: box-shadow 0.2s; - border-radius: 8px; -} -.p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-datepicker .p-yearpicker { - margin: 0.5rem 0; -} -.p-datepicker .p-yearpicker .p-yearpicker-year { - padding: 0.5rem; - transition: box-shadow 0.2s; - border-radius: 8px; -} -.p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-datepicker.p-datepicker-multiple-month .p-datepicker-group { - border-left: 1px solid #0b213f; - padding-right: 0.5rem; - padding-left: 0.5rem; - padding-top: 0; - padding-bottom: 0; -} -.p-datepicker.p-datepicker-multiple-month .p-datepicker-group:first-child { - padding-left: 0; -} -.p-datepicker.p-datepicker-multiple-month .p-datepicker-group:last-child { - padding-right: 0; - border-left: 0 none; -} -.p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -@media screen and (max-width: 769px) { - .p-datepicker table th, - .p-datepicker table td { - padding: 0; - } -} -.p-cascadeselect { - background: #040d19; - border: 1px solid #0b213f; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - border-radius: 8px; -} -.p-cascadeselect:not(.p-disabled):hover { - border-color: #a5b4fc; -} -.p-cascadeselect:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-cascadeselect .p-cascadeselect-label { - background: rgba(0, 0, 0, 0); - border: 0 none; - padding: 0.75rem 0.75rem; -} -.p-cascadeselect .p-cascadeselect-label.p-placeholder { - color: rgba(255, 255, 255, 0.6); -} -.p-cascadeselect .p-cascadeselect-label:enabled:focus { - outline: 0 none; - box-shadow: none; -} -.p-cascadeselect .p-cascadeselect-trigger { - background: rgba(0, 0, 0, 0); - color: rgba(255, 255, 255, 0.6); - width: 3rem; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-cascadeselect.p-invalid.p-component { - border-color: #fca5a5; -} -.p-cascadeselect-panel { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-cascadeselect-panel .p-cascadeselect-items { - padding: 0.75rem 0; -} -.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item { - margin: 0; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); - transition: box-shadow 0.2s; - border-radius: 0; -} -.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-item-content { - padding: 0.75rem 1.25rem; -} -.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-item-content:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item:not(.p-highlight):not(.p-disabled):hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-group-icon { - font-size: 0.875rem; -} -.p-cascadeselect-panel .p-cascadeselect-items .p-cascadeselect-item .p-cascadeselect-group-icon.p-icon { - width: 0.875rem; - height: 0.875rem; -} -.p-input-filled .p-cascadeselect { - background: #0b213f; -} -.p-input-filled .p-cascadeselect:not(.p-disabled):hover { - background-color: #0b213f; -} -.p-input-filled .p-cascadeselect:not(.p-disabled).p-focus { - background-color: #0b213f; -} -.p-checkbox { - width: 22px; - height: 22px; -} -.p-checkbox .p-checkbox-box { - border: 2px solid #0b213f; - background: #040d19; - width: 22px; - height: 22px; - color: rgba(255, 255, 255, 0.87); - border-radius: 8px; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-checkbox .p-checkbox-box .p-checkbox-icon { - transition-duration: 0.2s; - color: #1c2127; - font-size: 14px; -} -.p-checkbox .p-checkbox-box .p-checkbox-icon.p-icon { - width: 14px; - height: 14px; -} -.p-checkbox .p-checkbox-box.p-highlight { - border-color: #e5a50a; - background: #e5a50a; -} -.p-checkbox .p-checkbox-box.p-highlight:not(.p-disabled):hover { - border-color: #ce9509; - background: #ce9509; - color: #1c2127; -} -.p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover { - border-color: #a5b4fc; -} -.p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover { - border-color: #ce9509; - background: #ce9509; - color: #1c2127; -} -.p-checkbox.p-invalid > .p-checkbox-box { - border-color: #fca5a5; -} -.p-input-filled .p-checkbox .p-checkbox-box { - background-color: #0b213f; -} -.p-input-filled .p-checkbox .p-checkbox-box.p-highlight { - background: #e5a50a; -} -.p-input-filled .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover { - background-color: #0b213f; -} -.p-input-filled .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover { - background: #ce9509; -} -.p-chips .p-chips-multiple-container { - padding: 0.375rem 0.75rem; -} -.p-chips .p-chips-multiple-container:not(.p-disabled):hover { - border-color: #a5b4fc; -} -.p-chips .p-chips-multiple-container:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-chips .p-chips-multiple-container .p-chips-token { - padding: 0.375rem 0.75rem; - margin-right: 0.5rem; - background: #0b213f; - color: rgba(255, 255, 255, 0.87); - border-radius: 16px; -} -.p-chips .p-chips-multiple-container .p-chips-token .p-chips-token-icon { - margin-left: 0.5rem; -} -.p-chips .p-chips-multiple-container .p-chips-input-token { - padding: 0.375rem 0; -} -.p-chips .p-chips-multiple-container .p-chips-input-token input { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol'; - font-size: 1rem; - color: rgba(255, 255, 255, 0.87); - padding: 0; - margin: 0; -} -.p-chips.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; -} -.p-colorpicker-preview { - width: 2rem; - height: 2rem; -} -.p-colorpicker-panel { - background: #071426; - border: 1px solid #0b213f; -} -.p-colorpicker-panel .p-colorpicker-color-handle, -.p-colorpicker-panel .p-colorpicker-hue-handle { - border-color: rgba(255, 255, 255, 0.87); -} -.p-colorpicker-overlay-panel { - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-dropdown { - background: #040d19; - border: 1px solid #0b213f; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - border-radius: 8px; -} -.p-dropdown:not(.p-disabled):hover { - border-color: #a5b4fc; -} -.p-dropdown:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-dropdown.p-dropdown-clearable .p-dropdown-label { - padding-right: 1.75rem; -} -.p-dropdown .p-dropdown-label { - background: rgba(0, 0, 0, 0); - border: 0 none; -} -.p-dropdown .p-dropdown-label.p-placeholder { - color: rgba(255, 255, 255, 0.6); -} -.p-dropdown .p-dropdown-label:enabled:focus { - outline: 0 none; - box-shadow: none; -} -.p-dropdown .p-dropdown-trigger { - background: rgba(0, 0, 0, 0); - color: rgba(255, 255, 255, 0.6); - width: 3rem; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-dropdown .p-dropdown-clear-icon { - color: rgba(255, 255, 255, 0.6); - right: 3rem; -} -.p-dropdown.p-invalid.p-component { - border-color: #fca5a5; -} -.p-dropdown-panel { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-dropdown-panel .p-dropdown-header { - padding: 0.75rem 1.25rem; - border-bottom: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - background: #071426; - margin: 0; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-dropdown-panel .p-dropdown-header .p-dropdown-filter { - padding-right: 1.75rem; - margin-right: -1.75rem; -} -.p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon { - right: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-dropdown-panel .p-dropdown-header .p-dropdown-clearable-filter .p-dropdown-filter { - padding-right: 3.5rem; - margin-right: -3.5rem; -} -.p-dropdown-panel .p-dropdown-header .p-dropdown-clearable-filter .p-dropdown-filter-clear-icon { - right: 2.5rem; -} -.p-dropdown-panel .p-dropdown-items { - padding: 0.75rem 0; -} -.p-dropdown-panel .p-dropdown-items .p-dropdown-item { - margin: 0; - padding: 0.75rem 1.25rem; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); - transition: box-shadow 0.2s; - border-radius: 0; -} -.p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-dropdown-panel .p-dropdown-items .p-dropdown-item:not(.p-highlight):not(.p-disabled):hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-dropdown-panel .p-dropdown-items .p-dropdown-item-group { - margin: 0; - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: #091a32; - font-weight: 700; -} -.p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); -} -.p-input-filled .p-dropdown { - background: #0b213f; -} -.p-input-filled .p-dropdown:not(.p-disabled):hover { - background-color: #0b213f; -} -.p-input-filled .p-dropdown:not(.p-disabled).p-focus { - background-color: #0b213f; -} -.p-input-filled .p-dropdown:not(.p-disabled).p-focus .p-inputtext { - background-color: rgba(0, 0, 0, 0); -} -.p-editor-container .p-editor-toolbar { - background: #071426; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-editor-container .p-editor-toolbar.ql-snow { - border: 1px solid #0b213f; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-stroke { - stroke: rgba(255, 255, 255, 0.6); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-fill { - fill: rgba(255, 255, 255, 0.6); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label { - border: 0 none; - color: rgba(255, 255, 255, 0.6); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover { - color: rgba(255, 255, 255, 0.87); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover .ql-stroke { - stroke: rgba(255, 255, 255, 0.87); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker .ql-picker-label:hover .ql-fill { - fill: rgba(255, 255, 255, 0.87); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { - color: rgba(255, 255, 255, 0.87); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke { - stroke: rgba(255, 255, 255, 0.87); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill { - fill: rgba(255, 255, 255, 0.87); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { - background: #071426; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - border-radius: 8px; - padding: 0.75rem 0; -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item { - color: rgba(255, 255, 255, 0.87); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options .ql-picker-item:hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-editor-container .p-editor-toolbar.ql-snow .ql-picker.ql-expanded:not(.ql-icon-picker) .ql-picker-item { - padding: 0.75rem 1.25rem; -} -.p-editor-container .p-editor-content { - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-editor-container .p-editor-content.ql-snow { - border: 1px solid #0b213f; -} -.p-editor-container .p-editor-content .ql-editor { - background: #040d19; - color: rgba(255, 255, 255, 0.87); - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-editor-container .ql-snow.ql-toolbar button:hover, -.p-editor-container .ql-snow.ql-toolbar button:focus { - color: rgba(255, 255, 255, 0.87); -} -.p-editor-container .ql-snow.ql-toolbar button:hover .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar button:focus .ql-stroke { - stroke: rgba(255, 255, 255, 0.87); -} -.p-editor-container .ql-snow.ql-toolbar button:hover .ql-fill, -.p-editor-container .ql-snow.ql-toolbar button:focus .ql-fill { - fill: rgba(255, 255, 255, 0.87); -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected { - color: #e5a50a; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke { - stroke: #e5a50a; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-fill, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill { - fill: #e5a50a; -} -.p-editor-container .ql-snow.ql-toolbar button.ql-active .ql-picker-label, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-picker-label, -.p-editor-container .ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-picker-label { - color: #e5a50a; -} -.p-inputgroup-addon { - background: #071426; - color: rgba(255, 255, 255, 0.6); - border-top: 1px solid #0b213f; - border-left: 1px solid #0b213f; - border-bottom: 1px solid #0b213f; - padding: 0.75rem 0.75rem; - min-width: 3rem; -} -.p-inputgroup-addon:last-child { - border-right: 1px solid #0b213f; -} -.p-inputgroup > .p-component, -.p-inputgroup > .p-inputwrapper > .p-inputtext, -.p-inputgroup > .p-float-label > .p-component { - border-radius: 0; - margin: 0; -} -.p-inputgroup > .p-component + .p-inputgroup-addon, -.p-inputgroup > .p-inputwrapper > .p-inputtext + .p-inputgroup-addon, -.p-inputgroup > .p-float-label > .p-component + .p-inputgroup-addon { - border-left: 0 none; -} -.p-inputgroup > .p-component:focus, -.p-inputgroup > .p-inputwrapper > .p-inputtext:focus, -.p-inputgroup > .p-float-label > .p-component:focus { - z-index: 1; -} -.p-inputgroup > .p-component:focus ~ label, -.p-inputgroup > .p-inputwrapper > .p-inputtext:focus ~ label, -.p-inputgroup > .p-float-label > .p-component:focus ~ label { - z-index: 1; -} -.p-inputgroup-addon:first-child, -.p-inputgroup button:first-child, -.p-inputgroup input:first-child, -.p-inputgroup > .p-inputwrapper:first-child, -.p-inputgroup > .p-inputwrapper:first-child > .p-inputtext { - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-inputgroup .p-float-label:first-child input { - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-inputgroup-addon:last-child, -.p-inputgroup button:last-child, -.p-inputgroup input:last-child, -.p-inputgroup > .p-inputwrapper:last-child, -.p-inputgroup > .p-inputwrapper:last-child > .p-inputtext { - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-inputgroup .p-float-label:last-child input { - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-fluid .p-inputgroup .p-button { - width: auto; -} -.p-fluid .p-inputgroup .p-button.p-button-icon-only { - width: 3rem; -} -.p-inputnumber.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; -} -.p-inputswitch { - width: 3rem; - height: 1.75rem; -} -.p-inputswitch .p-inputswitch-slider { - background: #233752; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - border-radius: 30px; -} -.p-inputswitch .p-inputswitch-slider:before { - background: rgba(255, 255, 255, 0.6); - width: 1.25rem; - height: 1.25rem; - left: 0.25rem; - margin-top: -0.625rem; - border-radius: 50%; - transition-duration: 0.2s; -} -.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before { - transform: translateX(1.25rem); -} -.p-inputswitch.p-focus .p-inputswitch-slider { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-inputswitch:not(.p-disabled):hover .p-inputswitch-slider { - background: #0b213f; -} -.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider { - background: #e5a50a; -} -.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before { - background: rgba(255, 255, 255, 0.87); -} -.p-inputswitch.p-inputswitch-checked:not(.p-disabled):hover .p-inputswitch-slider { - background: #da9d0a; -} -.p-inputswitch.p-invalid .p-inputswitch-slider { - border-color: #fca5a5; -} -.p-inputtext { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol'; - font-size: 1rem; - color: rgba(255, 255, 255, 0.87); - background: #040d19; - padding: 0.75rem 0.75rem; - border: 1px solid #0b213f; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - appearance: none; - border-radius: 8px; -} -.p-inputtext:enabled:hover { - border-color: #a5b4fc; -} -.p-inputtext:enabled:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-inputtext.p-invalid.p-component { - border-color: #fca5a5; -} -.p-inputtext.p-inputtext-sm { - font-size: 0.875rem; - padding: 0.65625rem 0.65625rem; -} -.p-inputtext.p-inputtext-lg { - font-size: 1.25rem; - padding: 0.9375rem 0.9375rem; -} -.p-float-label > label { - left: 0.75rem; - color: rgba(255, 255, 255, 0.6); - transition-duration: 0.2s; -} -.p-float-label > label.p-error { - color: #fca5a5; -} -.p-input-icon-left > i:first-of-type, -.p-input-icon-left > svg:first-of-type, -.p-input-icon-left > .p-input-prefix { - left: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-input-icon-left > .p-inputtext { - padding-left: 2.5rem; -} -.p-input-icon-left.p-float-label > label { - left: 2.5rem; -} -.p-input-icon-right > i:last-of-type, -.p-input-icon-right > svg:last-of-type, -.p-input-icon-right > .p-input-suffix { - right: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-input-icon-right > .p-inputtext { - padding-right: 2.5rem; -} -::-webkit-input-placeholder { - color: rgba(255, 255, 255, 0.6); -} -:-moz-placeholder { - color: rgba(255, 255, 255, 0.6); -} -::-moz-placeholder { - color: rgba(255, 255, 255, 0.6); -} -:-ms-input-placeholder { - color: rgba(255, 255, 255, 0.6); -} -.p-input-filled .p-inputtext { - background-color: #0b213f; -} -.p-input-filled .p-inputtext:enabled:hover { - background-color: #0b213f; -} -.p-input-filled .p-inputtext:enabled:focus { - background-color: #0b213f; -} -.p-inputtext-sm .p-inputtext { - font-size: 0.875rem; - padding: 0.65625rem 0.65625rem; -} -.p-inputtext-lg .p-inputtext { - font-size: 1.25rem; - padding: 0.9375rem 0.9375rem; -} -.p-listbox { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; -} -.p-listbox .p-listbox-header { - padding: 0.75rem 1.25rem; - border-bottom: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - background: #071426; - margin: 0; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-listbox .p-listbox-header .p-listbox-filter { - padding-right: 1.75rem; -} -.p-listbox .p-listbox-header .p-listbox-filter-icon { - right: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-listbox .p-listbox-list { - padding: 0.75rem 0; -} -.p-listbox .p-listbox-list .p-listbox-item { - margin: 0; - padding: 0.75rem 1.25rem; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - transition: box-shadow 0.2s; - border-radius: 0; -} -.p-listbox .p-listbox-list .p-listbox-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-listbox .p-listbox-list .p-listbox-item:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-listbox .p-listbox-list .p-listbox-item-group { - margin: 0; - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: #091a32; - font-weight: 700; -} -.p-listbox .p-listbox-list .p-listbox-empty-message { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); -} -.p-listbox:not(.p-disabled) .p-listbox-item:not(.p-highlight):not(.p-disabled):hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-listbox.p-invalid { - border-color: #fca5a5; -} -.p-mention-panel { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-mention-panel .p-mention-items { - padding: 0.75rem 0; -} -.p-mention-panel .p-mention-items .p-mention-item { - margin: 0; - padding: 0.75rem 1.25rem; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); - transition: box-shadow 0.2s; - border-radius: 0; -} -.p-mention-panel .p-mention-items .p-mention-item:hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-mention-panel .p-mention-items .p-mention-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-multiselect { - background: #040d19; - border: 1px solid #0b213f; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - border-radius: 8px; -} -.p-multiselect:not(.p-disabled):hover { - border-color: #a5b4fc; -} -.p-multiselect:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-multiselect.p-multiselect-clearable .p-multiselect-label { - padding-right: 1.75rem; -} -.p-multiselect .p-multiselect-label { - padding: 0.75rem 0.75rem; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-multiselect .p-multiselect-label.p-placeholder { - color: rgba(255, 255, 255, 0.6); -} -.p-multiselect.p-multiselect-chip .p-multiselect-token { - padding: 0.375rem 0.75rem; - margin-right: 0.5rem; - background: #0b213f; - color: rgba(255, 255, 255, 0.87); - border-radius: 16px; -} -.p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { - margin-left: 0.5rem; -} -.p-multiselect .p-multiselect-trigger { - background: rgba(0, 0, 0, 0); - color: rgba(255, 255, 255, 0.6); - width: 3rem; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-multiselect .p-multiselect-clear-icon { - color: rgba(255, 255, 255, 0.6); - right: 3rem; -} -.p-multiselect.p-invalid.p-component { - border-color: #fca5a5; -} -.p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { - padding: 0.375rem 0.75rem; -} -.p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label.p-multiselect-items-label { - padding: 0.75rem 0.75rem; -} -.p-inputwrapper-filled.p-multiselect.p-multiselect-clearable .p-multiselect-label { - padding-right: 1.75rem; -} -.p-multiselect-panel { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-multiselect-panel .p-multiselect-header { - padding: 0.75rem 1.25rem; - border-bottom: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - background: #071426; - margin: 0; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container { - margin: 0 0.5rem; -} -.p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-inputtext { - padding-right: 1.75rem; -} -.p-multiselect-panel .p-multiselect-header .p-multiselect-filter-container .p-multiselect-filter-icon { - right: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-multiselect-panel .p-multiselect-header .p-multiselect-close { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-multiselect-panel .p-multiselect-header .p-multiselect-close:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-multiselect-panel .p-multiselect-header .p-multiselect-close:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-multiselect-panel .p-multiselect-items { - padding: 0.75rem 0; -} -.p-multiselect-panel .p-multiselect-items .p-multiselect-item { - margin: 0; - padding: 0.75rem 1.25rem; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); - transition: box-shadow 0.2s; - border-radius: 0; -} -.p-multiselect-panel .p-multiselect-items .p-multiselect-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-multiselect-panel .p-multiselect-items .p-multiselect-item:not(.p-highlight):not(.p-disabled):hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-multiselect-panel .p-multiselect-items .p-multiselect-item:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-multiselect-panel .p-multiselect-items .p-multiselect-item .p-checkbox { - margin-right: 0.5rem; -} -.p-multiselect-panel .p-multiselect-items .p-multiselect-item-group { - margin: 0; - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: #091a32; - font-weight: 700; -} -.p-multiselect-panel .p-multiselect-items .p-multiselect-empty-message { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); -} -.p-input-filled .p-multiselect { - background: #0b213f; -} -.p-input-filled .p-multiselect:not(.p-disabled):hover { - background-color: #0b213f; -} -.p-input-filled .p-multiselect:not(.p-disabled).p-focus { - background-color: #0b213f; -} -.p-password.p-invalid.p-component > .p-inputtext { - border-color: #fca5a5; -} -.p-password-panel { - padding: 1.25rem; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - border-radius: 8px; -} -.p-password-panel .p-password-meter { - margin-bottom: 0.5rem; - background: #0b213f; -} -.p-password-panel .p-password-meter .p-password-strength.weak { - background: #eb9a9c; -} -.p-password-panel .p-password-meter .p-password-strength.medium { - background: #ffcf91; -} -.p-password-panel .p-password-meter .p-password-strength.strong { - background: #93deac; -} -.p-radiobutton { - width: 22px; - height: 22px; -} -.p-radiobutton .p-radiobutton-box { - border: 2px solid #0b213f; - background: #040d19; - width: 22px; - height: 22px; - color: rgba(255, 255, 255, 0.87); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-radiobutton .p-radiobutton-box:not(.p-disabled):not(.p-highlight):hover { - border-color: #a5b4fc; -} -.p-radiobutton .p-radiobutton-box:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-radiobutton .p-radiobutton-box .p-radiobutton-icon { - width: 12px; - height: 12px; - transition-duration: 0.2s; - background-color: #1c2127; -} -.p-radiobutton .p-radiobutton-box.p-highlight { - border-color: #e5a50a; - background: #e5a50a; -} -.p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { - border-color: #ce9509; - background: #ce9509; - color: #1c2127; -} -.p-radiobutton.p-invalid > .p-radiobutton-box { - border-color: #fca5a5; -} -.p-radiobutton:focus { - outline: 0 none; -} -.p-input-filled .p-radiobutton .p-radiobutton-box { - background-color: #0b213f; -} -.p-input-filled .p-radiobutton .p-radiobutton-box:not(.p-disabled):hover { - background-color: #0b213f; -} -.p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight { - background: #e5a50a; -} -.p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { - background: #ce9509; -} -.p-rating { - gap: 0.5rem; -} -.p-rating .p-rating-item .p-rating-icon { - color: rgba(255, 255, 255, 0.87); - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - font-size: 1.143rem; -} -.p-rating .p-rating-item .p-rating-icon.p-icon { - width: 1.143rem; - height: 1.143rem; -} -.p-rating .p-rating-item .p-rating-icon.p-rating-cancel { - color: #f48fb1; -} -.p-rating .p-rating-item:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-rating .p-rating-item.p-rating-item-active .p-rating-icon { - color: #e5a50a; -} -.p-rating:not(.p-disabled):not(.p-readonly) .p-rating-item:hover .p-rating-icon { - color: #e5a50a; -} -.p-rating:not(.p-disabled):not(.p-readonly) .p-rating-item:hover .p-rating-icon.p-rating-cancel { - color: #f48fb1; -} -.p-selectbutton .p-button { - background: #071426; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-selectbutton .p-button .p-button-icon-left, -.p-selectbutton .p-button .p-button-icon-right { - color: rgba(255, 255, 255, 0.6); -} -.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-left, -.p-selectbutton .p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-right { - color: rgba(255, 255, 255, 0.6); -} -.p-selectbutton .p-button.p-highlight { - background: #e5a50a; - border-color: #e5a50a; - color: #1c2127; -} -.p-selectbutton .p-button.p-highlight .p-button-icon-left, -.p-selectbutton .p-button.p-highlight .p-button-icon-right { - color: #1c2127; -} -.p-selectbutton .p-button.p-highlight:hover { - background: #da9d0a; - border-color: #da9d0a; - color: #1c2127; -} -.p-selectbutton .p-button.p-highlight:hover .p-button-icon-left, -.p-selectbutton .p-button.p-highlight:hover .p-button-icon-right { - color: #1c2127; -} -.p-selectbutton.p-invalid > .p-button { - border-color: #fca5a5; -} -.p-slider { - background: #0b213f; - border: 0 none; - border-radius: 8px; -} -.p-slider.p-slider-horizontal { - height: 0.286rem; -} -.p-slider.p-slider-horizontal .p-slider-handle { - margin-top: -0.5715rem; - margin-left: -0.5715rem; -} -.p-slider.p-slider-vertical { - width: 0.286rem; -} -.p-slider.p-slider-vertical .p-slider-handle { - margin-left: -0.5715rem; - margin-bottom: -0.5715rem; -} -.p-slider .p-slider-handle { - height: 1.143rem; - width: 1.143rem; - background: #0b213f; - border: 2px solid #e5a50a; - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-slider .p-slider-handle:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-slider .p-slider-range { - background: #e5a50a; -} -.p-slider:not(.p-disabled) .p-slider-handle:hover { - background: #e5a50a; - border-color: #e5a50a; -} -.p-treeselect { - background: #040d19; - border: 1px solid #0b213f; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - border-radius: 8px; -} -.p-treeselect:not(.p-disabled):hover { - border-color: #a5b4fc; -} -.p-treeselect:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - border-color: #a5b4fc; -} -.p-treeselect .p-treeselect-label { - padding: 0.75rem 0.75rem; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-treeselect .p-treeselect-label.p-placeholder { - color: rgba(255, 255, 255, 0.6); -} -.p-treeselect.p-treeselect-chip .p-treeselect-token { - padding: 0.375rem 0.75rem; - margin-right: 0.5rem; - background: #0b213f; - color: rgba(255, 255, 255, 0.87); - border-radius: 16px; -} -.p-treeselect .p-treeselect-trigger { - background: rgba(0, 0, 0, 0); - color: rgba(255, 255, 255, 0.6); - width: 3rem; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-treeselect.p-invalid.p-component { - border-color: #fca5a5; -} -.p-inputwrapper-filled.p-treeselect.p-treeselect-chip .p-treeselect-label { - padding: 0.375rem 0.75rem; -} -.p-treeselect-panel { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-treeselect-panel .p-treeselect-header { - padding: 0.75rem 1.25rem; - border-bottom: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - background: #071426; - margin: 0; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-treeselect-panel .p-treeselect-header .p-treeselect-filter-container { - margin-right: 0.5rem; -} -.p-treeselect-panel .p-treeselect-header .p-treeselect-filter-container .p-treeselect-filter { - padding-right: 1.75rem; -} -.p-treeselect-panel .p-treeselect-header .p-treeselect-filter-container .p-treeselect-filter-icon { - right: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-treeselect-panel - .p-treeselect-header - .p-treeselect-filter-container.p-treeselect-clearable-filter - .p-treeselect-filter { - padding-right: 3.5rem; -} -.p-treeselect-panel - .p-treeselect-header - .p-treeselect-filter-container.p-treeselect-clearable-filter - .p-treeselect-filter-clear-icon { - right: 2.5rem; -} -.p-treeselect-panel .p-treeselect-header .p-treeselect-close { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-treeselect-panel .p-treeselect-header .p-treeselect-close:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-treeselect-panel .p-treeselect-header .p-treeselect-close:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-treeselect-panel .p-treeselect-items-wrapper .p-tree { - border: 0 none; -} -.p-treeselect-panel .p-treeselect-items-wrapper .p-treeselect-empty-message { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); -} -.p-input-filled .p-treeselect { - background: #0b213f; -} -.p-input-filled .p-treeselect:not(.p-disabled):hover { - background-color: #0b213f; -} -.p-input-filled .p-treeselect:not(.p-disabled).p-focus { - background-color: #0b213f; -} -.p-togglebutton.p-button { - background: #071426; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-togglebutton.p-button .p-button-icon-left, -.p-togglebutton.p-button .p-button-icon-right { - color: rgba(255, 255, 255, 0.6); -} -.p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-left, -.p-togglebutton.p-button:not(.p-disabled):not(.p-highlight):hover .p-button-icon-right { - color: rgba(255, 255, 255, 0.6); -} -.p-togglebutton.p-button.p-highlight { - background: #e5a50a; - border-color: #e5a50a; - color: #1c2127; -} -.p-togglebutton.p-button.p-highlight .p-button-icon-left, -.p-togglebutton.p-button.p-highlight .p-button-icon-right { - color: #1c2127; -} -.p-togglebutton.p-button.p-highlight:hover { - background: #da9d0a; - border-color: #da9d0a; - color: #1c2127; -} -.p-togglebutton.p-button.p-highlight:hover .p-button-icon-left, -.p-togglebutton.p-button.p-highlight:hover .p-button-icon-right { - color: #1c2127; -} -.p-togglebutton.p-button.p-invalid > .p-button { - border-color: #fca5a5; -} -.p-button { - color: #1c2127; - background: #e5a50a; - border: 1px solid #e5a50a; - padding: 0.75rem 1.25rem; - font-size: 1rem; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - border-radius: 8px; -} -.p-button:enabled:hover, -.p-button:not(button):not(a):not(.p-disabled):hover { - background: #da9d0a; - color: #1c2127; - border-color: #da9d0a; -} -.p-button:enabled:active, -.p-button:not(button):not(a):not(.p-disabled):active { - background: #ce9509; - color: #1c2127; - border-color: #ce9509; -} -.p-button.p-button-outlined { - background-color: rgba(0, 0, 0, 0); - color: #e5a50a; - border: 1px solid; -} -.p-button.p-button-outlined:enabled:hover, -.p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover { - background: rgba(229, 165, 10, 0.04); - color: #e5a50a; - border: 1px solid; -} -.p-button.p-button-outlined:enabled:active, -.p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active { - background: rgba(229, 165, 10, 0.16); - color: #e5a50a; - border: 1px solid; -} -.p-button.p-button-outlined.p-button-plain { - color: rgba(255, 255, 255, 0.6); - border-color: rgba(255, 255, 255, 0.6); -} -.p-button.p-button-outlined.p-button-plain:enabled:hover, -.p-button.p-button-outlined.p-button-plain:not(button):not(a):not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.6); -} -.p-button.p-button-outlined.p-button-plain:enabled:active, -.p-button.p-button-outlined.p-button-plain:not(button):not(a):not(.p-disabled):active { - background: rgba(255, 255, 255, 0.16); - color: rgba(255, 255, 255, 0.6); -} -.p-button.p-button-text { - background-color: rgba(0, 0, 0, 0); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-text:enabled:hover, -.p-button.p-button-text:not(button):not(a):not(.p-disabled):hover { - background: rgba(229, 165, 10, 0.04); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-text:enabled:active, -.p-button.p-button-text:not(button):not(a):not(.p-disabled):active { - background: rgba(229, 165, 10, 0.16); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-text.p-button-plain { - color: rgba(255, 255, 255, 0.6); -} -.p-button.p-button-text.p-button-plain:enabled:hover, -.p-button.p-button-text.p-button-plain:not(button):not(a):not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.6); -} -.p-button.p-button-text.p-button-plain:enabled:active, -.p-button.p-button-text.p-button-plain:not(button):not(a):not(.p-disabled):active { - background: rgba(255, 255, 255, 0.16); - color: rgba(255, 255, 255, 0.6); -} -.p-button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-button .p-button-label { - transition-duration: 0.2s; -} -.p-button .p-button-icon-left { - margin-right: 0.5rem; -} -.p-button .p-button-icon-right { - margin-left: 0.5rem; -} -.p-button .p-button-icon-bottom { - margin-top: 0.5rem; -} -.p-button .p-button-icon-top { - margin-bottom: 0.5rem; -} -.p-button .p-badge { - margin-left: 0.5rem; - min-width: 1rem; - height: 1rem; - line-height: 1rem; - color: #e5a50a; - background-color: #1c2127; -} -.p-button.p-button-raised { - box-shadow: - 0px 3px 1px -2px rgba(0, 0, 0, 0.2), - 0px 2px 2px 0px rgba(0, 0, 0, 0.14), - 0px 1px 5px 0px rgba(0, 0, 0, 0.12); -} -.p-button.p-button-rounded { - border-radius: 2rem; -} -.p-button.p-button-icon-only { - width: 3rem; - padding: 0.75rem 0; -} -.p-button.p-button-icon-only .p-button-icon-left, -.p-button.p-button-icon-only .p-button-icon-right { - margin: 0; -} -.p-button.p-button-icon-only.p-button-rounded { - border-radius: 50%; - height: 3rem; -} -.p-button.p-button-sm { - font-size: 0.875rem; - padding: 0.65625rem 1.09375rem; -} -.p-button.p-button-sm .p-button-icon { - font-size: 0.875rem; -} -.p-button.p-button-lg { - font-size: 1.25rem; - padding: 0.9375rem 1.5625rem; -} -.p-button.p-button-lg .p-button-icon { - font-size: 1.25rem; -} -.p-button.p-button-loading-label-only.p-button-loading-left .p-button-label { - margin-left: 0.5rem; -} -.p-button.p-button-loading-label-only.p-button-loading-right .p-button-label { - margin-right: 0.5rem; -} -.p-button.p-button-loading-label-only.p-button-loading-top .p-button-label { - margin-top: 0.5rem; -} -.p-button.p-button-loading-label-only.p-button-loading-bottom .p-button-label { - margin-bottom: 0.5rem; -} -.p-button.p-button-loading-label-only .p-button-loading-icon { - margin: 0; -} -.p-fluid .p-button { - width: 100%; -} -.p-fluid .p-button-icon-only { - width: 3rem; -} -.p-fluid .p-buttonset { - display: flex; -} -.p-fluid .p-buttonset .p-button { - flex: 1; -} -.p-button.p-button-secondary, -.p-buttonset.p-button-secondary > .p-button, -.p-splitbutton.p-button-secondary > .p-button, -.p-fileupload-choose.p-button-secondary { - color: #1c2127; - background: #cbd5e1; - border: 1px solid #cbd5e1; -} -.p-button.p-button-secondary:enabled:hover, -.p-button.p-button-secondary:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-secondary > .p-button:enabled:hover, -.p-buttonset.p-button-secondary > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-secondary > .p-button:enabled:hover, -.p-splitbutton.p-button-secondary > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-secondary:enabled:hover, -.p-fileupload-choose.p-button-secondary:not(button):not(a):not(.p-disabled):hover { - background: #b0bfd1; - color: #1c2127; - border-color: #b0bfd1; -} -.p-button.p-button-secondary:enabled:focus, -.p-button.p-button-secondary:not(button):not(a):not(.p-disabled):focus, -.p-buttonset.p-button-secondary > .p-button:enabled:focus, -.p-buttonset.p-button-secondary > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-splitbutton.p-button-secondary > .p-button:enabled:focus, -.p-splitbutton.p-button-secondary > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-fileupload-choose.p-button-secondary:enabled:focus, -.p-fileupload-choose.p-button-secondary:not(button):not(a):not(.p-disabled):focus { - box-shadow: 0 0 0 1px #dbe2ea; -} -.p-button.p-button-secondary:enabled:active, -.p-button.p-button-secondary:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-secondary > .p-button:enabled:active, -.p-buttonset.p-button-secondary > .p-button:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-secondary > .p-button:enabled:active, -.p-splitbutton.p-button-secondary > .p-button:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-secondary:enabled:active, -.p-fileupload-choose.p-button-secondary:not(button):not(a):not(.p-disabled):active { - background: #95a9c2; - color: #1c2127; - border-color: #95a9c2; -} -.p-button.p-button-secondary.p-button-outlined, -.p-buttonset.p-button-secondary > .p-button.p-button-outlined, -.p-splitbutton.p-button-secondary > .p-button.p-button-outlined, -.p-fileupload-choose.p-button-secondary.p-button-outlined { - background-color: rgba(0, 0, 0, 0); - color: #cbd5e1; - border: 1px solid; -} -.p-button.p-button-secondary.p-button-outlined:enabled:hover, -.p-button.p-button-secondary.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-secondary > .p-button.p-button-outlined:enabled:hover, -.p-buttonset.p-button-secondary > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-secondary > .p-button.p-button-outlined:enabled:hover, -.p-splitbutton.p-button-secondary > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-secondary.p-button-outlined:enabled:hover, -.p-fileupload-choose.p-button-secondary.p-button-outlined:not(button):not(a):not(.p-disabled):hover { - background: rgba(203, 213, 225, 0.04); - color: #cbd5e1; - border: 1px solid; -} -.p-button.p-button-secondary.p-button-outlined:enabled:active, -.p-button.p-button-secondary.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-secondary > .p-button.p-button-outlined:enabled:active, -.p-buttonset.p-button-secondary > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-secondary > .p-button.p-button-outlined:enabled:active, -.p-splitbutton.p-button-secondary > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-secondary.p-button-outlined:enabled:active, -.p-fileupload-choose.p-button-secondary.p-button-outlined:not(button):not(a):not(.p-disabled):active { - background: rgba(203, 213, 225, 0.16); - color: #cbd5e1; - border: 1px solid; -} -.p-button.p-button-secondary.p-button-text, -.p-buttonset.p-button-secondary > .p-button.p-button-text, -.p-splitbutton.p-button-secondary > .p-button.p-button-text, -.p-fileupload-choose.p-button-secondary.p-button-text { - background-color: rgba(0, 0, 0, 0); - color: #cbd5e1; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-secondary.p-button-text:enabled:hover, -.p-button.p-button-secondary.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-secondary > .p-button.p-button-text:enabled:hover, -.p-buttonset.p-button-secondary > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-secondary > .p-button.p-button-text:enabled:hover, -.p-splitbutton.p-button-secondary > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-secondary.p-button-text:enabled:hover, -.p-fileupload-choose.p-button-secondary.p-button-text:not(button):not(a):not(.p-disabled):hover { - background: rgba(203, 213, 225, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #cbd5e1; -} -.p-button.p-button-secondary.p-button-text:enabled:active, -.p-button.p-button-secondary.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-secondary > .p-button.p-button-text:enabled:active, -.p-buttonset.p-button-secondary > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-secondary > .p-button.p-button-text:enabled:active, -.p-splitbutton.p-button-secondary > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-secondary.p-button-text:enabled:active, -.p-fileupload-choose.p-button-secondary.p-button-text:not(button):not(a):not(.p-disabled):active { - background: rgba(203, 213, 225, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #cbd5e1; -} -.p-button.p-button-info, -.p-buttonset.p-button-info > .p-button, -.p-splitbutton.p-button-info > .p-button, -.p-fileupload-choose.p-button-info { - color: #1c2127; - background: #93c5fd; - border: 1px solid #93c5fd; -} -.p-button.p-button-info:enabled:hover, -.p-button.p-button-info:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-info > .p-button:enabled:hover, -.p-buttonset.p-button-info > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-info > .p-button:enabled:hover, -.p-splitbutton.p-button-info > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-info:enabled:hover, -.p-fileupload-choose.p-button-info:not(button):not(a):not(.p-disabled):hover { - background: #6cb0fc; - color: #1c2127; - border-color: #6cb0fc; -} -.p-button.p-button-info:enabled:focus, -.p-button.p-button-info:not(button):not(a):not(.p-disabled):focus, -.p-buttonset.p-button-info > .p-button:enabled:focus, -.p-buttonset.p-button-info > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-splitbutton.p-button-info > .p-button:enabled:focus, -.p-splitbutton.p-button-info > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-fileupload-choose.p-button-info:enabled:focus, -.p-fileupload-choose.p-button-info:not(button):not(a):not(.p-disabled):focus { - box-shadow: 0 0 0 1px #b3d6fe; -} -.p-button.p-button-info:enabled:active, -.p-button.p-button-info:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-info > .p-button:enabled:active, -.p-buttonset.p-button-info > .p-button:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-info > .p-button:enabled:active, -.p-splitbutton.p-button-info > .p-button:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-info:enabled:active, -.p-fileupload-choose.p-button-info:not(button):not(a):not(.p-disabled):active { - background: #449bfc; - color: #1c2127; - border-color: #449bfc; -} -.p-button.p-button-info.p-button-outlined, -.p-buttonset.p-button-info > .p-button.p-button-outlined, -.p-splitbutton.p-button-info > .p-button.p-button-outlined, -.p-fileupload-choose.p-button-info.p-button-outlined { - background-color: rgba(0, 0, 0, 0); - color: #93c5fd; - border: 1px solid; -} -.p-button.p-button-info.p-button-outlined:enabled:hover, -.p-button.p-button-info.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-info > .p-button.p-button-outlined:enabled:hover, -.p-buttonset.p-button-info > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-info > .p-button.p-button-outlined:enabled:hover, -.p-splitbutton.p-button-info > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-info.p-button-outlined:enabled:hover, -.p-fileupload-choose.p-button-info.p-button-outlined:not(button):not(a):not(.p-disabled):hover { - background: rgba(147, 197, 253, 0.04); - color: #93c5fd; - border: 1px solid; -} -.p-button.p-button-info.p-button-outlined:enabled:active, -.p-button.p-button-info.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-info > .p-button.p-button-outlined:enabled:active, -.p-buttonset.p-button-info > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-info > .p-button.p-button-outlined:enabled:active, -.p-splitbutton.p-button-info > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-info.p-button-outlined:enabled:active, -.p-fileupload-choose.p-button-info.p-button-outlined:not(button):not(a):not(.p-disabled):active { - background: rgba(147, 197, 253, 0.16); - color: #93c5fd; - border: 1px solid; -} -.p-button.p-button-info.p-button-text, -.p-buttonset.p-button-info > .p-button.p-button-text, -.p-splitbutton.p-button-info > .p-button.p-button-text, -.p-fileupload-choose.p-button-info.p-button-text { - background-color: rgba(0, 0, 0, 0); - color: #93c5fd; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-info.p-button-text:enabled:hover, -.p-button.p-button-info.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-info > .p-button.p-button-text:enabled:hover, -.p-buttonset.p-button-info > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-info > .p-button.p-button-text:enabled:hover, -.p-splitbutton.p-button-info > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-info.p-button-text:enabled:hover, -.p-fileupload-choose.p-button-info.p-button-text:not(button):not(a):not(.p-disabled):hover { - background: rgba(147, 197, 253, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #93c5fd; -} -.p-button.p-button-info.p-button-text:enabled:active, -.p-button.p-button-info.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-info > .p-button.p-button-text:enabled:active, -.p-buttonset.p-button-info > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-info > .p-button.p-button-text:enabled:active, -.p-splitbutton.p-button-info > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-info.p-button-text:enabled:active, -.p-fileupload-choose.p-button-info.p-button-text:not(button):not(a):not(.p-disabled):active { - background: rgba(147, 197, 253, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #93c5fd; -} -.p-button.p-button-success, -.p-buttonset.p-button-success > .p-button, -.p-splitbutton.p-button-success > .p-button, -.p-fileupload-choose.p-button-success { - color: #1c2127; - background: #86efac; - border: 1px solid #86efac; -} -.p-button.p-button-success:enabled:hover, -.p-button.p-button-success:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-success > .p-button:enabled:hover, -.p-buttonset.p-button-success > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-success > .p-button:enabled:hover, -.p-splitbutton.p-button-success > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-success:enabled:hover, -.p-fileupload-choose.p-button-success:not(button):not(a):not(.p-disabled):hover { - background: #65eb95; - color: #1c2127; - border-color: #65eb95; -} -.p-button.p-button-success:enabled:focus, -.p-button.p-button-success:not(button):not(a):not(.p-disabled):focus, -.p-buttonset.p-button-success > .p-button:enabled:focus, -.p-buttonset.p-button-success > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-splitbutton.p-button-success > .p-button:enabled:focus, -.p-splitbutton.p-button-success > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-fileupload-choose.p-button-success:enabled:focus, -.p-fileupload-choose.p-button-success:not(button):not(a):not(.p-disabled):focus { - box-shadow: 0 0 0 1px #aaf4c5; -} -.p-button.p-button-success:enabled:active, -.p-button.p-button-success:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-success > .p-button:enabled:active, -.p-buttonset.p-button-success > .p-button:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-success > .p-button:enabled:active, -.p-splitbutton.p-button-success > .p-button:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-success:enabled:active, -.p-fileupload-choose.p-button-success:not(button):not(a):not(.p-disabled):active { - background: #44e67f; - color: #1c2127; - border-color: #44e67f; -} -.p-button.p-button-success.p-button-outlined, -.p-buttonset.p-button-success > .p-button.p-button-outlined, -.p-splitbutton.p-button-success > .p-button.p-button-outlined, -.p-fileupload-choose.p-button-success.p-button-outlined { - background-color: rgba(0, 0, 0, 0); - color: #86efac; - border: 1px solid; -} -.p-button.p-button-success.p-button-outlined:enabled:hover, -.p-button.p-button-success.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-success > .p-button.p-button-outlined:enabled:hover, -.p-buttonset.p-button-success > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-success > .p-button.p-button-outlined:enabled:hover, -.p-splitbutton.p-button-success > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-success.p-button-outlined:enabled:hover, -.p-fileupload-choose.p-button-success.p-button-outlined:not(button):not(a):not(.p-disabled):hover { - background: rgba(134, 239, 172, 0.04); - color: #86efac; - border: 1px solid; -} -.p-button.p-button-success.p-button-outlined:enabled:active, -.p-button.p-button-success.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-success > .p-button.p-button-outlined:enabled:active, -.p-buttonset.p-button-success > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-success > .p-button.p-button-outlined:enabled:active, -.p-splitbutton.p-button-success > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-success.p-button-outlined:enabled:active, -.p-fileupload-choose.p-button-success.p-button-outlined:not(button):not(a):not(.p-disabled):active { - background: rgba(134, 239, 172, 0.16); - color: #86efac; - border: 1px solid; -} -.p-button.p-button-success.p-button-text, -.p-buttonset.p-button-success > .p-button.p-button-text, -.p-splitbutton.p-button-success > .p-button.p-button-text, -.p-fileupload-choose.p-button-success.p-button-text { - background-color: rgba(0, 0, 0, 0); - color: #86efac; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-success.p-button-text:enabled:hover, -.p-button.p-button-success.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-success > .p-button.p-button-text:enabled:hover, -.p-buttonset.p-button-success > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-success > .p-button.p-button-text:enabled:hover, -.p-splitbutton.p-button-success > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-success.p-button-text:enabled:hover, -.p-fileupload-choose.p-button-success.p-button-text:not(button):not(a):not(.p-disabled):hover { - background: rgba(134, 239, 172, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #86efac; -} -.p-button.p-button-success.p-button-text:enabled:active, -.p-button.p-button-success.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-success > .p-button.p-button-text:enabled:active, -.p-buttonset.p-button-success > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-success > .p-button.p-button-text:enabled:active, -.p-splitbutton.p-button-success > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-success.p-button-text:enabled:active, -.p-fileupload-choose.p-button-success.p-button-text:not(button):not(a):not(.p-disabled):active { - background: rgba(134, 239, 172, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #86efac; -} -.p-button.p-button-warning, -.p-buttonset.p-button-warning > .p-button, -.p-splitbutton.p-button-warning > .p-button, -.p-fileupload-choose.p-button-warning { - color: #1c2127; - background: #fcd34d; - border: 1px solid #fcd34d; -} -.p-button.p-button-warning:enabled:hover, -.p-button.p-button-warning:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-warning > .p-button:enabled:hover, -.p-buttonset.p-button-warning > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-warning > .p-button:enabled:hover, -.p-splitbutton.p-button-warning > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-warning:enabled:hover, -.p-fileupload-choose.p-button-warning:not(button):not(a):not(.p-disabled):hover { - background: #fbcb2d; - color: #1c2127; - border-color: #fbcb2d; -} -.p-button.p-button-warning:enabled:focus, -.p-button.p-button-warning:not(button):not(a):not(.p-disabled):focus, -.p-buttonset.p-button-warning > .p-button:enabled:focus, -.p-buttonset.p-button-warning > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-splitbutton.p-button-warning > .p-button:enabled:focus, -.p-splitbutton.p-button-warning > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-fileupload-choose.p-button-warning:enabled:focus, -.p-fileupload-choose.p-button-warning:not(button):not(a):not(.p-disabled):focus { - box-shadow: 0 0 0 1px #fde082; -} -.p-button.p-button-warning:enabled:active, -.p-button.p-button-warning:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-warning > .p-button:enabled:active, -.p-buttonset.p-button-warning > .p-button:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-warning > .p-button:enabled:active, -.p-splitbutton.p-button-warning > .p-button:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-warning:enabled:active, -.p-fileupload-choose.p-button-warning:not(button):not(a):not(.p-disabled):active { - background: #fbc30c; - color: #1c2127; - border-color: #fbc30c; -} -.p-button.p-button-warning.p-button-outlined, -.p-buttonset.p-button-warning > .p-button.p-button-outlined, -.p-splitbutton.p-button-warning > .p-button.p-button-outlined, -.p-fileupload-choose.p-button-warning.p-button-outlined { - background-color: rgba(0, 0, 0, 0); - color: #fcd34d; - border: 1px solid; -} -.p-button.p-button-warning.p-button-outlined:enabled:hover, -.p-button.p-button-warning.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-warning > .p-button.p-button-outlined:enabled:hover, -.p-buttonset.p-button-warning > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-warning > .p-button.p-button-outlined:enabled:hover, -.p-splitbutton.p-button-warning > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-warning.p-button-outlined:enabled:hover, -.p-fileupload-choose.p-button-warning.p-button-outlined:not(button):not(a):not(.p-disabled):hover { - background: rgba(252, 211, 77, 0.04); - color: #fcd34d; - border: 1px solid; -} -.p-button.p-button-warning.p-button-outlined:enabled:active, -.p-button.p-button-warning.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-warning > .p-button.p-button-outlined:enabled:active, -.p-buttonset.p-button-warning > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-warning > .p-button.p-button-outlined:enabled:active, -.p-splitbutton.p-button-warning > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-warning.p-button-outlined:enabled:active, -.p-fileupload-choose.p-button-warning.p-button-outlined:not(button):not(a):not(.p-disabled):active { - background: rgba(252, 211, 77, 0.16); - color: #fcd34d; - border: 1px solid; -} -.p-button.p-button-warning.p-button-text, -.p-buttonset.p-button-warning > .p-button.p-button-text, -.p-splitbutton.p-button-warning > .p-button.p-button-text, -.p-fileupload-choose.p-button-warning.p-button-text { - background-color: rgba(0, 0, 0, 0); - color: #fcd34d; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-warning.p-button-text:enabled:hover, -.p-button.p-button-warning.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-warning > .p-button.p-button-text:enabled:hover, -.p-buttonset.p-button-warning > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-warning > .p-button.p-button-text:enabled:hover, -.p-splitbutton.p-button-warning > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-warning.p-button-text:enabled:hover, -.p-fileupload-choose.p-button-warning.p-button-text:not(button):not(a):not(.p-disabled):hover { - background: rgba(252, 211, 77, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #fcd34d; -} -.p-button.p-button-warning.p-button-text:enabled:active, -.p-button.p-button-warning.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-warning > .p-button.p-button-text:enabled:active, -.p-buttonset.p-button-warning > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-warning > .p-button.p-button-text:enabled:active, -.p-splitbutton.p-button-warning > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-warning.p-button-text:enabled:active, -.p-fileupload-choose.p-button-warning.p-button-text:not(button):not(a):not(.p-disabled):active { - background: rgba(252, 211, 77, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #fcd34d; -} -.p-button.p-button-help, -.p-buttonset.p-button-help > .p-button, -.p-splitbutton.p-button-help > .p-button, -.p-fileupload-choose.p-button-help { - color: #1c2127; - background: #d8b4fe; - border: 1px solid #d8b4fe; -} -.p-button.p-button-help:enabled:hover, -.p-button.p-button-help:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-help > .p-button:enabled:hover, -.p-buttonset.p-button-help > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-help > .p-button:enabled:hover, -.p-splitbutton.p-button-help > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-help:enabled:hover, -.p-fileupload-choose.p-button-help:not(button):not(a):not(.p-disabled):hover { - background: #c289fd; - color: #1c2127; - border-color: #c289fd; -} -.p-button.p-button-help:enabled:focus, -.p-button.p-button-help:not(button):not(a):not(.p-disabled):focus, -.p-buttonset.p-button-help > .p-button:enabled:focus, -.p-buttonset.p-button-help > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-splitbutton.p-button-help > .p-button:enabled:focus, -.p-splitbutton.p-button-help > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-fileupload-choose.p-button-help:enabled:focus, -.p-fileupload-choose.p-button-help:not(button):not(a):not(.p-disabled):focus { - box-shadow: 0 0 0 1px #e4cbfe; -} -.p-button.p-button-help:enabled:active, -.p-button.p-button-help:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-help > .p-button:enabled:active, -.p-buttonset.p-button-help > .p-button:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-help > .p-button:enabled:active, -.p-splitbutton.p-button-help > .p-button:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-help:enabled:active, -.p-fileupload-choose.p-button-help:not(button):not(a):not(.p-disabled):active { - background: #ab5efd; - color: #1c2127; - border-color: #ab5efd; -} -.p-button.p-button-help.p-button-outlined, -.p-buttonset.p-button-help > .p-button.p-button-outlined, -.p-splitbutton.p-button-help > .p-button.p-button-outlined, -.p-fileupload-choose.p-button-help.p-button-outlined { - background-color: rgba(0, 0, 0, 0); - color: #d8b4fe; - border: 1px solid; -} -.p-button.p-button-help.p-button-outlined:enabled:hover, -.p-button.p-button-help.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-help > .p-button.p-button-outlined:enabled:hover, -.p-buttonset.p-button-help > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-help > .p-button.p-button-outlined:enabled:hover, -.p-splitbutton.p-button-help > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-help.p-button-outlined:enabled:hover, -.p-fileupload-choose.p-button-help.p-button-outlined:not(button):not(a):not(.p-disabled):hover { - background: rgba(216, 180, 254, 0.04); - color: #d8b4fe; - border: 1px solid; -} -.p-button.p-button-help.p-button-outlined:enabled:active, -.p-button.p-button-help.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-help > .p-button.p-button-outlined:enabled:active, -.p-buttonset.p-button-help > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-help > .p-button.p-button-outlined:enabled:active, -.p-splitbutton.p-button-help > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-help.p-button-outlined:enabled:active, -.p-fileupload-choose.p-button-help.p-button-outlined:not(button):not(a):not(.p-disabled):active { - background: rgba(216, 180, 254, 0.16); - color: #d8b4fe; - border: 1px solid; -} -.p-button.p-button-help.p-button-text, -.p-buttonset.p-button-help > .p-button.p-button-text, -.p-splitbutton.p-button-help > .p-button.p-button-text, -.p-fileupload-choose.p-button-help.p-button-text { - background-color: rgba(0, 0, 0, 0); - color: #d8b4fe; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-help.p-button-text:enabled:hover, -.p-button.p-button-help.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-help > .p-button.p-button-text:enabled:hover, -.p-buttonset.p-button-help > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-help > .p-button.p-button-text:enabled:hover, -.p-splitbutton.p-button-help > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-help.p-button-text:enabled:hover, -.p-fileupload-choose.p-button-help.p-button-text:not(button):not(a):not(.p-disabled):hover { - background: rgba(216, 180, 254, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #d8b4fe; -} -.p-button.p-button-help.p-button-text:enabled:active, -.p-button.p-button-help.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-help > .p-button.p-button-text:enabled:active, -.p-buttonset.p-button-help > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-help > .p-button.p-button-text:enabled:active, -.p-splitbutton.p-button-help > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-help.p-button-text:enabled:active, -.p-fileupload-choose.p-button-help.p-button-text:not(button):not(a):not(.p-disabled):active { - background: rgba(216, 180, 254, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #d8b4fe; -} -.p-button.p-button-danger, -.p-buttonset.p-button-danger > .p-button, -.p-splitbutton.p-button-danger > .p-button, -.p-fileupload-choose.p-button-danger { - color: #1c2127; - background: #fca5a5; - border: 1px solid #fca5a5; -} -.p-button.p-button-danger:enabled:hover, -.p-button.p-button-danger:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-danger > .p-button:enabled:hover, -.p-buttonset.p-button-danger > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-danger > .p-button:enabled:hover, -.p-splitbutton.p-button-danger > .p-button:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-danger:enabled:hover, -.p-fileupload-choose.p-button-danger:not(button):not(a):not(.p-disabled):hover { - background: #fb7d7d; - color: #1c2127; - border-color: #fb7d7d; -} -.p-button.p-button-danger:enabled:focus, -.p-button.p-button-danger:not(button):not(a):not(.p-disabled):focus, -.p-buttonset.p-button-danger > .p-button:enabled:focus, -.p-buttonset.p-button-danger > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-splitbutton.p-button-danger > .p-button:enabled:focus, -.p-splitbutton.p-button-danger > .p-button:not(button):not(a):not(.p-disabled):focus, -.p-fileupload-choose.p-button-danger:enabled:focus, -.p-fileupload-choose.p-button-danger:not(button):not(a):not(.p-disabled):focus { - box-shadow: 0 0 0 1px #fdc0c0; -} -.p-button.p-button-danger:enabled:active, -.p-button.p-button-danger:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-danger > .p-button:enabled:active, -.p-buttonset.p-button-danger > .p-button:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-danger > .p-button:enabled:active, -.p-splitbutton.p-button-danger > .p-button:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-danger:enabled:active, -.p-fileupload-choose.p-button-danger:not(button):not(a):not(.p-disabled):active { - background: #f95454; - color: #1c2127; - border-color: #f95454; -} -.p-button.p-button-danger.p-button-outlined, -.p-buttonset.p-button-danger > .p-button.p-button-outlined, -.p-splitbutton.p-button-danger > .p-button.p-button-outlined, -.p-fileupload-choose.p-button-danger.p-button-outlined { - background-color: rgba(0, 0, 0, 0); - color: #fca5a5; - border: 1px solid; -} -.p-button.p-button-danger.p-button-outlined:enabled:hover, -.p-button.p-button-danger.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-danger > .p-button.p-button-outlined:enabled:hover, -.p-buttonset.p-button-danger > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-danger > .p-button.p-button-outlined:enabled:hover, -.p-splitbutton.p-button-danger > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-danger.p-button-outlined:enabled:hover, -.p-fileupload-choose.p-button-danger.p-button-outlined:not(button):not(a):not(.p-disabled):hover { - background: rgba(252, 165, 165, 0.04); - color: #fca5a5; - border: 1px solid; -} -.p-button.p-button-danger.p-button-outlined:enabled:active, -.p-button.p-button-danger.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-danger > .p-button.p-button-outlined:enabled:active, -.p-buttonset.p-button-danger > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-danger > .p-button.p-button-outlined:enabled:active, -.p-splitbutton.p-button-danger > .p-button.p-button-outlined:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-danger.p-button-outlined:enabled:active, -.p-fileupload-choose.p-button-danger.p-button-outlined:not(button):not(a):not(.p-disabled):active { - background: rgba(252, 165, 165, 0.16); - color: #fca5a5; - border: 1px solid; -} -.p-button.p-button-danger.p-button-text, -.p-buttonset.p-button-danger > .p-button.p-button-text, -.p-splitbutton.p-button-danger > .p-button.p-button-text, -.p-fileupload-choose.p-button-danger.p-button-text { - background-color: rgba(0, 0, 0, 0); - color: #fca5a5; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-danger.p-button-text:enabled:hover, -.p-button.p-button-danger.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-buttonset.p-button-danger > .p-button.p-button-text:enabled:hover, -.p-buttonset.p-button-danger > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-splitbutton.p-button-danger > .p-button.p-button-text:enabled:hover, -.p-splitbutton.p-button-danger > .p-button.p-button-text:not(button):not(a):not(.p-disabled):hover, -.p-fileupload-choose.p-button-danger.p-button-text:enabled:hover, -.p-fileupload-choose.p-button-danger.p-button-text:not(button):not(a):not(.p-disabled):hover { - background: rgba(252, 165, 165, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #fca5a5; -} -.p-button.p-button-danger.p-button-text:enabled:active, -.p-button.p-button-danger.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-buttonset.p-button-danger > .p-button.p-button-text:enabled:active, -.p-buttonset.p-button-danger > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-splitbutton.p-button-danger > .p-button.p-button-text:enabled:active, -.p-splitbutton.p-button-danger > .p-button.p-button-text:not(button):not(a):not(.p-disabled):active, -.p-fileupload-choose.p-button-danger.p-button-text:enabled:active, -.p-fileupload-choose.p-button-danger.p-button-text:not(button):not(a):not(.p-disabled):active { - background: rgba(252, 165, 165, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #fca5a5; -} -.p-button.p-button-link { - color: #e5a50a; - background: rgba(0, 0, 0, 0); - border: rgba(0, 0, 0, 0); -} -.p-button.p-button-link:enabled:hover, -.p-button.p-button-link:not(button):not(a):not(.p-disabled):hover { - background: rgba(0, 0, 0, 0); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-link:enabled:hover .p-button-label, -.p-button.p-button-link:not(button):not(a):not(.p-disabled):hover .p-button-label { - text-decoration: underline; -} -.p-button.p-button-link:enabled:focus, -.p-button.p-button-link:not(button):not(a):not(.p-disabled):focus { - background: rgba(0, 0, 0, 0); - box-shadow: 0 0 0 1px rgba(165, 180, 252, 0.5); - border-color: rgba(0, 0, 0, 0); -} -.p-button.p-button-link:enabled:active, -.p-button.p-button-link:not(button):not(a):not(.p-disabled):active { - background: rgba(0, 0, 0, 0); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton { - border-radius: 8px; -} -.p-splitbutton.p-button-outlined > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #e5a50a; - border: 1px solid; -} -.p-splitbutton.p-button-outlined > .p-button:enabled:hover, -.p-splitbutton.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(229, 165, 10, 0.04); - color: #e5a50a; -} -.p-splitbutton.p-button-outlined > .p-button:enabled:active, -.p-splitbutton.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(229, 165, 10, 0.16); - color: #e5a50a; -} -.p-splitbutton.p-button-outlined.p-button-plain > .p-button { - color: rgba(255, 255, 255, 0.6); - border-color: rgba(255, 255, 255, 0.6); -} -.p-splitbutton.p-button-outlined.p-button-plain > .p-button:enabled:hover, -.p-splitbutton.p-button-outlined.p-button-plain > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.6); -} -.p-splitbutton.p-button-outlined.p-button-plain > .p-button:enabled:active, -.p-splitbutton.p-button-outlined.p-button-plain > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(255, 255, 255, 0.16); - color: rgba(255, 255, 255, 0.6); -} -.p-splitbutton.p-button-text > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-text > .p-button:enabled:hover, -.p-splitbutton.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(229, 165, 10, 0.04); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-text > .p-button:enabled:active, -.p-splitbutton.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(229, 165, 10, 0.16); - color: #e5a50a; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-text.p-button-plain > .p-button { - color: rgba(255, 255, 255, 0.6); -} -.p-splitbutton.p-button-text.p-button-plain > .p-button:enabled:hover, -.p-splitbutton.p-button-text.p-button-plain > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.6); -} -.p-splitbutton.p-button-text.p-button-plain > .p-button:enabled:active, -.p-splitbutton.p-button-text.p-button-plain > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(255, 255, 255, 0.16); - color: rgba(255, 255, 255, 0.6); -} -.p-splitbutton.p-button-raised { - box-shadow: - 0px 3px 1px -2px rgba(0, 0, 0, 0.2), - 0px 2px 2px 0px rgba(0, 0, 0, 0.14), - 0px 1px 5px 0px rgba(0, 0, 0, 0.12); -} -.p-splitbutton.p-button-rounded { - border-radius: 2rem; -} -.p-splitbutton.p-button-rounded > .p-button { - border-radius: 2rem; -} -.p-splitbutton.p-button-sm > .p-button { - font-size: 0.875rem; - padding: 0.65625rem 1.09375rem; -} -.p-splitbutton.p-button-sm > .p-button .p-button-icon { - font-size: 0.875rem; -} -.p-splitbutton.p-button-lg > .p-button { - font-size: 1.25rem; - padding: 0.9375rem 1.5625rem; -} -.p-splitbutton.p-button-lg > .p-button .p-button-icon { - font-size: 1.25rem; -} -.p-splitbutton.p-button-secondary.p-button-outlined > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #cbd5e1; - border: 1px solid; -} -.p-splitbutton.p-button-secondary.p-button-outlined > .p-button:enabled:hover, -.p-splitbutton.p-button-secondary.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(203, 213, 225, 0.04); - color: #cbd5e1; -} -.p-splitbutton.p-button-secondary.p-button-outlined > .p-button:enabled:active, -.p-splitbutton.p-button-secondary.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(203, 213, 225, 0.16); - color: #cbd5e1; -} -.p-splitbutton.p-button-secondary.p-button-text > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #cbd5e1; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-secondary.p-button-text > .p-button:enabled:hover, -.p-splitbutton.p-button-secondary.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(203, 213, 225, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #cbd5e1; -} -.p-splitbutton.p-button-secondary.p-button-text > .p-button:enabled:active, -.p-splitbutton.p-button-secondary.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(203, 213, 225, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #cbd5e1; -} -.p-splitbutton.p-button-info.p-button-outlined > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #93c5fd; - border: 1px solid; -} -.p-splitbutton.p-button-info.p-button-outlined > .p-button:enabled:hover, -.p-splitbutton.p-button-info.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(147, 197, 253, 0.04); - color: #93c5fd; -} -.p-splitbutton.p-button-info.p-button-outlined > .p-button:enabled:active, -.p-splitbutton.p-button-info.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(147, 197, 253, 0.16); - color: #93c5fd; -} -.p-splitbutton.p-button-info.p-button-text > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #93c5fd; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-info.p-button-text > .p-button:enabled:hover, -.p-splitbutton.p-button-info.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(147, 197, 253, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #93c5fd; -} -.p-splitbutton.p-button-info.p-button-text > .p-button:enabled:active, -.p-splitbutton.p-button-info.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(147, 197, 253, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #93c5fd; -} -.p-splitbutton.p-button-success.p-button-outlined > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #86efac; - border: 1px solid; -} -.p-splitbutton.p-button-success.p-button-outlined > .p-button:enabled:hover, -.p-splitbutton.p-button-success.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(134, 239, 172, 0.04); - color: #86efac; -} -.p-splitbutton.p-button-success.p-button-outlined > .p-button:enabled:active, -.p-splitbutton.p-button-success.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(134, 239, 172, 0.16); - color: #86efac; -} -.p-splitbutton.p-button-success.p-button-text > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #86efac; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-success.p-button-text > .p-button:enabled:hover, -.p-splitbutton.p-button-success.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(134, 239, 172, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #86efac; -} -.p-splitbutton.p-button-success.p-button-text > .p-button:enabled:active, -.p-splitbutton.p-button-success.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(134, 239, 172, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #86efac; -} -.p-splitbutton.p-button-warning.p-button-outlined > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #fcd34d; - border: 1px solid; -} -.p-splitbutton.p-button-warning.p-button-outlined > .p-button:enabled:hover, -.p-splitbutton.p-button-warning.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(252, 211, 77, 0.04); - color: #fcd34d; -} -.p-splitbutton.p-button-warning.p-button-outlined > .p-button:enabled:active, -.p-splitbutton.p-button-warning.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(252, 211, 77, 0.16); - color: #fcd34d; -} -.p-splitbutton.p-button-warning.p-button-text > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #fcd34d; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-warning.p-button-text > .p-button:enabled:hover, -.p-splitbutton.p-button-warning.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(252, 211, 77, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #fcd34d; -} -.p-splitbutton.p-button-warning.p-button-text > .p-button:enabled:active, -.p-splitbutton.p-button-warning.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(252, 211, 77, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #fcd34d; -} -.p-splitbutton.p-button-help.p-button-outlined > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #d8b4fe; - border: 1px solid; -} -.p-splitbutton.p-button-help.p-button-outlined > .p-button:enabled:hover, -.p-splitbutton.p-button-help.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(216, 180, 254, 0.04); - color: #d8b4fe; -} -.p-splitbutton.p-button-help.p-button-outlined > .p-button:enabled:active, -.p-splitbutton.p-button-help.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(216, 180, 254, 0.16); - color: #d8b4fe; -} -.p-splitbutton.p-button-help.p-button-text > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #d8b4fe; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-help.p-button-text > .p-button:enabled:hover, -.p-splitbutton.p-button-help.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(216, 180, 254, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #d8b4fe; -} -.p-splitbutton.p-button-help.p-button-text > .p-button:enabled:active, -.p-splitbutton.p-button-help.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(216, 180, 254, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #d8b4fe; -} -.p-splitbutton.p-button-danger.p-button-outlined > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #fca5a5; - border: 1px solid; -} -.p-splitbutton.p-button-danger.p-button-outlined > .p-button:enabled:hover, -.p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(252, 165, 165, 0.04); - color: #fca5a5; -} -.p-splitbutton.p-button-danger.p-button-outlined > .p-button:enabled:active, -.p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(252, 165, 165, 0.16); - color: #fca5a5; -} -.p-splitbutton.p-button-danger.p-button-text > .p-button { - background-color: rgba(0, 0, 0, 0); - color: #fca5a5; - border-color: rgba(0, 0, 0, 0); -} -.p-splitbutton.p-button-danger.p-button-text > .p-button:enabled:hover, -.p-splitbutton.p-button-danger.p-button-text > .p-button:not(button):not(a):not(.p-disabled):hover { - background: rgba(252, 165, 165, 0.04); - border-color: rgba(0, 0, 0, 0); - color: #fca5a5; -} -.p-splitbutton.p-button-danger.p-button-text > .p-button:enabled:active, -.p-splitbutton.p-button-danger.p-button-text > .p-button:not(button):not(a):not(.p-disabled):active { - background: rgba(252, 165, 165, 0.16); - border-color: rgba(0, 0, 0, 0); - color: #fca5a5; -} -.p-speeddial-button.p-button.p-button-icon-only { - width: 4rem; - height: 4rem; -} -.p-speeddial-button.p-button.p-button-icon-only .p-button-icon { - font-size: 1.3rem; -} -.p-speeddial-button.p-button.p-button-icon-only .p-button-icon.p-icon { - width: 1.3rem; - height: 1.3rem; -} -.p-speeddial-action { - width: 3rem; - height: 3rem; - background: rgba(255, 255, 255, 0.87); - color: #040d19; -} -.p-speeddial-action:hover { - background: rgba(255, 255, 255, 0.6); - color: #040d19; -} -.p-speeddial-direction-up .p-speeddial-item { - margin: 0.25rem; -} -.p-speeddial-direction-up .p-speeddial-item:first-child { - margin-bottom: 0.5rem; -} -.p-speeddial-direction-down .p-speeddial-item { - margin: 0.25rem; -} -.p-speeddial-direction-down .p-speeddial-item:first-child { - margin-top: 0.5rem; -} -.p-speeddial-direction-left .p-speeddial-item { - margin: 0 0.25rem; -} -.p-speeddial-direction-left .p-speeddial-item:first-child { - margin-right: 0.5rem; -} -.p-speeddial-direction-right .p-speeddial-item { - margin: 0 0.25rem; -} -.p-speeddial-direction-right .p-speeddial-item:first-child { - margin-left: 0.5rem; -} -.p-speeddial-circle .p-speeddial-item, -.p-speeddial-semi-circle .p-speeddial-item, -.p-speeddial-quarter-circle .p-speeddial-item { - margin: 0; -} -.p-speeddial-circle .p-speeddial-item:first-child, -.p-speeddial-circle .p-speeddial-item:last-child, -.p-speeddial-semi-circle .p-speeddial-item:first-child, -.p-speeddial-semi-circle .p-speeddial-item:last-child, -.p-speeddial-quarter-circle .p-speeddial-item:first-child, -.p-speeddial-quarter-circle .p-speeddial-item:last-child { - margin: 0; -} -.p-speeddial-mask { - background-color: rgba(0, 0, 0, 0.4); -} -.p-carousel .p-carousel-content .p-carousel-prev, -.p-carousel .p-carousel-content .p-carousel-next { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - margin: 0.5rem; -} -.p-carousel .p-carousel-content .p-carousel-prev:enabled:hover, -.p-carousel .p-carousel-content .p-carousel-next:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-carousel .p-carousel-content .p-carousel-prev:focus, -.p-carousel .p-carousel-content .p-carousel-next:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-carousel .p-carousel-indicators { - padding: 1rem; -} -.p-carousel .p-carousel-indicators .p-carousel-indicator { - margin-right: 0.5rem; - margin-bottom: 0.5rem; -} -.p-carousel .p-carousel-indicators .p-carousel-indicator button { - background-color: #0b213f; - width: 2rem; - height: 0.5rem; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - border-radius: 0; -} -.p-carousel .p-carousel-indicators .p-carousel-indicator button:hover { - background: rgba(255, 255, 255, 0.03); -} -.p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-paginator-top { - border-width: 1px 0 1px 0; - border-radius: 0; -} -.p-datatable .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; -} -.p-datatable .p-datatable-header { - background: #071426; - color: rgba(255, 255, 255, 0.6); - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; - font-weight: 700; -} -.p-datatable .p-datatable-footer { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; - font-weight: 700; -} -.p-datatable .p-datatable-thead > tr > th { - text-align: left; - padding: 1rem 1rem; - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - font-weight: 700; - color: rgba(255, 255, 255, 0.87); - background: #071426; - transition: box-shadow 0.2s; -} -.p-datatable .p-datatable-tfoot > tr > td { - text-align: left; - padding: 1rem 1rem; - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - font-weight: 700; - color: rgba(255, 255, 255, 0.87); - background: #071426; -} -.p-datatable .p-sortable-column .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.6); - margin-left: 0.5rem; -} -.p-datatable .p-sortable-column .p-sortable-column-badge { - border-radius: 50%; - height: 1.143rem; - min-width: 1.143rem; - line-height: 1.143rem; - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); - margin-left: 0.5rem; -} -.p-datatable .p-sortable-column:not(.p-highlight):not(.p-sortable-disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-sortable-column:not(.p-highlight):not(.p-sortable-disabled):hover .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-sortable-column.p-highlight { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-sortable-column.p-highlight .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-sortable-column.p-highlight:not(.p-sortable-disabled):hover { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-sortable-column.p-highlight:not(.p-sortable-disabled):hover .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-sortable-column:focus { - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); - outline: 0 none; -} -.p-datatable .p-datatable-tbody > tr { - background: #071426; - color: rgba(255, 255, 255, 0.87); - transition: box-shadow 0.2s; -} -.p-datatable .p-datatable-tbody > tr > td { - text-align: left; - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; -} -.p-datatable .p-datatable-tbody > tr > td .p-row-toggler, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-datatable .p-datatable-tbody > tr > td .p-row-toggler:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:enabled:hover, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-datatable .p-datatable-tbody > tr > td .p-row-toggler:focus, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-init:focus, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save:focus, -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-cancel:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-datatable .p-datatable-tbody > tr > td .p-row-editor-save { - margin-right: 0.5rem; -} -.p-datatable .p-datatable-tbody > tr > td > .p-column-title { - font-weight: 700; -} -.p-datatable .p-datatable-tbody > tr > td.p-highlight { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-datatable-tbody > tr.p-highlight { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { - box-shadow: inset 0 2px 0 0 rgba(165, 180, 252, 0.16); -} -.p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { - box-shadow: inset 0 -2px 0 0 rgba(165, 180, 252, 0.16); -} -.p-datatable.p-datatable-selectable - .p-datatable-tbody - > tr.p-selectable-row:not(.p-highlight):not(.p-datatable-emptymessage):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable.p-datatable-selectable .p-datatable-tbody > tr.p-selectable-row:focus { - outline: 0.15rem solid rgba(165, 180, 252, 0.5); - outline-offset: -0.15rem; -} -.p-datatable.p-datatable-selectable-cell - .p-datatable-tbody - > tr.p-selectable-row - > td.p-selectable-cell:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable.p-datatable-selectable-cell .p-datatable-tbody > tr.p-selectable-row > td.p-selectable-cell:focus { - outline: 0.15rem solid rgba(165, 180, 252, 0.5); - outline-offset: -0.15rem; -} -.p-datatable.p-datatable-hoverable-rows .p-datatable-tbody > tr:not(.p-highlight):not(.p-datatable-emptymessage):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable .p-column-resizer-helper { - background: #e5a50a; -} -.p-datatable .p-datatable-scrollable-header, -.p-datatable .p-datatable-scrollable-footer { - background: #071426; -} -.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-thead, -.p-datatable.p-datatable-scrollable > .p-datatable-wrapper > .p-datatable-table > .p-datatable-tfoot, -.p-datatable.p-datatable-scrollable - > .p-datatable-wrapper - > .p-virtualscroller - > .p-datatable-table - > .p-datatable-thead, -.p-datatable.p-datatable-scrollable - > .p-datatable-wrapper - > .p-virtualscroller - > .p-datatable-table - > .p-datatable-tfoot { - background-color: #071426; -} -.p-datatable .p-datatable-loading-icon { - font-size: 2rem; -} -.p-datatable .p-datatable-loading-icon.p-icon { - width: 2rem; - height: 2rem; -} -.p-datatable.p-datatable-gridlines .p-datatable-header { - border-width: 1px 1px 0 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-footer { - border-width: 0 1px 1px 1px; -} -.p-datatable.p-datatable-gridlines .p-paginator-top { - border-width: 0 1px 0 1px; -} -.p-datatable.p-datatable-gridlines .p-paginator-bottom { - border-width: 0 1px 1px 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th { - border-width: 1px 0 1px 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-thead > tr > th:last-child { - border-width: 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td { - border-width: 1px 0 0 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-tbody > tr > td:last-child { - border-width: 1px 1px 0 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-tbody > tr:last-child > td { - border-width: 1px 0 1px 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-tbody > tr:last-child > td:last-child { - border-width: 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td { - border-width: 1px 0 1px 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-tfoot > tr > td:last-child { - border-width: 1px 1px 1px 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-thead + .p-datatable-tfoot > tr > td { - border-width: 0 0 1px 1px; -} -.p-datatable.p-datatable-gridlines .p-datatable-thead + .p-datatable-tfoot > tr > td:last-child { - border-width: 0 1px 1px 1px; -} -.p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody > tr > td { - border-width: 0 0 1px 1px; -} -.p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) - .p-datatable-tbody - > tr - > td:last-child { - border-width: 0 1px 1px 1px; -} -.p-datatable.p-datatable-gridlines:has(.p-datatable-tbody):has(.p-datatable-tfoot) - .p-datatable-tbody - > tr:last-child - > td { - border-width: 0 0 0 1px; -} -.p-datatable.p-datatable-gridlines:has(.p-datatable-tbody):has(.p-datatable-tfoot) - .p-datatable-tbody - > tr:last-child - > td:last-child { - border-width: 0 1px 0 1px; -} -.p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd { - background: rgba(255, 255, 255, 0.01); -} -.p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight .p-row-toggler { - color: rgba(255, 255, 255, 0.87); -} -.p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd.p-highlight .p-row-toggler:hover { - color: rgba(255, 255, 255, 0.87); -} -.p-datatable.p-datatable-striped .p-datatable-tbody > tr.p-row-odd + .p-row-expanded { - background: rgba(255, 255, 255, 0.01); -} -.p-datatable.p-datatable-sm .p-datatable-header { - padding: 0.5rem 0.5rem; -} -.p-datatable.p-datatable-sm .p-datatable-thead > tr > th { - padding: 0.5rem 0.5rem; -} -.p-datatable.p-datatable-sm .p-datatable-tbody > tr > td { - padding: 0.5rem 0.5rem; -} -.p-datatable.p-datatable-sm .p-datatable-tfoot > tr > td { - padding: 0.5rem 0.5rem; -} -.p-datatable.p-datatable-sm .p-datatable-footer { - padding: 0.5rem 0.5rem; -} -.p-datatable.p-datatable-lg .p-datatable-header { - padding: 1.25rem 1.25rem; -} -.p-datatable.p-datatable-lg .p-datatable-thead > tr > th { - padding: 1.25rem 1.25rem; -} -.p-datatable.p-datatable-lg .p-datatable-tbody > tr > td { - padding: 1.25rem 1.25rem; -} -.p-datatable.p-datatable-lg .p-datatable-tfoot > tr > td { - padding: 1.25rem 1.25rem; -} -.p-datatable.p-datatable-lg .p-datatable-footer { - padding: 1.25rem 1.25rem; -} -.p-datatable-drag-selection-helper { - background: rgba(229, 165, 10, 0.16); -} -.p-dataview .p-paginator-top { - border-width: 1px 0 1px 0; - border-radius: 0; -} -.p-dataview .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; -} -.p-dataview .p-dataview-header { - background: #071426; - color: rgba(255, 255, 255, 0.6); - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; - font-weight: 700; -} -.p-dataview .p-dataview-content { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 0 none; - padding: 0; -} -.p-dataview.p-dataview-list .p-dataview-content > .p-grid > div { - border: solid #0b213f; - border-width: 0 0 1px 0; -} -.p-dataview .p-dataview-footer { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; - font-weight: 700; - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-dataview .p-dataview-loading-icon { - font-size: 2rem; -} -.p-dataview .p-dataview-loading-icon.p-icon { - width: 2rem; - height: 2rem; -} -.p-datascroller .p-paginator-top { - border-width: 1px 0 1px 0; - border-radius: 0; -} -.p-datascroller .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; -} -.p-datascroller .p-datascroller-header { - background: #071426; - color: rgba(255, 255, 255, 0.6); - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; - font-weight: 700; -} -.p-datascroller .p-datascroller-content { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 0 none; - padding: 0; -} -.p-datascroller.p-datascroller-inline .p-datascroller-list > li { - border: solid #0b213f; - border-width: 0 0 1px 0; -} -.p-datascroller .p-datascroller-footer { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; - font-weight: 700; - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-column-filter-row .p-column-filter-menu-button, -.p-column-filter-row .p-column-filter-clear-button { - margin-left: 0.5rem; -} -.p-column-filter-menu-button { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-column-filter-menu-button:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-column-filter-menu-button.p-column-filter-menu-button-open, -.p-column-filter-menu-button.p-column-filter-menu-button-open:hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-column-filter-menu-button.p-column-filter-menu-button-active, -.p-column-filter-menu-button.p-column-filter-menu-button-active:hover { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-column-filter-menu-button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-column-filter-clear-button { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-column-filter-clear-button:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-column-filter-clear-button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-column-filter-overlay { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - min-width: 12.5rem; -} -.p-column-filter-overlay .p-column-filter-row-items { - padding: 0.75rem 0; -} -.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item { - margin: 0; - padding: 0.75rem 1.25rem; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); - transition: box-shadow 0.2s; - border-radius: 0; -} -.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:not(.p-highlight):not(.p-disabled):hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-row-item:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-column-filter-overlay .p-column-filter-row-items .p-column-filter-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; -} -.p-column-filter-overlay-menu .p-column-filter-operator { - padding: 0.75rem 1.25rem; - border-bottom: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - background: #071426; - margin: 0; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-column-filter-overlay-menu .p-column-filter-constraint { - padding: 1.25rem; - border-bottom: 1px solid #0b213f; -} -.p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-matchmode-dropdown { - margin-bottom: 0.5rem; -} -.p-column-filter-overlay-menu .p-column-filter-constraint .p-column-filter-remove-button { - margin-top: 0.5rem; -} -.p-column-filter-overlay-menu .p-column-filter-constraint:last-child { - border-bottom: 0 none; -} -.p-column-filter-overlay-menu .p-column-filter-add-rule { - padding: 0.75rem 1.25rem; -} -.p-column-filter-overlay-menu .p-column-filter-buttonbar { - padding: 1.25rem; -} -.fc.fc-unthemed .fc-view-container th { - background: #071426; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.fc.fc-unthemed .fc-view-container td.fc-widget-content { - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.fc.fc-unthemed .fc-view-container td.fc-head-container { - border: 1px solid #0b213f; -} -.fc.fc-unthemed .fc-view-container .fc-view { - background: #071426; -} -.fc.fc-unthemed .fc-view-container .fc-row { - border-right: 1px solid #0b213f; -} -.fc.fc-unthemed .fc-view-container .fc-event { - background: #da9d0a; - border: 1px solid #da9d0a; - color: #1c2127; -} -.fc.fc-unthemed .fc-view-container .fc-divider { - background: #071426; - border: 1px solid #0b213f; -} -.fc.fc-unthemed .fc-toolbar .fc-button { - color: #1c2127; - background: #e5a50a; - border: 1px solid #e5a50a; - font-size: 1rem; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - border-radius: 8px; - display: flex; - align-items: center; -} -.fc.fc-unthemed .fc-toolbar .fc-button:enabled:hover { - background: #da9d0a; - color: #1c2127; - border-color: #da9d0a; -} -.fc.fc-unthemed .fc-toolbar .fc-button:enabled:active { - background: #ce9509; - color: #1c2127; - border-color: #ce9509; -} -.fc.fc-unthemed .fc-toolbar .fc-button:enabled:active:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.fc.fc-unthemed .fc-toolbar .fc-button .fc-icon-chevron-left { - font-family: 'PrimeIcons' !important; - text-indent: 0; - font-size: 1rem; -} -.fc.fc-unthemed .fc-toolbar .fc-button .fc-icon-chevron-left:before { - content: ''; -} -.fc.fc-unthemed .fc-toolbar .fc-button .fc-icon-chevron-right { - font-family: 'PrimeIcons' !important; - text-indent: 0; - font-size: 1rem; -} -.fc.fc-unthemed .fc-toolbar .fc-button .fc-icon-chevron-right:before { - content: ''; -} -.fc.fc-unthemed .fc-toolbar .fc-button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button { - background: #071426; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button:hover, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button:hover, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button:hover { - background: rgba(255, 255, 255, 0.03); - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button.fc-button-active, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button.fc-button-active, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button.fc-button-active { - background: #e5a50a; - border-color: #e5a50a; - color: #1c2127; -} -.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button.fc-button-active:hover, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button.fc-button-active:hover, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button.fc-button-active:hover { - background: #da9d0a; - border-color: #da9d0a; - color: #1c2127; -} -.fc.fc-unthemed .fc-toolbar .fc-button.fc-dayGridMonth-button:focus, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridWeek-button:focus, -.fc.fc-unthemed .fc-toolbar .fc-button.fc-timeGridDay-button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - z-index: 1; -} -.fc.fc-unthemed .fc-toolbar .fc-button-group .fc-button { - border-radius: 0; -} -.fc.fc-unthemed .fc-toolbar .fc-button-group .fc-button:first-child { - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; -} -.fc.fc-unthemed .fc-toolbar .fc-button-group .fc-button:last-child { - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.fc.fc-theme-standard .fc-view-harness .fc-scrollgrid { - border-color: #0b213f; -} -.fc.fc-theme-standard .fc-view-harness th { - background: #071426; - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.fc.fc-theme-standard .fc-view-harness td { - color: rgba(255, 255, 255, 0.87); - border-color: #0b213f; -} -.fc.fc-theme-standard .fc-view-harness .fc-view { - background: #071426; -} -.fc.fc-theme-standard .fc-view-harness .fc-popover { - background: none; - border: 0 none; -} -.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header { - border: 1px solid #0b213f; - padding: 1.25rem; - background: #071426; - color: rgba(255, 255, 255, 0.87); -} -.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header .fc-popover-close { - opacity: 1; - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - font-family: 'PrimeIcons' !important; - font-size: 1rem; - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header .fc-popover-close:before { - content: ''; -} -.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header .fc-popover-close:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-header .fc-popover-close:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.fc.fc-theme-standard .fc-view-harness .fc-popover .fc-popover-body { - padding: 1.25rem; - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border-top: 0 none; -} -.fc.fc-theme-standard .fc-view-harness .fc-event.fc-daygrid-block-event { - color: #1c2127; - background: #da9d0a; - border-color: #da9d0a; -} -.fc.fc-theme-standard .fc-view-harness .fc-event.fc-daygrid-block-event .fc-event-main { - color: #1c2127; -} -.fc.fc-theme-standard .fc-view-harness .fc-event.fc-daygrid-dot-event .fc-daygrid-event-dot { - background: #da9d0a; - border-color: #da9d0a; -} -.fc.fc-theme-standard .fc-view-harness .fc-event.fc-daygrid-dot-event:hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.fc.fc-theme-standard .fc-view-harness .fc-cell-shaded { - background: #071426; -} -.fc.fc-theme-standard .fc-toolbar .fc-button { - color: #1c2127; - background: #e5a50a; - border: 1px solid #e5a50a; - font-size: 1rem; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; - border-radius: 8px; -} -.fc.fc-theme-standard .fc-toolbar .fc-button:enabled:hover { - background: #da9d0a; - color: #1c2127; - border-color: #da9d0a; -} -.fc.fc-theme-standard .fc-toolbar .fc-button:enabled:active { - background: #ce9509; - color: #1c2127; - border-color: #ce9509; -} -.fc.fc-theme-standard .fc-toolbar .fc-button:enabled:active:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.fc.fc-theme-standard .fc-toolbar .fc-button:disabled { - opacity: 0.25; - color: #1c2127; - background: #e5a50a; - border: 1px solid #e5a50a; -} -.fc.fc-theme-standard .fc-toolbar .fc-button .fc-icon-chevron-left { - font-family: 'PrimeIcons' !important; - text-indent: 0; - font-size: 1rem; -} -.fc.fc-theme-standard .fc-toolbar .fc-button .fc-icon-chevron-left:before { - content: ''; -} -.fc.fc-theme-standard .fc-toolbar .fc-button .fc-icon-chevron-right { - font-family: 'PrimeIcons' !important; - text-indent: 0; - font-size: 1rem; -} -.fc.fc-theme-standard .fc-toolbar .fc-button .fc-icon-chevron-right:before { - content: ''; -} -.fc.fc-theme-standard .fc-toolbar .fc-button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button { - background: #071426; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button:hover, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button:hover, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button:hover { - background: rgba(255, 255, 255, 0.03); - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button.fc-button-active, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button.fc-button-active, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button.fc-button-active { - background: #e5a50a; - border-color: #e5a50a; - color: #1c2127; -} -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button.fc-button-active:hover, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button.fc-button-active:hover, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button.fc-button-active:hover { - background: #da9d0a; - border-color: #da9d0a; - color: #1c2127; -} -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-dayGridMonth-button:not(:disabled):focus, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridWeek-button:not(:disabled):focus, -.fc.fc-theme-standard .fc-toolbar .fc-button.fc-timeGridDay-button:not(:disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - z-index: 1; -} -.fc.fc-theme-standard .fc-toolbar .fc-button-group .fc-button { - border-radius: 0; -} -.fc.fc-theme-standard .fc-toolbar .fc-button-group .fc-button:first-child { - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; -} -.fc.fc-theme-standard .fc-toolbar .fc-button-group .fc-button:last-child { - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.fc.fc-theme-standard .fc-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-orderlist .p-orderlist-controls { - padding: 1.25rem; -} -.p-orderlist .p-orderlist-controls .p-button { - margin-bottom: 0.5rem; -} -.p-orderlist .p-orderlist-header { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - padding: 1.25rem; - font-weight: 700; - border-bottom: 0 none; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-orderlist .p-orderlist-filter-container { - padding: 1.25rem; - background: #071426; - border: 1px solid #0b213f; - border-bottom: 0 none; -} -.p-orderlist .p-orderlist-filter-container .p-orderlist-filter-input { - padding-right: 1.75rem; -} -.p-orderlist .p-orderlist-filter-container .p-orderlist-filter-icon { - right: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-orderlist .p-orderlist-list { - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - padding: 0.75rem 0; - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-orderlist .p-orderlist-list .p-orderlist-item { - padding: 0.75rem 1.25rem; - margin: 0; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); - transition: - transform 0.2s, - box-shadow 0.2s; -} -.p-orderlist .p-orderlist-list .p-orderlist-item:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-orderlist .p-orderlist-list .p-orderlist-item:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-orderlist .p-orderlist-list .p-orderlist-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even) { - background: rgba(255, 255, 255, 0.01); -} -.p-orderlist.p-orderlist-striped .p-orderlist-list .p-orderlist-item:nth-child(even):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-organizationchart .p-organizationchart-node-content.p-organizationchart-selectable-node:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-organizationchart .p-organizationchart-node-content.p-highlight { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-organizationchart .p-organizationchart-node-content.p-highlight .p-node-toggler i { - color: rgba(42, 77, 248, 0.16); -} -.p-organizationchart .p-organizationchart-line-down { - background: #0b213f; -} -.p-organizationchart .p-organizationchart-line-left { - border-right: 1px solid #0b213f; - border-color: #0b213f; -} -.p-organizationchart .p-organizationchart-line-top { - border-top: 1px solid #0b213f; - border-color: #0b213f; -} -.p-organizationchart .p-organizationchart-node-content { - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - padding: 1.25rem; -} -.p-organizationchart .p-organizationchart-node-content .p-node-toggler { - background: inherit; - color: inherit; - border-radius: 50%; -} -.p-organizationchart .p-organizationchart-node-content .p-node-toggler:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-paginator { - background: #071426; - color: rgba(255, 255, 255, 0.6); - border: solid #0b213f; - border-width: 1px; - padding: 0.5rem 1rem; - border-radius: 8px; -} -.p-paginator .p-paginator-first, -.p-paginator .p-paginator-prev, -.p-paginator .p-paginator-next, -.p-paginator .p-paginator-last { - background-color: rgba(0, 0, 0, 0); - border: 0 none; - color: rgba(255, 255, 255, 0.6); - min-width: 3rem; - height: 3rem; - margin: 0.143rem; - transition: box-shadow 0.2s; - border-radius: 8px; -} -.p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover, -.p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - border-color: rgba(0, 0, 0, 0); - color: rgba(255, 255, 255, 0.87); -} -.p-paginator .p-paginator-first { - border-top-left-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-paginator .p-paginator-last { - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; -} -.p-paginator .p-dropdown { - margin-left: 0.5rem; - height: 3rem; -} -.p-paginator .p-dropdown .p-dropdown-label { - padding-right: 0; -} -.p-paginator .p-paginator-page-input { - margin-left: 0.5rem; - margin-right: 0.5rem; -} -.p-paginator .p-paginator-page-input .p-inputtext { - max-width: 3rem; -} -.p-paginator .p-paginator-current { - background-color: rgba(0, 0, 0, 0); - border: 0 none; - color: rgba(255, 255, 255, 0.6); - min-width: 3rem; - height: 3rem; - margin: 0.143rem; - padding: 0 0.5rem; -} -.p-paginator .p-paginator-pages .p-paginator-page { - background-color: rgba(0, 0, 0, 0); - border: 0 none; - color: rgba(255, 255, 255, 0.6); - min-width: 3rem; - height: 3rem; - margin: 0.143rem; - transition: box-shadow 0.2s; - border-radius: 8px; -} -.p-paginator .p-paginator-pages .p-paginator-page.p-highlight { - background: rgba(165, 180, 252, 0.16); - border-color: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - border-color: rgba(0, 0, 0, 0); - color: rgba(255, 255, 255, 0.87); -} -.p-picklist .p-picklist-buttons { - padding: 1.25rem; -} -.p-picklist .p-picklist-buttons .p-button { - margin-bottom: 0.5rem; -} -.p-picklist .p-picklist-header { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - padding: 1.25rem; - font-weight: 700; - border-bottom: 0 none; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-picklist .p-picklist-filter-container { - padding: 1.25rem; - background: #071426; - border: 1px solid #0b213f; - border-bottom: 0 none; -} -.p-picklist .p-picklist-filter-container .p-picklist-filter-input { - padding-right: 1.75rem; -} -.p-picklist .p-picklist-filter-container .p-picklist-filter-icon { - right: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-picklist .p-picklist-list { - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - padding: 0.75rem 0; - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-picklist .p-picklist-list .p-picklist-item { - padding: 0.75rem 1.25rem; - margin: 0; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - background: rgba(0, 0, 0, 0); - transition: - transform 0.2s, - box-shadow 0.2s; -} -.p-picklist .p-picklist-list .p-picklist-item:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-picklist .p-picklist-list .p-picklist-item:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-picklist .p-picklist-list .p-picklist-item.p-highlight { - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); -} -.p-tree { - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - padding: 1.25rem; - border-radius: 8px; -} -.p-tree .p-tree-container .p-treenode { - padding: 0.143rem; -} -.p-tree .p-tree-container .p-treenode .p-treenode-content { - border-radius: 8px; - transition: box-shadow 0.2s; - padding: 0.5rem; -} -.p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler { - margin-right: 0.5rem; - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content .p-treenode-icon { - margin-right: 0.5rem; - color: rgba(255, 255, 255, 0.6); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox { - margin-right: 0.5rem; -} -.p-tree .p-tree-container .p-treenode .p-treenode-content .p-checkbox .p-indeterminate .p-checkbox-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler, -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-tree-toggler:hover, -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .p-treenode-icon:hover { - color: rgba(255, 255, 255, 0.87); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-treenode-selectable:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-tree .p-tree-container .p-treenode .p-treenode-content.p-treenode-dragover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-tree .p-tree-filter-container { - margin-bottom: 0.5rem; -} -.p-tree .p-tree-filter-container .p-tree-filter { - width: 100%; - padding-right: 1.75rem; -} -.p-tree .p-tree-filter-container .p-tree-filter-icon { - right: 0.75rem; - color: rgba(255, 255, 255, 0.6); -} -.p-tree .p-treenode-children { - padding: 0 0 0 1rem; -} -.p-tree .p-tree-loading-icon { - font-size: 2rem; -} -.p-tree .p-tree-loading-icon.p-icon { - width: 2rem; - height: 2rem; -} -.p-tree .p-treenode-droppoint { - height: 0.5rem; -} -.p-tree .p-treenode-droppoint.p-treenode-droppoint-active { - background: rgba(84, 113, 249, 0.16); -} -.p-treetable .p-paginator-top { - border-width: 1px 0 1px 0; - border-radius: 0; -} -.p-treetable .p-paginator-bottom { - border-width: 0 0 1px 0; - border-radius: 0; -} -.p-treetable .p-treetable-header { - background: #071426; - color: rgba(255, 255, 255, 0.6); - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; - font-weight: 700; -} -.p-treetable .p-treetable-footer { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; - font-weight: 700; -} -.p-treetable .p-treetable-thead > tr > th { - text-align: left; - padding: 1rem 1rem; - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - font-weight: 700; - color: rgba(255, 255, 255, 0.87); - background: #071426; - transition: box-shadow 0.2s; -} -.p-treetable .p-treetable-tfoot > tr > td { - text-align: left; - padding: 1rem 1rem; - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - font-weight: 700; - color: rgba(255, 255, 255, 0.87); - background: #071426; -} -.p-treetable .p-sortable-column { - outline-color: rgba(165, 180, 252, 0.5); -} -.p-treetable .p-sortable-column .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.6); - margin-left: 0.5rem; -} -.p-treetable .p-sortable-column .p-sortable-column-badge { - border-radius: 50%; - height: 1.143rem; - min-width: 1.143rem; - line-height: 1.143rem; - color: rgba(255, 255, 255, 0.87); - background: rgba(165, 180, 252, 0.16); - margin-left: 0.5rem; -} -.p-treetable .p-sortable-column:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-treetable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-treetable .p-sortable-column.p-highlight { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-treetable .p-sortable-column.p-highlight .p-sortable-column-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-treetable .p-treetable-tbody > tr { - background: #071426; - color: rgba(255, 255, 255, 0.87); - transition: box-shadow 0.2s; -} -.p-treetable .p-treetable-tbody > tr > td { - text-align: left; - border: 1px solid #0b213f; - border-width: 0 0 1px 0; - padding: 1rem 1rem; -} -.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - margin-right: 0.5rem; -} -.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler + .p-checkbox { - margin-right: 0.5rem; -} -.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler + .p-checkbox .p-indeterminate .p-checkbox-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-treetable .p-treetable-tbody > tr:focus { - outline: 0.15rem solid rgba(165, 180, 252, 0.5); - outline-offset: -0.15rem; -} -.p-treetable .p-treetable-tbody > tr.p-highlight { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler { - color: rgba(255, 255, 255, 0.87); -} -.p-treetable .p-treetable-tbody > tr.p-highlight .p-treetable-toggler:hover { - color: rgba(255, 255, 255, 0.87); -} -.p-treetable.p-treetable-selectable .p-treetable-tbody > tr:not(.p-highlight):hover, -.p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-treetable.p-treetable-selectable .p-treetable-tbody > tr:not(.p-highlight):hover .p-treetable-toggler, -.p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover .p-treetable-toggler { - color: rgba(255, 255, 255, 0.87); -} -.p-treetable .p-column-resizer-helper { - background: #e5a50a; -} -.p-treetable .p-treetable-scrollable-header, -.p-treetable .p-treetable-scrollable-footer { - background: #071426; -} -.p-treetable .p-treetable-loading-icon { - font-size: 2rem; -} -.p-treetable .p-treetable-loading-icon.p-icon { - width: 2rem; - height: 2rem; -} -.p-treetable.p-treetable-gridlines .p-datatable-header { - border-width: 1px 1px 0 1px; -} -.p-treetable.p-treetable-gridlines .p-treetable-footer { - border-width: 0 1px 1px 1px; -} -.p-treetable.p-treetable-gridlines .p-treetable-top { - border-width: 0 1px 0 1px; -} -.p-treetable.p-treetable-gridlines .p-treetable-bottom { - border-width: 0 1px 1px 1px; -} -.p-treetable.p-treetable-gridlines .p-treetable-thead > tr > th { - border-width: 1px; -} -.p-treetable.p-treetable-gridlines .p-treetable-tbody > tr > td { - border-width: 1px; -} -.p-treetable.p-treetable-gridlines .p-treetable-tfoot > tr > td { - border-width: 1px; -} -.p-treetable.p-treetable-sm .p-treetable-header { - padding: 0.875rem 0.875rem; -} -.p-treetable.p-treetable-sm .p-treetable-thead > tr > th { - padding: 0.5rem 0.5rem; -} -.p-treetable.p-treetable-sm .p-treetable-tbody > tr > td { - padding: 0.5rem 0.5rem; -} -.p-treetable.p-treetable-sm .p-treetable-tfoot > tr > td { - padding: 0.5rem 0.5rem; -} -.p-treetable.p-treetable-sm .p-treetable-footer { - padding: 0.5rem 0.5rem; -} -.p-treetable.p-treetable-lg .p-treetable-header { - padding: 1.25rem 1.25rem; -} -.p-treetable.p-treetable-lg .p-treetable-thead > tr > th { - padding: 1.25rem 1.25rem; -} -.p-treetable.p-treetable-lg .p-treetable-tbody > tr > td { - padding: 1.25rem 1.25rem; -} -.p-treetable.p-treetable-lg .p-treetable-tfoot > tr > td { - padding: 1.25rem 1.25rem; -} -.p-treetable.p-treetable-lg .p-treetable-footer { - padding: 1.25rem 1.25rem; -} -.p-timeline .p-timeline-event-marker { - border: 2px solid #e5a50a; - border-radius: 50%; - width: 1rem; - height: 1rem; - background-color: #1c2127; -} -.p-timeline .p-timeline-event-connector { - background-color: #0b213f; -} -.p-timeline.p-timeline-vertical .p-timeline-event-opposite, -.p-timeline.p-timeline-vertical .p-timeline-event-content { - padding: 0 1rem; -} -.p-timeline.p-timeline-vertical .p-timeline-event-connector { - width: 2px; -} -.p-timeline.p-timeline-horizontal .p-timeline-event-opposite, -.p-timeline.p-timeline-horizontal .p-timeline-event-content { - padding: 1rem 0; -} -.p-timeline.p-timeline-horizontal .p-timeline-event-connector { - height: 2px; -} -.p-accordion .p-accordion-header .p-accordion-header-link { - padding: 1.25rem; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - background: #071426; - font-weight: 700; - border-radius: 8px; - transition: box-shadow 0.2s; -} -.p-accordion .p-accordion-header .p-accordion-header-link .p-accordion-toggle-icon { - margin-right: 0.5rem; -} -.p-accordion .p-accordion-header:not(.p-disabled) .p-accordion-header-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-accordion .p-accordion-header:not(.p-highlight):not(.p-disabled):hover .p-accordion-header-link { - background: rgba(255, 255, 255, 0.03); - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.p-accordion .p-accordion-header:not(.p-disabled).p-highlight .p-accordion-header-link { - background: #071426; - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.p-accordion .p-accordion-header:not(.p-disabled).p-highlight:hover .p-accordion-header-link { - border-color: #0b213f; - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-accordion .p-accordion-content { - padding: 1.25rem; - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-accordion .p-accordion-tab { - margin-bottom: 4px; -} -.p-card { - background: #071426; - color: rgba(255, 255, 255, 0.87); - box-shadow: - 0 2px 1px -1px rgba(0, 0, 0, 0.2), - 0 1px 1px 0 rgba(0, 0, 0, 0.14), - 0 1px 3px 0 rgba(0, 0, 0, 0.12); - border-radius: 8px; -} -.p-card .p-card-body { - padding: 1.25rem; -} -.p-card .p-card-title { - font-size: 1.5rem; - font-weight: 700; - margin-bottom: 0.5rem; -} -.p-card .p-card-subtitle { - font-weight: 400; - margin-bottom: 0.5rem; - color: rgba(255, 255, 255, 0.6); -} -.p-card .p-card-content { - padding: 1.25rem 0; -} -.p-card .p-card-footer { - padding: 1.25rem 0 0 0; -} -.p-fieldset { - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border-radius: 8px; -} -.p-fieldset .p-fieldset-legend { - padding: 1.25rem; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - background: #071426; - font-weight: 700; - border-radius: 8px; -} -.p-fieldset.p-fieldset-toggleable .p-fieldset-legend { - padding: 0; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-fieldset.p-fieldset-toggleable .p-fieldset-legend a { - padding: 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 8px; - transition: box-shadow 0.2s; -} -.p-fieldset.p-fieldset-toggleable .p-fieldset-legend a .p-fieldset-toggler { - margin-right: 0.5rem; -} -.p-fieldset.p-fieldset-toggleable .p-fieldset-legend a:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-fieldset.p-fieldset-toggleable .p-fieldset-legend:hover { - background: rgba(255, 255, 255, 0.03); - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.p-fieldset .p-fieldset-content { - padding: 1.25rem; -} -.p-divider .p-divider-content { - background-color: #071426; -} -.p-divider.p-divider-horizontal { - margin: 1.25rem 0; - padding: 0 1.25rem; -} -.p-divider.p-divider-horizontal:before { - border-top: 1px #0b213f; -} -.p-divider.p-divider-horizontal .p-divider-content { - padding: 0 0.5rem; -} -.p-divider.p-divider-vertical { - margin: 0 1.25rem; - padding: 1.25rem 0; -} -.p-divider.p-divider-vertical:before { - border-left: 1px #0b213f; -} -.p-divider.p-divider-vertical .p-divider-content { - padding: 0.5rem 0; -} -.p-panel .p-panel-header { - border: 1px solid #0b213f; - padding: 1.25rem; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-panel .p-panel-header .p-panel-title { - font-weight: 700; -} -.p-panel .p-panel-header .p-panel-header-icon { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-panel .p-panel-header .p-panel-header-icon:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-panel .p-panel-header .p-panel-header-icon:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-panel.p-panel-toggleable .p-panel-header { - padding: 0.75rem 1.25rem; -} -.p-panel .p-panel-content { - padding: 1.25rem; - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; - border-top: 0 none; -} -.p-panel .p-panel-footer { - padding: 0.75rem 1.25rem; - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border-top: 0 none; -} -.p-splitter { - border: 1px solid #0b213f; - background: #071426; - border-radius: 8px; - color: rgba(255, 255, 255, 0.87); -} -.p-splitter .p-splitter-gutter { - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - background: rgba(255, 255, 255, 0.03); -} -.p-splitter .p-splitter-gutter .p-splitter-gutter-handle { - background: #0b213f; -} -.p-splitter .p-splitter-gutter-resizing { - background: #0b213f; -} -.p-scrollpanel .p-scrollpanel-bar { - background: #0b213f; - border: 0 none; -} -.p-tabview .p-tabview-nav { - background: rgba(0, 0, 0, 0); - border: 1px solid #0b213f; - border-width: 0 0 2px 0; -} -.p-tabview .p-tabview-nav li { - margin-right: 0; -} -.p-tabview .p-tabview-nav li .p-tabview-nav-link { - border: solid #0b213f; - border-width: 0 0 2px 0; - border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #0b213f rgba(0, 0, 0, 0); - background: #071426; - color: rgba(255, 255, 255, 0.6); - padding: 1.25rem; - font-weight: 700; - border-top-right-radius: 8px; - border-top-left-radius: 8px; - transition: box-shadow 0.2s; - margin: 0 0 -2px 0; -} -.p-tabview .p-tabview-nav li .p-tabview-nav-link:not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-tabview .p-tabview-nav li:not(.p-highlight):not(.p-disabled):hover .p-tabview-nav-link { - background: #071426; - border-color: #e5a50a; - color: rgba(255, 255, 255, 0.87); -} -.p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link { - background: #071426; - border-color: #e5a50a; - color: #e5a50a; -} -.p-tabview .p-tabview-close { - margin-left: 0.5rem; -} -.p-tabview .p-tabview-nav-btn.p-link { - background: #071426; - color: #e5a50a; - width: 3rem; - box-shadow: - 0px 3px 1px -2px rgba(0, 0, 0, 0.2), - 0px 2px 2px 0px rgba(0, 0, 0, 0.14), - 0px 1px 5px 0px rgba(0, 0, 0, 0.12); - border-radius: 0; -} -.p-tabview .p-tabview-nav-btn.p-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-tabview .p-tabview-panels { - background: #071426; - padding: 1.25rem; - border: 0 none; - color: rgba(255, 255, 255, 0.87); - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-toolbar { - background: #071426; - border: 1px solid #0b213f; - padding: 1.25rem; - border-radius: 8px; - gap: 0.5rem; -} -.p-toolbar .p-toolbar-separator { - margin: 0 0.5rem; -} -.p-confirm-popup { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0px 11px 15px -7px rgba(0, 0, 0, 0.2), - 0px 24px 38px 3px rgba(0, 0, 0, 0.14), - 0px 9px 46px 8px rgba(0, 0, 0, 0.12); -} -.p-confirm-popup .p-confirm-popup-content { - padding: 1.25rem; -} -.p-confirm-popup .p-confirm-popup-footer { - text-align: right; - padding: 0 1.25rem 1.25rem 1.25rem; -} -.p-confirm-popup .p-confirm-popup-footer button { - margin: 0 0.5rem 0 0; - width: auto; -} -.p-confirm-popup .p-confirm-popup-footer button:last-child { - margin: 0; -} -.p-confirm-popup:after { - border: solid rgba(0, 0, 0, 0); - border-color: rgba(7, 20, 38, 0); - border-bottom-color: #071426; -} -.p-confirm-popup:before { - border: solid rgba(0, 0, 0, 0); - border-color: rgba(11, 33, 63, 0); - border-bottom-color: #0b213f; -} -.p-confirm-popup.p-confirm-popup-flipped:after { - border-top-color: #071426; -} -.p-confirm-popup.p-confirm-popup-flipped:before { - border-top-color: #0b213f; -} -.p-confirm-popup .p-confirm-popup-icon { - font-size: 1.5rem; -} -.p-confirm-popup .p-confirm-popup-icon.p-icon { - width: 1.5rem; - height: 1.5rem; -} -.p-confirm-popup .p-confirm-popup-message { - margin-left: 1rem; -} -.p-dialog { - border-radius: 8px; - box-shadow: - 0px 11px 15px -7px rgba(0, 0, 0, 0.2), - 0px 24px 38px 3px rgba(0, 0, 0, 0.14), - 0px 9px 46px 8px rgba(0, 0, 0, 0.12); - border: 1px solid #0b213f; -} -.p-dialog .p-dialog-header { - border-bottom: 0 none; - background: #071426; - color: rgba(255, 255, 255, 0.87); - padding: 1.5rem; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-dialog .p-dialog-header .p-dialog-title { - font-weight: 700; - font-size: 1.25rem; -} -.p-dialog .p-dialog-header .p-dialog-header-icon { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - margin-right: 0.5rem; -} -.p-dialog .p-dialog-header .p-dialog-header-icon:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-dialog .p-dialog-header .p-dialog-header-icon:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-dialog .p-dialog-header .p-dialog-header-icon:last-child { - margin-right: 0; -} -.p-dialog .p-dialog-content { - background: #071426; - color: rgba(255, 255, 255, 0.87); - padding: 0 1.5rem 2rem 1.5rem; -} -.p-dialog .p-dialog-content:last-of-type { - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-dialog .p-dialog-footer { - border-top: 0 none; - background: #071426; - color: rgba(255, 255, 255, 0.87); - padding: 0 1.5rem 1.5rem 1.5rem; - text-align: right; - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-dialog .p-dialog-footer button { - margin: 0 0.5rem 0 0; - width: auto; -} -.p-dialog.p-confirm-dialog .p-confirm-dialog-icon { - font-size: 2rem; -} -.p-dialog.p-confirm-dialog .p-confirm-dialog-icon.p-icon { - width: 2rem; - height: 2rem; -} -.p-dialog.p-confirm-dialog .p-confirm-dialog-message { - margin-left: 1rem; -} -.p-overlaypanel { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - box-shadow: - 0px 11px 15px -7px rgba(0, 0, 0, 0.2), - 0px 24px 38px 3px rgba(0, 0, 0, 0.14), - 0px 9px 46px 8px rgba(0, 0, 0, 0.12); -} -.p-overlaypanel .p-overlaypanel-content { - padding: 1.25rem; -} -.p-overlaypanel .p-overlaypanel-close { - background: #e5a50a; - color: #1c2127; - width: 2rem; - height: 2rem; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - border-radius: 50%; - position: absolute; - top: -1rem; - right: -1rem; -} -.p-overlaypanel .p-overlaypanel-close:enabled:hover { - background: #da9d0a; - color: #1c2127; -} -.p-overlaypanel:after { - border: solid rgba(0, 0, 0, 0); - border-color: rgba(7, 20, 38, 0); - border-bottom-color: #071426; -} -.p-overlaypanel:before { - border: solid rgba(0, 0, 0, 0); - border-color: rgba(11, 33, 63, 0); - border-bottom-color: #0a1f3c; -} -.p-overlaypanel.p-overlaypanel-flipped:after { - border-top-color: #071426; -} -.p-overlaypanel.p-overlaypanel-flipped:before { - border-top-color: #0b213f; -} -.p-sidebar { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - box-shadow: - 0px 11px 15px -7px rgba(0, 0, 0, 0.2), - 0px 24px 38px 3px rgba(0, 0, 0, 0.14), - 0px 9px 46px 8px rgba(0, 0, 0, 0.12); -} -.p-sidebar .p-sidebar-header { - padding: 1.25rem; -} -.p-sidebar .p-sidebar-header .p-sidebar-close, -.p-sidebar .p-sidebar-header .p-sidebar-icon { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border: 0 none; - background: rgba(0, 0, 0, 0); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-sidebar .p-sidebar-header .p-sidebar-close:enabled:hover, -.p-sidebar .p-sidebar-header .p-sidebar-icon:enabled:hover { - color: rgba(255, 255, 255, 0.87); - border-color: rgba(0, 0, 0, 0); - background: rgba(255, 255, 255, 0.03); -} -.p-sidebar .p-sidebar-header .p-sidebar-close:focus, -.p-sidebar .p-sidebar-header .p-sidebar-icon:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-sidebar .p-sidebar-header + .p-sidebar-content { - padding-top: 0; -} -.p-sidebar .p-sidebar-content { - padding: 1.25rem; -} -.p-tooltip .p-tooltip-text { - background: #0b213f; - color: rgba(255, 255, 255, 0.87); - padding: 0.75rem 0.75rem; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - border-radius: 8px; -} -.p-tooltip.p-tooltip-right .p-tooltip-arrow { - border-right-color: #0b213f; -} -.p-tooltip.p-tooltip-left .p-tooltip-arrow { - border-left-color: #0b213f; -} -.p-tooltip.p-tooltip-top .p-tooltip-arrow { - border-top-color: #0b213f; -} -.p-tooltip.p-tooltip-bottom .p-tooltip-arrow { - border-bottom-color: #0b213f; -} -.p-fileupload .p-fileupload-buttonbar { - background: #071426; - padding: 1.25rem; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - border-bottom: 0 none; - border-top-right-radius: 8px; - border-top-left-radius: 8px; - gap: 0.5rem; -} -.p-fileupload .p-fileupload-buttonbar .p-button { - margin-right: 0.5rem; -} -.p-fileupload .p-fileupload-content { - background: #071426; - padding: 2rem 1rem; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-fileupload .p-progressbar { - height: 0.25rem; -} -.p-fileupload .p-fileupload-row > div { - padding: 1rem 1rem; -} -.p-fileupload.p-fileupload-advanced .p-message { - margin-top: 0; -} -.p-breadcrumb { - background: #091a32; - border: 1px solid #0b213f; - border-radius: 8px; - padding: 1rem; -} -.p-breadcrumb ul li .p-menuitem-link { - transition: box-shadow 0.2s; - border-radius: 8px; -} -.p-breadcrumb ul li .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-breadcrumb ul li .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-breadcrumb ul li .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-breadcrumb ul li.p-breadcrumb-chevron { - margin: 0 0.5rem 0 0.5rem; - color: rgba(255, 255, 255, 0.87); -} -.p-breadcrumb ul li:last-child .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-breadcrumb ul li:last-child .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-contextmenu { - padding: 0.25rem 0; - background: #091a32; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - border-radius: 8px; - width: 12.5rem; -} -.p-contextmenu .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; -} -.p-contextmenu .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-contextmenu .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-contextmenu .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-contextmenu .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-contextmenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-contextmenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-contextmenu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-contextmenu .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-contextmenu .p-submenu-list { - padding: 0.25rem 0; - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - border-radius: 8px; -} -.p-contextmenu .p-menuitem.p-menuitem-active > .p-menuitem-link { - background: rgba(165, 180, 252, 0.16); -} -.p-contextmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-contextmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, -.p-contextmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-contextmenu .p-menu-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; -} -.p-contextmenu .p-submenu-icon { - font-size: 0.875rem; - transition: transform 0.2s; -} -.p-contextmenu .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; -} -.p-dock .p-dock-list { - background: rgba(255, 255, 255, 0.1); - border: 1px solid rgba(255, 255, 255, 0.2); - padding: 0.5rem 0.5rem; - border-radius: 0.5rem; -} -.p-dock .p-dock-item { - padding: 0.5rem; -} -.p-dock .p-dock-action { - width: 4rem; - height: 4rem; -} -.p-dock.p-dock-magnification.p-dock-top .p-dock-item-second-prev, -.p-dock.p-dock-magnification.p-dock-top .p-dock-item-second-next, -.p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-second-prev, -.p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-second-next { - margin: 0 0.9rem; -} -.p-dock.p-dock-magnification.p-dock-top .p-dock-item-prev, -.p-dock.p-dock-magnification.p-dock-top .p-dock-item-next, -.p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-prev, -.p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-next { - margin: 0 1.3rem; -} -.p-dock.p-dock-magnification.p-dock-top .p-dock-item-current, -.p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-current { - margin: 0 1.5rem; -} -.p-dock.p-dock-magnification.p-dock-left .p-dock-item-second-prev, -.p-dock.p-dock-magnification.p-dock-left .p-dock-item-second-next, -.p-dock.p-dock-magnification.p-dock-right .p-dock-item-second-prev, -.p-dock.p-dock-magnification.p-dock-right .p-dock-item-second-next { - margin: 0.9rem 0; -} -.p-dock.p-dock-magnification.p-dock-left .p-dock-item-prev, -.p-dock.p-dock-magnification.p-dock-left .p-dock-item-next, -.p-dock.p-dock-magnification.p-dock-right .p-dock-item-prev, -.p-dock.p-dock-magnification.p-dock-right .p-dock-item-next { - margin: 1.3rem 0; -} -.p-dock.p-dock-magnification.p-dock-left .p-dock-item-current, -.p-dock.p-dock-magnification.p-dock-right .p-dock-item-current { - margin: 1.5rem 0; -} -@media screen and (max-width: 960px) { - .p-dock.p-dock-top .p-dock-container, - .p-dock.p-dock-bottom .p-dock-container { - overflow-x: auto; - width: 100%; - } - .p-dock.p-dock-top .p-dock-container .p-dock-list, - .p-dock.p-dock-bottom .p-dock-container .p-dock-list { - margin: 0 auto; - } - .p-dock.p-dock-left .p-dock-container, - .p-dock.p-dock-right .p-dock-container { - overflow-y: auto; - height: 100%; - } - .p-dock.p-dock-left .p-dock-container .p-dock-list, - .p-dock.p-dock-right .p-dock-container .p-dock-list { - margin: auto 0; - } - .p-dock.p-dock-magnification.p-dock-top .p-dock-item-second-prev, - .p-dock.p-dock-magnification.p-dock-top .p-dock-item-second-next, - .p-dock.p-dock-magnification.p-dock-top .p-dock-item-prev, - .p-dock.p-dock-magnification.p-dock-top .p-dock-item-next, - .p-dock.p-dock-magnification.p-dock-top .p-dock-item-current, - .p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-second-prev, - .p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-second-next, - .p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-prev, - .p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-next, - .p-dock.p-dock-magnification.p-dock-bottom .p-dock-item-current, - .p-dock.p-dock-magnification.p-dock-left .p-dock-item-second-prev, - .p-dock.p-dock-magnification.p-dock-left .p-dock-item-second-next, - .p-dock.p-dock-magnification.p-dock-left .p-dock-item-prev, - .p-dock.p-dock-magnification.p-dock-left .p-dock-item-next, - .p-dock.p-dock-magnification.p-dock-left .p-dock-item-current, - .p-dock.p-dock-magnification.p-dock-right .p-dock-item-second-prev, - .p-dock.p-dock-magnification.p-dock-right .p-dock-item-second-next, - .p-dock.p-dock-magnification.p-dock-right .p-dock-item-prev, - .p-dock.p-dock-magnification.p-dock-right .p-dock-item-next, - .p-dock.p-dock-magnification.p-dock-right .p-dock-item-current { - transform: none; - margin: 0; - } -} -.p-megamenu { - padding: 0.5rem; - background: #091a32; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 8px; - transition: box-shadow 0.2s; - user-select: none; -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); - margin-left: 0.5rem; -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link, -.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover { - background: rgba(165, 180, 252, 0.16); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text, -.p-megamenu - .p-megamenu-root-list - > .p-menuitem.p-menuitem-active - > .p-menuitem-link:not(.p-disabled):hover - .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, -.p-megamenu - .p-megamenu-root-list - > .p-menuitem.p-menuitem-active - > .p-menuitem-link:not(.p-disabled):hover - .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-megamenu-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon, -.p-megamenu - .p-megamenu-root-list - > .p-menuitem.p-menuitem-active - > .p-menuitem-link:not(.p-disabled):hover - .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; -} -.p-megamenu .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-megamenu .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-megamenu .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-megamenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-megamenu .p-megamenu-panel { - background: #091a32; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-megamenu .p-megamenu-submenu-header { - margin: 0; - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: #091a32; - font-weight: 700; - border-top-right-radius: 8px; - border-top-left-radius: 8px; -} -.p-megamenu .p-megamenu-submenu { - padding: 0.25rem 0; - width: 12.5rem; -} -.p-megamenu .p-megamenu-submenu .p-menu-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; -} -.p-megamenu .p-menuitem.p-menuitem-active > .p-menuitem-link { - background: rgba(165, 180, 252, 0.16); -} -.p-megamenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, -.p-megamenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu.p-megamenu-vertical { - width: 12.5rem; - padding: 0.25rem 0; -} -.p-megamenu .p-megamenu-button { - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-megamenu .p-megamenu-button:hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); -} -.p-megamenu .p-megamenu-button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-megamenu .p-submenu-icon { - transition: transform 0.2s; -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list { - padding: 0.25rem 0; - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list .p-menu-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list .p-submenu-icon { - font-size: 0.875rem; -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list > .p-menuitem { - width: 100%; - position: static; -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list > .p-menuitem > .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list > .p-menuitem > .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-megamenu.p-megamenu-mobile-active - .p-megamenu-root-list - > .p-menuitem - > .p-menuitem-link:not(.p-disabled):hover - .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu.p-megamenu-mobile-active - .p-megamenu-root-list - > .p-menuitem - > .p-menuitem-link:not(.p-disabled):hover - .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu.p-megamenu-mobile-active - .p-megamenu-root-list - > .p-menuitem - > .p-menuitem-link:not(.p-disabled):hover - .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list > .p-menuitem > .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list > .p-menuitem > .p-menuitem-link > .p-submenu-icon { - margin-left: auto; -} -.p-megamenu.p-megamenu-mobile-active - .p-megamenu-root-list - > .p-menuitem.p-menuitem-active - > .p-menuitem-link - > .p-submenu-icon { - transform: rotate(-180deg); -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list .p-submenu-list { - width: 100%; - position: static; - box-shadow: none; - border: 0 none; -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list .p-submenu-list .p-submenu-icon { - transition: transform 0.2s; - transform: rotate(90deg); -} -.p-megamenu.p-megamenu-mobile-active - .p-megamenu-root-list - .p-submenu-list - .p-menuitem-active - > .p-menuitem-link - > .p-submenu-icon { - transform: rotate(-90deg); -} -.p-megamenu.p-megamenu-mobile-active .p-megamenu-root-list .p-menuitem { - width: 100%; - position: static; -} -.p-menu { - padding: 0.25rem 0; - background: #091a32; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - width: 12.5rem; -} -.p-menu .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; -} -.p-menu .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-menu .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-menu .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-menu .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-menu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-menu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-menu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-menu .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-menu.p-menu-overlay { - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-menu .p-submenu-header { - margin: 0; - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - background: #091a32; - font-weight: 700; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.p-menu .p-menu-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; -} -.p-menubar { - padding: 0.5rem; - background: #091a32; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; -} -.p-menubar .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; -} -.p-menubar .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-menubar .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-menubar .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-menubar .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 8px; - transition: box-shadow 0.2s; - user-select: none; -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); - margin-left: 0.5rem; -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link, -.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link:not(.p-disabled):hover { - background: rgba(165, 180, 252, 0.16); -} -.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text, -.p-menubar - .p-menubar-root-list - > .p-menuitem.p-menuitem-active - > .p-menuitem-link:not(.p-disabled):hover - .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, -.p-menubar - .p-menubar-root-list - > .p-menuitem.p-menuitem-active - > .p-menuitem-link:not(.p-disabled):hover - .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon, -.p-menubar - .p-menubar-root-list - > .p-menuitem.p-menuitem-active - > .p-menuitem-link:not(.p-disabled):hover - .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-submenu-list { - padding: 0.25rem 0; - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - width: 12.5rem; -} -.p-menubar .p-submenu-list .p-menu-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; -} -.p-menubar .p-submenu-list .p-submenu-icon { - font-size: 0.875rem; -} -.p-menubar .p-submenu-list .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; -} -.p-menubar .p-menuitem.p-menuitem-active > .p-menuitem-link { - background: rgba(165, 180, 252, 0.16); -} -.p-menubar .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-menubar .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, -.p-menubar .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -@media screen and (max-width: 960px) { - .p-menubar { - position: relative; - } - .p-menubar .p-menubar-button { - display: flex; - width: 2rem; - height: 2rem; - color: rgba(255, 255, 255, 0.6); - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - } - .p-menubar .p-menubar-button:hover { - color: rgba(255, 255, 255, 0.87); - background: rgba(255, 255, 255, 0.03); - } - .p-menubar .p-menubar-button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); - } - .p-menubar .p-menubar-root-list { - position: absolute; - display: none; - padding: 0.25rem 0; - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - width: 100%; - } - .p-menubar .p-menubar-root-list .p-menu-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; - } - .p-menubar .p-menubar-root-list .p-submenu-icon { - font-size: 0.875rem; - } - .p-menubar .p-menubar-root-list .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; - } - .p-menubar .p-menubar-root-list > .p-menuitem { - width: 100%; - position: static; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); - } - .p-menubar .p-menubar-root-list > .p-menuitem > .p-menuitem-link > .p-submenu-icon { - margin-left: auto; - transition: transform 0.2s; - } - .p-menubar .p-menubar-root-list > .p-menuitem.p-menuitem-active > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-180deg); - } - .p-menubar .p-menubar-root-list .p-submenu-list { - width: 100%; - position: static; - box-shadow: none; - border: 0 none; - } - .p-menubar .p-menubar-root-list .p-submenu-list .p-submenu-icon { - transition: transform 0.2s; - transform: rotate(90deg); - } - .p-menubar .p-menubar-root-list .p-submenu-list .p-menuitem-active > .p-menuitem-link > .p-submenu-icon { - transform: rotate(-90deg); - } - .p-menubar .p-menubar-root-list .p-menuitem { - width: 100%; - position: static; - } - .p-menubar .p-menubar-root-list ul li a { - padding-left: 2.25rem; - } - .p-menubar .p-menubar-root-list ul li ul li a { - padding-left: 3.75rem; - } - .p-menubar .p-menubar-root-list ul li ul li ul li a { - padding-left: 5.25rem; - } - .p-menubar .p-menubar-root-list ul li ul li ul li ul li a { - padding-left: 6.75rem; - } - .p-menubar .p-menubar-root-list ul li ul li ul li ul li ul li a { - padding-left: 8.25rem; - } - .p-menubar.p-menubar-mobile-active .p-menubar-root-list { - display: flex; - flex-direction: column; - top: 100%; - left: 0; - z-index: 1; - } -} -.p-panelmenu .p-panelmenu-header > a { - padding: 1.25rem; - border: 1px solid #0b213f; - color: rgba(255, 255, 255, 0.87); - background: #071426; - font-weight: 700; - border-radius: 8px; - transition: box-shadow 0.2s; -} -.p-panelmenu .p-panelmenu-header > a .p-panelmenu-icon { - margin-right: 0.5rem; -} -.p-panelmenu .p-panelmenu-header > a .p-menuitem-icon { - margin-right: 0.5rem; -} -.p-panelmenu .p-panelmenu-header > a:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-panelmenu .p-panelmenu-header:not(.p-highlight):not(.p-disabled) > a:hover { - background: rgba(255, 255, 255, 0.03); - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); -} -.p-panelmenu .p-panelmenu-header.p-highlight { - margin-bottom: 0; -} -.p-panelmenu .p-panelmenu-header.p-highlight > a { - background: #071426; - border-color: #0b213f; - color: rgba(255, 255, 255, 0.87); - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.p-panelmenu .p-panelmenu-header.p-highlight:not(.p-disabled) > a:hover { - border-color: #0b213f; - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-panelmenu .p-panelmenu-content { - padding: 0.25rem 0; - border: 1px solid #0b213f; - background: #071426; - color: rgba(255, 255, 255, 0.87); - border-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-panelmenu .p-panelmenu-content .p-menuitem .p-menuitem-link .p-panelmenu-icon { - margin-right: 0.5rem; -} -.p-panelmenu .p-panelmenu-content .p-submenu-list:not(.p-panelmenu-root-submenu) { - padding: 0 0 0 1rem; -} -.p-panelmenu .p-panelmenu-panel { - margin-bottom: 4px; -} -.p-slidemenu { - padding: 0.25rem 0; - background: #091a32; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - width: 12.5rem; -} -.p-slidemenu .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; -} -.p-slidemenu .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-slidemenu .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-slidemenu .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-slidemenu .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-slidemenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-slidemenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-slidemenu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-slidemenu .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-slidemenu.p-slidemenu-overlay { - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-slidemenu .p-slidemenu-list { - padding: 0.25rem 0; - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-slidemenu .p-slidemenu.p-slidemenu-active > .p-slidemenu-link { - background: rgba(165, 180, 252, 0.16); -} -.p-slidemenu .p-slidemenu.p-slidemenu-active > .p-slidemenu-link .p-slidemenu-text { - color: rgba(255, 255, 255, 0.87); -} -.p-slidemenu .p-slidemenu.p-slidemenu-active > .p-slidemenu-link .p-slidemenu-icon, -.p-slidemenu .p-slidemenu.p-slidemenu-active > .p-slidemenu-link .p-slidemenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-slidemenu .p-slidemenu-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; -} -.p-slidemenu .p-slidemenu-icon { - font-size: 0.875rem; -} -.p-slidemenu .p-slidemenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; -} -.p-slidemenu .p-slidemenu-backward { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); -} -.p-steps .p-steps-item .p-menuitem-link { - background: rgba(0, 0, 0, 0); - transition: box-shadow 0.2s; - border-radius: 8px; - background: rgba(0, 0, 0, 0); -} -.p-steps .p-steps-item .p-menuitem-link .p-steps-number { - color: rgba(255, 255, 255, 0.87); - border: 0 none; - background: rgba(0, 0, 0, 0); - min-width: 2rem; - height: 2rem; - line-height: 2rem; - font-size: 1.143rem; - z-index: 1; - border-radius: 50%; -} -.p-steps .p-steps-item .p-menuitem-link .p-steps-title { - margin-top: 0.5rem; - color: rgba(255, 255, 255, 0.6); -} -.p-steps .p-steps-item .p-menuitem-link:not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-steps .p-steps-item.p-highlight .p-steps-number { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-steps .p-steps-item.p-highlight .p-steps-title { - font-weight: 700; - color: rgba(255, 255, 255, 0.87); -} -.p-steps .p-steps-item:before { - content: ' '; - border-top: 1px solid #0b213f; - width: 100%; - top: 50%; - left: 0; - display: block; - position: absolute; - margin-top: -1rem; -} -.p-tabmenu .p-tabmenu-nav { - background: rgba(0, 0, 0, 0); - border: 1px solid #0b213f; - border-width: 0 0 2px 0; -} -.p-tabmenu .p-tabmenu-nav .p-tabmenuitem { - margin-right: 0; -} -.p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link { - border: solid #0b213f; - border-width: 0 0 2px 0; - border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #0b213f rgba(0, 0, 0, 0); - background: #071426; - color: rgba(255, 255, 255, 0.6); - padding: 1.25rem; - font-weight: 700; - border-top-right-radius: 8px; - border-top-left-radius: 8px; - transition: box-shadow 0.2s; - margin: 0 0 -2px 0; - height: calc(100% + 2px); -} -.p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link .p-menuitem-icon { - margin-right: 0.5rem; -} -.p-tabmenu .p-tabmenu-nav .p-tabmenuitem .p-menuitem-link:not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-tabmenu .p-tabmenu-nav .p-tabmenuitem:not(.p-highlight):not(.p-disabled):hover .p-menuitem-link { - background: #071426; - border-color: #e5a50a; - color: rgba(255, 255, 255, 0.87); -} -.p-tabmenu .p-tabmenu-nav .p-tabmenuitem.p-highlight .p-menuitem-link { - background: #071426; - border-color: #e5a50a; - color: #e5a50a; -} -.p-tieredmenu { - padding: 0.25rem 0; - background: #091a32; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - border-radius: 8px; - width: 12.5rem; -} -.p-tieredmenu .p-menuitem-link { - padding: 0.75rem 1.25rem; - color: rgba(255, 255, 255, 0.87); - border-radius: 0; - transition: box-shadow 0.2s; - user-select: none; -} -.p-tieredmenu .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-tieredmenu .p-menuitem-link .p-menuitem-icon { - color: rgba(255, 255, 255, 0.6); - margin-right: 0.5rem; -} -.p-tieredmenu .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.6); -} -.p-tieredmenu .p-menuitem-link:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); -} -.p-tieredmenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-tieredmenu .p-menuitem-link:not(.p-disabled):hover .p-menuitem-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-tieredmenu .p-menuitem-link:not(.p-disabled):hover .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-tieredmenu .p-menuitem-link:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: inset 0 0 0 0.15rem rgba(165, 180, 252, 0.5); -} -.p-tieredmenu.p-tieredmenu-overlay { - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-tieredmenu .p-submenu-list { - padding: 0.25rem 0; - background: #091a32; - border: 1px solid #0b213f; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.p-tieredmenu .p-menuitem.p-menuitem-active > .p-menuitem-link { - background: rgba(165, 180, 252, 0.16); -} -.p-tieredmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-text { - color: rgba(255, 255, 255, 0.87); -} -.p-tieredmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-menuitem-icon, -.p-tieredmenu .p-menuitem.p-menuitem-active > .p-menuitem-link .p-submenu-icon { - color: rgba(255, 255, 255, 0.87); -} -.p-tieredmenu .p-menu-separator { - border-top: 1px solid #0b213f; - margin: 0.25rem 0; -} -.p-tieredmenu .p-submenu-icon { - font-size: 0.875rem; - transition: transform 0.2s; -} -.p-tieredmenu .p-submenu-icon.p-icon { - width: 0.875rem; - height: 0.875rem; -} -.p-inline-message { - padding: 0.75rem 0.75rem; - margin: 0; - border-radius: 8px; -} -.p-inline-message.p-inline-message-info { - background: #e9e9ff; - border: solid #696cff; - border-width: 1px; - color: #696cff; -} -.p-inline-message.p-inline-message-info .p-inline-message-icon { - color: #696cff; -} -.p-inline-message.p-inline-message-success { - background: #e4f8f0; - border: solid #1ea97c; - border-width: 1px; - color: #1ea97c; -} -.p-inline-message.p-inline-message-success .p-inline-message-icon { - color: #1ea97c; -} -.p-inline-message.p-inline-message-warn { - background: #fff2e2; - border: solid #cc8925; - border-width: 1px; - color: #cc8925; -} -.p-inline-message.p-inline-message-warn .p-inline-message-icon { - color: #cc8925; -} -.p-inline-message.p-inline-message-error { - background: #ffe7e6; - border: solid #ff5757; - border-width: 1px; - color: #ff5757; -} -.p-inline-message.p-inline-message-error .p-inline-message-icon { - color: #ff5757; -} -.p-inline-message .p-inline-message-icon { - font-size: 1rem; - margin-right: 0.5rem; -} -.p-inline-message .p-inline-message-icon.p-icon { - width: 1rem; - height: 1rem; -} -.p-inline-message .p-inline-message-text { - font-size: 1rem; -} -.p-inline-message.p-inline-message-icon-only .p-inline-message-icon { - margin-right: 0; -} -.p-message { - margin: 1rem 0; - border-radius: 8px; -} -.p-message .p-message-wrapper { - padding: 1.25rem 1.75rem; -} -.p-message .p-message-close { - width: 2rem; - height: 2rem; - border-radius: 50%; - background: rgba(0, 0, 0, 0); - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-message .p-message-close:hover { - background: rgba(255, 255, 255, 0.3); -} -.p-message .p-message-close:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-message.p-message-info { - background: #e9e9ff; - border: solid #696cff; - border-width: 0 0 0 6px; - color: #696cff; -} -.p-message.p-message-info .p-message-icon { - color: #696cff; -} -.p-message.p-message-info .p-message-close { - color: #696cff; -} -.p-message.p-message-success { - background: #e4f8f0; - border: solid #1ea97c; - border-width: 0 0 0 6px; - color: #1ea97c; -} -.p-message.p-message-success .p-message-icon { - color: #1ea97c; -} -.p-message.p-message-success .p-message-close { - color: #1ea97c; -} -.p-message.p-message-warn { - background: #fff2e2; - border: solid #cc8925; - border-width: 0 0 0 6px; - color: #cc8925; -} -.p-message.p-message-warn .p-message-icon { - color: #cc8925; -} -.p-message.p-message-warn .p-message-close { - color: #cc8925; -} -.p-message.p-message-error { - background: #ffe7e6; - border: solid #ff5757; - border-width: 0 0 0 6px; - color: #ff5757; -} -.p-message.p-message-error .p-message-icon { - color: #ff5757; -} -.p-message.p-message-error .p-message-close { - color: #ff5757; -} -.p-message .p-message-text { - font-size: 1rem; - font-weight: 400; -} -.p-message .p-message-icon { - font-size: 1.5rem; - margin-right: 0.5rem; -} -.p-message .p-message-icon.p-icon { - width: 1.5rem; - height: 1.5rem; -} -.p-toast { - opacity: 0.9; -} -.p-toast .p-toast-message { - margin: 0 0 1rem 0; - box-shadow: none; - border-radius: 8px; -} -.p-toast .p-toast-message .p-toast-message-content { - padding: 1rem; - border-width: 0 0 0 6px; -} -.p-toast .p-toast-message .p-toast-message-content .p-toast-message-text { - margin: 0 0 0 1rem; -} -.p-toast .p-toast-message .p-toast-message-content .p-toast-message-icon { - font-size: 2rem; -} -.p-toast .p-toast-message .p-toast-message-content .p-toast-message-icon.p-icon { - width: 2rem; - height: 2rem; -} -.p-toast .p-toast-message .p-toast-message-content .p-toast-summary { - font-weight: 700; -} -.p-toast .p-toast-message .p-toast-message-content .p-toast-detail { - margin: 0.5rem 0 0 0; -} -.p-toast .p-toast-message .p-toast-icon-close { - width: 2rem; - height: 2rem; - border-radius: 50%; - background: rgba(0, 0, 0, 0); - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-toast .p-toast-message .p-toast-icon-close:hover { - background: rgba(255, 255, 255, 0.3); -} -.p-toast .p-toast-message .p-toast-icon-close:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-toast .p-toast-message.p-toast-message-info { - background: #e9e9ff; - border: solid #696cff; - border-width: 0 0 0 6px; - color: #696cff; -} -.p-toast .p-toast-message.p-toast-message-info .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-info .p-toast-icon-close { - color: #696cff; -} -.p-toast .p-toast-message.p-toast-message-success { - background: #e4f8f0; - border: solid #1ea97c; - border-width: 0 0 0 6px; - color: #1ea97c; -} -.p-toast .p-toast-message.p-toast-message-success .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-success .p-toast-icon-close { - color: #1ea97c; -} -.p-toast .p-toast-message.p-toast-message-warn { - background: #fff2e2; - border: solid #cc8925; - border-width: 0 0 0 6px; - color: #cc8925; -} -.p-toast .p-toast-message.p-toast-message-warn .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-warn .p-toast-icon-close { - color: #cc8925; -} -.p-toast .p-toast-message.p-toast-message-error { - background: #ffe7e6; - border: solid #ff5757; - border-width: 0 0 0 6px; - color: #ff5757; -} -.p-toast .p-toast-message.p-toast-message-error .p-toast-message-icon, -.p-toast .p-toast-message.p-toast-message-error .p-toast-icon-close { - color: #ff5757; -} -.p-galleria .p-galleria-close { - margin: 0.5rem; - background: rgba(0, 0, 0, 0); - color: #f8f9fa; - width: 4rem; - height: 4rem; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - border-radius: 50%; -} -.p-galleria .p-galleria-close .p-galleria-close-icon { - font-size: 2rem; -} -.p-galleria .p-galleria-close .p-galleria-close-icon.p-icon { - width: 2rem; - height: 2rem; -} -.p-galleria .p-galleria-close:hover { - background: rgba(255, 255, 255, 0.1); - color: #f8f9fa; -} -.p-galleria .p-galleria-item-nav { - background: rgba(0, 0, 0, 0); - color: #f8f9fa; - width: 4rem; - height: 4rem; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - border-radius: 8px; - margin: 0 0.5rem; -} -.p-galleria .p-galleria-item-nav .p-galleria-item-prev-icon, -.p-galleria .p-galleria-item-nav .p-galleria-item-next-icon { - font-size: 2rem; -} -.p-galleria .p-galleria-item-nav .p-galleria-item-prev-icon.p-icon, -.p-galleria .p-galleria-item-nav .p-galleria-item-next-icon.p-icon { - width: 2rem; - height: 2rem; -} -.p-galleria .p-galleria-item-nav:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.1); - color: #f8f9fa; -} -.p-galleria .p-galleria-caption { - background: rgba(0, 0, 0, 0.5); - color: #f8f9fa; - padding: 1rem; -} -.p-galleria .p-galleria-indicators { - padding: 1rem; -} -.p-galleria .p-galleria-indicators .p-galleria-indicator button { - background-color: #0b213f; - width: 1rem; - height: 1rem; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - border-radius: 50%; -} -.p-galleria .p-galleria-indicators .p-galleria-indicator button:hover { - background: rgba(255, 255, 255, 0.1); -} -.p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-galleria.p-galleria-indicators-bottom .p-galleria-indicator, -.p-galleria.p-galleria-indicators-top .p-galleria-indicator { - margin-right: 0.5rem; -} -.p-galleria.p-galleria-indicators-left .p-galleria-indicator, -.p-galleria.p-galleria-indicators-right .p-galleria-indicator { - margin-bottom: 0.5rem; -} -.p-galleria.p-galleria-indicator-onitem .p-galleria-indicators { - background: rgba(0, 0, 0, 0.5); -} -.p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button { - background: rgba(255, 255, 255, 0.4); -} -.p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator button:hover { - background: rgba(255, 255, 255, 0.6); -} -.p-galleria.p-galleria-indicator-onitem .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background: rgba(165, 180, 252, 0.16); - color: rgba(255, 255, 255, 0.87); -} -.p-galleria .p-galleria-thumbnail-container { - background: rgba(0, 0, 0, 0.9); - padding: 1rem 0.25rem; -} -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev, -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next { - margin: 0.5rem; - background-color: rgba(0, 0, 0, 0); - color: #f8f9fa; - width: 2rem; - height: 2rem; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - border-radius: 50%; -} -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-prev:hover, -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-next:hover { - background: rgba(255, 255, 255, 0.1); - color: #f8f9fa; -} -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-item-content { - transition: box-shadow 0.2s; -} -.p-galleria .p-galleria-thumbnail-container .p-galleria-thumbnail-item-content:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-galleria-mask { - --maskbg: rgba(0, 0, 0, 0.9); -} -.p-image-mask { - --maskbg: rgba(0, 0, 0, 0.9); -} -.p-image-preview-indicator { - background-color: rgba(0, 0, 0, 0); - color: #f8f9fa; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-image-preview-indicator .p-icon { - width: 1.5rem; - height: 1.5rem; -} -.p-image-preview-container:hover > .p-image-preview-indicator { - background-color: rgba(0, 0, 0, 0.5); -} -.p-image-toolbar { - padding: 1rem; -} -.p-image-action.p-link { - color: #f8f9fa; - background-color: rgba(0, 0, 0, 0); - width: 3rem; - height: 3rem; - border-radius: 50%; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - margin-right: 0.5rem; -} -.p-image-action.p-link:last-child { - margin-right: 0; -} -.p-image-action.p-link:hover { - color: #f8f9fa; - background-color: rgba(255, 255, 255, 0.1); -} -.p-image-action.p-link span { - font-size: 1.5rem; -} -.p-image-action.p-link .p-icon { - width: 1.5rem; - height: 1.5rem; -} -.p-avatar { - background-color: #0b213f; - border-radius: 8px; -} -.p-avatar.p-avatar-lg { - width: 3rem; - height: 3rem; - font-size: 1.5rem; -} -.p-avatar.p-avatar-lg .p-avatar-icon { - font-size: 1.5rem; -} -.p-avatar.p-avatar-xl { - width: 4rem; - height: 4rem; - font-size: 2rem; -} -.p-avatar.p-avatar-xl .p-avatar-icon { - font-size: 2rem; -} -.p-avatar-group .p-avatar { - border: 2px solid #071426; -} -.p-chip { - background-color: #0b213f; - color: rgba(255, 255, 255, 0.87); - border-radius: 16px; - padding: 0 0.75rem; -} -.p-chip .p-chip-text { - line-height: 1.5; - margin-top: 0.375rem; - margin-bottom: 0.375rem; -} -.p-chip .p-chip-icon { - margin-right: 0.5rem; -} -.p-chip img { - width: 2.25rem; - height: 2.25rem; - margin-left: -0.75rem; - margin-right: 0.5rem; -} -.p-chip .p-chip-remove-icon { - border-radius: 8px; - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; - margin-left: 0.5rem; -} -.p-chip .p-chip-remove-icon:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-scrolltop { - width: 3rem; - height: 3rem; - border-radius: 50%; - box-shadow: - 0 2px 4px -1px rgba(0, 0, 0, 0.2), - 0 4px 5px 0 rgba(0, 0, 0, 0.14), - 0 1px 10px 0 rgba(0, 0, 0, 0.12); - transition: - background-color 0.2s, - color 0.2s, - box-shadow 0.2s; -} -.p-scrolltop.p-link { - background: rgba(165, 180, 252, 0.16); -} -.p-scrolltop.p-link:hover { - background: rgba(165, 180, 252, 0.3616); -} -.p-scrolltop .p-scrolltop-icon { - font-size: 1.5rem; - color: rgba(255, 255, 255, 0.87); -} -.p-scrolltop .p-scrolltop-icon.p-icon { - width: 1.5rem; - height: 1.5rem; -} -.p-skeleton { - background-color: rgba(255, 255, 255, 0.06); - border-radius: 8px; -} -.p-skeleton:after { - background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0)); -} -.p-tag { - background: #e5a50a; - color: #1c2127; - font-size: 0.75rem; - font-weight: 700; - padding: 0.25rem 0.4rem; - border-radius: 8px; -} -.p-tag.p-tag-success { - background-color: #86efac; - color: #1c2127; -} -.p-tag.p-tag-info { - background-color: #93c5fd; - color: #1c2127; -} -.p-tag.p-tag-warning { - background-color: #fcd34d; - color: #1c2127; -} -.p-tag.p-tag-danger { - background-color: #fca5a5; - color: #1c2127; -} -.p-tag .p-tag-icon { - margin-right: 0.25rem; - font-size: 0.75rem; -} -.p-tag .p-tag-icon.p-icon { - width: 0.75rem; - height: 0.75rem; -} -.p-inplace .p-inplace-display { - padding: 0.75rem 0.75rem; - border-radius: 8px; - transition: - background-color 0.2s, - color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-inplace .p-inplace-display:not(.p-disabled):hover { - background: rgba(255, 255, 255, 0.03); - color: rgba(255, 255, 255, 0.87); -} -.p-inplace .p-inplace-display:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 0.2rem rgba(165, 180, 252, 0.5); -} -.p-progressbar { - border: 0 none; - height: 1.5rem; - background: #0b213f; - border-radius: 8px; -} -.p-progressbar .p-progressbar-value { - border: 0 none; - margin: 0; - background: #e5a50a; -} -.p-progressbar .p-progressbar-label { - color: #1c2127; - line-height: 1.5rem; -} -.p-terminal { - background: #071426; - color: rgba(255, 255, 255, 0.87); - border: 1px solid #0b213f; - padding: 1.25rem; -} -.p-terminal .p-terminal-input { - font-size: 1rem; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol'; -} -.p-badge { - background: #e5a50a; - color: #1c2127; - font-size: 0.75rem; - font-weight: 700; - min-width: 1.5rem; - height: 1.5rem; - line-height: 1.5rem; -} -.p-badge.p-badge-secondary { - background-color: #cbd5e1; - color: #1c2127; -} -.p-badge.p-badge-success { - background-color: #86efac; - color: #1c2127; -} -.p-badge.p-badge-info { - background-color: #93c5fd; - color: #1c2127; -} -.p-badge.p-badge-warning { - background-color: #fcd34d; - color: #1c2127; -} -.p-badge.p-badge-danger { - background-color: #fca5a5; - color: #1c2127; -} -.p-badge.p-badge-lg { - font-size: 1.125rem; - min-width: 2.25rem; - height: 2.25rem; - line-height: 2.25rem; -} -.p-badge.p-badge-xl { - font-size: 1.5rem; - min-width: 3rem; - height: 3rem; - line-height: 3rem; -} -.p-tag { - background: #e5a50a; - color: #1c2127; - font-size: 0.75rem; - font-weight: 700; - padding: 0.25rem 0.4rem; - border-radius: 8px; -} -.p-tag.p-tag-success { - background-color: #86efac; - color: #1c2127; -} -.p-tag.p-tag-info { - background-color: #93c5fd; - color: #1c2127; -} -.p-tag.p-tag-warning { - background-color: #fcd34d; - color: #1c2127; -} -.p-tag.p-tag-danger { - background-color: #fca5a5; - color: #1c2127; -} -.p-button-label { - font-weight: 700; -} -.p-accordion .p-accordion-header .p-accordion-header-link { - transition: - background-color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-tabview .p-tabview-nav li .p-tabview-nav-link { - transition: - background-color 0.2s, - border-color 0.2s, - box-shadow 0.2s; -} -.p-tabview .p-tabview-nav .p-tabview-ink-bar { - z-index: 1; - display: block; - position: absolute; - bottom: 0; - height: 2px; - background-color: #e5a50a; - transition: 500ms cubic-bezier(0.35, 0, 0.25, 1); -} -.p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { - background-color: #e5a50a; -} -.p-galleria .p-galleria-indicators .p-galleria-indicator.p-highlight button { - background-color: #e5a50a; -} -.p-button:focus { - box-shadow: - 0 0 0 2px #1c2127, - 0 0 0 4px rgba(229, 165, 10, 0.7), - 0 1px 2px 0 rgba(0, 0, 0, 0); -} -.p-button.p-button-secondary:enabled:focus { - box-shadow: - 0 0 0 2px #1c2127, - 0 0 0 4px rgba(203, 213, 225, 0.7), - 0 1px 2px 0 rgba(0, 0, 0, 0); -} -.p-button.p-button-success:enabled:focus { - box-shadow: - 0 0 0 2px #1c2127, - 0 0 0 4px rgba(134, 239, 172, 0.7), - 0 1px 2px 0 rgba(0, 0, 0, 0); -} -.p-button.p-button-info:enabled:focus { - box-shadow: - 0 0 0 2px #1c2127, - 0 0 0 4px rgba(147, 197, 253, 0.7), - 0 1px 2px 0 rgba(0, 0, 0, 0); -} -.p-button.p-button-warning:enabled:focus { - box-shadow: - 0 0 0 2px #1c2127, - 0 0 0 4px rgba(252, 211, 77, 0.7), - 0 1px 2px 0 rgba(0, 0, 0, 0); -} -.p-button.p-button-help:enabled:focus { - box-shadow: - 0 0 0 2px #1c2127, - 0 0 0 4px rgba(216, 180, 254, 0.7), - 0 1px 2px 0 rgba(0, 0, 0, 0); -} -.p-button.p-button-danger:enabled:focus { - box-shadow: - 0 0 0 2px #1c2127, - 0 0 0 4px rgba(252, 165, 165, 0.7), - 0 1px 2px 0 rgba(0, 0, 0, 0); -} -.p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-top > td { - box-shadow: inset 0 2px 0 0 #e5a50a; -} -.p-datatable .p-datatable-tbody > tr.p-datatable-dragpoint-bottom > td { - box-shadow: inset 0 -2px 0 0 #e5a50a; -} diff --git a/src/types/numista.ts b/src/types/numista.ts deleted file mode 100644 index 0113e71..0000000 --- a/src/types/numista.ts +++ /dev/null @@ -1,206 +0,0 @@ -export type NumistaCategory = 'coin' | 'banknote' | 'exonumia'; - -export interface NumistaType { - /** - * @description Category - * @enum {string} - */ - category: NumistaCategory; - /** @description Dominant color calculated from the pictures */ - color: string; - /** @description For commemorated types, short description of the commemorated topic (event, person, etc.) */ - commemorated_topic?: string; - /** @description General comments about the type (HTML format) */ - comments?: string; - /** @description Composition (metallic content) */ - composition?: { - /** @description Description of the composition */ - text?: string; - }; - /** @description How many of this type are included in my personal collection */ - count?: number; - /** @description Information about the demonetization of the coin or banknote */ - demonetization?: { - /** - * Format: date - * @description Date of demonetisation (YYYY-MM-DD) - */ - demonetization_date?: string; - /** @description True if the type is demonetized, false if it is not demonetized */ - is_demonetized: boolean; - }; - edge?: CoinSide; - /** @description Unique ID of the type on Numista */ - id: number; - issuer?: Issuer; - /** @description Last year the type was produced (in the Gregorian calendar). */ - max_year?: number; - /** @description First year the type was produced (in the Gregorian calendar). */ - min_year?: number; - /** @description Mints where the coin was minted */ - mints?: { - /** @description Unique ID of the mint on Numista */ - id: number; - /** @description Name of the mint */ - name: string; - }[]; - obverse?: CoinSide; - /** - * @description Orientation of the coin ("coin", "medal", "three" (3 o'clock), "nine" (9 o'clock), or "variable") - * @enum {string} - */ - orientation?: 'coin' | 'medal' | 'variable' | 'three' | 'nine'; - /** @description Printers where the banknote was printed */ - printers?: { - /** @description Unique ID of the printer on Numista */ - id: number; - /** @description Name of the printer */ - name: string; - }[]; - /** @description References of the type in other catalogues */ - references?: Reference[]; - /** @description List of related types */ - related_types?: { - /** - * @description Category - * @enum {string} - */ - category?: 'coin' | 'banknote' | 'exonumia'; - /** @description Unique ID of the type on Numista */ - id: number; - issuer?: Issuer; - /** @description Last year the type was producted (in the Gregorian calendar). */ - max_year?: number; - /** @description First year the type was producted (in the Gregorian calendar). */ - min_year?: number; - /** @description Title of the type */ - title: string; - }[]; - reverse?: CoinSide; - /** @description Ruling authorities (emperor, queen, period, etc.) */ - ruler?: { - /** @description Dynasty, house, extended period, or any other group of ruling authorities */ - group?: { - /** @description Unique ID of the ruling authority group on Numista */ - id: number; - /** @description Name of the ruling authority group */ - name: string; - }; - /** @description Unique ID of the ruling authority on Numista */ - id: number; - /** @description Name of the ruling authority */ - name: string; - /** @description Identifier of the ruling authority at Wikidata, starting with a "Q" */ - wikidata_id?: string; - }[]; - /** @description For types which are part of a series, the name of the series */ - series?: string; - /** @description Shape */ - shape?: string; - /** - * Format: float - * @description Size (diameter) in millimeters - */ - size?: number; - /** @description List of tags */ - tags?: string[]; - /** @description Manufacturing technique */ - technique?: { - /** @description Description of the technique */ - text?: string; - }; - /** - * Format: float - * @description Thickness of the coin in millimeters - */ - thickness?: number; - /** @description Title of the type */ - title: string; - /** @description Type */ - type?: string; - /** @description URL to the type on Numista */ - url?: string; - /** @description Face value */ - value?: { - currency?: Currency; - /** @description If the value is better described as a fraction, this is the denominator of the fraction */ - denominator?: number; - /** @description If the value is better described as a fraction, this is the numerator of the fraction */ - numerator?: number; - /** - * Format: float - * @description Face value as a floating number. - */ - numeric_value?: number; - /** @description Face value in text format */ - text?: string; - }; - watermark?: CoinSide; - /** - * Format: float - * @description Weight in grams - */ - weight?: number; -} - -interface Issuer { - /** @description Unique ID of the issuer on Numista */ - code: string; - /** @description ISO 3166-1 code of the issuer, sometimes -2 or -3 */ - iso: string; - /** @description Name of the issuer */ - name: string; -} - -interface Currency { - /** @description Full name of the currency, including dates */ - full_name: string; - /** @description Unique ID of the currency on Numista */ - id: number; - /** @description Name of the currency */ - name: string; -} - -interface Reference { - /** @description The catalogue in which the reference can be found */ - catalogue: { - /** @description Code identifying the catalogue */ - code: string; - /** @description ID of the catalogue in Numista */ - id: number; - }; - /** @description Number of the coin in the catalogue */ - number: string; -} - -export interface CoinSide { - /** @description Description of the side of the coin */ - description?: string; - /** @description Name of the designer(s) */ - designers?: string[]; - /** @description Name of the engraver(s) */ - engravers?: string[]; - /** @description Lettering visible on the side of the coin */ - lettering?: string; - /** @description Scripts used to write the lettering on the side of the coins */ - lettering_scripts?: { - /** @description Name of the script */ - name: string; - }[]; - /** @description Translation of the lettering visible on the side of the coin */ - lettering_translation?: string; - /** @description URL to the picture of the side of the coin */ - picture?: string; - /** @description Name of the owner of the picture. Pictures should not be used without consent from their owner. */ - picture_copyright?: string; - /** @description URL to the website of the owner of the picture. Pictures should not be used without consent from their owner. */ - picture_copyright_url?: string; - /** @description Name of the license of the picture, if the owner of the picture specified a license. */ - picture_license_name?: string; - /** @description URL to the license of the picture, if the owner of the picture specified a license. */ - picture_license_url?: string; - /** @description URL to the thumbnail of the picture of the side of the coin */ - thumbnail?: string; - /** @description Legend visible on the side of the coin with abbreviations replaced by full words */ - unabridged_legend?: string; -} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..b1f45c7 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/tsconfig.json b/tsconfig.json index b819010..62f1dbe 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,21 @@ { "compilerOptions": { - "target": "es2017", - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", + "target": "ESNext", + "module": "ESNext", "moduleResolution": "bundler", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "jsx": "react-jsx", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", - "incremental": true, + "noEmit": true, + "verbatimModuleSyntax": true, + "types": ["bun-types"], "paths": { "@/*": ["./src/*"] - }, - "lib": ["dom", "dom.iterable", "esnext"] + } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] + "include": ["src/**/*.ts", "src/**/*.tsx", "vite.config.ts"] } diff --git a/up.sh b/up.sh deleted file mode 100755 index a30578a..0000000 --- a/up.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -cd /mnt/bigdisk/home/miguel/Documents/projects/react/coins -rm -rf packages/site/.next -bun install -bun prisma generate -bun run build -bun run start \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..947ff65 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,22 @@ +import { fileURLToPath, URL } from 'node:url'; +import tailwindcss from '@tailwindcss/vite'; +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; +import svgr from 'vite-plugin-svgr'; + +export default defineConfig({ + plugins: [react(), tailwindcss(), svgr()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + server: { + allowedHosts: true, + proxy: { + '/api': 'http://localhost:3000', + '/atlases': 'http://localhost:3000', + '/flags': 'http://localhost:3000', + }, + }, +});