zhereh-frontend

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit be29a6f536b34e749bcc11ef6a5a4872391d4064
Author: William Muli <willi.wambu@gmail.com>
Date:   Thu,  8 Jun 2023 20:29:07 +0300

Initial commit

Diffstat:
A.eslintignore | 13+++++++++++++
A.eslintrc.cjs | 30++++++++++++++++++++++++++++++
A.gitignore | 12++++++++++++
A.npmrc | 2++
A.prettierignore | 13+++++++++++++
A.prettierrc | 9+++++++++
AREADME.md | 38++++++++++++++++++++++++++++++++++++++
Apackage-lock.json | 5313+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apackage.json | 35+++++++++++++++++++++++++++++++++++
Asrc/app.d.ts | 12++++++++++++
Asrc/app.html | 12++++++++++++
Asrc/lib/images/github.svg | 17+++++++++++++++++
Asrc/lib/images/svelte-logo.svg | 2++
Asrc/lib/images/svelte-welcome.png | 0
Asrc/lib/images/svelte-welcome.webp | 0
Asrc/routes/+layout.svelte | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/+page.svelte | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/+page.ts | 3+++
Asrc/routes/Counter.svelte | 102+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/Header.svelte | 129+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/about/+page.svelte | 26++++++++++++++++++++++++++
Asrc/routes/about/+page.ts | 9+++++++++
Asrc/routes/styles.css | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/sverdle/+page.server.ts | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/sverdle/+page.svelte | 406+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/sverdle/game.test.ts | 9+++++++++
Asrc/routes/sverdle/game.ts | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/sverdle/how-to-play/+page.svelte | 95+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/routes/sverdle/how-to-play/+page.ts | 9+++++++++
Asrc/routes/sverdle/reduced-motion.ts | 23+++++++++++++++++++++++
Asrc/routes/sverdle/words.server.ts | 12980+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Astatic/favicon.png | 0
Astatic/robots.txt | 3+++
Asvelte.config.js | 18++++++++++++++++++
Atsconfig.json | 17+++++++++++++++++
Avite.config.ts | 9+++++++++
36 files changed, 19709 insertions(+), 0 deletions(-)

diff --git a/.eslintignore b/.eslintignore @@ -0,0 +1,13 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/.eslintrc.cjs b/.eslintrc.cjs @@ -0,0 +1,30 @@ +module.exports = { + root: true, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:svelte/recommended', + 'prettier' + ], + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint'], + parserOptions: { + sourceType: 'module', + ecmaVersion: 2020, + extraFileExtensions: ['.svelte'] + }, + env: { + browser: true, + es2017: true, + node: true + }, + overrides: [ + { + files: ['*.svelte'], + parser: 'svelte-eslint-parser', + parserOptions: { + parser: '@typescript-eslint/parser' + } + } + ] +}; diff --git a/.gitignore b/.gitignore @@ -0,0 +1,12 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +.vercel +.output +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/.npmrc b/.npmrc @@ -0,0 +1,2 @@ +engine-strict=true +resolution-mode=highest diff --git a/.prettierignore b/.prettierignore @@ -0,0 +1,13 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example + +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/.prettierrc b/.prettierrc @@ -0,0 +1,9 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte"], + "pluginSearchDirs": ["."], + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] +} diff --git a/README.md b/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm create svelte@latest + +# create a new project in my-app +npm create svelte@latest my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/package-lock.json b/package-lock.json @@ -0,0 +1,5313 @@ +{ + "name": "frontend", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.1", + "devDependencies": { + "@fontsource/fira-mono": "^4.5.10", + "@neoconfetti/svelte": "^1.0.0", + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.5.0", + "@types/cookie": "^0.5.1", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "eslint": "^8.28.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-svelte": "^2.26.0", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.8.1", + "svelte": "^3.54.0", + "svelte-check": "^3.0.1", + "tslib": "^2.4.1", + "typescript": "^5.0.0", + "vite": "^4.3.0", + "vitest": "^0.25.3" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fontsource/fira-mono": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.10.tgz", + "integrity": "sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@neoconfetti/svelte": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@neoconfetti/svelte/-/svelte-1.0.0.tgz", + "integrity": "sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/@sveltejs/adapter-auto": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz", + "integrity": "sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==", + "dev": true, + "dependencies": { + "import-meta-resolve": "^3.0.0" + }, + "peerDependencies": { + "@sveltejs/kit": "^1.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.2.tgz", + "integrity": "sha512-MtR1i+HtmYWcRgtubw1GQqT/+CWXL/z24PegE0xYAdObbhdr7YtEfmoe705D/JZMtMmoPXrmSk4W0MfL5A3lYw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte": "^2.4.1", + "@types/cookie": "^0.5.1", + "cookie": "^0.5.0", + "devalue": "^4.3.1", + "esm-env": "^1.0.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.0", + "mime": "^3.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^2.0.2", + "tiny-glob": "^0.2.9", + "undici": "~5.22.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": "^16.14 || >=18" + }, + "peerDependencies": { + "svelte": "^3.54.0 || ^4.0.0-next.0", + "vite": "^4.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz", + "integrity": "sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==", + "dev": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.2", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.0", + "svelte-hmr": "^0.15.1", + "vitefu": "^0.2.4" + }, + "engines": { + "node": "^14.18.0 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.54.0 || ^4.0.0-next.0", + "vite": "^4.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz", + "integrity": "sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": "^14.18.0 || >= 16" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^2.2.0", + "svelte": "^3.54.0 || ^4.0.0-next.0", + "vite": "^4.0.0" + } + }, + "node_modules/@types/chai": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", + "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==", + "dev": true + }, + "node_modules/@types/pug": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", + "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz", + "integrity": "sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/type-utils": "5.59.9", + "@typescript-eslint/utils": "5.59.9", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.9.tgz", + "integrity": "sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/typescript-estree": "5.59.9", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz", + "integrity": "sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/visitor-keys": "5.59.9" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz", + "integrity": "sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.59.9", + "@typescript-eslint/utils": "5.59.9", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.9.tgz", + "integrity": "sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz", + "integrity": "sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/visitor-keys": "5.59.9", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.9.tgz", + "integrity": "sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/typescript-estree": "5.59.9", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz", + "integrity": "sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.9", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "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.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "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", + "import-fresh": "^3.0.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.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-svelte": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.30.0.tgz", + "integrity": "sha512-2/qj0BJsfM0U2j4EjGb7iC/0nbUvXx1Gn78CdtyuXpi/rSomLPCPwnsZsloXMzlt6Xwe8LBlpRvZObSKEHLP5A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@jridgewell/sourcemap-codec": "^1.4.14", + "debug": "^4.3.1", + "esutils": "^2.0.3", + "known-css-properties": "^0.27.0", + "postcss": "^8.4.5", + "postcss-load-config": "^3.1.4", + "postcss-safe-parser": "^6.0.0", + "svelte-eslint-parser": "^0.30.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0-0", + "svelte": "^3.37.0 || ^4.0.0-0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esm-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", + "dev": true + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-meta-resolve": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", + "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/known-css-properties": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", + "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-svelte": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", + "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", + "dev": true, + "peerDependencies": { + "prettier": "^1.16.4 || ^2.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.24.0.tgz", + "integrity": "sha512-OgraHOIg2YpHQTjl0/ymWfFNBEyPucB7lmhXrQUh38qNOegxLapSPFs9sNr0qKR75awW41D93XafoR2QfhBdUQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dev": true, + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/sander/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sorcery": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0" + }, + "bin": { + "sorcery": "bin/sorcery" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", + "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svelte": { + "version": "3.59.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.1.tgz", + "integrity": "sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/svelte-check": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.3.tgz", + "integrity": "sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "chokidar": "^3.4.1", + "fast-glob": "^3.2.7", + "import-fresh": "^3.2.1", + "picocolors": "^1.0.0", + "sade": "^1.7.4", + "svelte-preprocess": "^5.0.3", + "typescript": "^5.0.3" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "peerDependencies": { + "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0" + } + }, + "node_modules/svelte-eslint-parser": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.30.0.tgz", + "integrity": "sha512-H0Cn2TKr70DU9p/Gb04CfwtS7eK28MYumrHYPaDNkIFbfwGDLADpbERBn7u8G1Rcm2RMr2/mL6mq0J2e8iKFlA==", + "dev": true, + "dependencies": { + "eslint-scope": "^7.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "svelte": "^3.37.0 || ^4.0.0-0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/svelte-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz", + "integrity": "sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0-next.0" + } + }, + "node_modules/svelte-preprocess": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", + "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.27.0", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 14.10.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/svelte-preprocess/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/tinybench": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", + "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", + "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.1.1.tgz", + "integrity": "sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "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" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", + "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.25.8.tgz", + "integrity": "sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.4", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "acorn": "^8.8.1", + "acorn-walk": "^8.2.0", + "chai": "^4.3.7", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "source-map": "^0.6.1", + "strip-literal": "^1.0.0", + "tinybench": "^2.3.1", + "tinypool": "^0.3.0", + "tinyspy": "^1.0.2", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "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" + } + }, + "@eslint/js": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", + "dev": true + }, + "@fontsource/fira-mono": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.10.tgz", + "integrity": "sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } + } + }, + "@neoconfetti/svelte": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@neoconfetti/svelte/-/svelte-1.0.0.tgz", + "integrity": "sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@sveltejs/adapter-auto": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.0.tgz", + "integrity": "sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==", + "dev": true, + "requires": { + "import-meta-resolve": "^3.0.0" + } + }, + "@sveltejs/kit": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.2.tgz", + "integrity": "sha512-MtR1i+HtmYWcRgtubw1GQqT/+CWXL/z24PegE0xYAdObbhdr7YtEfmoe705D/JZMtMmoPXrmSk4W0MfL5A3lYw==", + "dev": true, + "requires": { + "@sveltejs/vite-plugin-svelte": "^2.4.1", + "@types/cookie": "^0.5.1", + "cookie": "^0.5.0", + "devalue": "^4.3.1", + "esm-env": "^1.0.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.0", + "mime": "^3.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^2.0.2", + "tiny-glob": "^0.2.9", + "undici": "~5.22.0" + } + }, + "@sveltejs/vite-plugin-svelte": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.1.tgz", + "integrity": "sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==", + "dev": true, + "requires": { + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.2", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.0", + "svelte-hmr": "^0.15.1", + "vitefu": "^0.2.4" + } + }, + "@sveltejs/vite-plugin-svelte-inspector": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.2.tgz", + "integrity": "sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==", + "dev": true, + "requires": { + "debug": "^4.3.4" + } + }, + "@types/chai": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "dev": true + }, + "@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/cookie": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", + "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "@types/node": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==", + "dev": true + }, + "@types/pug": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", + "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", + "dev": true + }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz", + "integrity": "sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/type-utils": "5.59.9", + "@typescript-eslint/utils": "5.59.9", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.9.tgz", + "integrity": "sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/typescript-estree": "5.59.9", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz", + "integrity": "sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/visitor-keys": "5.59.9" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz", + "integrity": "sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.59.9", + "@typescript-eslint/utils": "5.59.9", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.9.tgz", + "integrity": "sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz", + "integrity": "sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/visitor-keys": "5.59.9", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.9.tgz", + "integrity": "sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.9", + "@typescript-eslint/types": "5.59.9", + "@typescript-eslint/typescript-estree": "5.59.9", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.59.9", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz", + "integrity": "sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.59.9", + "eslint-visitor-keys": "^3.3.0" + } + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "requires": { + "streamsearch": "^1.1.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "devalue": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "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.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "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", + "import-fresh": "^3.0.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.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "requires": {} + }, + "eslint-plugin-svelte": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.30.0.tgz", + "integrity": "sha512-2/qj0BJsfM0U2j4EjGb7iC/0nbUvXx1Gn78CdtyuXpi/rSomLPCPwnsZsloXMzlt6Xwe8LBlpRvZObSKEHLP5A==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@jridgewell/sourcemap-codec": "^1.4.14", + "debug": "^4.3.1", + "esutils": "^2.0.3", + "known-css-properties": "^0.27.0", + "postcss": "^8.4.5", + "postcss-load-config": "^3.1.4", + "postcss-safe-parser": "^6.0.0", + "svelte-eslint-parser": "^0.30.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "esm-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", + "dev": true + }, + "espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "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" + } + }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-meta-resolve": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.0.0.tgz", + "integrity": "sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + }, + "known-css-properties": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", + "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "requires": {} + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true + }, + "prettier-plugin-svelte": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", + "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", + "dev": true, + "requires": {} + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.24.0.tgz", + "integrity": "sha512-OgraHOIg2YpHQTjl0/ymWfFNBEyPucB7lmhXrQUh38qNOegxLapSPFs9sNr0qKR75awW41D93XafoR2QfhBdUQ==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, + "sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dev": true, + "requires": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "semver": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "sorcery": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.14", + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "strip-literal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", + "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", + "dev": true, + "requires": { + "acorn": "^8.8.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svelte": { + "version": "3.59.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.1.tgz", + "integrity": "sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==", + "dev": true + }, + "svelte-check": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.4.3.tgz", + "integrity": "sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "chokidar": "^3.4.1", + "fast-glob": "^3.2.7", + "import-fresh": "^3.2.1", + "picocolors": "^1.0.0", + "sade": "^1.7.4", + "svelte-preprocess": "^5.0.3", + "typescript": "^5.0.3" + } + }, + "svelte-eslint-parser": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.30.0.tgz", + "integrity": "sha512-H0Cn2TKr70DU9p/Gb04CfwtS7eK28MYumrHYPaDNkIFbfwGDLADpbERBn7u8G1Rcm2RMr2/mL6mq0J2e8iKFlA==", + "dev": true, + "requires": { + "eslint-scope": "^7.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "svelte-hmr": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz", + "integrity": "sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==", + "dev": true, + "requires": {} + }, + "svelte-preprocess": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", + "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", + "dev": true, + "requires": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.27.0", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "tinybench": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", + "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "dev": true + }, + "tinypool": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", + "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", + "dev": true + }, + "tinyspy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.1.1.tgz", + "integrity": "sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true + }, + "tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true + }, + "undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "requires": { + "busboy": "^1.6.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "vitefu": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", + "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "dev": true, + "requires": {} + }, + "vitest": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.25.8.tgz", + "integrity": "sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==", + "dev": true, + "requires": { + "@types/chai": "^4.3.4", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "acorn": "^8.8.1", + "acorn-walk": "^8.2.0", + "chai": "^4.3.7", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "source-map": "^0.6.1", + "strip-literal": "^1.0.0", + "tinybench": "^2.3.1", + "tinypool": "^0.3.0", + "tinyspy": "^1.0.2", + "vite": "^3.0.0 || ^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json @@ -0,0 +1,35 @@ +{ + "name": "frontend", + "version": "0.0.1", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "test:unit": "vitest", + "lint": "prettier --plugin-search-dir . --check . && eslint .", + "format": "prettier --plugin-search-dir . --write ." + }, + "devDependencies": { + "@fontsource/fira-mono": "^4.5.10", + "@neoconfetti/svelte": "^1.0.0", + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.5.0", + "@types/cookie": "^0.5.1", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "eslint": "^8.28.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-svelte": "^2.26.0", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.8.1", + "svelte": "^3.54.0", + "svelte-check": "^3.0.1", + "tslib": "^2.4.1", + "typescript": "^5.0.0", + "vite": "^4.3.0", + "vitest": "^0.25.3" + }, + "type": "module" +} diff --git a/src/app.d.ts b/src/app.d.ts @@ -0,0 +1,12 @@ +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface Platform {} + } +} + +export {}; diff --git a/src/app.html b/src/app.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <link rel="icon" href="%sveltekit.assets%/favicon.png" /> + <meta name="viewport" content="width=device-width" /> + %sveltekit.head% + </head> + <body data-sveltekit-preload-data="hover"> + <div style="display: contents">%sveltekit.body%</div> + </body> +</html> diff --git a/src/lib/images/github.svg b/src/lib/images/github.svg @@ -0,0 +1,16 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="-3 -3 30 30"> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M12 2C6.47715 2 2 6.47715 2 12C2 17.5229 6.47715 22 12 22C17.5229 22 22 17.5229 22 12C22 6.47715 17.5229 2 12 2ZM0 12C0 5.3726 5.3726 0 12 0C18.6274 0 24 5.3726 24 12C24 18.6274 18.6274 24 12 24C5.3726 24 0 18.6274 0 12Z" + fill="rgba(0,0,0,0.7)" + stroke="none" + /> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M9.59162 22.7357C9.49492 22.6109 9.49492 21.4986 9.59162 19.399C8.55572 19.4347 7.90122 19.3628 7.62812 19.1833C7.21852 18.9139 6.80842 18.0833 6.44457 17.4979C6.08072 16.9125 5.27312 16.8199 4.94702 16.6891C4.62091 16.5582 4.53905 16.0247 5.84562 16.4282C7.15222 16.8316 7.21592 17.9303 7.62812 18.1872C8.04032 18.4441 9.02572 18.3317 9.47242 18.1259C9.91907 17.9201 9.88622 17.1538 9.96587 16.8503C10.0666 16.5669 9.71162 16.5041 9.70382 16.5018C9.26777 16.5018 6.97697 16.0036 6.34772 13.7852C5.71852 11.5669 6.52907 10.117 6.96147 9.49369C7.24972 9.07814 7.22422 8.19254 6.88497 6.83679C8.11677 6.67939 9.06732 7.06709 9.73672 7.99999C9.73737 8.00534 10.6143 7.47854 12.0001 7.47854C13.386 7.47854 13.8777 7.90764 14.2571 7.99999C14.6365 8.09234 14.94 6.36699 17.2834 6.83679C16.7942 7.79839 16.3844 8.99999 16.6972 9.49369C17.0099 9.98739 18.2372 11.5573 17.4833 13.7852C16.9807 15.2706 15.9927 16.1761 14.5192 16.5018C14.3502 16.5557 14.2658 16.6427 14.2658 16.7627C14.2658 16.9427 14.4942 16.9624 14.8233 17.8058C15.0426 18.368 15.0585 19.9739 14.8708 22.6234C14.3953 22.7445 14.0254 22.8257 13.7611 22.8673C13.2924 22.9409 12.7835 22.9822 12.2834 22.9982C11.7834 23.0141 11.6098 23.0123 10.9185 22.948C10.4577 22.9051 10.0154 22.8343 9.59162 22.7357Z" + fill="rgba(0,0,0,0.7)" + stroke="none" + /> +</svg> +\ No newline at end of file diff --git a/src/lib/images/svelte-logo.svg b/src/lib/images/svelte-logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.1566,22.8189c-10.4-14.8851-30.94-19.2971-45.7914-9.8348L22.2825,29.6078A29.9234,29.9234,0,0,0,8.7639,49.6506a31.5136,31.5136,0,0,0,3.1076,20.2318A30.0061,30.0061,0,0,0,7.3953,81.0653a31.8886,31.8886,0,0,0,5.4473,24.1157c10.4022,14.8865,30.9423,19.2966,45.7914,9.8348L84.7167,98.3921A29.9177,29.9177,0,0,0,98.2353,78.3493,31.5263,31.5263,0,0,0,95.13,58.117a30,30,0,0,0,4.4743-11.1824,31.88,31.88,0,0,0-5.4473-24.1157" style="fill:#ff3e00"/><path d="M45.8171,106.5815A20.7182,20.7182,0,0,1,23.58,98.3389a19.1739,19.1739,0,0,1-3.2766-14.5025,18.1886,18.1886,0,0,1,.6233-2.4357l.4912-1.4978,1.3363.9815a33.6443,33.6443,0,0,0,10.203,5.0978l.9694.2941-.0893.9675a5.8474,5.8474,0,0,0,1.052,3.8781,6.2389,6.2389,0,0,0,6.6952,2.485,5.7449,5.7449,0,0,0,1.6021-.7041L69.27,76.281a5.4306,5.4306,0,0,0,2.4506-3.631,5.7948,5.7948,0,0,0-.9875-4.3712,6.2436,6.2436,0,0,0-6.6978-2.4864,5.7427,5.7427,0,0,0-1.6.7036l-9.9532,6.3449a19.0329,19.0329,0,0,1-5.2965,2.3259,20.7181,20.7181,0,0,1-22.2368-8.2427,19.1725,19.1725,0,0,1-3.2766-14.5024,17.9885,17.9885,0,0,1,8.13-12.0513L55.8833,23.7472a19.0038,19.0038,0,0,1,5.3-2.3287A20.7182,20.7182,0,0,1,83.42,29.6611a19.1739,19.1739,0,0,1,3.2766,14.5025,18.4,18.4,0,0,1-.6233,2.4357l-.4912,1.4978-1.3356-.98a33.6175,33.6175,0,0,0-10.2037-5.1l-.9694-.2942.0893-.9675a5.8588,5.8588,0,0,0-1.052-3.878,6.2389,6.2389,0,0,0-6.6952-2.485,5.7449,5.7449,0,0,0-1.6021.7041L37.73,51.719a5.4218,5.4218,0,0,0-2.4487,3.63,5.7862,5.7862,0,0,0,.9856,4.3717,6.2437,6.2437,0,0,0,6.6978,2.4864,5.7652,5.7652,0,0,0,1.602-.7041l9.9519-6.3425a18.978,18.978,0,0,1,5.2959-2.3278,20.7181,20.7181,0,0,1,22.2368,8.2427,19.1725,19.1725,0,0,1,3.2766,14.5024,17.9977,17.9977,0,0,1-8.13,12.0532L51.1167,104.2528a19.0038,19.0038,0,0,1-5.3,2.3287" style="fill:#fff"/></svg> +\ No newline at end of file diff --git a/src/lib/images/svelte-welcome.png b/src/lib/images/svelte-welcome.png Binary files differ. diff --git a/src/lib/images/svelte-welcome.webp b/src/lib/images/svelte-welcome.webp Binary files differ. diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte @@ -0,0 +1,53 @@ +<script> + import Header from './Header.svelte'; + import './styles.css'; +</script> + +<div class="app"> + <Header /> + + <main> + <slot /> + </main> + + <footer> + <p>visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to learn SvelteKit</p> + </footer> +</div> + +<style> + .app { + display: flex; + flex-direction: column; + min-height: 100vh; + } + + main { + flex: 1; + display: flex; + flex-direction: column; + padding: 1rem; + width: 100%; + max-width: 64rem; + margin: 0 auto; + box-sizing: border-box; + } + + footer { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 12px; + } + + footer a { + font-weight: bold; + } + + @media (min-width: 480px) { + footer { + padding: 12px 0; + } + } +</style> diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte @@ -0,0 +1,59 @@ +<script> + import Counter from './Counter.svelte'; + import welcome from '$lib/images/svelte-welcome.webp'; + import welcome_fallback from '$lib/images/svelte-welcome.png'; +</script> + +<svelte:head> + <title>Home</title> + <meta name="description" content="Svelte demo app" /> +</svelte:head> + +<section> + <h1> + <span class="welcome"> + <picture> + <source srcset={welcome} type="image/webp" /> + <img src={welcome_fallback} alt="Welcome" /> + </picture> + </span> + + to your new<br />SvelteKit app + </h1> + + <h2> + try editing <strong>src/routes/+page.svelte</strong> + </h2> + + <Counter /> +</section> + +<style> + section { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + flex: 0.6; + } + + h1 { + width: 100%; + } + + .welcome { + display: block; + position: relative; + width: 100%; + height: 0; + padding: 0 0 calc(100% * 495 / 2048) 0; + } + + .welcome img { + position: absolute; + width: 100%; + height: 100%; + top: 0; + display: block; + } +</style> diff --git a/src/routes/+page.ts b/src/routes/+page.ts @@ -0,0 +1,3 @@ +// since there's no dynamic data here, we can prerender +// it so that it gets served as a static asset in production +export const prerender = true; diff --git a/src/routes/Counter.svelte b/src/routes/Counter.svelte @@ -0,0 +1,102 @@ +<script lang="ts"> + import { spring } from 'svelte/motion'; + + let count = 0; + + const displayed_count = spring(); + $: displayed_count.set(count); + $: offset = modulo($displayed_count, 1); + + function modulo(n: number, m: number) { + // handle negative numbers + return ((n % m) + m) % m; + } +</script> + +<div class="counter"> + <button on:click={() => (count -= 1)} aria-label="Decrease the counter by one"> + <svg aria-hidden="true" viewBox="0 0 1 1"> + <path d="M0,0.5 L1,0.5" /> + </svg> + </button> + + <div class="counter-viewport"> + <div class="counter-digits" style="transform: translate(0, {100 * offset}%)"> + <strong class="hidden" aria-hidden="true">{Math.floor($displayed_count + 1)}</strong> + <strong>{Math.floor($displayed_count)}</strong> + </div> + </div> + + <button on:click={() => (count += 1)} aria-label="Increase the counter by one"> + <svg aria-hidden="true" viewBox="0 0 1 1"> + <path d="M0,0.5 L1,0.5 M0.5,0 L0.5,1" /> + </svg> + </button> +</div> + +<style> + .counter { + display: flex; + border-top: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + margin: 1rem 0; + } + + .counter button { + width: 2em; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + border: 0; + background-color: transparent; + touch-action: manipulation; + font-size: 2rem; + } + + .counter button:hover { + background-color: var(--color-bg-1); + } + + svg { + width: 25%; + height: 25%; + } + + path { + vector-effect: non-scaling-stroke; + stroke-width: 2px; + stroke: #444; + } + + .counter-viewport { + width: 8em; + height: 4em; + overflow: hidden; + text-align: center; + position: relative; + } + + .counter-viewport strong { + position: absolute; + display: flex; + width: 100%; + height: 100%; + font-weight: 400; + color: var(--color-theme-1); + font-size: 4rem; + align-items: center; + justify-content: center; + } + + .counter-digits { + position: absolute; + width: 100%; + height: 100%; + } + + .hidden { + top: -100%; + user-select: none; + } +</style> diff --git a/src/routes/Header.svelte b/src/routes/Header.svelte @@ -0,0 +1,129 @@ +<script> + import { page } from '$app/stores'; + import logo from '$lib/images/svelte-logo.svg'; + import github from '$lib/images/github.svg'; +</script> + +<header> + <div class="corner"> + <a href="https://kit.svelte.dev"> + <img src={logo} alt="SvelteKit" /> + </a> + </div> + + <nav> + <svg viewBox="0 0 2 3" aria-hidden="true"> + <path d="M0,0 L1,2 C1.5,3 1.5,3 2,3 L2,0 Z" /> + </svg> + <ul> + <li aria-current={$page.url.pathname === '/' ? 'page' : undefined}> + <a href="/">Home</a> + </li> + <li aria-current={$page.url.pathname === '/about' ? 'page' : undefined}> + <a href="/about">About</a> + </li> + <li aria-current={$page.url.pathname.startsWith('/sverdle') ? 'page' : undefined}> + <a href="/sverdle">Sverdle</a> + </li> + </ul> + <svg viewBox="0 0 2 3" aria-hidden="true"> + <path d="M0,0 L0,3 C0.5,3 0.5,3 1,2 L2,0 Z" /> + </svg> + </nav> + + <div class="corner"> + <a href="https://github.com/sveltejs/kit"> + <img src={github} alt="GitHub" /> + </a> + </div> +</header> + +<style> + header { + display: flex; + justify-content: space-between; + } + + .corner { + width: 3em; + height: 3em; + } + + .corner a { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + } + + .corner img { + width: 2em; + height: 2em; + object-fit: contain; + } + + nav { + display: flex; + justify-content: center; + --background: rgba(255, 255, 255, 0.7); + } + + svg { + width: 2em; + height: 3em; + display: block; + } + + path { + fill: var(--background); + } + + ul { + position: relative; + padding: 0; + margin: 0; + height: 3em; + display: flex; + justify-content: center; + align-items: center; + list-style: none; + background: var(--background); + background-size: contain; + } + + li { + position: relative; + height: 100%; + } + + li[aria-current='page']::before { + --size: 6px; + content: ''; + width: 0; + height: 0; + position: absolute; + top: 0; + left: calc(50% - var(--size)); + border: var(--size) solid transparent; + border-top: var(--size) solid var(--color-theme-1); + } + + nav a { + display: flex; + height: 100%; + align-items: center; + padding: 0 0.5rem; + color: var(--color-text); + font-weight: 700; + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.1em; + text-decoration: none; + transition: color 0.2s linear; + } + + a:hover { + color: var(--color-theme-1); + } +</style> diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte @@ -0,0 +1,26 @@ +<svelte:head> + <title>About</title> + <meta name="description" content="About this app" /> +</svelte:head> + +<div class="text-column"> + <h1>About this app</h1> + + <p> + This is a <a href="https://kit.svelte.dev">SvelteKit</a> app. You can make your own by typing the + following into your command line and following the prompts: + </p> + + <pre>npm create svelte@latest</pre> + + <p> + The page you're looking at is purely static HTML, with no client-side interactivity needed. + Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening + the devtools network panel and reloading. + </p> + + <p> + The <a href="/sverdle">Sverdle</a> page illustrates SvelteKit's data loading and form handling. Try + using it with JavaScript disabled! + </p> +</div> diff --git a/src/routes/about/+page.ts b/src/routes/about/+page.ts @@ -0,0 +1,9 @@ +import { dev } from '$app/environment'; + +// we don't need any JS on this page, though we'll load +// it in dev so that we get hot module replacement +export const csr = dev; + +// since there's no dynamic data here, we can prerender +// it so that it gets served as a static asset in production +export const prerender = true; diff --git a/src/routes/styles.css b/src/routes/styles.css @@ -0,0 +1,107 @@ +@import '@fontsource/fira-mono'; + +:root { + --font-body: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + --font-mono: 'Fira Mono', monospace; + --color-bg-0: rgb(202, 216, 228); + --color-bg-1: hsl(209, 36%, 86%); + --color-bg-2: hsl(224, 44%, 95%); + --color-theme-1: #ff3e00; + --color-theme-2: #4075a6; + --color-text: rgba(0, 0, 0, 0.7); + --column-width: 42rem; + --column-margin-top: 4rem; + font-family: var(--font-body); + color: var(--color-text); +} + +body { + min-height: 100vh; + margin: 0; + background-attachment: fixed; + background-color: var(--color-bg-1); + background-size: 100vw 100vh; + background-image: radial-gradient( + 50% 50% at 50% 50%, + rgba(255, 255, 255, 0.75) 0%, + rgba(255, 255, 255, 0) 100% + ), + linear-gradient(180deg, var(--color-bg-0) 0%, var(--color-bg-1) 15%, var(--color-bg-2) 50%); +} + +h1, +h2, +p { + font-weight: 400; +} + +p { + line-height: 1.5; +} + +a { + color: var(--color-theme-1); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +h1 { + font-size: 2rem; + text-align: center; +} + +h2 { + font-size: 1rem; +} + +pre { + font-size: 16px; + font-family: var(--font-mono); + background-color: rgba(255, 255, 255, 0.45); + border-radius: 3px; + box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); + padding: 0.5em; + overflow-x: auto; + color: var(--color-text); +} + +.text-column { + display: flex; + max-width: 48rem; + flex: 0.6; + flex-direction: column; + justify-content: center; + margin: 0 auto; +} + +input, +button { + font-size: inherit; + font-family: inherit; +} + +button:focus:not(:focus-visible) { + outline: none; +} + +@media (min-width: 720px) { + h1 { + font-size: 2.4rem; + } +} + +.visually-hidden { + border: 0; + clip: rect(0 0 0 0); + height: auto; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + white-space: nowrap; +} diff --git a/src/routes/sverdle/+page.server.ts b/src/routes/sverdle/+page.server.ts @@ -0,0 +1,69 @@ +import { fail } from '@sveltejs/kit'; +import { Game } from './game'; +import type { PageServerLoad, Actions } from './$types'; + +export const load = (({ cookies }) => { + const game = new Game(cookies.get('sverdle')); + + return { + /** + * The player's guessed words so far + */ + guesses: game.guesses, + + /** + * An array of strings like '__x_c' corresponding to the guesses, where 'x' means + * an exact match, and 'c' means a close match (right letter, wrong place) + */ + answers: game.answers, + + /** + * The correct answer, revealed if the game is over + */ + answer: game.answers.length >= 6 ? game.answer : null + }; +}) satisfies PageServerLoad; + +export const actions = { + /** + * Modify game state in reaction to a keypress. If client-side JavaScript + * is available, this will happen in the browser instead of here + */ + update: async ({ request, cookies }) => { + const game = new Game(cookies.get('sverdle')); + + const data = await request.formData(); + const key = data.get('key'); + + const i = game.answers.length; + + if (key === 'backspace') { + game.guesses[i] = game.guesses[i].slice(0, -1); + } else { + game.guesses[i] += key; + } + + cookies.set('sverdle', game.toString()); + }, + + /** + * Modify game state in reaction to a guessed word. This logic always runs on + * the server, so that people can't cheat by peeking at the JavaScript + */ + enter: async ({ request, cookies }) => { + const game = new Game(cookies.get('sverdle')); + + const data = await request.formData(); + const guess = data.getAll('guess') as string[]; + + if (!game.enter(guess)) { + return fail(400, { badGuess: true }); + } + + cookies.set('sverdle', game.toString()); + }, + + restart: async ({ cookies }) => { + cookies.delete('sverdle'); + } +} satisfies Actions; diff --git a/src/routes/sverdle/+page.svelte b/src/routes/sverdle/+page.svelte @@ -0,0 +1,406 @@ +<script lang="ts"> + import { confetti } from '@neoconfetti/svelte'; + import { enhance } from '$app/forms'; + import type { PageData, ActionData } from './$types'; + import { reduced_motion } from './reduced-motion'; + + export let data: PageData; + + export let form: ActionData; + + /** Whether or not the user has won */ + $: won = data.answers.at(-1) === 'xxxxx'; + + /** The index of the current guess */ + $: i = won ? -1 : data.answers.length; + + /** Whether the current guess can be submitted */ + $: submittable = data.guesses[i]?.length === 5; + + /** + * A map of classnames for all letters that have been guessed, + * used for styling the keyboard + */ + let classnames: Record<string, 'exact' | 'close' | 'missing'>; + + /** + * A map of descriptions for all letters that have been guessed, + * used for adding text for assistive technology (e.g. screen readers) + */ + let description: Record<string, string>; + + $: { + classnames = {}; + description = {}; + + data.answers.forEach((answer, i) => { + const guess = data.guesses[i]; + + for (let i = 0; i < 5; i += 1) { + const letter = guess[i]; + + if (answer[i] === 'x') { + classnames[letter] = 'exact'; + description[letter] = 'correct'; + } else if (!classnames[letter]) { + classnames[letter] = answer[i] === 'c' ? 'close' : 'missing'; + description[letter] = answer[i] === 'c' ? 'present' : 'absent'; + } + } + }); + } + + /** + * Modify the game state without making a trip to the server, + * if client-side JavaScript is enabled + */ + function update(event: MouseEvent) { + const guess = data.guesses[i]; + const key = (event.target as HTMLButtonElement).getAttribute( + 'data-key' + ); + + if (key === 'backspace') { + data.guesses[i] = guess.slice(0, -1); + if (form?.badGuess) form.badGuess = false; + } else if (guess.length < 5) { + data.guesses[i] += key; + } + } + + /** + * Trigger form logic in response to a keydown event, so that + * desktop users can use the keyboard to play the game + */ + function keydown(event: KeyboardEvent) { + if (event.metaKey) return; + + document + .querySelector(`[data-key="${event.key}" i]`) + ?.dispatchEvent(new MouseEvent('click', { cancelable: true })); + } +</script> + +<svelte:window on:keydown={keydown} /> + +<svelte:head> + <title>Sverdle</title> + <meta name="description" content="A Wordle clone written in SvelteKit" /> +</svelte:head> + +<h1 class="visually-hidden">Sverdle</h1> + +<form + method="POST" + action="?/enter" + use:enhance={() => { + // prevent default callback from resetting the form + return ({ update }) => { + update({ reset: false }); + }; + }} +> + <a class="how-to-play" href="/sverdle/how-to-play">How to play</a> + + <div class="grid" class:playing={!won} class:bad-guess={form?.badGuess}> + {#each Array.from(Array(6).keys()) as row (row)} + {@const current = row === i} + <h2 class="visually-hidden">Row {row + 1}</h2> + <div class="row" class:current> + {#each Array.from(Array(5).keys()) as column (column)} + {@const answer = data.answers[row]?.[column]} + {@const value = data.guesses[row]?.[column] ?? ''} + {@const selected = current && column === data.guesses[row].length} + {@const exact = answer === 'x'} + {@const close = answer === 'c'} + {@const missing = answer === '_'} + <div class="letter" class:exact class:close class:missing class:selected> + {value} + <span class="visually-hidden"> + {#if exact} + (correct) + {:else if close} + (present) + {:else if missing} + (absent) + {:else} + empty + {/if} + </span> + <input name="guess" disabled={!current} type="hidden" {value} /> + </div> + {/each} + </div> + {/each} + </div> + + <div class="controls"> + {#if won || data.answers.length >= 6} + {#if !won && data.answer} + <p>the answer was "{data.answer}"</p> + {/if} + <button data-key="enter" class="restart selected" formaction="?/restart"> + {won ? 'you won :)' : `game over :(`} play again? + </button> + {:else} + <div class="keyboard"> + <button data-key="enter" class:selected={submittable} disabled={!submittable}>enter</button> + + <button + on:click|preventDefault={update} + data-key="backspace" + formaction="?/update" + name="key" + value="backspace" + > + back + </button> + + {#each ['qwertyuiop', 'asdfghjkl', 'zxcvbnm'] as row} + <div class="row"> + {#each row as letter} + <button + on:click|preventDefault={update} + data-key={letter} + class={classnames[letter]} + disabled={data.guesses[i].length === 5} + formaction="?/update" + name="key" + value={letter} + aria-label="{letter} {description[letter] || ''}" + > + {letter} + </button> + {/each} + </div> + {/each} + </div> + {/if} + </div> +</form> + +{#if won} + <div + style="position: absolute; left: 50%; top: 30%" + use:confetti={{ + particleCount: $reduced_motion ? 0 : undefined, + force: 0.7, + stageWidth: window.innerWidth, + stageHeight: window.innerHeight, + colors: ['#ff3e00', '#40b3ff', '#676778'] + }} + /> +{/if} + +<style> + form { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 1rem; + flex: 1; + } + + .how-to-play { + color: var(--color-text); + } + + .how-to-play::before { + content: 'i'; + display: inline-block; + font-size: 0.8em; + font-weight: 900; + width: 1em; + height: 1em; + padding: 0.2em; + line-height: 1; + border: 1.5px solid var(--color-text); + border-radius: 50%; + text-align: center; + margin: 0 0.5em 0 0; + position: relative; + top: -0.05em; + } + + .grid { + --width: min(100vw, 40vh, 380px); + max-width: var(--width); + align-self: center; + justify-self: center; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: flex-start; + } + + .grid .row { + display: grid; + grid-template-columns: repeat(5, 1fr); + grid-gap: 0.2rem; + margin: 0 0 0.2rem 0; + } + + @media (prefers-reduced-motion: no-preference) { + .grid.bad-guess .row.current { + animation: wiggle 0.5s; + } + } + + .grid.playing .row.current { + filter: drop-shadow(3px 3px 10px var(--color-bg-0)); + } + + .letter { + aspect-ratio: 1; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + box-sizing: border-box; + text-transform: lowercase; + border: none; + font-size: calc(0.08 * var(--width)); + border-radius: 2px; + background: white; + margin: 0; + color: rgba(0, 0, 0, 0.7); + } + + .letter.missing { + background: rgba(255, 255, 255, 0.5); + color: rgba(0, 0, 0, 0.5); + } + + .letter.exact { + background: var(--color-theme-2); + color: white; + } + + .letter.close { + border: 2px solid var(--color-theme-2); + } + + .selected { + outline: 2px solid var(--color-theme-1); + } + + .controls { + text-align: center; + justify-content: center; + height: min(18vh, 10rem); + } + + .keyboard { + --gap: 0.2rem; + position: relative; + display: flex; + flex-direction: column; + gap: var(--gap); + height: 100%; + } + + .keyboard .row { + display: flex; + justify-content: center; + gap: 0.2rem; + flex: 1; + } + + .keyboard button, + .keyboard button:disabled { + --size: min(8vw, 4vh, 40px); + background-color: white; + color: black; + width: var(--size); + border: none; + border-radius: 2px; + font-size: calc(var(--size) * 0.5); + margin: 0; + } + + .keyboard button.exact { + background: var(--color-theme-2); + color: white; + } + + .keyboard button.missing { + opacity: 0.5; + } + + .keyboard button.close { + border: 2px solid var(--color-theme-2); + } + + .keyboard button:focus { + background: var(--color-theme-1); + color: white; + outline: none; + } + + .keyboard button[data-key='enter'], + .keyboard button[data-key='backspace'] { + position: absolute; + bottom: 0; + width: calc(1.5 * var(--size)); + height: calc(1 / 3 * (100% - 2 * var(--gap))); + text-transform: uppercase; + font-size: calc(0.3 * var(--size)); + padding-top: calc(0.15 * var(--size)); + } + + .keyboard button[data-key='enter'] { + right: calc(50% + 3.5 * var(--size) + 0.8rem); + } + + .keyboard button[data-key='backspace'] { + left: calc(50% + 3.5 * var(--size) + 0.8rem); + } + + .keyboard button[data-key='enter']:disabled { + opacity: 0.5; + } + + .restart { + width: 100%; + padding: 1rem; + background: rgba(255, 255, 255, 0.5); + border-radius: 2px; + border: none; + } + + .restart:focus, + .restart:hover { + background: var(--color-theme-1); + color: white; + outline: none; + } + + @keyframes wiggle { + 0% { + transform: translateX(0); + } + 10% { + transform: translateX(-2px); + } + 30% { + transform: translateX(4px); + } + 50% { + transform: translateX(-6px); + } + 70% { + transform: translateX(+4px); + } + 90% { + transform: translateX(-2px); + } + 100% { + transform: translateX(0); + } + } +</style> diff --git a/src/routes/sverdle/game.test.ts b/src/routes/sverdle/game.test.ts @@ -0,0 +1,9 @@ +import { describe, it, expect } from 'vitest'; +import { Game } from './game'; + +describe('game test', () => { + it('returns true when a valid word is entered', () => { + const game = new Game(); + expect(game.enter('zorro'.split(''))).toBe(true); + }); +}); diff --git a/src/routes/sverdle/game.ts b/src/routes/sverdle/game.ts @@ -0,0 +1,75 @@ +import { words, allowed } from './words.server'; + +export class Game { + index: number; + guesses: string[]; + answers: string[]; + answer: string; + + /** + * Create a game object from the player's cookie, or initialise a new game + */ + constructor(serialized: string | undefined = undefined) { + if (serialized) { + const [index, guesses, answers] = serialized.split('-'); + + this.index = +index; + this.guesses = guesses ? guesses.split(' ') : []; + this.answers = answers ? answers.split(' ') : []; + } else { + this.index = Math.floor(Math.random() * words.length); + this.guesses = ['', '', '', '', '', '']; + this.answers = []; + } + + this.answer = words[this.index]; + } + + /** + * Update game state based on a guess of a five-letter word. Returns + * true if the guess was valid, false otherwise + */ + enter(letters: string[]) { + const word = letters.join(''); + const valid = allowed.has(word); + + if (!valid) return false; + + this.guesses[this.answers.length] = word; + + const available = Array.from(this.answer); + const answer = Array(5).fill('_'); + + // first, find exact matches + for (let i = 0; i < 5; i += 1) { + if (letters[i] === available[i]) { + answer[i] = 'x'; + available[i] = ' '; + } + } + + // then find close matches (this has to happen + // in a second step, otherwise an early close + // match can prevent a later exact match) + for (let i = 0; i < 5; i += 1) { + if (answer[i] === '_') { + const index = available.indexOf(letters[i]); + if (index !== -1) { + answer[i] = 'c'; + available[index] = ' '; + } + } + } + + this.answers.push(answer.join('')); + + return true; + } + + /** + * Serialize game state so it can be set as a cookie + */ + toString() { + return `${this.index}-${this.guesses.join(' ')}-${this.answers.join(' ')}`; + } +} diff --git a/src/routes/sverdle/how-to-play/+page.svelte b/src/routes/sverdle/how-to-play/+page.svelte @@ -0,0 +1,95 @@ +<svelte:head> + <title>How to play Sverdle</title> + <meta name="description" content="How to play Sverdle" /> +</svelte:head> + +<div class="text-column"> + <h1>How to play Sverdle</h1> + + <p> + Sverdle is a clone of <a href="https://www.nytimes.com/games/wordle/index.html">Wordle</a>, the + word guessing game. To play, enter a five-letter English word. For example: + </p> + + <div class="example"> + <span class="close">r</span> + <span class="missing">i</span> + <span class="close">t</span> + <span class="missing">z</span> + <span class="exact">y</span> + </div> + + <p> + The <span class="exact">y</span> is in the right place. <span class="close">r</span> and + <span class="close">t</span> + are the right letters, but in the wrong place. The other letters are wrong, and can be discarded. + Let's make another guess: + </p> + + <div class="example"> + <span class="exact">p</span> + <span class="exact">a</span> + <span class="exact">r</span> + <span class="exact">t</span> + <span class="exact">y</span> + </div> + + <p>This time we guessed right! You have <strong>six</strong> guesses to get the word.</p> + + <p> + Unlike the original Wordle, Sverdle runs on the server instead of in the browser, making it + impossible to cheat. It uses <code>&lt;form&gt;</code> and cookies to submit data, meaning you can + even play with JavaScript disabled! + </p> +</div> + +<style> + span { + display: inline-flex; + justify-content: center; + align-items: center; + font-size: 0.8em; + width: 2.4em; + height: 2.4em; + background-color: white; + box-sizing: border-box; + border-radius: 2px; + border-width: 2px; + color: rgba(0, 0, 0, 0.7); + } + + .missing { + background: rgba(255, 255, 255, 0.5); + color: rgba(0, 0, 0, 0.5); + } + + .close { + border-style: solid; + border-color: var(--color-theme-2); + } + + .exact { + background: var(--color-theme-2); + color: white; + } + + .example { + display: flex; + justify-content: flex-start; + margin: 1rem 0; + gap: 0.2rem; + } + + .example span { + font-size: 1.4rem; + } + + p span { + position: relative; + border-width: 1px; + border-radius: 1px; + font-size: 0.4em; + transform: scale(2) translate(0, -10%); + margin: 0 1em; + } +</style> diff --git a/src/routes/sverdle/how-to-play/+page.ts b/src/routes/sverdle/how-to-play/+page.ts @@ -0,0 +1,9 @@ +import { dev } from '$app/environment'; + +// we don't need any JS on this page, though we'll load +// it in dev so that we get hot module replacement +export const csr = dev; + +// since there's no dynamic data here, we can prerender +// it so that it gets served as a static asset in production +export const prerender = true; diff --git a/src/routes/sverdle/reduced-motion.ts b/src/routes/sverdle/reduced-motion.ts @@ -0,0 +1,23 @@ +import { readable } from 'svelte/store'; +import { browser } from '$app/environment'; + +const reduced_motion_query = '(prefers-reduced-motion: reduce)'; + +const get_initial_motion_preference = () => { + if (!browser) return false; + return window.matchMedia(reduced_motion_query).matches; +}; + +export const reduced_motion = readable(get_initial_motion_preference(), (set) => { + if (browser) { + const set_reduced_motion = (event: MediaQueryListEvent) => { + set(event.matches); + }; + const media_query_list = window.matchMedia(reduced_motion_query); + media_query_list.addEventListener('change', set_reduced_motion); + + return () => { + media_query_list.removeEventListener('change', set_reduced_motion); + }; + } +}); diff --git a/src/routes/sverdle/words.server.ts b/src/routes/sverdle/words.server.ts @@ -0,0 +1,12980 @@ +/** The list of possible words */ +export const words = [ + 'aback', + 'abase', + 'abate', + 'abbey', + 'abbot', + 'abhor', + 'abide', + 'abled', + 'abode', + 'abort', + 'about', + 'above', + 'abuse', + 'abyss', + 'acorn', + 'acrid', + 'actor', + 'acute', + 'adage', + 'adapt', + 'adept', + 'admin', + 'admit', + 'adobe', + 'adopt', + 'adore', + 'adorn', + 'adult', + 'affix', + 'afire', + 'afoot', + 'afoul', + 'after', + 'again', + 'agape', + 'agate', + 'agent', + 'agile', + 'aging', + 'aglow', + 'agony', + 'agora', + 'agree', + 'ahead', + 'aider', + 'aisle', + 'alarm', + 'album', + 'alert', + 'algae', + 'alibi', + 'alien', + 'align', + 'alike', + 'alive', + 'allay', + 'alley', + 'allot', + 'allow', + 'alloy', + 'aloft', + 'alone', + 'along', + 'aloof', + 'aloud', + 'alpha', + 'altar', + 'alter', + 'amass', + 'amaze', + 'amber', + 'amble', + 'amend', + 'amiss', + 'amity', + 'among', + 'ample', + 'amply', + 'amuse', + 'angel', + 'anger', + 'angle', + 'angry', + 'angst', + 'anime', + 'ankle', + 'annex', + 'annoy', + 'annul', + 'anode', + 'antic', + 'anvil', + 'aorta', + 'apart', + 'aphid', + 'aping', + 'apnea', + 'apple', + 'apply', + 'apron', + 'aptly', + 'arbor', + 'ardor', + 'arena', + 'argue', + 'arise', + 'armor', + 'aroma', + 'arose', + 'array', + 'arrow', + 'arson', + 'artsy', + 'ascot', + 'ashen', + 'aside', + 'askew', + 'assay', + 'asset', + 'atoll', + 'atone', + 'attic', + 'audio', + 'audit', + 'augur', + 'aunty', + 'avail', + 'avert', + 'avian', + 'avoid', + 'await', + 'awake', + 'award', + 'aware', + 'awash', + 'awful', + 'awoke', + 'axial', + 'axiom', + 'axion', + 'azure', + 'bacon', + 'badge', + 'badly', + 'bagel', + 'baggy', + 'baker', + 'baler', + 'balmy', + 'banal', + 'banjo', + 'barge', + 'baron', + 'basal', + 'basic', + 'basil', + 'basin', + 'basis', + 'baste', + 'batch', + 'bathe', + 'baton', + 'batty', + 'bawdy', + 'bayou', + 'beach', + 'beady', + 'beard', + 'beast', + 'beech', + 'beefy', + 'befit', + 'began', + 'begat', + 'beget', + 'begin', + 'begun', + 'being', + 'belch', + 'belie', + 'belle', + 'belly', + 'below', + 'bench', + 'beret', + 'berry', + 'berth', + 'beset', + 'betel', + 'bevel', + 'bezel', + 'bible', + 'bicep', + 'biddy', + 'bigot', + 'bilge', + 'billy', + 'binge', + 'bingo', + 'biome', + 'birch', + 'birth', + 'bison', + 'bitty', + 'black', + 'blade', + 'blame', + 'bland', + 'blank', + 'blare', + 'blast', + 'blaze', + 'bleak', + 'bleat', + 'bleed', + 'bleep', + 'blend', + 'bless', + 'blimp', + 'blind', + 'blink', + 'bliss', + 'blitz', + 'bloat', + 'block', + 'bloke', + 'blond', + 'blood', + 'bloom', + 'blown', + 'bluer', + 'bluff', + 'blunt', + 'blurb', + 'blurt', + 'blush', + 'board', + 'boast', + 'bobby', + 'boney', + 'bongo', + 'bonus', + 'booby', + 'boost', + 'booth', + 'booty', + 'booze', + 'boozy', + 'borax', + 'borne', + 'bosom', + 'bossy', + 'botch', + 'bough', + 'boule', + 'bound', + 'bowel', + 'boxer', + 'brace', + 'braid', + 'brain', + 'brake', + 'brand', + 'brash', + 'brass', + 'brave', + 'bravo', + 'brawl', + 'brawn', + 'bread', + 'break', + 'breed', + 'briar', + 'bribe', + 'brick', + 'bride', + 'brief', + 'brine', + 'bring', + 'brink', + 'briny', + 'brisk', + 'broad', + 'broil', + 'broke', + 'brood', + 'brook', + 'broom', + 'broth', + 'brown', + 'brunt', + 'brush', + 'brute', + 'buddy', + 'budge', + 'buggy', + 'bugle', + 'build', + 'built', + 'bulge', + 'bulky', + 'bully', + 'bunch', + 'bunny', + 'burly', + 'burnt', + 'burst', + 'bused', + 'bushy', + 'butch', + 'butte', + 'buxom', + 'buyer', + 'bylaw', + 'cabal', + 'cabby', + 'cabin', + 'cable', + 'cacao', + 'cache', + 'cacti', + 'caddy', + 'cadet', + 'cagey', + 'cairn', + 'camel', + 'cameo', + 'canal', + 'candy', + 'canny', + 'canoe', + 'canon', + 'caper', + 'caput', + 'carat', + 'cargo', + 'carol', + 'carry', + 'carve', + 'caste', + 'catch', + 'cater', + 'catty', + 'caulk', + 'cause', + 'cavil', + 'cease', + 'cedar', + 'cello', + 'chafe', + 'chaff', + 'chain', + 'chair', + 'chalk', + 'champ', + 'chant', + 'chaos', + 'chard', + 'charm', + 'chart', + 'chase', + 'chasm', + 'cheap', + 'cheat', + 'check', + 'cheek', + 'cheer', + 'chess', + 'chest', + 'chick', + 'chide', + 'chief', + 'child', + 'chili', + 'chill', + 'chime', + 'china', + 'chirp', + 'chock', + 'choir', + 'choke', + 'chord', + 'chore', + 'chose', + 'chuck', + 'chump', + 'chunk', + 'churn', + 'chute', + 'cider', + 'cigar', + 'cinch', + 'circa', + 'civic', + 'civil', + 'clack', + 'claim', + 'clamp', + 'clang', + 'clank', + 'clash', + 'clasp', + 'class', + 'clean', + 'clear', + 'cleat', + 'cleft', + 'clerk', + 'click', + 'cliff', + 'climb', + 'cling', + 'clink', + 'cloak', + 'clock', + 'clone', + 'close', + 'cloth', + 'cloud', + 'clout', + 'clove', + 'clown', + 'cluck', + 'clued', + 'clump', + 'clung', + 'coach', + 'coast', + 'cobra', + 'cocoa', + 'colon', + 'color', + 'comet', + 'comfy', + 'comic', + 'comma', + 'conch', + 'condo', + 'conic', + 'copse', + 'coral', + 'corer', + 'corny', + 'couch', + 'cough', + 'could', + 'count', + 'coupe', + 'court', + 'coven', + 'cover', + 'covet', + 'covey', + 'cower', + 'coyly', + 'crack', + 'craft', + 'cramp', + 'crane', + 'crank', + 'crash', + 'crass', + 'crate', + 'crave', + 'crawl', + 'craze', + 'crazy', + 'creak', + 'cream', + 'credo', + 'creed', + 'creek', + 'creep', + 'creme', + 'crepe', + 'crept', + 'cress', + 'crest', + 'crick', + 'cried', + 'crier', + 'crime', + 'crimp', + 'crisp', + 'croak', + 'crock', + 'crone', + 'crony', + 'crook', + 'cross', + 'croup', + 'crowd', + 'crown', + 'crude', + 'cruel', + 'crumb', + 'crump', + 'crush', + 'crust', + 'crypt', + 'cubic', + 'cumin', + 'curio', + 'curly', + 'curry', + 'curse', + 'curve', + 'curvy', + 'cutie', + 'cyber', + 'cycle', + 'cynic', + 'daddy', + 'daily', + 'dairy', + 'daisy', + 'dally', + 'dance', + 'dandy', + 'datum', + 'daunt', + 'dealt', + 'death', + 'debar', + 'debit', + 'debug', + 'debut', + 'decal', + 'decay', + 'decor', + 'decoy', + 'decry', + 'defer', + 'deign', + 'deity', + 'delay', + 'delta', + 'delve', + 'demon', + 'demur', + 'denim', + 'dense', + 'depot', + 'depth', + 'derby', + 'deter', + 'detox', + 'deuce', + 'devil', + 'diary', + 'dicey', + 'digit', + 'dilly', + 'dimly', + 'diner', + 'dingo', + 'dingy', + 'diode', + 'dirge', + 'dirty', + 'disco', + 'ditch', + 'ditto', + 'ditty', + 'diver', + 'dizzy', + 'dodge', + 'dodgy', + 'dogma', + 'doing', + 'dolly', + 'donor', + 'donut', + 'dopey', + 'doubt', + 'dough', + 'dowdy', + 'dowel', + 'downy', + 'dowry', + 'dozen', + 'draft', + 'drain', + 'drake', + 'drama', + 'drank', + 'drape', + 'drawl', + 'drawn', + 'dread', + 'dream', + 'dress', + 'dried', + 'drier', + 'drift', + 'drill', + 'drink', + 'drive', + 'droit', + 'droll', + 'drone', + 'drool', + 'droop', + 'dross', + 'drove', + 'drown', + 'druid', + 'drunk', + 'dryer', + 'dryly', + 'duchy', + 'dully', + 'dummy', + 'dumpy', + 'dunce', + 'dusky', + 'dusty', + 'dutch', + 'duvet', + 'dwarf', + 'dwell', + 'dwelt', + 'dying', + 'eager', + 'eagle', + 'early', + 'earth', + 'easel', + 'eaten', + 'eater', + 'ebony', + 'eclat', + 'edict', + 'edify', + 'eerie', + 'egret', + 'eight', + 'eject', + 'eking', + 'elate', + 'elbow', + 'elder', + 'elect', + 'elegy', + 'elfin', + 'elide', + 'elite', + 'elope', + 'elude', + 'email', + 'embed', + 'ember', + 'emcee', + 'empty', + 'enact', + 'endow', + 'enema', + 'enemy', + 'enjoy', + 'ennui', + 'ensue', + 'enter', + 'entry', + 'envoy', + 'epoch', + 'epoxy', + 'equal', + 'equip', + 'erase', + 'erect', + 'erode', + 'error', + 'erupt', + 'essay', + 'ester', + 'ether', + 'ethic', + 'ethos', + 'etude', + 'evade', + 'event', + 'every', + 'evict', + 'evoke', + 'exact', + 'exalt', + 'excel', + 'exert', + 'exile', + 'exist', + 'expel', + 'extol', + 'extra', + 'exult', + 'eying', + 'fable', + 'facet', + 'faint', + 'fairy', + 'faith', + 'false', + 'fancy', + 'fanny', + 'farce', + 'fatal', + 'fatty', + 'fault', + 'fauna', + 'favor', + 'feast', + 'fecal', + 'feign', + 'fella', + 'felon', + 'femme', + 'femur', + 'fence', + 'feral', + 'ferry', + 'fetal', + 'fetch', + 'fetid', + 'fetus', + 'fever', + 'fewer', + 'fiber', + 'fibre', + 'ficus', + 'field', + 'fiend', + 'fiery', + 'fifth', + 'fifty', + 'fight', + 'filer', + 'filet', + 'filly', + 'filmy', + 'filth', + 'final', + 'finch', + 'finer', + 'first', + 'fishy', + 'fixer', + 'fizzy', + 'fjord', + 'flack', + 'flail', + 'flair', + 'flake', + 'flaky', + 'flame', + 'flank', + 'flare', + 'flash', + 'flask', + 'fleck', + 'fleet', + 'flesh', + 'flick', + 'flier', + 'fling', + 'flint', + 'flirt', + 'float', + 'flock', + 'flood', + 'floor', + 'flora', + 'floss', + 'flour', + 'flout', + 'flown', + 'fluff', + 'fluid', + 'fluke', + 'flume', + 'flung', + 'flunk', + 'flush', + 'flute', + 'flyer', + 'foamy', + 'focal', + 'focus', + 'foggy', + 'foist', + 'folio', + 'folly', + 'foray', + 'force', + 'forge', + 'forgo', + 'forte', + 'forth', + 'forty', + 'forum', + 'found', + 'foyer', + 'frail', + 'frame', + 'frank', + 'fraud', + 'freak', + 'freed', + 'freer', + 'fresh', + 'friar', + 'fried', + 'frill', + 'frisk', + 'fritz', + 'frock', + 'frond', + 'front', + 'frost', + 'froth', + 'frown', + 'froze', + 'fruit', + 'fudge', + 'fugue', + 'fully', + 'fungi', + 'funky', + 'funny', + 'furor', + 'furry', + 'fussy', + 'fuzzy', + 'gaffe', + 'gaily', + 'gamer', + 'gamma', + 'gamut', + 'gassy', + 'gaudy', + 'gauge', + 'gaunt', + 'gauze', + 'gavel', + 'gawky', + 'gayer', + 'gayly', + 'gazer', + 'gecko', + 'geeky', + 'geese', + 'genie', + 'genre', + 'ghost', + 'ghoul', + 'giant', + 'giddy', + 'gipsy', + 'girly', + 'girth', + 'given', + 'giver', + 'glade', + 'gland', + 'glare', + 'glass', + 'glaze', + 'gleam', + 'glean', + 'glide', + 'glint', + 'gloat', + 'globe', + 'gloom', + 'glory', + 'gloss', + 'glove', + 'glyph', + 'gnash', + 'gnome', + 'godly', + 'going', + 'golem', + 'golly', + 'gonad', + 'goner', + 'goody', + 'gooey', + 'goofy', + 'goose', + 'gorge', + 'gouge', + 'gourd', + 'grace', + 'grade', + 'graft', + 'grail', + 'grain', + 'grand', + 'grant', + 'grape', + 'graph', + 'grasp', + 'grass', + 'grate', + 'grave', + 'gravy', + 'graze', + 'great', + 'greed', + 'green', + 'greet', + 'grief', + 'grill', + 'grime', + 'grimy', + 'grind', + 'gripe', + 'groan', + 'groin', + 'groom', + 'grope', + 'gross', + 'group', + 'grout', + 'grove', + 'growl', + 'grown', + 'gruel', + 'gruff', + 'grunt', + 'guard', + 'guava', + 'guess', + 'guest', + 'guide', + 'guild', + 'guile', + 'guilt', + 'guise', + 'gulch', + 'gully', + 'gumbo', + 'gummy', + 'guppy', + 'gusto', + 'gusty', + 'gypsy', + 'habit', + 'hairy', + 'halve', + 'handy', + 'happy', + 'hardy', + 'harem', + 'harpy', + 'harry', + 'harsh', + 'haste', + 'hasty', + 'hatch', + 'hater', + 'haunt', + 'haute', + 'haven', + 'havoc', + 'hazel', + 'heady', + 'heard', + 'heart', + 'heath', + 'heave', + 'heavy', + 'hedge', + 'hefty', + 'heist', + 'helix', + 'hello', + 'hence', + 'heron', + 'hilly', + 'hinge', + 'hippo', + 'hippy', + 'hitch', + 'hoard', + 'hobby', + 'hoist', + 'holly', + 'homer', + 'honey', + 'honor', + 'horde', + 'horny', + 'horse', + 'hotel', + 'hotly', + 'hound', + 'house', + 'hovel', + 'hover', + 'howdy', + 'human', + 'humid', + 'humor', + 'humph', + 'humus', + 'hunch', + 'hunky', + 'hurry', + 'husky', + 'hussy', + 'hutch', + 'hydro', + 'hyena', + 'hymen', + 'hyper', + 'icily', + 'icing', + 'ideal', + 'idiom', + 'idiot', + 'idler', + 'idyll', + 'igloo', + 'iliac', + 'image', + 'imbue', + 'impel', + 'imply', + 'inane', + 'inbox', + 'incur', + 'index', + 'inept', + 'inert', + 'infer', + 'ingot', + 'inlay', + 'inlet', + 'inner', + 'input', + 'inter', + 'intro', + 'ionic', + 'irate', + 'irony', + 'islet', + 'issue', + 'itchy', + 'ivory', + 'jaunt', + 'jazzy', + 'jelly', + 'jerky', + 'jetty', + 'jewel', + 'jiffy', + 'joint', + 'joist', + 'joker', + 'jolly', + 'joust', + 'judge', + 'juice', + 'juicy', + 'jumbo', + 'jumpy', + 'junta', + 'junto', + 'juror', + 'kappa', + 'karma', + 'kayak', + 'kebab', + 'khaki', + 'kinky', + 'kiosk', + 'kitty', + 'knack', + 'knave', + 'knead', + 'kneed', + 'kneel', + 'knelt', + 'knife', + 'knock', + 'knoll', + 'known', + 'koala', + 'krill', + 'label', + 'labor', + 'laden', + 'ladle', + 'lager', + 'lance', + 'lanky', + 'lapel', + 'lapse', + 'large', + 'larva', + 'lasso', + 'latch', + 'later', + 'lathe', + 'latte', + 'laugh', + 'layer', + 'leach', + 'leafy', + 'leaky', + 'leant', + 'leapt', + 'learn', + 'lease', + 'leash', + 'least', + 'leave', + 'ledge', + 'leech', + 'leery', + 'lefty', + 'legal', + 'leggy', + 'lemon', + 'lemur', + 'leper', + 'level', + 'lever', + 'libel', + 'liege', + 'light', + 'liken', + 'lilac', + 'limbo', + 'limit', + 'linen', + 'liner', + 'lingo', + 'lipid', + 'lithe', + 'liver', + 'livid', + 'llama', + 'loamy', + 'loath', + 'lobby', + 'local', + 'locus', + 'lodge', + 'lofty', + 'logic', + 'login', + 'loopy', + 'loose', + 'lorry', + 'loser', + 'louse', + 'lousy', + 'lover', + 'lower', + 'lowly', + 'loyal', + 'lucid', + 'lucky', + 'lumen', + 'lumpy', + 'lunar', + 'lunch', + 'lunge', + 'lupus', + 'lurch', + 'lurid', + 'lusty', + 'lying', + 'lymph', + 'lynch', + 'lyric', + 'macaw', + 'macho', + 'macro', + 'madam', + 'madly', + 'mafia', + 'magic', + 'magma', + 'maize', + 'major', + 'maker', + 'mambo', + 'mamma', + 'mammy', + 'manga', + 'mange', + 'mango', + 'mangy', + 'mania', + 'manic', + 'manly', + 'manor', + 'maple', + 'march', + 'marry', + 'marsh', + 'mason', + 'masse', + 'match', + 'matey', + 'mauve', + 'maxim', + 'maybe', + 'mayor', + 'mealy', + 'meant', + 'meaty', + 'mecca', + 'medal', + 'media', + 'medic', + 'melee', + 'melon', + 'mercy', + 'merge', + 'merit', + 'merry', + 'metal', + 'meter', + 'metro', + 'micro', + 'midge', + 'midst', + 'might', + 'milky', + 'mimic', + 'mince', + 'miner', + 'minim', + 'minor', + 'minty', + 'minus', + 'mirth', + 'miser', + 'missy', + 'mocha', + 'modal', + 'model', + 'modem', + 'mogul', + 'moist', + 'molar', + 'moldy', + 'money', + 'month', + 'moody', + 'moose', + 'moral', + 'moron', + 'morph', + 'mossy', + 'motel', + 'motif', + 'motor', + 'motto', + 'moult', + 'mound', + 'mount', + 'mourn', + 'mouse', + 'mouth', + 'mover', + 'movie', + 'mower', + 'mucky', + 'mucus', + 'muddy', + 'mulch', + 'mummy', + 'munch', + 'mural', + 'murky', + 'mushy', + 'music', + 'musky', + 'musty', + 'myrrh', + 'nadir', + 'naive', + 'nanny', + 'nasal', + 'nasty', + 'natal', + 'naval', + 'navel', + 'needy', + 'neigh', + 'nerdy', + 'nerve', + 'never', + 'newer', + 'newly', + 'nicer', + 'niche', + 'niece', + 'night', + 'ninja', + 'ninny', + 'ninth', + 'noble', + 'nobly', + 'noise', + 'noisy', + 'nomad', + 'noose', + 'north', + 'nosey', + 'notch', + 'novel', + 'nudge', + 'nurse', + 'nutty', + 'nylon', + 'nymph', + 'oaken', + 'obese', + 'occur', + 'ocean', + 'octal', + 'octet', + 'odder', + 'oddly', + 'offal', + 'offer', + 'often', + 'olden', + 'older', + 'olive', + 'ombre', + 'omega', + 'onion', + 'onset', + 'opera', + 'opine', + 'opium', + 'optic', + 'orbit', + 'order', + 'organ', + 'other', + 'otter', + 'ought', + 'ounce', + 'outdo', + 'outer', + 'outgo', + 'ovary', + 'ovate', + 'overt', + 'ovine', + 'ovoid', + 'owing', + 'owner', + 'oxide', + 'ozone', + 'paddy', + 'pagan', + 'paint', + 'paler', + 'palsy', + 'panel', + 'panic', + 'pansy', + 'papal', + 'paper', + 'parer', + 'parka', + 'parry', + 'parse', + 'party', + 'pasta', + 'paste', + 'pasty', + 'patch', + 'patio', + 'patsy', + 'patty', + 'pause', + 'payee', + 'payer', + 'peace', + 'peach', + 'pearl', + 'pecan', + 'pedal', + 'penal', + 'pence', + 'penne', + 'penny', + 'perch', + 'peril', + 'perky', + 'pesky', + 'pesto', + 'petal', + 'petty', + 'phase', + 'phone', + 'phony', + 'photo', + 'piano', + 'picky', + 'piece', + 'piety', + 'piggy', + 'pilot', + 'pinch', + 'piney', + 'pinky', + 'pinto', + 'piper', + 'pique', + 'pitch', + 'pithy', + 'pivot', + 'pixel', + 'pixie', + 'pizza', + 'place', + 'plaid', + 'plain', + 'plait', + 'plane', + 'plank', + 'plant', + 'plate', + 'plaza', + 'plead', + 'pleat', + 'plied', + 'plier', + 'pluck', + 'plumb', + 'plume', + 'plump', + 'plunk', + 'plush', + 'poesy', + 'point', + 'poise', + 'poker', + 'polar', + 'polka', + 'polyp', + 'pooch', + 'poppy', + 'porch', + 'poser', + 'posit', + 'posse', + 'pouch', + 'pound', + 'pouty', + 'power', + 'prank', + 'prawn', + 'preen', + 'press', + 'price', + 'prick', + 'pride', + 'pried', + 'prime', + 'primo', + 'print', + 'prior', + 'prism', + 'privy', + 'prize', + 'probe', + 'prone', + 'prong', + 'proof', + 'prose', + 'proud', + 'prove', + 'prowl', + 'proxy', + 'prude', + 'prune', + 'psalm', + 'pubic', + 'pudgy', + 'puffy', + 'pulpy', + 'pulse', + 'punch', + 'pupal', + 'pupil', + 'puppy', + 'puree', + 'purer', + 'purge', + 'purse', + 'pushy', + 'putty', + 'pygmy', + 'quack', + 'quail', + 'quake', + 'qualm', + 'quark', + 'quart', + 'quash', + 'quasi', + 'queen', + 'queer', + 'quell', + 'query', + 'quest', + 'queue', + 'quick', + 'quiet', + 'quill', + 'quilt', + 'quirk', + 'quite', + 'quota', + 'quote', + 'quoth', + 'rabbi', + 'rabid', + 'racer', + 'radar', + 'radii', + 'radio', + 'rainy', + 'raise', + 'rajah', + 'rally', + 'ralph', + 'ramen', + 'ranch', + 'randy', + 'range', + 'rapid', + 'rarer', + 'raspy', + 'ratio', + 'ratty', + 'raven', + 'rayon', + 'razor', + 'reach', + 'react', + 'ready', + 'realm', + 'rearm', + 'rebar', + 'rebel', + 'rebus', + 'rebut', + 'recap', + 'recur', + 'recut', + 'reedy', + 'refer', + 'refit', + 'regal', + 'rehab', + 'reign', + 'relax', + 'relay', + 'relic', + 'remit', + 'renal', + 'renew', + 'repay', + 'repel', + 'reply', + 'rerun', + 'reset', + 'resin', + 'retch', + 'retro', + 'retry', + 'reuse', + 'revel', + 'revue', + 'rhino', + 'rhyme', + 'rider', + 'ridge', + 'rifle', + 'right', + 'rigid', + 'rigor', + 'rinse', + 'ripen', + 'riper', + 'risen', + 'riser', + 'risky', + 'rival', + 'river', + 'rivet', + 'roach', + 'roast', + 'robin', + 'robot', + 'rocky', + 'rodeo', + 'roger', + 'rogue', + 'roomy', + 'roost', + 'rotor', + 'rouge', + 'rough', + 'round', + 'rouse', + 'route', + 'rover', + 'rowdy', + 'rower', + 'royal', + 'ruddy', + 'ruder', + 'rugby', + 'ruler', + 'rumba', + 'rumor', + 'rupee', + 'rural', + 'rusty', + 'sadly', + 'safer', + 'saint', + 'salad', + 'sally', + 'salon', + 'salsa', + 'salty', + 'salve', + 'salvo', + 'sandy', + 'saner', + 'sappy', + 'sassy', + 'satin', + 'satyr', + 'sauce', + 'saucy', + 'sauna', + 'saute', + 'savor', + 'savoy', + 'savvy', + 'scald', + 'scale', + 'scalp', + 'scaly', + 'scamp', + 'scant', + 'scare', + 'scarf', + 'scary', + 'scene', + 'scent', + 'scion', + 'scoff', + 'scold', + 'scone', + 'scoop', + 'scope', + 'score', + 'scorn', + 'scour', + 'scout', + 'scowl', + 'scram', + 'scrap', + 'scree', + 'screw', + 'scrub', + 'scrum', + 'scuba', + 'sedan', + 'seedy', + 'segue', + 'seize', + 'semen', + 'sense', + 'sepia', + 'serif', + 'serum', + 'serve', + 'setup', + 'seven', + 'sever', + 'sewer', + 'shack', + 'shade', + 'shady', + 'shaft', + 'shake', + 'shaky', + 'shale', + 'shall', + 'shalt', + 'shame', + 'shank', + 'shape', + 'shard', + 'share', + 'shark', + 'sharp', + 'shave', + 'shawl', + 'shear', + 'sheen', + 'sheep', + 'sheer', + 'sheet', + 'sheik', + 'shelf', + 'shell', + 'shied', + 'shift', + 'shine', + 'shiny', + 'shire', + 'shirk', + 'shirt', + 'shoal', + 'shock', + 'shone', + 'shook', + 'shoot', + 'shore', + 'shorn', + 'short', + 'shout', + 'shove', + 'shown', + 'showy', + 'shrew', + 'shrub', + 'shrug', + 'shuck', + 'shunt', + 'shush', + 'shyly', + 'siege', + 'sieve', + 'sight', + 'sigma', + 'silky', + 'silly', + 'since', + 'sinew', + 'singe', + 'siren', + 'sissy', + 'sixth', + 'sixty', + 'skate', + 'skier', + 'skiff', + 'skill', + 'skimp', + 'skirt', + 'skulk', + 'skull', + 'skunk', + 'slack', + 'slain', + 'slang', + 'slant', + 'slash', + 'slate', + 'slave', + 'sleek', + 'sleep', + 'sleet', + 'slept', + 'slice', + 'slick', + 'slide', + 'slime', + 'slimy', + 'sling', + 'slink', + 'sloop', + 'slope', + 'slosh', + 'sloth', + 'slump', + 'slung', + 'slunk', + 'slurp', + 'slush', + 'slyly', + 'smack', + 'small', + 'smart', + 'smash', + 'smear', + 'smell', + 'smelt', + 'smile', + 'smirk', + 'smite', + 'smith', + 'smock', + 'smoke', + 'smoky', + 'smote', + 'snack', + 'snail', + 'snake', + 'snaky', + 'snare', + 'snarl', + 'sneak', + 'sneer', + 'snide', + 'sniff', + 'snipe', + 'snoop', + 'snore', + 'snort', + 'snout', + 'snowy', + 'snuck', + 'snuff', + 'soapy', + 'sober', + 'soggy', + 'solar', + 'solid', + 'solve', + 'sonar', + 'sonic', + 'sooth', + 'sooty', + 'sorry', + 'sound', + 'south', + 'sower', + 'space', + 'spade', + 'spank', + 'spare', + 'spark', + 'spasm', + 'spawn', + 'speak', + 'spear', + 'speck', + 'speed', + 'spell', + 'spelt', + 'spend', + 'spent', + 'sperm', + 'spice', + 'spicy', + 'spied', + 'spiel', + 'spike', + 'spiky', + 'spill', + 'spilt', + 'spine', + 'spiny', + 'spire', + 'spite', + 'splat', + 'split', + 'spoil', + 'spoke', + 'spoof', + 'spook', + 'spool', + 'spoon', + 'spore', + 'sport', + 'spout', + 'spray', + 'spree', + 'sprig', + 'spunk', + 'spurn', + 'spurt', + 'squad', + 'squat', + 'squib', + 'stack', + 'staff', + 'stage', + 'staid', + 'stain', + 'stair', + 'stake', + 'stale', + 'stalk', + 'stall', + 'stamp', + 'stand', + 'stank', + 'stare', + 'stark', + 'start', + 'stash', + 'state', + 'stave', + 'stead', + 'steak', + 'steal', + 'steam', + 'steed', + 'steel', + 'steep', + 'steer', + 'stein', + 'stern', + 'stick', + 'stiff', + 'still', + 'stilt', + 'sting', + 'stink', + 'stint', + 'stock', + 'stoic', + 'stoke', + 'stole', + 'stomp', + 'stone', + 'stony', + 'stood', + 'stool', + 'stoop', + 'store', + 'stork', + 'storm', + 'story', + 'stout', + 'stove', + 'strap', + 'straw', + 'stray', + 'strip', + 'strut', + 'stuck', + 'study', + 'stuff', + 'stump', + 'stung', + 'stunk', + 'stunt', + 'style', + 'suave', + 'sugar', + 'suing', + 'suite', + 'sulky', + 'sully', + 'sumac', + 'sunny', + 'super', + 'surer', + 'surge', + 'surly', + 'sushi', + 'swami', + 'swamp', + 'swarm', + 'swash', + 'swath', + 'swear', + 'sweat', + 'sweep', + 'sweet', + 'swell', + 'swept', + 'swift', + 'swill', + 'swine', + 'swing', + 'swirl', + 'swish', + 'swoon', + 'swoop', + 'sword', + 'swore', + 'sworn', + 'swung', + 'synod', + 'syrup', + 'tabby', + 'table', + 'taboo', + 'tacit', + 'tacky', + 'taffy', + 'taint', + 'taken', + 'taker', + 'tally', + 'talon', + 'tamer', + 'tango', + 'tangy', + 'taper', + 'tapir', + 'tardy', + 'tarot', + 'taste', + 'tasty', + 'tatty', + 'taunt', + 'tawny', + 'teach', + 'teary', + 'tease', + 'teddy', + 'teeth', + 'tempo', + 'tenet', + 'tenor', + 'tense', + 'tenth', + 'tepee', + 'tepid', + 'terra', + 'terse', + 'testy', + 'thank', + 'theft', + 'their', + 'theme', + 'there', + 'these', + 'theta', + 'thick', + 'thief', + 'thigh', + 'thing', + 'think', + 'third', + 'thong', + 'thorn', + 'those', + 'three', + 'threw', + 'throb', + 'throw', + 'thrum', + 'thumb', + 'thump', + 'thyme', + 'tiara', + 'tibia', + 'tidal', + 'tiger', + 'tight', + 'tilde', + 'timer', + 'timid', + 'tipsy', + 'titan', + 'tithe', + 'title', + 'toast', + 'today', + 'toddy', + 'token', + 'tonal', + 'tonga', + 'tonic', + 'tooth', + 'topaz', + 'topic', + 'torch', + 'torso', + 'torus', + 'total', + 'totem', + 'touch', + 'tough', + 'towel', + 'tower', + 'toxic', + 'toxin', + 'trace', + 'track', + 'tract', + 'trade', + 'trail', + 'train', + 'trait', + 'tramp', + 'trash', + 'trawl', + 'tread', + 'treat', + 'trend', + 'triad', + 'trial', + 'tribe', + 'trice', + 'trick', + 'tried', + 'tripe', + 'trite', + 'troll', + 'troop', + 'trope', + 'trout', + 'trove', + 'truce', + 'truck', + 'truer', + 'truly', + 'trump', + 'trunk', + 'truss', + 'trust', + 'truth', + 'tryst', + 'tubal', + 'tuber', + 'tulip', + 'tulle', + 'tumor', + 'tunic', + 'turbo', + 'tutor', + 'twang', + 'tweak', + 'tweed', + 'tweet', + 'twice', + 'twine', + 'twirl', + 'twist', + 'twixt', + 'tying', + 'udder', + 'ulcer', + 'ultra', + 'umbra', + 'uncle', + 'uncut', + 'under', + 'undid', + 'undue', + 'unfed', + 'unfit', + 'unify', + 'union', + 'unite', + 'unity', + 'unlit', + 'unmet', + 'unset', + 'untie', + 'until', + 'unwed', + 'unzip', + 'upper', + 'upset', + 'urban', + 'urine', + 'usage', + 'usher', + 'using', + 'usual', + 'usurp', + 'utile', + 'utter', + 'vague', + 'valet', + 'valid', + 'valor', + 'value', + 'valve', + 'vapid', + 'vapor', + 'vault', + 'vaunt', + 'vegan', + 'venom', + 'venue', + 'verge', + 'verse', + 'verso', + 'verve', + 'vicar', + 'video', + 'vigil', + 'vigor', + 'villa', + 'vinyl', + 'viola', + 'viper', + 'viral', + 'virus', + 'visit', + 'visor', + 'vista', + 'vital', + 'vivid', + 'vixen', + 'vocal', + 'vodka', + 'vogue', + 'voice', + 'voila', + 'vomit', + 'voter', + 'vouch', + 'vowel', + 'vying', + 'wacky', + 'wafer', + 'wager', + 'wagon', + 'waist', + 'waive', + 'waltz', + 'warty', + 'waste', + 'watch', + 'water', + 'waver', + 'waxen', + 'weary', + 'weave', + 'wedge', + 'weedy', + 'weigh', + 'weird', + 'welch', + 'welsh', + 'wench', + 'whack', + 'whale', + 'wharf', + 'wheat', + 'wheel', + 'whelp', + 'where', + 'which', + 'whiff', + 'while', + 'whine', + 'whiny', + 'whirl', + 'whisk', + 'white', + 'whole', + 'whoop', + 'whose', + 'widen', + 'wider', + 'widow', + 'width', + 'wield', + 'wight', + 'willy', + 'wimpy', + 'wince', + 'winch', + 'windy', + 'wiser', + 'wispy', + 'witch', + 'witty', + 'woken', + 'woman', + 'women', + 'woody', + 'wooer', + 'wooly', + 'woozy', + 'wordy', + 'world', + 'worry', + 'worse', + 'worst', + 'worth', + 'would', + 'wound', + 'woven', + 'wrack', + 'wrath', + 'wreak', + 'wreck', + 'wrest', + 'wring', + 'wrist', + 'write', + 'wrong', + 'wrote', + 'wrung', + 'wryly', + 'yacht', + 'yearn', + 'yeast', + 'yield', + 'young', + 'youth', + 'zebra', + 'zesty', + 'zonal' +]; + +/** The list of valid guesses, of which the list of possible words is a subset */ +export const allowed = new Set([ + ...words, + 'aahed', + 'aalii', + 'aargh', + 'aarti', + 'abaca', + 'abaci', + 'abacs', + 'abaft', + 'abaka', + 'abamp', + 'aband', + 'abash', + 'abask', + 'abaya', + 'abbas', + 'abbed', + 'abbes', + 'abcee', + 'abeam', + 'abear', + 'abele', + 'abers', + 'abets', + 'abies', + 'abler', + 'ables', + 'ablet', + 'ablow', + 'abmho', + 'abohm', + 'aboil', + 'aboma', + 'aboon', + 'abord', + 'abore', + 'abram', + 'abray', + 'abrim', + 'abrin', + 'abris', + 'absey', + 'absit', + 'abuna', + 'abune', + 'abuts', + 'abuzz', + 'abyes', + 'abysm', + 'acais', + 'acari', + 'accas', + 'accoy', + 'acerb', + 'acers', + 'aceta', + 'achar', + 'ached', + 'aches', + 'achoo', + 'acids', + 'acidy', + 'acing', + 'acini', + 'ackee', + 'acker', + 'acmes', + 'acmic', + 'acned', + 'acnes', + 'acock', + 'acold', + 'acred', + 'acres', + 'acros', + 'acted', + 'actin', + 'acton', + 'acyls', + 'adaws', + 'adays', + 'adbot', + 'addax', + 'added', + 'adder', + 'addio', + 'addle', + 'adeem', + 'adhan', + 'adieu', + 'adios', + 'adits', + 'adman', + 'admen', + 'admix', + 'adobo', + 'adown', + 'adoze', + 'adrad', + 'adred', + 'adsum', + 'aduki', + 'adunc', + 'adust', + 'advew', + 'adyta', + 'adzed', + 'adzes', + 'aecia', + 'aedes', + 'aegis', + 'aeons', + 'aerie', + 'aeros', + 'aesir', + 'afald', + 'afara', + 'afars', + 'afear', + 'aflaj', + 'afore', + 'afrit', + 'afros', + 'agama', + 'agami', + 'agars', + 'agast', + 'agave', + 'agaze', + 'agene', + 'agers', + 'agger', + 'aggie', + 'aggri', + 'aggro', + 'aggry', + 'aghas', + 'agila', + 'agios', + 'agism', + 'agist', + 'agita', + 'aglee', + 'aglet', + 'agley', + 'agloo', + 'aglus', + 'agmas', + 'agoge', + 'agone', + 'agons', + 'agood', + 'agria', + 'agrin', + 'agros', + 'agued', + 'agues', + 'aguna', + 'aguti', + 'aheap', + 'ahent', + 'ahigh', + 'ahind', + 'ahing', + 'ahint', + 'ahold', + 'ahull', + 'ahuru', + 'aidas', + 'aided', + 'aides', + 'aidoi', + 'aidos', + 'aiery', + 'aigas', + 'aight', + 'ailed', + 'aimed', + 'aimer', + 'ainee', + 'ainga', + 'aioli', + 'aired', + 'airer', + 'airns', + 'airth', + 'airts', + 'aitch', + 'aitus', + 'aiver', + 'aiyee', + 'aizle', + 'ajies', + 'ajiva', + 'ajuga', + 'ajwan', + 'akees', + 'akela', + 'akene', + 'aking', + 'akita', + 'akkas', + 'alaap', + 'alack', + 'alamo', + 'aland', + 'alane', + 'alang', + 'alans', + 'alant', + 'alapa', + 'alaps', + 'alary', + 'alate', + 'alays', + 'albas', + 'albee', + 'alcid', + 'alcos', + 'aldea', + 'alder', + 'aldol', + 'aleck', + 'alecs', + 'alefs', + 'aleft', + 'aleph', + 'alews', + 'aleye', + 'alfas', + 'algal', + 'algas', + 'algid', + 'algin', + 'algor', + 'algum', + 'alias', + 'alifs', + 'aline', + 'alist', + 'aliya', + 'alkie', + 'alkos', + 'alkyd', + 'alkyl', + 'allee', + 'allel', + 'allis', + 'allod', + 'allyl', + 'almah', + 'almas', + 'almeh', + 'almes', + 'almud', + 'almug', + 'alods', + 'aloed', + 'aloes', + 'aloha', + 'aloin', + 'aloos', + 'alowe', + 'altho', + 'altos', + 'alula', + 'alums', + 'alure', + 'alvar', + 'alway', + 'amahs', + 'amain', + 'amate', + 'amaut', + 'amban', + 'ambit', + 'ambos', + 'ambry', + 'ameba', + 'ameer', + 'amene', + 'amens', + 'ament', + 'amias', + 'amice', + 'amici', + 'amide', + 'amido', + 'amids', + 'amies', + 'amiga', + 'amigo', + 'amine', + 'amino', + 'amins', + 'amirs', + 'amlas', + 'amman', + 'ammon', + 'ammos', + 'amnia', + 'amnic', + 'amnio', + 'amoks', + 'amole', + 'amort', + 'amour', + 'amove', + 'amowt', + 'amped', + 'ampul', + 'amrit', + 'amuck', + 'amyls', + 'anana', + 'anata', + 'ancho', + 'ancle', + 'ancon', + 'andro', + 'anear', + 'anele', + 'anent', + 'angas', + 'anglo', + 'anigh', + 'anile', + 'anils', + 'anima', + 'animi', + 'anion', + 'anise', + 'anker', + 'ankhs', + 'ankus', + 'anlas', + 'annal', + 'annas', + 'annat', + 'anoas', + 'anole', + 'anomy', + 'ansae', + 'antae', + 'antar', + 'antas', + 'anted', + 'antes', + 'antis', + 'antra', + 'antre', + 'antsy', + 'anura', + 'anyon', + 'apace', + 'apage', + 'apaid', + 'apayd', + 'apays', + 'apeak', + 'apeek', + 'apers', + 'apert', + 'apery', + 'apgar', + 'aphis', + 'apian', + 'apiol', + 'apish', + 'apism', + 'apode', + 'apods', + 'apoop', + 'aport', + 'appal', + 'appay', + 'appel', + 'appro', + 'appui', + 'appuy', + 'apres', + 'apses', + 'apsis', + 'apsos', + 'apted', + 'apter', + 'aquae', + 'aquas', + 'araba', + 'araks', + 'arame', + 'arars', + 'arbas', + 'arced', + 'archi', + 'arcos', + 'arcus', + 'ardeb', + 'ardri', + 'aread', + 'areae', + 'areal', + 'arear', + 'areas', + 'areca', + 'aredd', + 'arede', + 'arefy', + 'areic', + 'arene', + 'arepa', + 'arere', + 'arete', + 'arets', + 'arett', + 'argal', + 'argan', + 'argil', + 'argle', + 'argol', + 'argon', + 'argot', + 'argus', + 'arhat', + 'arias', + 'ariel', + 'ariki', + 'arils', + 'ariot', + 'arish', + 'arked', + 'arled', + 'arles', + 'armed', + 'armer', + 'armet', + 'armil', + 'arnas', + 'arnut', + 'aroba', + 'aroha', + 'aroid', + 'arpas', + 'arpen', + 'arrah', + 'arras', + 'arret', + 'arris', + 'arroz', + 'arsed', + 'arses', + 'arsey', + 'arsis', + 'artal', + 'artel', + 'artic', + 'artis', + 'aruhe', + 'arums', + 'arval', + 'arvee', + 'arvos', + 'aryls', + 'asana', + 'ascon', + 'ascus', + 'asdic', + 'ashed', + 'ashes', + 'ashet', + 'asked', + 'asker', + 'askoi', + 'askos', + 'aspen', + 'asper', + 'aspic', + 'aspie', + 'aspis', + 'aspro', + 'assai', + 'assam', + 'asses', + 'assez', + 'assot', + 'aster', + 'astir', + 'astun', + 'asura', + 'asway', + 'aswim', + 'asyla', + 'ataps', + 'ataxy', + 'atigi', + 'atilt', + 'atimy', + 'atlas', + 'atman', + 'atmas', + 'atmos', + 'atocs', + 'atoke', + 'atoks', + 'atoms', + 'atomy', + 'atony', + 'atopy', + 'atria', + 'atrip', + 'attap', + 'attar', + 'atuas', + 'audad', + 'auger', + 'aught', + 'aulas', + 'aulic', + 'auloi', + 'aulos', + 'aumil', + 'aunes', + 'aunts', + 'aurae', + 'aural', + 'aurar', + 'auras', + 'aurei', + 'aures', + 'auric', + 'auris', + 'aurum', + 'autos', + 'auxin', + 'avale', + 'avant', + 'avast', + 'avels', + 'avens', + 'avers', + 'avgas', + 'avine', + 'avion', + 'avise', + 'aviso', + 'avize', + 'avows', + 'avyze', + 'awarn', + 'awato', + 'awave', + 'aways', + 'awdls', + 'aweel', + 'aweto', + 'awing', + 'awmry', + 'awned', + 'awner', + 'awols', + 'awork', + 'axels', + 'axile', + 'axils', + 'axing', + 'axite', + 'axled', + 'axles', + 'axman', + 'axmen', + 'axoid', + 'axone', + 'axons', + 'ayahs', + 'ayaya', + 'ayelp', + 'aygre', + 'ayins', + 'ayont', + 'ayres', + 'ayrie', + 'azans', + 'azide', + 'azido', + 'azine', + 'azlon', + 'azoic', + 'azole', + 'azons', + 'azote', + 'azoth', + 'azuki', + 'azurn', + 'azury', + 'azygy', + 'azyme', + 'azyms', + 'baaed', + 'baals', + 'babas', + 'babel', + 'babes', + 'babka', + 'baboo', + 'babul', + 'babus', + 'bacca', + 'bacco', + 'baccy', + 'bacha', + 'bachs', + 'backs', + 'baddy', + 'baels', + 'baffs', + 'baffy', + 'bafts', + 'baghs', + 'bagie', + 'bahts', + 'bahus', + 'bahut', + 'bails', + 'bairn', + 'baisa', + 'baith', + 'baits', + 'baiza', + 'baize', + 'bajan', + 'bajra', + 'bajri', + 'bajus', + 'baked', + 'baken', + 'bakes', + 'bakra', + 'balas', + 'balds', + 'baldy', + 'baled', + 'bales', + 'balks', + 'balky', + 'balls', + 'bally', + 'balms', + 'baloo', + 'balsa', + 'balti', + 'balun', + 'balus', + 'bambi', + 'banak', + 'banco', + 'bancs', + 'banda', + 'bandh', + 'bands', + 'bandy', + 'baned', + 'banes', + 'bangs', + 'bania', + 'banks', + 'banns', + 'bants', + 'bantu', + 'banty', + 'banya', + 'bapus', + 'barbe', + 'barbs', + 'barby', + 'barca', + 'barde', + 'bardo', + 'bards', + 'bardy', + 'bared', + 'barer', + 'bares', + 'barfi', + 'barfs', + 'baric', + 'barks', + 'barky', + 'barms', + 'barmy', + 'barns', + 'barny', + 'barps', + 'barra', + 'barre', + 'barro', + 'barry', + 'barye', + 'basan', + 'based', + 'basen', + 'baser', + 'bases', + 'basho', + 'basij', + 'basks', + 'bason', + 'basse', + 'bassi', + 'basso', + 'bassy', + 'basta', + 'basti', + 'basto', + 'basts', + 'bated', + 'bates', + 'baths', + 'batik', + 'batta', + 'batts', + 'battu', + 'bauds', + 'bauks', + 'baulk', + 'baurs', + 'bavin', + 'bawds', + 'bawks', + 'bawls', + 'bawns', + 'bawrs', + 'bawty', + 'bayed', + 'bayer', + 'bayes', + 'bayle', + 'bayts', + 'bazar', + 'bazoo', + 'beads', + 'beaks', + 'beaky', + 'beals', + 'beams', + 'beamy', + 'beano', + 'beans', + 'beany', + 'beare', + 'bears', + 'beath', + 'beats', + 'beaty', + 'beaus', + 'beaut', + 'beaux', + 'bebop', + 'becap', + 'becke', + 'becks', + 'bedad', + 'bedel', + 'bedes', + 'bedew', + 'bedim', + 'bedye', + 'beedi', + 'beefs', + 'beeps', + 'beers', + 'beery', + 'beets', + 'befog', + 'begad', + 'begar', + 'begem', + 'begot', + 'begum', + 'beige', + 'beigy', + 'beins', + 'bekah', + 'belah', + 'belar', + 'belay', + 'belee', + 'belga', + 'bells', + 'belon', + 'belts', + 'bemad', + 'bemas', + 'bemix', + 'bemud', + 'bends', + 'bendy', + 'benes', + 'benet', + 'benga', + 'benis', + 'benne', + 'benni', + 'benny', + 'bento', + 'bents', + 'benty', + 'bepat', + 'beray', + 'beres', + 'bergs', + 'berko', + 'berks', + 'berme', + 'berms', + 'berob', + 'beryl', + 'besat', + 'besaw', + 'besee', + 'beses', + 'besit', + 'besom', + 'besot', + 'besti', + 'bests', + 'betas', + 'beted', + 'betes', + 'beths', + 'betid', + 'beton', + 'betta', + 'betty', + 'bever', + 'bevor', + 'bevue', + 'bevvy', + 'bewet', + 'bewig', + 'bezes', + 'bezil', + 'bezzy', + 'bhais', + 'bhaji', + 'bhang', + 'bhats', + 'bhels', + 'bhoot', + 'bhuna', + 'bhuts', + 'biach', + 'biali', + 'bialy', + 'bibbs', + 'bibes', + 'biccy', + 'bices', + 'bided', + 'bider', + 'bides', + 'bidet', + 'bidis', + 'bidon', + 'bield', + 'biers', + 'biffo', + 'biffs', + 'biffy', + 'bifid', + 'bigae', + 'biggs', + 'biggy', + 'bigha', + 'bight', + 'bigly', + 'bigos', + 'bijou', + 'biked', + 'biker', + 'bikes', + 'bikie', + 'bilbo', + 'bilby', + 'biled', + 'biles', + 'bilgy', + 'bilks', + 'bills', + 'bimah', + 'bimas', + 'bimbo', + 'binal', + 'bindi', + 'binds', + 'biner', + 'bines', + 'bings', + 'bingy', + 'binit', + 'binks', + 'bints', + 'biogs', + 'biont', + 'biota', + 'biped', + 'bipod', + 'birds', + 'birks', + 'birle', + 'birls', + 'biros', + 'birrs', + 'birse', + 'birsy', + 'bises', + 'bisks', + 'bisom', + 'bitch', + 'biter', + 'bites', + 'bitos', + 'bitou', + 'bitsy', + 'bitte', + 'bitts', + 'bivia', + 'bivvy', + 'bizes', + 'bizzo', + 'bizzy', + 'blabs', + 'blads', + 'blady', + 'blaer', + 'blaes', + 'blaff', + 'blags', + 'blahs', + 'blain', + 'blams', + 'blart', + 'blase', + 'blash', + 'blate', + 'blats', + 'blatt', + 'blaud', + 'blawn', + 'blaws', + 'blays', + 'blear', + 'blebs', + 'blech', + 'blees', + 'blent', + 'blert', + 'blest', + 'blets', + 'bleys', + 'blimy', + 'bling', + 'blini', + 'blins', + 'bliny', + 'blips', + 'blist', + 'blite', + 'blits', + 'blive', + 'blobs', + 'blocs', + 'blogs', + 'blook', + 'bloop', + 'blore', + 'blots', + 'blows', + 'blowy', + 'blubs', + 'blude', + 'bluds', + 'bludy', + 'blued', + 'blues', + 'bluet', + 'bluey', + 'bluid', + 'blume', + 'blunk', + 'blurs', + 'blype', + 'boabs', + 'boaks', + 'boars', + 'boart', + 'boats', + 'bobac', + 'bobak', + 'bobas', + 'bobol', + 'bobos', + 'bocca', + 'bocce', + 'bocci', + 'boche', + 'bocks', + 'boded', + 'bodes', + 'bodge', + 'bodhi', + 'bodle', + 'boeps', + 'boets', + 'boeuf', + 'boffo', + 'boffs', + 'bogan', + 'bogey', + 'boggy', + 'bogie', + 'bogle', + 'bogue', + 'bogus', + 'bohea', + 'bohos', + 'boils', + 'boing', + 'boink', + 'boite', + 'boked', + 'bokeh', + 'bokes', + 'bokos', + 'bolar', + 'bolas', + 'bolds', + 'boles', + 'bolix', + 'bolls', + 'bolos', + 'bolts', + 'bolus', + 'bomas', + 'bombe', + 'bombo', + 'bombs', + 'bonce', + 'bonds', + 'boned', + 'boner', + 'bones', + 'bongs', + 'bonie', + 'bonks', + 'bonne', + 'bonny', + 'bonza', + 'bonze', + 'booai', + 'booay', + 'boobs', + 'boody', + 'booed', + 'boofy', + 'boogy', + 'boohs', + 'books', + 'booky', + 'bools', + 'booms', + 'boomy', + 'boong', + 'boons', + 'boord', + 'boors', + 'boose', + 'boots', + 'boppy', + 'borak', + 'boral', + 'boras', + 'borde', + 'bords', + 'bored', + 'boree', + 'borel', + 'borer', + 'bores', + 'borgo', + 'boric', + 'borks', + 'borms', + 'borna', + 'boron', + 'borts', + 'borty', + 'bortz', + 'bosie', + 'bosks', + 'bosky', + 'boson', + 'bosun', + 'botas', + 'botel', + 'botes', + 'bothy', + 'botte', + 'botts', + 'botty', + 'bouge', + 'bouks', + 'boult', + 'bouns', + 'bourd', + 'bourg', + 'bourn', + 'bouse', + 'bousy', + 'bouts', + 'bovid', + 'bowat', + 'bowed', + 'bower', + 'bowes', + 'bowet', + 'bowie', + 'bowls', + 'bowne', + 'bowrs', + 'bowse', + 'boxed', + 'boxen', + 'boxes', + 'boxla', + 'boxty', + 'boyar', + 'boyau', + 'boyed', + 'boyfs', + 'boygs', + 'boyla', + 'boyos', + 'boysy', + 'bozos', + 'braai', + 'brach', + 'brack', + 'bract', + 'brads', + 'braes', + 'brags', + 'brail', + 'braks', + 'braky', + 'brame', + 'brane', + 'brank', + 'brans', + 'brant', + 'brast', + 'brats', + 'brava', + 'bravi', + 'braws', + 'braxy', + 'brays', + 'braza', + 'braze', + 'bream', + 'brede', + 'breds', + 'breem', + 'breer', + 'brees', + 'breid', + 'breis', + 'breme', + 'brens', + 'brent', + 'brere', + 'brers', + 'breve', + 'brews', + 'breys', + 'brier', + 'bries', + 'brigs', + 'briki', + 'briks', + 'brill', + 'brims', + 'brins', + 'brios', + 'brise', + 'briss', + 'brith', + 'brits', + 'britt', + 'brize', + 'broch', + 'brock', + 'brods', + 'brogh', + 'brogs', + 'brome', + 'bromo', + 'bronc', + 'brond', + 'brool', + 'broos', + 'brose', + 'brosy', + 'brows', + 'brugh', + 'bruin', + 'bruit', + 'brule', + 'brume', + 'brung', + 'brusk', + 'brust', + 'bruts', + 'buats', + 'buaze', + 'bubal', + 'bubas', + 'bubba', + 'bubbe', + 'bubby', + 'bubus', + 'buchu', + 'bucko', + 'bucks', + 'bucku', + 'budas', + 'budis', + 'budos', + 'buffa', + 'buffe', + 'buffi', + 'buffo', + 'buffs', + 'buffy', + 'bufos', + 'bufty', + 'buhls', + 'buhrs', + 'buiks', + 'buist', + 'bukes', + 'bulbs', + 'bulgy', + 'bulks', + 'bulla', + 'bulls', + 'bulse', + 'bumbo', + 'bumfs', + 'bumph', + 'bumps', + 'bumpy', + 'bunas', + 'bunce', + 'bunco', + 'bunde', + 'bundh', + 'bunds', + 'bundt', + 'bundu', + 'bundy', + 'bungs', + 'bungy', + 'bunia', + 'bunje', + 'bunjy', + 'bunko', + 'bunks', + 'bunns', + 'bunts', + 'bunty', + 'bunya', + 'buoys', + 'buppy', + 'buran', + 'buras', + 'burbs', + 'burds', + 'buret', + 'burfi', + 'burgh', + 'burgs', + 'burin', + 'burka', + 'burke', + 'burks', + 'burls', + 'burns', + 'buroo', + 'burps', + 'burqa', + 'burro', + 'burrs', + 'burry', + 'bursa', + 'burse', + 'busby', + 'buses', + 'busks', + 'busky', + 'bussu', + 'busti', + 'busts', + 'busty', + 'buteo', + 'butes', + 'butle', + 'butoh', + 'butts', + 'butty', + 'butut', + 'butyl', + 'buzzy', + 'bwana', + 'bwazi', + 'byded', + 'bydes', + 'byked', + 'bykes', + 'byres', + 'byrls', + 'byssi', + 'bytes', + 'byway', + 'caaed', + 'cabas', + 'caber', + 'cabob', + 'caboc', + 'cabre', + 'cacas', + 'cacks', + 'cacky', + 'cadee', + 'cades', + 'cadge', + 'cadgy', + 'cadie', + 'cadis', + 'cadre', + 'caeca', + 'caese', + 'cafes', + 'caffs', + 'caged', + 'cager', + 'cages', + 'cagot', + 'cahow', + 'caids', + 'cains', + 'caird', + 'cajon', + 'cajun', + 'caked', + 'cakes', + 'cakey', + 'calfs', + 'calid', + 'calif', + 'calix', + 'calks', + 'calla', + 'calls', + 'calms', + 'calmy', + 'calos', + 'calpa', + 'calps', + 'calve', + 'calyx', + 'caman', + 'camas', + 'cames', + 'camis', + 'camos', + 'campi', + 'campo', + 'camps', + 'campy', + 'camus', + 'caned', + 'caneh', + 'caner', + 'canes', + 'cangs', + 'canid', + 'canna', + 'canns', + 'canso', + 'canst', + 'canto', + 'cants', + 'canty', + 'capas', + 'caped', + 'capes', + 'capex', + 'caphs', + 'capiz', + 'caple', + 'capon', + 'capos', + 'capot', + 'capri', + 'capul', + 'carap', + 'carbo', + 'carbs', + 'carby', + 'cardi', + 'cards', + 'cardy', + 'cared', + 'carer', + 'cares', + 'caret', + 'carex', + 'carks', + 'carle', + 'carls', + 'carns', + 'carny', + 'carob', + 'carom', + 'caron', + 'carpi', + 'carps', + 'carrs', + 'carse', + 'carta', + 'carte', + 'carts', + 'carvy', + 'casas', + 'casco', + 'cased', + 'cases', + 'casks', + 'casky', + 'casts', + 'casus', + 'cates', + 'cauda', + 'cauks', + 'cauld', + 'cauls', + 'caums', + 'caups', + 'cauri', + 'causa', + 'cavas', + 'caved', + 'cavel', + 'caver', + 'caves', + 'cavie', + 'cawed', + 'cawks', + 'caxon', + 'ceaze', + 'cebid', + 'cecal', + 'cecum', + 'ceded', + 'ceder', + 'cedes', + 'cedis', + 'ceiba', + 'ceili', + 'ceils', + 'celeb', + 'cella', + 'celli', + 'cells', + 'celom', + 'celts', + 'cense', + 'cento', + 'cents', + 'centu', + 'ceorl', + 'cepes', + 'cerci', + 'cered', + 'ceres', + 'cerge', + 'ceria', + 'ceric', + 'cerne', + 'ceroc', + 'ceros', + 'certs', + 'certy', + 'cesse', + 'cesta', + 'cesti', + 'cetes', + 'cetyl', + 'cezve', + 'chace', + 'chack', + 'chaco', + 'chado', + 'chads', + 'chaft', + 'chais', + 'chals', + 'chams', + 'chana', + 'chang', + 'chank', + 'chape', + 'chaps', + 'chapt', + 'chara', + 'chare', + 'chark', + 'charr', + 'chars', + 'chary', + 'chats', + 'chave', + 'chavs', + 'chawk', + 'chaws', + 'chaya', + 'chays', + 'cheep', + 'chefs', + 'cheka', + 'chela', + 'chelp', + 'chemo', + 'chems', + 'chere', + 'chert', + 'cheth', + 'chevy', + 'chews', + 'chewy', + 'chiao', + 'chias', + 'chibs', + 'chica', + 'chich', + 'chico', + 'chics', + 'chiel', + 'chiks', + 'chile', + 'chimb', + 'chimo', + 'chimp', + 'chine', + 'ching', + 'chink', + 'chino', + 'chins', + 'chips', + 'chirk', + 'chirl', + 'chirm', + 'chiro', + 'chirr', + 'chirt', + 'chiru', + 'chits', + 'chive', + 'chivs', + 'chivy', + 'chizz', + 'choco', + 'chocs', + 'chode', + 'chogs', + 'choil', + 'choko', + 'choky', + 'chola', + 'choli', + 'cholo', + 'chomp', + 'chons', + 'choof', + 'chook', + 'choom', + 'choon', + 'chops', + 'chota', + 'chott', + 'chout', + 'choux', + 'chowk', + 'chows', + 'chubs', + 'chufa', + 'chuff', + 'chugs', + 'chums', + 'churl', + 'churr', + 'chuse', + 'chuts', + 'chyle', + 'chyme', + 'chynd', + 'cibol', + 'cided', + 'cides', + 'ciels', + 'ciggy', + 'cilia', + 'cills', + 'cimar', + 'cimex', + 'cinct', + 'cines', + 'cinqs', + 'cions', + 'cippi', + 'circs', + 'cires', + 'cirls', + 'cirri', + 'cisco', + 'cissy', + 'cists', + 'cital', + 'cited', + 'citer', + 'cites', + 'cives', + 'civet', + 'civie', + 'civvy', + 'clach', + 'clade', + 'clads', + 'claes', + 'clags', + 'clame', + 'clams', + 'clans', + 'claps', + 'clapt', + 'claro', + 'clart', + 'clary', + 'clast', + 'clats', + 'claut', + 'clave', + 'clavi', + 'claws', + 'clays', + 'cleck', + 'cleek', + 'cleep', + 'clefs', + 'clegs', + 'cleik', + 'clems', + 'clepe', + 'clept', + 'cleve', + 'clews', + 'clied', + 'clies', + 'clift', + 'clime', + 'cline', + 'clint', + 'clipe', + 'clips', + 'clipt', + 'clits', + 'cloam', + 'clods', + 'cloff', + 'clogs', + 'cloke', + 'clomb', + 'clomp', + 'clonk', + 'clons', + 'cloop', + 'cloot', + 'clops', + 'clote', + 'clots', + 'clour', + 'clous', + 'clows', + 'cloye', + 'cloys', + 'cloze', + 'clubs', + 'clues', + 'cluey', + 'clunk', + 'clype', + 'cnida', + 'coact', + 'coady', + 'coala', + 'coals', + 'coaly', + 'coapt', + 'coarb', + 'coate', + 'coati', + 'coats', + 'cobbs', + 'cobby', + 'cobia', + 'coble', + 'cobza', + 'cocas', + 'cocci', + 'cocco', + 'cocks', + 'cocky', + 'cocos', + 'codas', + 'codec', + 'coded', + 'coden', + 'coder', + 'codes', + 'codex', + 'codon', + 'coeds', + 'coffs', + 'cogie', + 'cogon', + 'cogue', + 'cohab', + 'cohen', + 'cohoe', + 'cohog', + 'cohos', + 'coifs', + 'coign', + 'coils', + 'coins', + 'coirs', + 'coits', + 'coked', + 'cokes', + 'colas', + 'colby', + 'colds', + 'coled', + 'coles', + 'coley', + 'colic', + 'colin', + 'colls', + 'colly', + 'colog', + 'colts', + 'colza', + 'comae', + 'comal', + 'comas', + 'combe', + 'combi', + 'combo', + 'combs', + 'comby', + 'comer', + 'comes', + 'comix', + 'commo', + 'comms', + 'commy', + 'compo', + 'comps', + 'compt', + 'comte', + 'comus', + 'coned', + 'cones', + 'coney', + 'confs', + 'conga', + 'conge', + 'congo', + 'conia', + 'conin', + 'conks', + 'conky', + 'conne', + 'conns', + 'conte', + 'conto', + 'conus', + 'convo', + 'cooch', + 'cooed', + 'cooee', + 'cooer', + 'cooey', + 'coofs', + 'cooks', + 'cooky', + 'cools', + 'cooly', + 'coomb', + 'cooms', + 'coomy', + 'coons', + 'coops', + 'coopt', + 'coost', + 'coots', + 'cooze', + 'copal', + 'copay', + 'coped', + 'copen', + 'coper', + 'copes', + 'coppy', + 'copra', + 'copsy', + 'coqui', + 'coram', + 'corbe', + 'corby', + 'cords', + 'cored', + 'cores', + 'corey', + 'corgi', + 'coria', + 'corks', + 'corky', + 'corms', + 'corni', + 'corno', + 'corns', + 'cornu', + 'corps', + 'corse', + 'corso', + 'cosec', + 'cosed', + 'coses', + 'coset', + 'cosey', + 'cosie', + 'costa', + 'coste', + 'costs', + 'cotan', + 'coted', + 'cotes', + 'coths', + 'cotta', + 'cotts', + 'coude', + 'coups', + 'courb', + 'courd', + 'coure', + 'cours', + 'couta', + 'couth', + 'coved', + 'coves', + 'covin', + 'cowal', + 'cowan', + 'cowed', + 'cowks', + 'cowls', + 'cowps', + 'cowry', + 'coxae', + 'coxal', + 'coxed', + 'coxes', + 'coxib', + 'coyau', + 'coyed', + 'coyer', + 'coypu', + 'cozed', + 'cozen', + 'cozes', + 'cozey', + 'cozie', + 'craal', + 'crabs', + 'crags', + 'craic', + 'craig', + 'crake', + 'crame', + 'crams', + 'crans', + 'crape', + 'craps', + 'crapy', + 'crare', + 'craws', + 'crays', + 'creds', + 'creel', + 'crees', + 'crems', + 'crena', + 'creps', + 'crepy', + 'crewe', + 'crews', + 'crias', + 'cribs', + 'cries', + 'crims', + 'crine', + 'crios', + 'cripe', + 'crips', + 'crise', + 'crith', + 'crits', + 'croci', + 'crocs', + 'croft', + 'crogs', + 'cromb', + 'crome', + 'cronk', + 'crons', + 'crool', + 'croon', + 'crops', + 'crore', + 'crost', + 'crout', + 'crows', + 'croze', + 'cruck', + 'crudo', + 'cruds', + 'crudy', + 'crues', + 'cruet', + 'cruft', + 'crunk', + 'cruor', + 'crura', + 'cruse', + 'crusy', + 'cruve', + 'crwth', + 'cryer', + 'ctene', + 'cubby', + 'cubeb', + 'cubed', + 'cuber', + 'cubes', + 'cubit', + 'cuddy', + 'cuffo', + 'cuffs', + 'cuifs', + 'cuing', + 'cuish', + 'cuits', + 'cukes', + 'culch', + 'culet', + 'culex', + 'culls', + 'cully', + 'culms', + 'culpa', + 'culti', + 'cults', + 'culty', + 'cumec', + 'cundy', + 'cunei', + 'cunit', + 'cunts', + 'cupel', + 'cupid', + 'cuppa', + 'cuppy', + 'curat', + 'curbs', + 'curch', + 'curds', + 'curdy', + 'cured', + 'curer', + 'cures', + 'curet', + 'curfs', + 'curia', + 'curie', + 'curli', + 'curls', + 'curns', + 'curny', + 'currs', + 'cursi', + 'curst', + 'cusec', + 'cushy', + 'cusks', + 'cusps', + 'cuspy', + 'cusso', + 'cusum', + 'cutch', + 'cuter', + 'cutes', + 'cutey', + 'cutin', + 'cutis', + 'cutto', + 'cutty', + 'cutup', + 'cuvee', + 'cuzes', + 'cwtch', + 'cyano', + 'cyans', + 'cycad', + 'cycas', + 'cyclo', + 'cyder', + 'cylix', + 'cymae', + 'cymar', + 'cymas', + 'cymes', + 'cymol', + 'cysts', + 'cytes', + 'cyton', + 'czars', + 'daals', + 'dabba', + 'daces', + 'dacha', + 'dacks', + 'dadah', + 'dadas', + 'dados', + 'daffs', + 'daffy', + 'dagga', + 'daggy', + 'dagos', + 'dahls', + 'daiko', + 'daine', + 'daint', + 'daker', + 'daled', + 'dales', + 'dalis', + 'dalle', + 'dalts', + 'daman', + 'damar', + 'dames', + 'damme', + 'damns', + 'damps', + 'dampy', + 'dancy', + 'dangs', + 'danio', + 'danks', + 'danny', + 'dants', + 'daraf', + 'darbs', + 'darcy', + 'dared', + 'darer', + 'dares', + 'darga', + 'dargs', + 'daric', + 'daris', + 'darks', + 'darky', + 'darns', + 'darre', + 'darts', + 'darzi', + 'dashi', + 'dashy', + 'datal', + 'dated', + 'dater', + 'dates', + 'datos', + 'datto', + 'daube', + 'daubs', + 'dauby', + 'dauds', + 'dault', + 'daurs', + 'dauts', + 'daven', + 'davit', + 'dawah', + 'dawds', + 'dawed', + 'dawen', + 'dawks', + 'dawns', + 'dawts', + 'dayan', + 'daych', + 'daynt', + 'dazed', + 'dazer', + 'dazes', + 'deads', + 'deair', + 'deals', + 'deans', + 'deare', + 'dearn', + 'dears', + 'deary', + 'deash', + 'deave', + 'deaws', + 'deawy', + 'debag', + 'debby', + 'debel', + 'debes', + 'debts', + 'debud', + 'debur', + 'debus', + 'debye', + 'decad', + 'decaf', + 'decan', + 'decko', + 'decks', + 'decos', + 'dedal', + 'deeds', + 'deedy', + 'deely', + 'deems', + 'deens', + 'deeps', + 'deere', + 'deers', + 'deets', + 'deeve', + 'deevs', + 'defat', + 'deffo', + 'defis', + 'defog', + 'degas', + 'degum', + 'degus', + 'deice', + 'deids', + 'deify', + 'deils', + 'deism', + 'deist', + 'deked', + 'dekes', + 'dekko', + 'deled', + 'deles', + 'delfs', + 'delft', + 'delis', + 'dells', + 'delly', + 'delos', + 'delph', + 'delts', + 'deman', + 'demes', + 'demic', + 'demit', + 'demob', + 'demoi', + 'demos', + 'dempt', + 'denar', + 'denay', + 'dench', + 'denes', + 'denet', + 'denis', + 'dents', + 'deoxy', + 'derat', + 'deray', + 'dered', + 'deres', + 'derig', + 'derma', + 'derms', + 'derns', + 'derny', + 'deros', + 'derro', + 'derry', + 'derth', + 'dervs', + 'desex', + 'deshi', + 'desis', + 'desks', + 'desse', + 'devas', + 'devel', + 'devis', + 'devon', + 'devos', + 'devot', + 'dewan', + 'dewar', + 'dewax', + 'dewed', + 'dexes', + 'dexie', + 'dhaba', + 'dhaks', + 'dhals', + 'dhikr', + 'dhobi', + 'dhole', + 'dholl', + 'dhols', + 'dhoti', + 'dhows', + 'dhuti', + 'diact', + 'dials', + 'diane', + 'diazo', + 'dibbs', + 'diced', + 'dicer', + 'dices', + 'dicht', + 'dicks', + 'dicky', + 'dicot', + 'dicta', + 'dicts', + 'dicty', + 'diddy', + 'didie', + 'didos', + 'didst', + 'diebs', + 'diels', + 'diene', + 'diets', + 'diffs', + 'dight', + 'dikas', + 'diked', + 'diker', + 'dikes', + 'dikey', + 'dildo', + 'dilli', + 'dills', + 'dimbo', + 'dimer', + 'dimes', + 'dimps', + 'dinar', + 'dined', + 'dines', + 'dinge', + 'dings', + 'dinic', + 'dinks', + 'dinky', + 'dinna', + 'dinos', + 'dints', + 'diols', + 'diota', + 'dippy', + 'dipso', + 'diram', + 'direr', + 'dirke', + 'dirks', + 'dirls', + 'dirts', + 'disas', + 'disci', + 'discs', + 'dishy', + 'disks', + 'disme', + 'dital', + 'ditas', + 'dited', + 'dites', + 'ditsy', + 'ditts', + 'ditzy', + 'divan', + 'divas', + 'dived', + 'dives', + 'divis', + 'divna', + 'divos', + 'divot', + 'divvy', + 'diwan', + 'dixie', + 'dixit', + 'diyas', + 'dizen', + 'djinn', + 'djins', + 'doabs', + 'doats', + 'dobby', + 'dobes', + 'dobie', + 'dobla', + 'dobra', + 'dobro', + 'docht', + 'docks', + 'docos', + 'docus', + 'doddy', + 'dodos', + 'doeks', + 'doers', + 'doest', + 'doeth', + 'doffs', + 'dogan', + 'doges', + 'dogey', + 'doggo', + 'doggy', + 'dogie', + 'dohyo', + 'doilt', + 'doily', + 'doits', + 'dojos', + 'dolce', + 'dolci', + 'doled', + 'doles', + 'dolia', + 'dolls', + 'dolma', + 'dolor', + 'dolos', + 'dolts', + 'domal', + 'domed', + 'domes', + 'domic', + 'donah', + 'donas', + 'donee', + 'doner', + 'donga', + 'dongs', + 'donko', + 'donna', + 'donne', + 'donny', + 'donsy', + 'doobs', + 'dooce', + 'doody', + 'dooks', + 'doole', + 'dools', + 'dooly', + 'dooms', + 'doomy', + 'doona', + 'doorn', + 'doors', + 'doozy', + 'dopas', + 'doped', + 'doper', + 'dopes', + 'dorad', + 'dorba', + 'dorbs', + 'doree', + 'dores', + 'doric', + 'doris', + 'dorks', + 'dorky', + 'dorms', + 'dormy', + 'dorps', + 'dorrs', + 'dorsa', + 'dorse', + 'dorts', + 'dorty', + 'dosai', + 'dosas', + 'dosed', + 'doseh', + 'doser', + 'doses', + 'dosha', + 'dotal', + 'doted', + 'doter', + 'dotes', + 'dotty', + 'douar', + 'douce', + 'doucs', + 'douks', + 'doula', + 'douma', + 'doums', + 'doups', + 'doura', + 'douse', + 'douts', + 'doved', + 'doven', + 'dover', + 'doves', + 'dovie', + 'dowar', + 'dowds', + 'dowed', + 'dower', + 'dowie', + 'dowle', + 'dowls', + 'dowly', + 'downa', + 'downs', + 'dowps', + 'dowse', + 'dowts', + 'doxed', + 'doxes', + 'doxie', + 'doyen', + 'doyly', + 'dozed', + 'dozer', + 'dozes', + 'drabs', + 'drack', + 'draco', + 'draff', + 'drags', + 'drail', + 'drams', + 'drant', + 'draps', + 'drats', + 'drave', + 'draws', + 'drays', + 'drear', + 'dreck', + 'dreed', + 'dreer', + 'drees', + 'dregs', + 'dreks', + 'drent', + 'drere', + 'drest', + 'dreys', + 'dribs', + 'drice', + 'dries', + 'drily', + 'drips', + 'dript', + 'droid', + 'droil', + 'droke', + 'drole', + 'drome', + 'drony', + 'droob', + 'droog', + 'drook', + 'drops', + 'dropt', + 'drouk', + 'drows', + 'drubs', + 'drugs', + 'drums', + 'drupe', + 'druse', + 'drusy', + 'druxy', + 'dryad', + 'dryas', + 'dsobo', + 'dsomo', + 'duads', + 'duals', + 'duans', + 'duars', + 'dubbo', + 'ducal', + 'ducat', + 'duces', + 'ducks', + 'ducky', + 'ducts', + 'duddy', + 'duded', + 'dudes', + 'duels', + 'duets', + 'duett', + 'duffs', + 'dufus', + 'duing', + 'duits', + 'dukas', + 'duked', + 'dukes', + 'dukka', + 'dulce', + 'dules', + 'dulia', + 'dulls', + 'dulse', + 'dumas', + 'dumbo', + 'dumbs', + 'dumka', + 'dumky', + 'dumps', + 'dunam', + 'dunch', + 'dunes', + 'dungs', + 'dungy', + 'dunks', + 'dunno', + 'dunny', + 'dunsh', + 'dunts', + 'duomi', + 'duomo', + 'duped', + 'duper', + 'dupes', + 'duple', + 'duply', + 'duppy', + 'dural', + 'duras', + 'dured', + 'dures', + 'durgy', + 'durns', + 'duroc', + 'duros', + 'duroy', + 'durra', + 'durrs', + 'durry', + 'durst', + 'durum', + 'durzi', + 'dusks', + 'dusts', + 'duxes', + 'dwaal', + 'dwale', + 'dwalm', + 'dwams', + 'dwang', + 'dwaum', + 'dweeb', + 'dwile', + 'dwine', + 'dyads', + 'dyers', + 'dyked', + 'dykes', + 'dykey', + 'dykon', + 'dynel', + 'dynes', + 'dzhos', + 'eagre', + 'ealed', + 'eales', + 'eaned', + 'eards', + 'eared', + 'earls', + 'earns', + 'earnt', + 'earst', + 'eased', + 'easer', + 'eases', + 'easle', + 'easts', + 'eathe', + 'eaved', + 'eaves', + 'ebbed', + 'ebbet', + 'ebons', + 'ebook', + 'ecads', + 'eched', + 'eches', + 'echos', + 'ecrus', + 'edema', + 'edged', + 'edger', + 'edges', + 'edile', + 'edits', + 'educe', + 'educt', + 'eejit', + 'eensy', + 'eeven', + 'eevns', + 'effed', + 'egads', + 'egers', + 'egest', + 'eggar', + 'egged', + 'egger', + 'egmas', + 'ehing', + 'eider', + 'eidos', + 'eigne', + 'eiked', + 'eikon', + 'eilds', + 'eisel', + 'ejido', + 'ekkas', + 'elain', + 'eland', + 'elans', + 'elchi', + 'eldin', + 'elemi', + 'elfed', + 'eliad', + 'elint', + 'elmen', + 'eloge', + 'elogy', + 'eloin', + 'elops', + 'elpee', + 'elsin', + 'elute', + 'elvan', + 'elven', + 'elver', + 'elves', + 'emacs', + 'embar', + 'embay', + 'embog', + 'embow', + 'embox', + 'embus', + 'emeer', + 'emend', + 'emerg', + 'emery', + 'emeus', + 'emics', + 'emirs', + 'emits', + 'emmas', + 'emmer', + 'emmet', + 'emmew', + 'emmys', + 'emoji', + 'emong', + 'emote', + 'emove', + 'empts', + 'emule', + 'emure', + 'emyde', + 'emyds', + 'enarm', + 'enate', + 'ended', + 'ender', + 'endew', + 'endue', + 'enews', + 'enfix', + 'eniac', + 'enlit', + 'enmew', + 'ennog', + 'enoki', + 'enols', + 'enorm', + 'enows', + 'enrol', + 'ensew', + 'ensky', + 'entia', + 'enure', + 'enurn', + 'envoi', + 'enzym', + 'eorls', + 'eosin', + 'epact', + 'epees', + 'ephah', + 'ephas', + 'ephod', + 'ephor', + 'epics', + 'epode', + 'epopt', + 'epris', + 'eques', + 'equid', + 'erbia', + 'erevs', + 'ergon', + 'ergos', + 'ergot', + 'erhus', + 'erica', + 'erick', + 'erics', + 'ering', + 'erned', + 'ernes', + 'erose', + 'erred', + 'erses', + 'eruct', + 'erugo', + 'eruvs', + 'erven', + 'ervil', + 'escar', + 'escot', + 'esile', + 'eskar', + 'esker', + 'esnes', + 'esses', + 'estoc', + 'estop', + 'estro', + 'etage', + 'etape', + 'etats', + 'etens', + 'ethal', + 'ethne', + 'ethyl', + 'etics', + 'etnas', + 'ettin', + 'ettle', + 'etuis', + 'etwee', + 'etyma', + 'eughs', + 'euked', + 'eupad', + 'euros', + 'eusol', + 'evens', + 'evert', + 'evets', + 'evhoe', + 'evils', + 'evite', + 'evohe', + 'ewers', + 'ewest', + 'ewhow', + 'ewked', + 'exams', + 'exeat', + 'execs', + 'exeem', + 'exeme', + 'exfil', + 'exies', + 'exine', + 'exing', + 'exits', + 'exode', + 'exome', + 'exons', + 'expat', + 'expos', + 'exude', + 'exuls', + 'exurb', + 'eyass', + 'eyers', + 'eyots', + 'eyras', + 'eyres', + 'eyrie', + 'eyrir', + 'ezine', + 'fabby', + 'faced', + 'facer', + 'faces', + 'facia', + 'facta', + 'facts', + 'faddy', + 'faded', + 'fader', + 'fades', + 'fadge', + 'fados', + 'faena', + 'faery', + 'faffs', + 'faffy', + 'faggy', + 'fagin', + 'fagot', + 'faiks', + 'fails', + 'faine', + 'fains', + 'fairs', + 'faked', + 'faker', + 'fakes', + 'fakey', + 'fakie', + 'fakir', + 'falaj', + 'falls', + 'famed', + 'fames', + 'fanal', + 'fands', + 'fanes', + 'fanga', + 'fango', + 'fangs', + 'fanks', + 'fanon', + 'fanos', + 'fanum', + 'faqir', + 'farad', + 'farci', + 'farcy', + 'fards', + 'fared', + 'farer', + 'fares', + 'farle', + 'farls', + 'farms', + 'faros', + 'farro', + 'farse', + 'farts', + 'fasci', + 'fasti', + 'fasts', + 'fated', + 'fates', + 'fatly', + 'fatso', + 'fatwa', + 'faugh', + 'fauld', + 'fauns', + 'faurd', + 'fauts', + 'fauve', + 'favas', + 'favel', + 'faver', + 'faves', + 'favus', + 'fawns', + 'fawny', + 'faxed', + 'faxes', + 'fayed', + 'fayer', + 'fayne', + 'fayre', + 'fazed', + 'fazes', + 'feals', + 'feare', + 'fears', + 'feart', + 'fease', + 'feats', + 'feaze', + 'feces', + 'fecht', + 'fecit', + 'fecks', + 'fedex', + 'feebs', + 'feeds', + 'feels', + 'feens', + 'feers', + 'feese', + 'feeze', + 'fehme', + 'feint', + 'feist', + 'felch', + 'felid', + 'fells', + 'felly', + 'felts', + 'felty', + 'femal', + 'femes', + 'femmy', + 'fends', + 'fendy', + 'fenis', + 'fenks', + 'fenny', + 'fents', + 'feods', + 'feoff', + 'ferer', + 'feres', + 'feria', + 'ferly', + 'fermi', + 'ferms', + 'ferns', + 'ferny', + 'fesse', + 'festa', + 'fests', + 'festy', + 'fetas', + 'feted', + 'fetes', + 'fetor', + 'fetta', + 'fetts', + 'fetwa', + 'feuar', + 'feuds', + 'feued', + 'feyed', + 'feyer', + 'feyly', + 'fezes', + 'fezzy', + 'fiars', + 'fiats', + 'fibro', + 'fices', + 'fiche', + 'fichu', + 'ficin', + 'ficos', + 'fides', + 'fidge', + 'fidos', + 'fiefs', + 'fient', + 'fiere', + 'fiers', + 'fiest', + 'fifed', + 'fifer', + 'fifes', + 'fifis', + 'figgy', + 'figos', + 'fiked', + 'fikes', + 'filar', + 'filch', + 'filed', + 'files', + 'filii', + 'filks', + 'fille', + 'fillo', + 'fills', + 'filmi', + 'films', + 'filos', + 'filum', + 'finca', + 'finds', + 'fined', + 'fines', + 'finis', + 'finks', + 'finny', + 'finos', + 'fiord', + 'fiqhs', + 'fique', + 'fired', + 'firer', + 'fires', + 'firie', + 'firks', + 'firms', + 'firns', + 'firry', + 'firth', + 'fiscs', + 'fisks', + 'fists', + 'fisty', + 'fitch', + 'fitly', + 'fitna', + 'fitte', + 'fitts', + 'fiver', + 'fives', + 'fixed', + 'fixes', + 'fixit', + 'fjeld', + 'flabs', + 'flaff', + 'flags', + 'flaks', + 'flamm', + 'flams', + 'flamy', + 'flane', + 'flans', + 'flaps', + 'flary', + 'flats', + 'flava', + 'flawn', + 'flaws', + 'flawy', + 'flaxy', + 'flays', + 'fleam', + 'fleas', + 'fleek', + 'fleer', + 'flees', + 'flegs', + 'fleme', + 'fleur', + 'flews', + 'flexi', + 'flexo', + 'fleys', + 'flics', + 'flied', + 'flies', + 'flimp', + 'flims', + 'flips', + 'flirs', + 'flisk', + 'flite', + 'flits', + 'flitt', + 'flobs', + 'flocs', + 'floes', + 'flogs', + 'flong', + 'flops', + 'flors', + 'flory', + 'flosh', + 'flota', + 'flote', + 'flows', + 'flubs', + 'flued', + 'flues', + 'fluey', + 'fluky', + 'flump', + 'fluor', + 'flurr', + 'fluty', + 'fluyt', + 'flyby', + 'flype', + 'flyte', + 'foals', + 'foams', + 'foehn', + 'fogey', + 'fogie', + 'fogle', + 'fogou', + 'fohns', + 'foids', + 'foils', + 'foins', + 'folds', + 'foley', + 'folia', + 'folic', + 'folie', + 'folks', + 'folky', + 'fomes', + 'fonda', + 'fonds', + 'fondu', + 'fones', + 'fonly', + 'fonts', + 'foods', + 'foody', + 'fools', + 'foots', + 'footy', + 'foram', + 'forbs', + 'forby', + 'fordo', + 'fords', + 'forel', + 'fores', + 'forex', + 'forks', + 'forky', + 'forme', + 'forms', + 'forts', + 'forza', + 'forze', + 'fossa', + 'fosse', + 'fouat', + 'fouds', + 'fouer', + 'fouet', + 'foule', + 'fouls', + 'fount', + 'fours', + 'fouth', + 'fovea', + 'fowls', + 'fowth', + 'foxed', + 'foxes', + 'foxie', + 'foyle', + 'foyne', + 'frabs', + 'frack', + 'fract', + 'frags', + 'fraim', + 'franc', + 'frape', + 'fraps', + 'frass', + 'frate', + 'frati', + 'frats', + 'fraus', + 'frays', + 'frees', + 'freet', + 'freit', + 'fremd', + 'frena', + 'freon', + 'frere', + 'frets', + 'fribs', + 'frier', + 'fries', + 'frigs', + 'frise', + 'frist', + 'frith', + 'frits', + 'fritt', + 'frize', + 'frizz', + 'froes', + 'frogs', + 'frons', + 'frore', + 'frorn', + 'frory', + 'frosh', + 'frows', + 'frowy', + 'frugs', + 'frump', + 'frush', + 'frust', + 'fryer', + 'fubar', + 'fubby', + 'fubsy', + 'fucks', + 'fucus', + 'fuddy', + 'fudgy', + 'fuels', + 'fuero', + 'fuffs', + 'fuffy', + 'fugal', + 'fuggy', + 'fugie', + 'fugio', + 'fugle', + 'fugly', + 'fugus', + 'fujis', + 'fulls', + 'fumed', + 'fumer', + 'fumes', + 'fumet', + 'fundi', + 'funds', + 'fundy', + 'fungo', + 'fungs', + 'funks', + 'fural', + 'furan', + 'furca', + 'furls', + 'furol', + 'furrs', + 'furth', + 'furze', + 'furzy', + 'fused', + 'fusee', + 'fusel', + 'fuses', + 'fusil', + 'fusks', + 'fusts', + 'fusty', + 'futon', + 'fuzed', + 'fuzee', + 'fuzes', + 'fuzil', + 'fyces', + 'fyked', + 'fykes', + 'fyles', + 'fyrds', + 'fytte', + 'gabba', + 'gabby', + 'gable', + 'gaddi', + 'gades', + 'gadge', + 'gadid', + 'gadis', + 'gadje', + 'gadjo', + 'gadso', + 'gaffs', + 'gaged', + 'gager', + 'gages', + 'gaids', + 'gains', + 'gairs', + 'gaita', + 'gaits', + 'gaitt', + 'gajos', + 'galah', + 'galas', + 'galax', + 'galea', + 'galed', + 'gales', + 'galls', + 'gally', + 'galop', + 'galut', + 'galvo', + 'gamas', + 'gamay', + 'gamba', + 'gambe', + 'gambo', + 'gambs', + 'gamed', + 'games', + 'gamey', + 'gamic', + 'gamin', + 'gamme', + 'gammy', + 'gamps', + 'ganch', + 'gandy', + 'ganef', + 'ganev', + 'gangs', + 'ganja', + 'ganof', + 'gants', + 'gaols', + 'gaped', + 'gaper', + 'gapes', + 'gapos', + 'gappy', + 'garbe', + 'garbo', + 'garbs', + 'garda', + 'gares', + 'garis', + 'garms', + 'garni', + 'garre', + 'garth', + 'garum', + 'gases', + 'gasps', + 'gaspy', + 'gasts', + 'gatch', + 'gated', + 'gater', + 'gates', + 'gaths', + 'gator', + 'gauch', + 'gaucy', + 'gauds', + 'gauje', + 'gault', + 'gaums', + 'gaumy', + 'gaups', + 'gaurs', + 'gauss', + 'gauzy', + 'gavot', + 'gawcy', + 'gawds', + 'gawks', + 'gawps', + 'gawsy', + 'gayal', + 'gazal', + 'gazar', + 'gazed', + 'gazes', + 'gazon', + 'gazoo', + 'geals', + 'geans', + 'geare', + 'gears', + 'geats', + 'gebur', + 'gecks', + 'geeks', + 'geeps', + 'geest', + 'geist', + 'geits', + 'gelds', + 'gelee', + 'gelid', + 'gelly', + 'gelts', + 'gemel', + 'gemma', + 'gemmy', + 'gemot', + 'genal', + 'genas', + 'genes', + 'genet', + 'genic', + 'genii', + 'genip', + 'genny', + 'genoa', + 'genom', + 'genro', + 'gents', + 'genty', + 'genua', + 'genus', + 'geode', + 'geoid', + 'gerah', + 'gerbe', + 'geres', + 'gerle', + 'germs', + 'germy', + 'gerne', + 'gesse', + 'gesso', + 'geste', + 'gests', + 'getas', + 'getup', + 'geums', + 'geyan', + 'geyer', + 'ghast', + 'ghats', + 'ghaut', + 'ghazi', + 'ghees', + 'ghest', + 'ghyll', + 'gibed', + 'gibel', + 'giber', + 'gibes', + 'gibli', + 'gibus', + 'gifts', + 'gigas', + 'gighe', + 'gigot', + 'gigue', + 'gilas', + 'gilds', + 'gilet', + 'gills', + 'gilly', + 'gilpy', + 'gilts', + 'gimel', + 'gimme', + 'gimps', + 'gimpy', + 'ginch', + 'ginge', + 'gings', + 'ginks', + 'ginny', + 'ginzo', + 'gipon', + 'gippo', + 'gippy', + 'girds', + 'girls', + 'girns', + 'giron', + 'giros', + 'girrs', + 'girsh', + 'girts', + 'gismo', + 'gisms', + 'gists', + 'gitch', + 'gites', + 'giust', + 'gived', + 'gives', + 'gizmo', + 'glace', + 'glads', + 'glady', + 'glaik', + 'glair', + 'glams', + 'glans', + 'glary', + 'glaum', + 'glaur', + 'glazy', + 'gleba', + 'glebe', + 'gleby', + 'glede', + 'gleds', + 'gleed', + 'gleek', + 'glees', + 'gleet', + 'gleis', + 'glens', + 'glent', + 'gleys', + 'glial', + 'glias', + 'glibs', + 'gliff', + 'glift', + 'glike', + 'glime', + 'glims', + 'glisk', + 'glits', + 'glitz', + 'gloam', + 'globi', + 'globs', + 'globy', + 'glode', + 'glogg', + 'gloms', + 'gloop', + 'glops', + 'glost', + 'glout', + 'glows', + 'gloze', + 'glued', + 'gluer', + 'glues', + 'gluey', + 'glugs', + 'glume', + 'glums', + 'gluon', + 'glute', + 'gluts', + 'gnarl', + 'gnarr', + 'gnars', + 'gnats', + 'gnawn', + 'gnaws', + 'gnows', + 'goads', + 'goafs', + 'goals', + 'goary', + 'goats', + 'goaty', + 'goban', + 'gobar', + 'gobbi', + 'gobbo', + 'gobby', + 'gobis', + 'gobos', + 'godet', + 'godso', + 'goels', + 'goers', + 'goest', + 'goeth', + 'goety', + 'gofer', + 'goffs', + 'gogga', + 'gogos', + 'goier', + 'gojis', + 'golds', + 'goldy', + 'goles', + 'golfs', + 'golpe', + 'golps', + 'gombo', + 'gomer', + 'gompa', + 'gonch', + 'gonef', + 'gongs', + 'gonia', + 'gonif', + 'gonks', + 'gonna', + 'gonof', + 'gonys', + 'gonzo', + 'gooby', + 'goods', + 'goofs', + 'googs', + 'gooks', + 'gooky', + 'goold', + 'gools', + 'gooly', + 'goons', + 'goony', + 'goops', + 'goopy', + 'goors', + 'goory', + 'goosy', + 'gopak', + 'gopik', + 'goral', + 'goras', + 'gored', + 'gores', + 'goris', + 'gorms', + 'gormy', + 'gorps', + 'gorse', + 'gorsy', + 'gosht', + 'gosse', + 'gotch', + 'goths', + 'gothy', + 'gotta', + 'gouch', + 'gouks', + 'goura', + 'gouts', + 'gouty', + 'gowan', + 'gowds', + 'gowfs', + 'gowks', + 'gowls', + 'gowns', + 'goxes', + 'goyim', + 'goyle', + 'graal', + 'grabs', + 'grads', + 'graff', + 'graip', + 'grama', + 'grame', + 'gramp', + 'grams', + 'grana', + 'grans', + 'grapy', + 'gravs', + 'grays', + 'grebe', + 'grebo', + 'grece', + 'greek', + 'grees', + 'grege', + 'grego', + 'grein', + 'grens', + 'grese', + 'greve', + 'grews', + 'greys', + 'grice', + 'gride', + 'grids', + 'griff', + 'grift', + 'grigs', + 'grike', + 'grins', + 'griot', + 'grips', + 'gript', + 'gripy', + 'grise', + 'grist', + 'grisy', + 'grith', + 'grits', + 'grize', + 'groat', + 'grody', + 'grogs', + 'groks', + 'groma', + 'grone', + 'groof', + 'grosz', + 'grots', + 'grouf', + 'grovy', + 'grows', + 'grrls', + 'grrrl', + 'grubs', + 'grued', + 'grues', + 'grufe', + 'grume', + 'grump', + 'grund', + 'gryce', + 'gryde', + 'gryke', + 'grype', + 'grypt', + 'guaco', + 'guana', + 'guano', + 'guans', + 'guars', + 'gucks', + 'gucky', + 'gudes', + 'guffs', + 'gugas', + 'guids', + 'guimp', + 'guiro', + 'gulag', + 'gular', + 'gulas', + 'gules', + 'gulet', + 'gulfs', + 'gulfy', + 'gulls', + 'gulph', + 'gulps', + 'gulpy', + 'gumma', + 'gummi', + 'gumps', + 'gundy', + 'gunge', + 'gungy', + 'gunks', + 'gunky', + 'gunny', + 'guqin', + 'gurdy', + 'gurge', + 'gurls', + 'gurly', + 'gurns', + 'gurry', + 'gursh', + 'gurus', + 'gushy', + 'gusla', + 'gusle', + 'gusli', + 'gussy', + 'gusts', + 'gutsy', + 'gutta', + 'gutty', + 'guyed', + 'guyle', + 'guyot', + 'guyse', + 'gwine', + 'gyals', + 'gyans', + 'gybed', + 'gybes', + 'gyeld', + 'gymps', + 'gynae', + 'gynie', + 'gynny', + 'gynos', + 'gyoza', + 'gypos', + 'gyppo', + 'gyppy', + 'gyral', + 'gyred', + 'gyres', + 'gyron', + 'gyros', + 'gyrus', + 'gytes', + 'gyved', + 'gyves', + 'haafs', + 'haars', + 'hable', + 'habus', + 'hacek', + 'hacks', + 'hadal', + 'haded', + 'hades', + 'hadji', + 'hadst', + 'haems', + 'haets', + 'haffs', + 'hafiz', + 'hafts', + 'haggs', + 'hahas', + 'haick', + 'haika', + 'haiks', + 'haiku', + 'hails', + 'haily', + 'hains', + 'haint', + 'hairs', + 'haith', + 'hajes', + 'hajis', + 'hajji', + 'hakam', + 'hakas', + 'hakea', + 'hakes', + 'hakim', + 'hakus', + 'halal', + 'haled', + 'haler', + 'hales', + 'halfa', + 'halfs', + 'halid', + 'hallo', + 'halls', + 'halma', + 'halms', + 'halon', + 'halos', + 'halse', + 'halts', + 'halva', + 'halwa', + 'hamal', + 'hamba', + 'hamed', + 'hames', + 'hammy', + 'hamza', + 'hanap', + 'hance', + 'hanch', + 'hands', + 'hangi', + 'hangs', + 'hanks', + 'hanky', + 'hansa', + 'hanse', + 'hants', + 'haole', + 'haoma', + 'hapax', + 'haply', + 'happi', + 'hapus', + 'haram', + 'hards', + 'hared', + 'hares', + 'harim', + 'harks', + 'harls', + 'harms', + 'harns', + 'haros', + 'harps', + 'harts', + 'hashy', + 'hasks', + 'hasps', + 'hasta', + 'hated', + 'hates', + 'hatha', + 'hauds', + 'haufs', + 'haugh', + 'hauld', + 'haulm', + 'hauls', + 'hault', + 'hauns', + 'hause', + 'haver', + 'haves', + 'hawed', + 'hawks', + 'hawms', + 'hawse', + 'hayed', + 'hayer', + 'hayey', + 'hayle', + 'hazan', + 'hazed', + 'hazer', + 'hazes', + 'heads', + 'heald', + 'heals', + 'heame', + 'heaps', + 'heapy', + 'heare', + 'hears', + 'heast', + 'heats', + 'heben', + 'hebes', + 'hecht', + 'hecks', + 'heder', + 'hedgy', + 'heeds', + 'heedy', + 'heels', + 'heeze', + 'hefte', + 'hefts', + 'heids', + 'heigh', + 'heils', + 'heirs', + 'hejab', + 'hejra', + 'heled', + 'heles', + 'helio', + 'hells', + 'helms', + 'helos', + 'helot', + 'helps', + 'helve', + 'hemal', + 'hemes', + 'hemic', + 'hemin', + 'hemps', + 'hempy', + 'hench', + 'hends', + 'henge', + 'henna', + 'henny', + 'henry', + 'hents', + 'hepar', + 'herbs', + 'herby', + 'herds', + 'heres', + 'herls', + 'herma', + 'herms', + 'herns', + 'heros', + 'herry', + 'herse', + 'hertz', + 'herye', + 'hesps', + 'hests', + 'hetes', + 'heths', + 'heuch', + 'heugh', + 'hevea', + 'hewed', + 'hewer', + 'hewgh', + 'hexad', + 'hexed', + 'hexer', + 'hexes', + 'hexyl', + 'heyed', + 'hiant', + 'hicks', + 'hided', + 'hider', + 'hides', + 'hiems', + 'highs', + 'hight', + 'hijab', + 'hijra', + 'hiked', + 'hiker', + 'hikes', + 'hikoi', + 'hilar', + 'hilch', + 'hillo', + 'hills', + 'hilts', + 'hilum', + 'hilus', + 'himbo', + 'hinau', + 'hinds', + 'hings', + 'hinky', + 'hinny', + 'hints', + 'hiois', + 'hiply', + 'hired', + 'hiree', + 'hirer', + 'hires', + 'hissy', + 'hists', + 'hithe', + 'hived', + 'hiver', + 'hives', + 'hizen', + 'hoaed', + 'hoagy', + 'hoars', + 'hoary', + 'hoast', + 'hobos', + 'hocks', + 'hocus', + 'hodad', + 'hodja', + 'hoers', + 'hogan', + 'hogen', + 'hoggs', + 'hoghs', + 'hohed', + 'hoick', + 'hoied', + 'hoiks', + 'hoing', + 'hoise', + 'hokas', + 'hoked', + 'hokes', + 'hokey', + 'hokis', + 'hokku', + 'hokum', + 'holds', + 'holed', + 'holes', + 'holey', + 'holks', + 'holla', + 'hollo', + 'holme', + 'holms', + 'holon', + 'holos', + 'holts', + 'homas', + 'homed', + 'homes', + 'homey', + 'homie', + 'homme', + 'homos', + 'honan', + 'honda', + 'honds', + 'honed', + 'honer', + 'hones', + 'hongi', + 'hongs', + 'honks', + 'honky', + 'hooch', + 'hoods', + 'hoody', + 'hooey', + 'hoofs', + 'hooka', + 'hooks', + 'hooky', + 'hooly', + 'hoons', + 'hoops', + 'hoord', + 'hoors', + 'hoosh', + 'hoots', + 'hooty', + 'hoove', + 'hopak', + 'hoped', + 'hoper', + 'hopes', + 'hoppy', + 'horah', + 'horal', + 'horas', + 'horis', + 'horks', + 'horme', + 'horns', + 'horst', + 'horsy', + 'hosed', + 'hosel', + 'hosen', + 'hoser', + 'hoses', + 'hosey', + 'hosta', + 'hosts', + 'hotch', + 'hoten', + 'hotty', + 'houff', + 'houfs', + 'hough', + 'houri', + 'hours', + 'houts', + 'hovea', + 'hoved', + 'hoven', + 'hoves', + 'howbe', + 'howes', + 'howff', + 'howfs', + 'howks', + 'howls', + 'howre', + 'howso', + 'hoxed', + 'hoxes', + 'hoyas', + 'hoyed', + 'hoyle', + 'hubby', + 'hucks', + 'hudna', + 'hudud', + 'huers', + 'huffs', + 'huffy', + 'huger', + 'huggy', + 'huhus', + 'huias', + 'hulas', + 'hules', + 'hulks', + 'hulky', + 'hullo', + 'hulls', + 'hully', + 'humas', + 'humfs', + 'humic', + 'humps', + 'humpy', + 'hunks', + 'hunts', + 'hurds', + 'hurls', + 'hurly', + 'hurra', + 'hurst', + 'hurts', + 'hushy', + 'husks', + 'husos', + 'hutia', + 'huzza', + 'huzzy', + 'hwyls', + 'hydra', + 'hyens', + 'hygge', + 'hying', + 'hykes', + 'hylas', + 'hyleg', + 'hyles', + 'hylic', + 'hymns', + 'hynde', + 'hyoid', + 'hyped', + 'hypes', + 'hypha', + 'hyphy', + 'hypos', + 'hyrax', + 'hyson', + 'hythe', + 'iambi', + 'iambs', + 'ibrik', + 'icers', + 'iched', + 'iches', + 'ichor', + 'icier', + 'icker', + 'ickle', + 'icons', + 'ictal', + 'ictic', + 'ictus', + 'idant', + 'ideas', + 'idees', + 'ident', + 'idled', + 'idles', + 'idola', + 'idols', + 'idyls', + 'iftar', + 'igapo', + 'igged', + 'iglus', + 'ihram', + 'ikans', + 'ikats', + 'ikons', + 'ileac', + 'ileal', + 'ileum', + 'ileus', + 'iliad', + 'ilial', + 'ilium', + 'iller', + 'illth', + 'imago', + 'imams', + 'imari', + 'imaum', + 'imbar', + 'imbed', + 'imide', + 'imido', + 'imids', + 'imine', + 'imino', + 'immew', + 'immit', + 'immix', + 'imped', + 'impis', + 'impot', + 'impro', + 'imshi', + 'imshy', + 'inapt', + 'inarm', + 'inbye', + 'incel', + 'incle', + 'incog', + 'incus', + 'incut', + 'indew', + 'india', + 'indie', + 'indol', + 'indow', + 'indri', + 'indue', + 'inerm', + 'infix', + 'infos', + 'infra', + 'ingan', + 'ingle', + 'inion', + 'inked', + 'inker', + 'inkle', + 'inned', + 'innit', + 'inorb', + 'inrun', + 'inset', + 'inspo', + 'intel', + 'intil', + 'intis', + 'intra', + 'inula', + 'inure', + 'inurn', + 'inust', + 'invar', + 'inwit', + 'iodic', + 'iodid', + 'iodin', + 'iotas', + 'ippon', + 'irade', + 'irids', + 'iring', + 'irked', + 'iroko', + 'irone', + 'irons', + 'isbas', + 'ishes', + 'isled', + 'isles', + 'isnae', + 'issei', + 'istle', + 'items', + 'ither', + 'ivied', + 'ivies', + 'ixias', + 'ixnay', + 'ixora', + 'ixtle', + 'izard', + 'izars', + 'izzat', + 'jaaps', + 'jabot', + 'jacal', + 'jacks', + 'jacky', + 'jaded', + 'jades', + 'jafas', + 'jaffa', + 'jagas', + 'jager', + 'jaggs', + 'jaggy', + 'jagir', + 'jagra', + 'jails', + 'jaker', + 'jakes', + 'jakey', + 'jalap', + 'jalop', + 'jambe', + 'jambo', + 'jambs', + 'jambu', + 'james', + 'jammy', + 'jamon', + 'janes', + 'janns', + 'janny', + 'janty', + 'japan', + 'japed', + 'japer', + 'japes', + 'jarks', + 'jarls', + 'jarps', + 'jarta', + 'jarul', + 'jasey', + 'jaspe', + 'jasps', + 'jatos', + 'jauks', + 'jaups', + 'javas', + 'javel', + 'jawan', + 'jawed', + 'jaxie', + 'jeans', + 'jeats', + 'jebel', + 'jedis', + 'jeels', + 'jeely', + 'jeeps', + 'jeers', + 'jeeze', + 'jefes', + 'jeffs', + 'jehad', + 'jehus', + 'jelab', + 'jello', + 'jells', + 'jembe', + 'jemmy', + 'jenny', + 'jeons', + 'jerid', + 'jerks', + 'jerry', + 'jesse', + 'jests', + 'jesus', + 'jetes', + 'jeton', + 'jeune', + 'jewed', + 'jewie', + 'jhala', + 'jiaos', + 'jibba', + 'jibbs', + 'jibed', + 'jiber', + 'jibes', + 'jiffs', + 'jiggy', + 'jigot', + 'jihad', + 'jills', + 'jilts', + 'jimmy', + 'jimpy', + 'jingo', + 'jinks', + 'jinne', + 'jinni', + 'jinns', + 'jirds', + 'jirga', + 'jirre', + 'jisms', + 'jived', + 'jiver', + 'jives', + 'jivey', + 'jnana', + 'jobed', + 'jobes', + 'jocko', + 'jocks', + 'jocky', + 'jocos', + 'jodel', + 'joeys', + 'johns', + 'joins', + 'joked', + 'jokes', + 'jokey', + 'jokol', + 'joled', + 'joles', + 'jolls', + 'jolts', + 'jolty', + 'jomon', + 'jomos', + 'jones', + 'jongs', + 'jonty', + 'jooks', + 'joram', + 'jorum', + 'jotas', + 'jotty', + 'jotun', + 'joual', + 'jougs', + 'jouks', + 'joule', + 'jours', + 'jowar', + 'jowed', + 'jowls', + 'jowly', + 'joyed', + 'jubas', + 'jubes', + 'jucos', + 'judas', + 'judgy', + 'judos', + 'jugal', + 'jugum', + 'jujus', + 'juked', + 'jukes', + 'jukus', + 'julep', + 'jumar', + 'jumby', + 'jumps', + 'junco', + 'junks', + 'junky', + 'jupes', + 'jupon', + 'jural', + 'jurat', + 'jurel', + 'jures', + 'justs', + 'jutes', + 'jutty', + 'juves', + 'juvie', + 'kaama', + 'kabab', + 'kabar', + 'kabob', + 'kacha', + 'kacks', + 'kadai', + 'kades', + 'kadis', + 'kafir', + 'kagos', + 'kagus', + 'kahal', + 'kaiak', + 'kaids', + 'kaies', + 'kaifs', + 'kaika', + 'kaiks', + 'kails', + 'kaims', + 'kaing', + 'kains', + 'kakas', + 'kakis', + 'kalam', + 'kales', + 'kalif', + 'kalis', + 'kalpa', + 'kamas', + 'kames', + 'kamik', + 'kamis', + 'kamme', + 'kanae', + 'kanas', + 'kandy', + 'kaneh', + 'kanes', + 'kanga', + 'kangs', + 'kanji', + 'kants', + 'kanzu', + 'kaons', + 'kapas', + 'kaphs', + 'kapok', + 'kapow', + 'kapus', + 'kaput', + 'karas', + 'karat', + 'karks', + 'karns', + 'karoo', + 'karos', + 'karri', + 'karst', + 'karsy', + 'karts', + 'karzy', + 'kasha', + 'kasme', + 'katal', + 'katas', + 'katis', + 'katti', + 'kaugh', + 'kauri', + 'kauru', + 'kaury', + 'kaval', + 'kavas', + 'kawas', + 'kawau', + 'kawed', + 'kayle', + 'kayos', + 'kazis', + 'kazoo', + 'kbars', + 'kebar', + 'kebob', + 'kecks', + 'kedge', + 'kedgy', + 'keech', + 'keefs', + 'keeks', + 'keels', + 'keema', + 'keeno', + 'keens', + 'keeps', + 'keets', + 'keeve', + 'kefir', + 'kehua', + 'keirs', + 'kelep', + 'kelim', + 'kells', + 'kelly', + 'kelps', + 'kelpy', + 'kelts', + 'kelty', + 'kembo', + 'kembs', + 'kemps', + 'kempt', + 'kempy', + 'kenaf', + 'kench', + 'kendo', + 'kenos', + 'kente', + 'kents', + 'kepis', + 'kerbs', + 'kerel', + 'kerfs', + 'kerky', + 'kerma', + 'kerne', + 'kerns', + 'keros', + 'kerry', + 'kerve', + 'kesar', + 'kests', + 'ketas', + 'ketch', + 'ketes', + 'ketol', + 'kevel', + 'kevil', + 'kexes', + 'keyed', + 'keyer', + 'khadi', + 'khafs', + 'khans', + 'khaph', + 'khats', + 'khaya', + 'khazi', + 'kheda', + 'kheth', + 'khets', + 'khoja', + 'khors', + 'khoum', + 'khuds', + 'kiaat', + 'kiack', + 'kiang', + 'kibbe', + 'kibbi', + 'kibei', + 'kibes', + 'kibla', + 'kicks', + 'kicky', + 'kiddo', + 'kiddy', + 'kidel', + 'kidge', + 'kiefs', + 'kiers', + 'kieve', + 'kievs', + 'kight', + 'kikes', + 'kikoi', + 'kiley', + 'kilim', + 'kills', + 'kilns', + 'kilos', + 'kilps', + 'kilts', + 'kilty', + 'kimbo', + 'kinas', + 'kinda', + 'kinds', + 'kindy', + 'kines', + 'kings', + 'kinin', + 'kinks', + 'kinos', + 'kiore', + 'kipes', + 'kippa', + 'kipps', + 'kirby', + 'kirks', + 'kirns', + 'kirri', + 'kisan', + 'kissy', + 'kists', + 'kited', + 'kiter', + 'kites', + 'kithe', + 'kiths', + 'kitul', + 'kivas', + 'kiwis', + 'klang', + 'klaps', + 'klett', + 'klick', + 'klieg', + 'kliks', + 'klong', + 'kloof', + 'kluge', + 'klutz', + 'knags', + 'knaps', + 'knarl', + 'knars', + 'knaur', + 'knawe', + 'knees', + 'knell', + 'knish', + 'knits', + 'knive', + 'knobs', + 'knops', + 'knosp', + 'knots', + 'knout', + 'knowe', + 'knows', + 'knubs', + 'knurl', + 'knurr', + 'knurs', + 'knuts', + 'koans', + 'koaps', + 'koban', + 'kobos', + 'koels', + 'koffs', + 'kofta', + 'kogal', + 'kohas', + 'kohen', + 'kohls', + 'koine', + 'kojis', + 'kokam', + 'kokas', + 'koker', + 'kokra', + 'kokum', + 'kolas', + 'kolos', + 'kombu', + 'konbu', + 'kondo', + 'konks', + 'kooks', + 'kooky', + 'koori', + 'kopek', + 'kophs', + 'kopje', + 'koppa', + 'korai', + 'koras', + 'korat', + 'kores', + 'korma', + 'koros', + 'korun', + 'korus', + 'koses', + 'kotch', + 'kotos', + 'kotow', + 'koura', + 'kraal', + 'krabs', + 'kraft', + 'krais', + 'krait', + 'krang', + 'krans', + 'kranz', + 'kraut', + 'krays', + 'kreep', + 'kreng', + 'krewe', + 'krona', + 'krone', + 'kroon', + 'krubi', + 'krunk', + 'ksars', + 'kubie', + 'kudos', + 'kudus', + 'kudzu', + 'kufis', + 'kugel', + 'kuias', + 'kukri', + 'kukus', + 'kulak', + 'kulan', + 'kulas', + 'kulfi', + 'kumis', + 'kumys', + 'kuris', + 'kurre', + 'kurta', + 'kurus', + 'kusso', + 'kutas', + 'kutch', + 'kutis', + 'kutus', + 'kuzus', + 'kvass', + 'kvell', + 'kwela', + 'kyack', + 'kyaks', + 'kyang', + 'kyars', + 'kyats', + 'kybos', + 'kydst', + 'kyles', + 'kylie', + 'kylin', + 'kylix', + 'kyloe', + 'kynde', + 'kynds', + 'kypes', + 'kyrie', + 'kytes', + 'kythe', + 'laari', + 'labda', + 'labia', + 'labis', + 'labra', + 'laced', + 'lacer', + 'laces', + 'lacet', + 'lacey', + 'lacks', + 'laddy', + 'laded', + 'lader', + 'lades', + 'laers', + 'laevo', + 'lagan', + 'lahal', + 'lahar', + 'laich', + 'laics', + 'laids', + 'laigh', + 'laika', + 'laiks', + 'laird', + 'lairs', + 'lairy', + 'laith', + 'laity', + 'laked', + 'laker', + 'lakes', + 'lakhs', + 'lakin', + 'laksa', + 'laldy', + 'lalls', + 'lamas', + 'lambs', + 'lamby', + 'lamed', + 'lamer', + 'lames', + 'lamia', + 'lammy', + 'lamps', + 'lanai', + 'lanas', + 'lanch', + 'lande', + 'lands', + 'lanes', + 'lanks', + 'lants', + 'lapin', + 'lapis', + 'lapje', + 'larch', + 'lards', + 'lardy', + 'laree', + 'lares', + 'largo', + 'laris', + 'larks', + 'larky', + 'larns', + 'larnt', + 'larum', + 'lased', + 'laser', + 'lases', + 'lassi', + 'lassu', + 'lassy', + 'lasts', + 'latah', + 'lated', + 'laten', + 'latex', + 'lathi', + 'laths', + 'lathy', + 'latke', + 'latus', + 'lauan', + 'lauch', + 'lauds', + 'laufs', + 'laund', + 'laura', + 'laval', + 'lavas', + 'laved', + 'laver', + 'laves', + 'lavra', + 'lavvy', + 'lawed', + 'lawer', + 'lawin', + 'lawks', + 'lawns', + 'lawny', + 'laxed', + 'laxer', + 'laxes', + 'laxly', + 'layed', + 'layin', + 'layup', + 'lazar', + 'lazed', + 'lazes', + 'lazos', + 'lazzi', + 'lazzo', + 'leads', + 'leady', + 'leafs', + 'leaks', + 'leams', + 'leans', + 'leany', + 'leaps', + 'leare', + 'lears', + 'leary', + 'leats', + 'leavy', + 'leaze', + 'leben', + 'leccy', + 'ledes', + 'ledgy', + 'ledum', + 'leear', + 'leeks', + 'leeps', + 'leers', + 'leese', + 'leets', + 'leeze', + 'lefte', + 'lefts', + 'leger', + 'leges', + 'legge', + 'leggo', + 'legit', + 'lehrs', + 'lehua', + 'leirs', + 'leish', + 'leman', + 'lemed', + 'lemel', + 'lemes', + 'lemma', + 'lemme', + 'lends', + 'lenes', + 'lengs', + 'lenis', + 'lenos', + 'lense', + 'lenti', + 'lento', + 'leone', + 'lepid', + 'lepra', + 'lepta', + 'lered', + 'leres', + 'lerps', + 'lesbo', + 'leses', + 'lests', + 'letch', + 'lethe', + 'letup', + 'leuch', + 'leuco', + 'leuds', + 'leugh', + 'levas', + 'levee', + 'leves', + 'levin', + 'levis', + 'lewis', + 'lexes', + 'lexis', + 'lezes', + 'lezza', + 'lezzy', + 'liana', + 'liane', + 'liang', + 'liard', + 'liars', + 'liart', + 'liber', + 'libra', + 'libri', + 'lichi', + 'licht', + 'licit', + 'licks', + 'lidar', + 'lidos', + 'liefs', + 'liens', + 'liers', + 'lieus', + 'lieve', + 'lifer', + 'lifes', + 'lifts', + 'ligan', + 'liger', + 'ligge', + 'ligne', + 'liked', + 'liker', + 'likes', + 'likin', + 'lills', + 'lilos', + 'lilts', + 'liman', + 'limas', + 'limax', + 'limba', + 'limbi', + 'limbs', + 'limby', + 'limed', + 'limen', + 'limes', + 'limey', + 'limma', + 'limns', + 'limos', + 'limpa', + 'limps', + 'linac', + 'linch', + 'linds', + 'lindy', + 'lined', + 'lines', + 'liney', + 'linga', + 'lings', + 'lingy', + 'linin', + 'links', + 'linky', + 'linns', + 'linny', + 'linos', + 'lints', + 'linty', + 'linum', + 'linux', + 'lions', + 'lipas', + 'lipes', + 'lipin', + 'lipos', + 'lippy', + 'liras', + 'lirks', + 'lirot', + 'lisks', + 'lisle', + 'lisps', + 'lists', + 'litai', + 'litas', + 'lited', + 'liter', + 'lites', + 'litho', + 'liths', + 'litre', + 'lived', + 'liven', + 'lives', + 'livor', + 'livre', + 'llano', + 'loach', + 'loads', + 'loafs', + 'loams', + 'loans', + 'loast', + 'loave', + 'lobar', + 'lobed', + 'lobes', + 'lobos', + 'lobus', + 'loche', + 'lochs', + 'locie', + 'locis', + 'locks', + 'locos', + 'locum', + 'loden', + 'lodes', + 'loess', + 'lofts', + 'logan', + 'loges', + 'loggy', + 'logia', + 'logie', + 'logoi', + 'logon', + 'logos', + 'lohan', + 'loids', + 'loins', + 'loipe', + 'loirs', + 'lokes', + 'lolls', + 'lolly', + 'lolog', + 'lomas', + 'lomed', + 'lomes', + 'loner', + 'longa', + 'longe', + 'longs', + 'looby', + 'looed', + 'looey', + 'loofa', + 'loofs', + 'looie', + 'looks', + 'looky', + 'looms', + 'loons', + 'loony', + 'loops', + 'loord', + 'loots', + 'loped', + 'loper', + 'lopes', + 'loppy', + 'loral', + 'loran', + 'lords', + 'lordy', + 'lorel', + 'lores', + 'loric', + 'loris', + 'losed', + 'losel', + 'losen', + 'loses', + 'lossy', + 'lotah', + 'lotas', + 'lotes', + 'lotic', + 'lotos', + 'lotsa', + 'lotta', + 'lotte', + 'lotto', + 'lotus', + 'loued', + 'lough', + 'louie', + 'louis', + 'louma', + 'lound', + 'louns', + 'loupe', + 'loups', + 'loure', + 'lours', + 'loury', + 'louts', + 'lovat', + 'loved', + 'loves', + 'lovey', + 'lovie', + 'lowan', + 'lowed', + 'lowes', + 'lownd', + 'lowne', + 'lowns', + 'lowps', + 'lowry', + 'lowse', + 'lowts', + 'loxed', + 'loxes', + 'lozen', + 'luach', + 'luaus', + 'lubed', + 'lubes', + 'lubra', + 'luces', + 'lucks', + 'lucre', + 'ludes', + 'ludic', + 'ludos', + 'luffa', + 'luffs', + 'luged', + 'luger', + 'luges', + 'lulls', + 'lulus', + 'lumas', + 'lumbi', + 'lumme', + 'lummy', + 'lumps', + 'lunas', + 'lunes', + 'lunet', + 'lungi', + 'lungs', + 'lunks', + 'lunts', + 'lupin', + 'lured', + 'lurer', + 'lures', + 'lurex', + 'lurgi', + 'lurgy', + 'lurks', + 'lurry', + 'lurve', + 'luser', + 'lushy', + 'lusks', + 'lusts', + 'lusus', + 'lutea', + 'luted', + 'luter', + 'lutes', + 'luvvy', + 'luxed', + 'luxer', + 'luxes', + 'lweis', + 'lyams', + 'lyard', + 'lyart', + 'lyase', + 'lycea', + 'lycee', + 'lycra', + 'lymes', + 'lynes', + 'lyres', + 'lysed', + 'lyses', + 'lysin', + 'lysis', + 'lysol', + 'lyssa', + 'lyted', + 'lytes', + 'lythe', + 'lytic', + 'lytta', + 'maaed', + 'maare', + 'maars', + 'mabes', + 'macas', + 'maced', + 'macer', + 'maces', + 'mache', + 'machi', + 'machs', + 'macks', + 'macle', + 'macon', + 'madge', + 'madid', + 'madre', + 'maerl', + 'mafic', + 'mages', + 'maggs', + 'magot', + 'magus', + 'mahoe', + 'mahua', + 'mahwa', + 'maids', + 'maiko', + 'maiks', + 'maile', + 'maill', + 'mails', + 'maims', + 'mains', + 'maire', + 'mairs', + 'maise', + 'maist', + 'makar', + 'makes', + 'makis', + 'makos', + 'malam', + 'malar', + 'malas', + 'malax', + 'males', + 'malic', + 'malik', + 'malis', + 'malls', + 'malms', + 'malmy', + 'malts', + 'malty', + 'malus', + 'malva', + 'malwa', + 'mamas', + 'mamba', + 'mamee', + 'mamey', + 'mamie', + 'manas', + 'manat', + 'mandi', + 'maneb', + 'maned', + 'maneh', + 'manes', + 'manet', + 'mangs', + 'manis', + 'manky', + 'manna', + 'manos', + 'manse', + 'manta', + 'manto', + 'manty', + 'manul', + 'manus', + 'mapau', + 'maqui', + 'marae', + 'marah', + 'maras', + 'marcs', + 'mardy', + 'mares', + 'marge', + 'margs', + 'maria', + 'marid', + 'marka', + 'marks', + 'marle', + 'marls', + 'marly', + 'marms', + 'maron', + 'maror', + 'marra', + 'marri', + 'marse', + 'marts', + 'marvy', + 'masas', + 'mased', + 'maser', + 'mases', + 'mashy', + 'masks', + 'massa', + 'massy', + 'masts', + 'masty', + 'masus', + 'matai', + 'mated', + 'mater', + 'mates', + 'maths', + 'matin', + 'matlo', + 'matte', + 'matts', + 'matza', + 'matzo', + 'mauby', + 'mauds', + 'mauls', + 'maund', + 'mauri', + 'mausy', + 'mauts', + 'mauzy', + 'maven', + 'mavie', + 'mavin', + 'mavis', + 'mawed', + 'mawks', + 'mawky', + 'mawns', + 'mawrs', + 'maxed', + 'maxes', + 'maxis', + 'mayan', + 'mayas', + 'mayed', + 'mayos', + 'mayst', + 'mazed', + 'mazer', + 'mazes', + 'mazey', + 'mazut', + 'mbira', + 'meads', + 'meals', + 'meane', + 'means', + 'meany', + 'meare', + 'mease', + 'meath', + 'meats', + 'mebos', + 'mechs', + 'mecks', + 'medii', + 'medle', + 'meeds', + 'meers', + 'meets', + 'meffs', + 'meins', + 'meint', + 'meiny', + 'meith', + 'mekka', + 'melas', + 'melba', + 'melds', + 'melic', + 'melik', + 'mells', + 'melts', + 'melty', + 'memes', + 'memos', + 'menad', + 'mends', + 'mened', + 'menes', + 'menge', + 'mengs', + 'mensa', + 'mense', + 'mensh', + 'menta', + 'mento', + 'menus', + 'meous', + 'meows', + 'merch', + 'mercs', + 'merde', + 'mered', + 'merel', + 'merer', + 'meres', + 'meril', + 'meris', + 'merks', + 'merle', + 'merls', + 'merse', + 'mesal', + 'mesas', + 'mesel', + 'meses', + 'meshy', + 'mesic', + 'mesne', + 'meson', + 'messy', + 'mesto', + 'meted', + 'metes', + 'metho', + 'meths', + 'metic', + 'metif', + 'metis', + 'metol', + 'metre', + 'meuse', + 'meved', + 'meves', + 'mewed', + 'mewls', + 'meynt', + 'mezes', + 'mezze', + 'mezzo', + 'mhorr', + 'miaou', + 'miaow', + 'miasm', + 'miaul', + 'micas', + 'miche', + 'micht', + 'micks', + 'micky', + 'micos', + 'micra', + 'middy', + 'midgy', + 'midis', + 'miens', + 'mieve', + 'miffs', + 'miffy', + 'mifty', + 'miggs', + 'mihas', + 'mihis', + 'miked', + 'mikes', + 'mikra', + 'mikva', + 'milch', + 'milds', + 'miler', + 'miles', + 'milfs', + 'milia', + 'milko', + 'milks', + 'mille', + 'mills', + 'milor', + 'milos', + 'milpa', + 'milts', + 'milty', + 'miltz', + 'mimed', + 'mimeo', + 'mimer', + 'mimes', + 'mimsy', + 'minae', + 'minar', + 'minas', + 'mincy', + 'minds', + 'mined', + 'mines', + 'minge', + 'mings', + 'mingy', + 'minis', + 'minke', + 'minks', + 'minny', + 'minos', + 'mints', + 'mired', + 'mires', + 'mirex', + 'mirid', + 'mirin', + 'mirks', + 'mirky', + 'mirly', + 'miros', + 'mirvs', + 'mirza', + 'misch', + 'misdo', + 'mises', + 'misgo', + 'misos', + 'missa', + 'mists', + 'misty', + 'mitch', + 'miter', + 'mites', + 'mitis', + 'mitre', + 'mitts', + 'mixed', + 'mixen', + 'mixer', + 'mixes', + 'mixte', + 'mixup', + 'mizen', + 'mizzy', + 'mneme', + 'moans', + 'moats', + 'mobby', + 'mobes', + 'mobey', + 'mobie', + 'moble', + 'mochi', + 'mochs', + 'mochy', + 'mocks', + 'moder', + 'modes', + 'modge', + 'modii', + 'modus', + 'moers', + 'mofos', + 'moggy', + 'mohel', + 'mohos', + 'mohrs', + 'mohua', + 'mohur', + 'moile', + 'moils', + 'moira', + 'moire', + 'moits', + 'mojos', + 'mokes', + 'mokis', + 'mokos', + 'molal', + 'molas', + 'molds', + 'moled', + 'moles', + 'molla', + 'molls', + 'molly', + 'molto', + 'molts', + 'molys', + 'momes', + 'momma', + 'mommy', + 'momus', + 'monad', + 'monal', + 'monas', + 'monde', + 'mondo', + 'moner', + 'mongo', + 'mongs', + 'monic', + 'monie', + 'monks', + 'monos', + 'monte', + 'monty', + 'moobs', + 'mooch', + 'moods', + 'mooed', + 'mooks', + 'moola', + 'mooli', + 'mools', + 'mooly', + 'moong', + 'moons', + 'moony', + 'moops', + 'moors', + 'moory', + 'moots', + 'moove', + 'moped', + 'moper', + 'mopes', + 'mopey', + 'moppy', + 'mopsy', + 'mopus', + 'morae', + 'moras', + 'morat', + 'moray', + 'morel', + 'mores', + 'moria', + 'morne', + 'morns', + 'morra', + 'morro', + 'morse', + 'morts', + 'mosed', + 'moses', + 'mosey', + 'mosks', + 'mosso', + 'moste', + 'mosts', + 'moted', + 'moten', + 'motes', + 'motet', + 'motey', + 'moths', + 'mothy', + 'motis', + 'motte', + 'motts', + 'motty', + 'motus', + 'motza', + 'mouch', + 'moues', + 'mould', + 'mouls', + 'moups', + 'moust', + 'mousy', + 'moved', + 'moves', + 'mowas', + 'mowed', + 'mowra', + 'moxas', + 'moxie', + 'moyas', + 'moyle', + 'moyls', + 'mozed', + 'mozes', + 'mozos', + 'mpret', + 'mucho', + 'mucic', + 'mucid', + 'mucin', + 'mucks', + 'mucor', + 'mucro', + 'mudge', + 'mudir', + 'mudra', + 'muffs', + 'mufti', + 'mugga', + 'muggs', + 'muggy', + 'muhly', + 'muids', + 'muils', + 'muirs', + 'muist', + 'mujik', + 'mulct', + 'muled', + 'mules', + 'muley', + 'mulga', + 'mulie', + 'mulla', + 'mulls', + 'mulse', + 'mulsh', + 'mumms', + 'mumps', + 'mumsy', + 'mumus', + 'munga', + 'munge', + 'mungo', + 'mungs', + 'munis', + 'munts', + 'muntu', + 'muons', + 'muras', + 'mured', + 'mures', + 'murex', + 'murid', + 'murks', + 'murls', + 'murly', + 'murra', + 'murre', + 'murri', + 'murrs', + 'murry', + 'murti', + 'murva', + 'musar', + 'musca', + 'mused', + 'muser', + 'muses', + 'muset', + 'musha', + 'musit', + 'musks', + 'musos', + 'musse', + 'mussy', + 'musth', + 'musts', + 'mutch', + 'muted', + 'muter', + 'mutes', + 'mutha', + 'mutis', + 'muton', + 'mutts', + 'muxed', + 'muxes', + 'muzak', + 'muzzy', + 'mvule', + 'myall', + 'mylar', + 'mynah', + 'mynas', + 'myoid', + 'myoma', + 'myope', + 'myops', + 'myopy', + 'mysid', + 'mythi', + 'myths', + 'mythy', + 'myxos', + 'mzees', + 'naams', + 'naans', + 'nabes', + 'nabis', + 'nabks', + 'nabla', + 'nabob', + 'nache', + 'nacho', + 'nacre', + 'nadas', + 'naeve', + 'naevi', + 'naffs', + 'nagas', + 'naggy', + 'nagor', + 'nahal', + 'naiad', + 'naifs', + 'naiks', + 'nails', + 'naira', + 'nairu', + 'naked', + 'naker', + 'nakfa', + 'nalas', + 'naled', + 'nalla', + 'named', + 'namer', + 'names', + 'namma', + 'namus', + 'nanas', + 'nance', + 'nancy', + 'nandu', + 'nanna', + 'nanos', + 'nanua', + 'napas', + 'naped', + 'napes', + 'napoo', + 'nappa', + 'nappe', + 'nappy', + 'naras', + 'narco', + 'narcs', + 'nards', + 'nares', + 'naric', + 'naris', + 'narks', + 'narky', + 'narre', + 'nashi', + 'natch', + 'nates', + 'natis', + 'natty', + 'nauch', + 'naunt', + 'navar', + 'naves', + 'navew', + 'navvy', + 'nawab', + 'nazes', + 'nazir', + 'nazis', + 'nduja', + 'neafe', + 'neals', + 'neaps', + 'nears', + 'neath', + 'neats', + 'nebek', + 'nebel', + 'necks', + 'neddy', + 'needs', + 'neeld', + 'neele', + 'neemb', + 'neems', + 'neeps', + 'neese', + 'neeze', + 'negro', + 'negus', + 'neifs', + 'neist', + 'neive', + 'nelis', + 'nelly', + 'nemas', + 'nemns', + 'nempt', + 'nenes', + 'neons', + 'neper', + 'nepit', + 'neral', + 'nerds', + 'nerka', + 'nerks', + 'nerol', + 'nerts', + 'nertz', + 'nervy', + 'nests', + 'netes', + 'netop', + 'netts', + 'netty', + 'neuks', + 'neume', + 'neums', + 'nevel', + 'neves', + 'nevus', + 'newbs', + 'newed', + 'newel', + 'newie', + 'newsy', + 'newts', + 'nexts', + 'nexus', + 'ngaio', + 'ngana', + 'ngati', + 'ngoma', + 'ngwee', + 'nicad', + 'nicht', + 'nicks', + 'nicol', + 'nidal', + 'nided', + 'nides', + 'nidor', + 'nidus', + 'niefs', + 'nieve', + 'nifes', + 'niffs', + 'niffy', + 'nifty', + 'niger', + 'nighs', + 'nihil', + 'nikab', + 'nikah', + 'nikau', + 'nills', + 'nimbi', + 'nimbs', + 'nimps', + 'niner', + 'nines', + 'ninon', + 'nipas', + 'nippy', + 'niqab', + 'nirls', + 'nirly', + 'nisei', + 'nisse', + 'nisus', + 'niter', + 'nites', + 'nitid', + 'niton', + 'nitre', + 'nitro', + 'nitry', + 'nitty', + 'nival', + 'nixed', + 'nixer', + 'nixes', + 'nixie', + 'nizam', + 'nkosi', + 'noahs', + 'nobby', + 'nocks', + 'nodal', + 'noddy', + 'nodes', + 'nodus', + 'noels', + 'noggs', + 'nohow', + 'noils', + 'noily', + 'noint', + 'noirs', + 'noles', + 'nolls', + 'nolos', + 'nomas', + 'nomen', + 'nomes', + 'nomic', + 'nomoi', + 'nomos', + 'nonas', + 'nonce', + 'nones', + 'nonet', + 'nongs', + 'nonis', + 'nonny', + 'nonyl', + 'noobs', + 'nooit', + 'nooks', + 'nooky', + 'noons', + 'noops', + 'nopal', + 'noria', + 'noris', + 'norks', + 'norma', + 'norms', + 'nosed', + 'noser', + 'noses', + 'notal', + 'noted', + 'noter', + 'notes', + 'notum', + 'nould', + 'noule', + 'nouls', + 'nouns', + 'nouny', + 'noups', + 'novae', + 'novas', + 'novum', + 'noway', + 'nowed', + 'nowls', + 'nowts', + 'nowty', + 'noxal', + 'noxes', + 'noyau', + 'noyed', + 'noyes', + 'nubby', + 'nubia', + 'nucha', + 'nuddy', + 'nuder', + 'nudes', + 'nudie', + 'nudzh', + 'nuffs', + 'nugae', + 'nuked', + 'nukes', + 'nulla', + 'nulls', + 'numbs', + 'numen', + 'nummy', + 'nunny', + 'nurds', + 'nurdy', + 'nurls', + 'nurrs', + 'nutso', + 'nutsy', + 'nyaff', + 'nyala', + 'nying', + 'nyssa', + 'oaked', + 'oaker', + 'oakum', + 'oared', + 'oases', + 'oasis', + 'oasts', + 'oaten', + 'oater', + 'oaths', + 'oaves', + 'obang', + 'obeah', + 'obeli', + 'obeys', + 'obias', + 'obied', + 'obiit', + 'obits', + 'objet', + 'oboes', + 'obole', + 'oboli', + 'obols', + 'occam', + 'ocher', + 'oches', + 'ochre', + 'ochry', + 'ocker', + 'ocrea', + 'octad', + 'octan', + 'octas', + 'octyl', + 'oculi', + 'odahs', + 'odals', + 'odeon', + 'odeum', + 'odism', + 'odist', + 'odium', + 'odors', + 'odour', + 'odyle', + 'odyls', + 'ofays', + 'offed', + 'offie', + 'oflag', + 'ofter', + 'ogams', + 'ogeed', + 'ogees', + 'oggin', + 'ogham', + 'ogive', + 'ogled', + 'ogler', + 'ogles', + 'ogmic', + 'ogres', + 'ohias', + 'ohing', + 'ohmic', + 'ohone', + 'oidia', + 'oiled', + 'oiler', + 'oinks', + 'oints', + 'ojime', + 'okapi', + 'okays', + 'okehs', + 'okras', + 'oktas', + 'oldie', + 'oleic', + 'olein', + 'olent', + 'oleos', + 'oleum', + 'olios', + 'ollas', + 'ollav', + 'oller', + 'ollie', + 'ology', + 'olpae', + 'olpes', + 'omasa', + 'omber', + 'ombus', + 'omens', + 'omers', + 'omits', + 'omlah', + 'omovs', + 'omrah', + 'oncer', + 'onces', + 'oncet', + 'oncus', + 'onely', + 'oners', + 'onery', + 'onium', + 'onkus', + 'onlay', + 'onned', + 'ontic', + 'oobit', + 'oohed', + 'oomph', + 'oonts', + 'ooped', + 'oorie', + 'ooses', + 'ootid', + 'oozed', + 'oozes', + 'opahs', + 'opals', + 'opens', + 'opepe', + 'oping', + 'oppos', + 'opsin', + 'opted', + 'opter', + 'orach', + 'oracy', + 'orals', + 'orang', + 'orant', + 'orate', + 'orbed', + 'orcas', + 'orcin', + 'ordos', + 'oread', + 'orfes', + 'orgia', + 'orgic', + 'orgue', + 'oribi', + 'oriel', + 'orixa', + 'orles', + 'orlon', + 'orlop', + 'ormer', + 'ornis', + 'orpin', + 'orris', + 'ortho', + 'orval', + 'orzos', + 'oscar', + 'oshac', + 'osier', + 'osmic', + 'osmol', + 'ossia', + 'ostia', + 'otaku', + 'otary', + 'ottar', + 'ottos', + 'oubit', + 'oucht', + 'ouens', + 'ouija', + 'oulks', + 'oumas', + 'oundy', + 'oupas', + 'ouped', + 'ouphe', + 'ouphs', + 'ourie', + 'ousel', + 'ousts', + 'outby', + 'outed', + 'outre', + 'outro', + 'outta', + 'ouzel', + 'ouzos', + 'ovals', + 'ovels', + 'ovens', + 'overs', + 'ovist', + 'ovoli', + 'ovolo', + 'ovule', + 'owche', + 'owies', + 'owled', + 'owler', + 'owlet', + 'owned', + 'owres', + 'owrie', + 'owsen', + 'oxbow', + 'oxers', + 'oxeye', + 'oxids', + 'oxies', + 'oxime', + 'oxims', + 'oxlip', + 'oxter', + 'oyers', + 'ozeki', + 'ozzie', + 'paals', + 'paans', + 'pacas', + 'paced', + 'pacer', + 'paces', + 'pacey', + 'pacha', + 'packs', + 'pacos', + 'pacta', + 'pacts', + 'padis', + 'padle', + 'padma', + 'padre', + 'padri', + 'paean', + 'paedo', + 'paeon', + 'paged', + 'pager', + 'pages', + 'pagle', + 'pagod', + 'pagri', + 'paiks', + 'pails', + 'pains', + 'paire', + 'pairs', + 'paisa', + 'paise', + 'pakka', + 'palas', + 'palay', + 'palea', + 'paled', + 'pales', + 'palet', + 'palis', + 'palki', + 'palla', + 'palls', + 'pally', + 'palms', + 'palmy', + 'palpi', + 'palps', + 'palsa', + 'pampa', + 'panax', + 'pance', + 'panda', + 'pands', + 'pandy', + 'paned', + 'panes', + 'panga', + 'pangs', + 'panim', + 'panko', + 'panne', + 'panni', + 'panto', + 'pants', + 'panty', + 'paoli', + 'paolo', + 'papas', + 'papaw', + 'papes', + 'pappi', + 'pappy', + 'parae', + 'paras', + 'parch', + 'pardi', + 'pards', + 'pardy', + 'pared', + 'paren', + 'pareo', + 'pares', + 'pareu', + 'parev', + 'parge', + 'pargo', + 'paris', + 'parki', + 'parks', + 'parky', + 'parle', + 'parly', + 'parma', + 'parol', + 'parps', + 'parra', + 'parrs', + 'parti', + 'parts', + 'parve', + 'parvo', + 'paseo', + 'pases', + 'pasha', + 'pashm', + 'paska', + 'paspy', + 'passe', + 'pasts', + 'pated', + 'paten', + 'pater', + 'pates', + 'paths', + 'patin', + 'patka', + 'patly', + 'patte', + 'patus', + 'pauas', + 'pauls', + 'pavan', + 'paved', + 'paven', + 'paver', + 'paves', + 'pavid', + 'pavin', + 'pavis', + 'pawas', + 'pawaw', + 'pawed', + 'pawer', + 'pawks', + 'pawky', + 'pawls', + 'pawns', + 'paxes', + 'payed', + 'payor', + 'paysd', + 'peage', + 'peags', + 'peaks', + 'peaky', + 'peals', + 'peans', + 'peare', + 'pears', + 'peart', + 'pease', + 'peats', + 'peaty', + 'peavy', + 'peaze', + 'pebas', + 'pechs', + 'pecke', + 'pecks', + 'pecky', + 'pedes', + 'pedis', + 'pedro', + 'peece', + 'peeks', + 'peels', + 'peens', + 'peeoy', + 'peepe', + 'peeps', + 'peers', + 'peery', + 'peeve', + 'peggy', + 'peghs', + 'peins', + 'peise', + 'peize', + 'pekan', + 'pekes', + 'pekin', + 'pekoe', + 'pelas', + 'pelau', + 'peles', + 'pelfs', + 'pells', + 'pelma', + 'pelon', + 'pelta', + 'pelts', + 'pends', + 'pendu', + 'pened', + 'penes', + 'pengo', + 'penie', + 'penis', + 'penks', + 'penna', + 'penni', + 'pents', + 'peons', + 'peony', + 'pepla', + 'pepos', + 'peppy', + 'pepsi', + 'perai', + 'perce', + 'percs', + 'perdu', + 'perdy', + 'perea', + 'peres', + 'peris', + 'perks', + 'perms', + 'perns', + 'perog', + 'perps', + 'perry', + 'perse', + 'perst', + 'perts', + 'perve', + 'pervo', + 'pervs', + 'pervy', + 'pesos', + 'pests', + 'pesty', + 'petar', + 'peter', + 'petit', + 'petre', + 'petri', + 'petti', + 'petto', + 'pewee', + 'pewit', + 'peyse', + 'phage', + 'phang', + 'phare', + 'pharm', + 'pheer', + 'phene', + 'pheon', + 'phese', + 'phial', + 'phish', + 'phizz', + 'phlox', + 'phoca', + 'phono', + 'phons', + 'phots', + 'phpht', + 'phuts', + 'phyla', + 'phyle', + 'piani', + 'pians', + 'pibal', + 'pical', + 'picas', + 'piccy', + 'picks', + 'picot', + 'picra', + 'picul', + 'piend', + 'piers', + 'piert', + 'pieta', + 'piets', + 'piezo', + 'pight', + 'pigmy', + 'piing', + 'pikas', + 'pikau', + 'piked', + 'piker', + 'pikes', + 'pikey', + 'pikis', + 'pikul', + 'pilae', + 'pilaf', + 'pilao', + 'pilar', + 'pilau', + 'pilaw', + 'pilch', + 'pilea', + 'piled', + 'pilei', + 'piler', + 'piles', + 'pilis', + 'pills', + 'pilow', + 'pilum', + 'pilus', + 'pimas', + 'pimps', + 'pinas', + 'pined', + 'pines', + 'pingo', + 'pings', + 'pinko', + 'pinks', + 'pinna', + 'pinny', + 'pinon', + 'pinot', + 'pinta', + 'pints', + 'pinup', + 'pions', + 'piony', + 'pious', + 'pioye', + 'pioys', + 'pipal', + 'pipas', + 'piped', + 'pipes', + 'pipet', + 'pipis', + 'pipit', + 'pippy', + 'pipul', + 'pirai', + 'pirls', + 'pirns', + 'pirog', + 'pisco', + 'pises', + 'pisky', + 'pisos', + 'pissy', + 'piste', + 'pitas', + 'piths', + 'piton', + 'pitot', + 'pitta', + 'piums', + 'pixes', + 'pized', + 'pizes', + 'plaas', + 'plack', + 'plage', + 'plans', + 'plaps', + 'plash', + 'plasm', + 'plast', + 'plats', + 'platt', + 'platy', + 'playa', + 'plays', + 'pleas', + 'plebe', + 'plebs', + 'plena', + 'pleon', + 'plesh', + 'plews', + 'plica', + 'plies', + 'plims', + 'pling', + 'plink', + 'ploat', + 'plods', + 'plong', + 'plonk', + 'plook', + 'plops', + 'plots', + 'plotz', + 'plouk', + 'plows', + 'ploye', + 'ploys', + 'plues', + 'pluff', + 'plugs', + 'plums', + 'plumy', + 'pluot', + 'pluto', + 'plyer', + 'poach', + 'poaka', + 'poake', + 'poboy', + 'pocks', + 'pocky', + 'podal', + 'poddy', + 'podex', + 'podge', + 'podgy', + 'podia', + 'poems', + 'poeps', + 'poets', + 'pogey', + 'pogge', + 'pogos', + 'pohed', + 'poilu', + 'poind', + 'pokal', + 'poked', + 'pokes', + 'pokey', + 'pokie', + 'poled', + 'poler', + 'poles', + 'poley', + 'polio', + 'polis', + 'polje', + 'polks', + 'polls', + 'polly', + 'polos', + 'polts', + 'polys', + 'pombe', + 'pomes', + 'pommy', + 'pomos', + 'pomps', + 'ponce', + 'poncy', + 'ponds', + 'pones', + 'poney', + 'ponga', + 'pongo', + 'pongs', + 'pongy', + 'ponks', + 'ponts', + 'ponty', + 'ponzu', + 'poods', + 'pooed', + 'poofs', + 'poofy', + 'poohs', + 'pooja', + 'pooka', + 'pooks', + 'pools', + 'poons', + 'poops', + 'poopy', + 'poori', + 'poort', + 'poots', + 'poove', + 'poovy', + 'popes', + 'poppa', + 'popsy', + 'porae', + 'poral', + 'pored', + 'porer', + 'pores', + 'porge', + 'porgy', + 'porin', + 'porks', + 'porky', + 'porno', + 'porns', + 'porny', + 'porta', + 'ports', + 'porty', + 'posed', + 'poses', + 'posey', + 'posho', + 'posts', + 'potae', + 'potch', + 'poted', + 'potes', + 'potin', + 'potoo', + 'potsy', + 'potto', + 'potts', + 'potty', + 'pouff', + 'poufs', + 'pouke', + 'pouks', + 'poule', + 'poulp', + 'poult', + 'poupe', + 'poupt', + 'pours', + 'pouts', + 'powan', + 'powin', + 'pownd', + 'powns', + 'powny', + 'powre', + 'poxed', + 'poxes', + 'poynt', + 'poyou', + 'poyse', + 'pozzy', + 'praam', + 'prads', + 'prahu', + 'prams', + 'prana', + 'prang', + 'praos', + 'prase', + 'prate', + 'prats', + 'pratt', + 'praty', + 'praus', + 'prays', + 'predy', + 'preed', + 'prees', + 'preif', + 'prems', + 'premy', + 'prent', + 'preon', + 'preop', + 'preps', + 'presa', + 'prese', + 'prest', + 'preve', + 'prexy', + 'preys', + 'prial', + 'pricy', + 'prief', + 'prier', + 'pries', + 'prigs', + 'prill', + 'prima', + 'primi', + 'primp', + 'prims', + 'primy', + 'prink', + 'prion', + 'prise', + 'priss', + 'proas', + 'probs', + 'prods', + 'proem', + 'profs', + 'progs', + 'proin', + 'proke', + 'prole', + 'proll', + 'promo', + 'proms', + 'pronk', + 'props', + 'prore', + 'proso', + 'pross', + 'prost', + 'prosy', + 'proto', + 'proul', + 'prows', + 'proyn', + 'prunt', + 'pruta', + 'pryer', + 'pryse', + 'pseud', + 'pshaw', + 'psion', + 'psoae', + 'psoai', + 'psoas', + 'psora', + 'psych', + 'psyop', + 'pubco', + 'pubes', + 'pubis', + 'pucan', + 'pucer', + 'puces', + 'pucka', + 'pucks', + 'puddy', + 'pudge', + 'pudic', + 'pudor', + 'pudsy', + 'pudus', + 'puers', + 'puffa', + 'puffs', + 'puggy', + 'pugil', + 'puhas', + 'pujah', + 'pujas', + 'pukas', + 'puked', + 'puker', + 'pukes', + 'pukey', + 'pukka', + 'pukus', + 'pulao', + 'pulas', + 'puled', + 'puler', + 'pules', + 'pulik', + 'pulis', + 'pulka', + 'pulks', + 'pulli', + 'pulls', + 'pully', + 'pulmo', + 'pulps', + 'pulus', + 'pumas', + 'pumie', + 'pumps', + 'punas', + 'punce', + 'punga', + 'pungs', + 'punji', + 'punka', + 'punks', + 'punky', + 'punny', + 'punto', + 'punts', + 'punty', + 'pupae', + 'pupas', + 'pupus', + 'purda', + 'pured', + 'pures', + 'purin', + 'puris', + 'purls', + 'purpy', + 'purrs', + 'pursy', + 'purty', + 'puses', + 'pusle', + 'pussy', + 'putid', + 'puton', + 'putti', + 'putto', + 'putts', + 'puzel', + 'pwned', + 'pyats', + 'pyets', + 'pygal', + 'pyins', + 'pylon', + 'pyned', + 'pynes', + 'pyoid', + 'pyots', + 'pyral', + 'pyran', + 'pyres', + 'pyrex', + 'pyric', + 'pyros', + 'pyxed', + 'pyxes', + 'pyxie', + 'pyxis', + 'pzazz', + 'qadis', + 'qaids', + 'qajaq', + 'qanat', + 'qapik', + 'qibla', + 'qophs', + 'qorma', + 'quads', + 'quaff', + 'quags', + 'quair', + 'quais', + 'quaky', + 'quale', + 'quant', + 'quare', + 'quass', + 'quate', + 'quats', + 'quayd', + 'quays', + 'qubit', + 'quean', + 'queme', + 'quena', + 'quern', + 'queyn', + 'queys', + 'quich', + 'quids', + 'quiff', + 'quims', + 'quina', + 'quine', + 'quino', + 'quins', + 'quint', + 'quipo', + 'quips', + 'quipu', + 'quire', + 'quirt', + 'quist', + 'quits', + 'quoad', + 'quods', + 'quoif', + 'quoin', + 'quoit', + 'quoll', + 'quonk', + 'quops', + 'qursh', + 'quyte', + 'rabat', + 'rabic', + 'rabis', + 'raced', + 'races', + 'rache', + 'racks', + 'racon', + 'radge', + 'radix', + 'radon', + 'raffs', + 'rafts', + 'ragas', + 'ragde', + 'raged', + 'ragee', + 'rager', + 'rages', + 'ragga', + 'raggs', + 'raggy', + 'ragis', + 'ragus', + 'rahed', + 'rahui', + 'raias', + 'raids', + 'raiks', + 'raile', + 'rails', + 'raine', + 'rains', + 'raird', + 'raita', + 'raits', + 'rajas', + 'rajes', + 'raked', + 'rakee', + 'raker', + 'rakes', + 'rakia', + 'rakis', + 'rakus', + 'rales', + 'ramal', + 'ramee', + 'ramet', + 'ramie', + 'ramin', + 'ramis', + 'rammy', + 'ramps', + 'ramus', + 'ranas', + 'rance', + 'rands', + 'ranee', + 'ranga', + 'rangi', + 'rangs', + 'rangy', + 'ranid', + 'ranis', + 'ranke', + 'ranks', + 'rants', + 'raped', + 'raper', + 'rapes', + 'raphe', + 'rappe', + 'rared', + 'raree', + 'rares', + 'rarks', + 'rased', + 'raser', + 'rases', + 'rasps', + 'rasse', + 'rasta', + 'ratal', + 'ratan', + 'ratas', + 'ratch', + 'rated', + 'ratel', + 'rater', + 'rates', + 'ratha', + 'rathe', + 'raths', + 'ratoo', + 'ratos', + 'ratus', + 'rauns', + 'raupo', + 'raved', + 'ravel', + 'raver', + 'raves', + 'ravey', + 'ravin', + 'rawer', + 'rawin', + 'rawly', + 'rawns', + 'raxed', + 'raxes', + 'rayah', + 'rayas', + 'rayed', + 'rayle', + 'rayne', + 'razed', + 'razee', + 'razer', + 'razes', + 'razoo', + 'readd', + 'reads', + 'reais', + 'reaks', + 'realo', + 'reals', + 'reame', + 'reams', + 'reamy', + 'reans', + 'reaps', + 'rears', + 'reast', + 'reata', + 'reate', + 'reave', + 'rebbe', + 'rebec', + 'rebid', + 'rebit', + 'rebop', + 'rebuy', + 'recal', + 'recce', + 'recco', + 'reccy', + 'recit', + 'recks', + 'recon', + 'recta', + 'recti', + 'recto', + 'redan', + 'redds', + 'reddy', + 'reded', + 'redes', + 'redia', + 'redid', + 'redip', + 'redly', + 'redon', + 'redos', + 'redox', + 'redry', + 'redub', + 'redux', + 'redye', + 'reech', + 'reede', + 'reeds', + 'reefs', + 'reefy', + 'reeks', + 'reeky', + 'reels', + 'reens', + 'reest', + 'reeve', + 'refed', + 'refel', + 'reffo', + 'refis', + 'refix', + 'refly', + 'refry', + 'regar', + 'reges', + 'reggo', + 'regie', + 'regma', + 'regna', + 'regos', + 'regur', + 'rehem', + 'reifs', + 'reify', + 'reiki', + 'reiks', + 'reink', + 'reins', + 'reird', + 'reist', + 'reive', + 'rejig', + 'rejon', + 'reked', + 'rekes', + 'rekey', + 'relet', + 'relie', + 'relit', + 'rello', + 'reman', + 'remap', + 'remen', + 'remet', + 'remex', + 'remix', + 'renay', + 'rends', + 'reney', + 'renga', + 'renig', + 'renin', + 'renne', + 'renos', + 'rente', + 'rents', + 'reoil', + 'reorg', + 'repeg', + 'repin', + 'repla', + 'repos', + 'repot', + 'repps', + 'repro', + 'reran', + 'rerig', + 'resat', + 'resaw', + 'resay', + 'resee', + 'reses', + 'resew', + 'resid', + 'resit', + 'resod', + 'resow', + 'resto', + 'rests', + 'resty', + 'resus', + 'retag', + 'retax', + 'retem', + 'retia', + 'retie', + 'retox', + 'revet', + 'revie', + 'rewan', + 'rewax', + 'rewed', + 'rewet', + 'rewin', + 'rewon', + 'rewth', + 'rexes', + 'rezes', + 'rheas', + 'rheme', + 'rheum', + 'rhies', + 'rhime', + 'rhine', + 'rhody', + 'rhomb', + 'rhone', + 'rhumb', + 'rhyne', + 'rhyta', + 'riads', + 'rials', + 'riant', + 'riata', + 'ribas', + 'ribby', + 'ribes', + 'riced', + 'ricer', + 'rices', + 'ricey', + 'richt', + 'ricin', + 'ricks', + 'rides', + 'ridgy', + 'ridic', + 'riels', + 'riems', + 'rieve', + 'rifer', + 'riffs', + 'rifte', + 'rifts', + 'rifty', + 'riggs', + 'rigol', + 'riled', + 'riles', + 'riley', + 'rille', + 'rills', + 'rimae', + 'rimed', + 'rimer', + 'rimes', + 'rimus', + 'rinds', + 'rindy', + 'rines', + 'rings', + 'rinks', + 'rioja', + 'riots', + 'riped', + 'ripes', + 'ripps', + 'rises', + 'rishi', + 'risks', + 'risps', + 'risus', + 'rites', + 'ritts', + 'ritzy', + 'rivas', + 'rived', + 'rivel', + 'riven', + 'rives', + 'riyal', + 'rizas', + 'roads', + 'roams', + 'roans', + 'roars', + 'roary', + 'roate', + 'robed', + 'robes', + 'roble', + 'rocks', + 'roded', + 'rodes', + 'roguy', + 'rohes', + 'roids', + 'roils', + 'roily', + 'roins', + 'roist', + 'rojak', + 'rojis', + 'roked', + 'roker', + 'rokes', + 'rolag', + 'roles', + 'rolfs', + 'rolls', + 'romal', + 'roman', + 'romeo', + 'romps', + 'ronde', + 'rondo', + 'roneo', + 'rones', + 'ronin', + 'ronne', + 'ronte', + 'ronts', + 'roods', + 'roofs', + 'roofy', + 'rooks', + 'rooky', + 'rooms', + 'roons', + 'roops', + 'roopy', + 'roosa', + 'roose', + 'roots', + 'rooty', + 'roped', + 'roper', + 'ropes', + 'ropey', + 'roque', + 'roral', + 'rores', + 'roric', + 'rorid', + 'rorie', + 'rorts', + 'rorty', + 'rosed', + 'roses', + 'roset', + 'roshi', + 'rosin', + 'rosit', + 'rosti', + 'rosts', + 'rotal', + 'rotan', + 'rotas', + 'rotch', + 'roted', + 'rotes', + 'rotis', + 'rotls', + 'roton', + 'rotos', + 'rotte', + 'rouen', + 'roues', + 'roule', + 'rouls', + 'roums', + 'roups', + 'roupy', + 'roust', + 'routh', + 'routs', + 'roved', + 'roven', + 'roves', + 'rowan', + 'rowed', + 'rowel', + 'rowen', + 'rowie', + 'rowme', + 'rownd', + 'rowth', + 'rowts', + 'royne', + 'royst', + 'rozet', + 'rozit', + 'ruana', + 'rubai', + 'rubby', + 'rubel', + 'rubes', + 'rubin', + 'ruble', + 'rubli', + 'rubus', + 'ruche', + 'rucks', + 'rudas', + 'rudds', + 'rudes', + 'rudie', + 'rudis', + 'rueda', + 'ruers', + 'ruffe', + 'ruffs', + 'rugae', + 'rugal', + 'ruggy', + 'ruing', + 'ruins', + 'rukhs', + 'ruled', + 'rules', + 'rumal', + 'rumbo', + 'rumen', + 'rumes', + 'rumly', + 'rummy', + 'rumpo', + 'rumps', + 'rumpy', + 'runch', + 'runds', + 'runed', + 'runes', + 'rungs', + 'runic', + 'runny', + 'runts', + 'runty', + 'rupia', + 'rurps', + 'rurus', + 'rusas', + 'ruses', + 'rushy', + 'rusks', + 'rusma', + 'russe', + 'rusts', + 'ruths', + 'rutin', + 'rutty', + 'ryals', + 'rybat', + 'ryked', + 'rykes', + 'rymme', + 'rynds', + 'ryots', + 'ryper', + 'saags', + 'sabal', + 'sabed', + 'saber', + 'sabes', + 'sabha', + 'sabin', + 'sabir', + 'sable', + 'sabot', + 'sabra', + 'sabre', + 'sacks', + 'sacra', + 'saddo', + 'sades', + 'sadhe', + 'sadhu', + 'sadis', + 'sados', + 'sadza', + 'safed', + 'safes', + 'sagas', + 'sager', + 'sages', + 'saggy', + 'sagos', + 'sagum', + 'saheb', + 'sahib', + 'saice', + 'saick', + 'saics', + 'saids', + 'saiga', + 'sails', + 'saims', + 'saine', + 'sains', + 'sairs', + 'saist', + 'saith', + 'sajou', + 'sakai', + 'saker', + 'sakes', + 'sakia', + 'sakis', + 'sakti', + 'salal', + 'salat', + 'salep', + 'sales', + 'salet', + 'salic', + 'salix', + 'salle', + 'salmi', + 'salol', + 'salop', + 'salpa', + 'salps', + 'salse', + 'salto', + 'salts', + 'salue', + 'salut', + 'saman', + 'samas', + 'samba', + 'sambo', + 'samek', + 'samel', + 'samen', + 'sames', + 'samey', + 'samfu', + 'sammy', + 'sampi', + 'samps', + 'sands', + 'saned', + 'sanes', + 'sanga', + 'sangh', + 'sango', + 'sangs', + 'sanko', + 'sansa', + 'santo', + 'sants', + 'saola', + 'sapan', + 'sapid', + 'sapor', + 'saran', + 'sards', + 'sared', + 'saree', + 'sarge', + 'sargo', + 'sarin', + 'saris', + 'sarks', + 'sarky', + 'sarod', + 'saros', + 'sarus', + 'saser', + 'sasin', + 'sasse', + 'satai', + 'satay', + 'sated', + 'satem', + 'sates', + 'satis', + 'sauba', + 'sauch', + 'saugh', + 'sauls', + 'sault', + 'saunt', + 'saury', + 'sauts', + 'saved', + 'saver', + 'saves', + 'savey', + 'savin', + 'sawah', + 'sawed', + 'sawer', + 'saxes', + 'sayed', + 'sayer', + 'sayid', + 'sayne', + 'sayon', + 'sayst', + 'sazes', + 'scabs', + 'scads', + 'scaff', + 'scags', + 'scail', + 'scala', + 'scall', + 'scams', + 'scand', + 'scans', + 'scapa', + 'scape', + 'scapi', + 'scarp', + 'scars', + 'scart', + 'scath', + 'scats', + 'scatt', + 'scaud', + 'scaup', + 'scaur', + 'scaws', + 'sceat', + 'scena', + 'scend', + 'schav', + 'schmo', + 'schul', + 'schwa', + 'sclim', + 'scody', + 'scogs', + 'scoog', + 'scoot', + 'scopa', + 'scops', + 'scots', + 'scoug', + 'scoup', + 'scowp', + 'scows', + 'scrab', + 'scrae', + 'scrag', + 'scran', + 'scrat', + 'scraw', + 'scray', + 'scrim', + 'scrip', + 'scrob', + 'scrod', + 'scrog', + 'scrow', + 'scudi', + 'scudo', + 'scuds', + 'scuff', + 'scuft', + 'scugs', + 'sculk', + 'scull', + 'sculp', + 'sculs', + 'scums', + 'scups', + 'scurf', + 'scurs', + 'scuse', + 'scuta', + 'scute', + 'scuts', + 'scuzz', + 'scyes', + 'sdayn', + 'sdein', + 'seals', + 'seame', + 'seams', + 'seamy', + 'seans', + 'seare', + 'sears', + 'sease', + 'seats', + 'seaze', + 'sebum', + 'secco', + 'sechs', + 'sects', + 'seder', + 'sedes', + 'sedge', + 'sedgy', + 'sedum', + 'seeds', + 'seeks', + 'seeld', + 'seels', + 'seely', + 'seems', + 'seeps', + 'seepy', + 'seers', + 'sefer', + 'segar', + 'segni', + 'segno', + 'segol', + 'segos', + 'sehri', + 'seifs', + 'seils', + 'seine', + 'seirs', + 'seise', + 'seism', + 'seity', + 'seiza', + 'sekos', + 'sekts', + 'selah', + 'seles', + 'selfs', + 'sella', + 'selle', + 'sells', + 'selva', + 'semee', + 'semes', + 'semie', + 'semis', + 'senas', + 'sends', + 'senes', + 'sengi', + 'senna', + 'senor', + 'sensa', + 'sensi', + 'sente', + 'senti', + 'sents', + 'senvy', + 'senza', + 'sepad', + 'sepal', + 'sepic', + 'sepoy', + 'septa', + 'septs', + 'serac', + 'serai', + 'seral', + 'sered', + 'serer', + 'seres', + 'serfs', + 'serge', + 'seric', + 'serin', + 'serks', + 'seron', + 'serow', + 'serra', + 'serre', + 'serrs', + 'serry', + 'servo', + 'sesey', + 'sessa', + 'setae', + 'setal', + 'seton', + 'setts', + 'sewan', + 'sewar', + 'sewed', + 'sewel', + 'sewen', + 'sewin', + 'sexed', + 'sexer', + 'sexes', + 'sexto', + 'sexts', + 'seyen', + 'shads', + 'shags', + 'shahs', + 'shako', + 'shakt', + 'shalm', + 'shaly', + 'shama', + 'shams', + 'shand', + 'shans', + 'shaps', + 'sharn', + 'shash', + 'shaul', + 'shawm', + 'shawn', + 'shaws', + 'shaya', + 'shays', + 'shchi', + 'sheaf', + 'sheal', + 'sheas', + 'sheds', + 'sheel', + 'shend', + 'shent', + 'sheol', + 'sherd', + 'shere', + 'shero', + 'shets', + 'sheva', + 'shewn', + 'shews', + 'shiai', + 'shiel', + 'shier', + 'shies', + 'shill', + 'shily', + 'shims', + 'shins', + 'ships', + 'shirr', + 'shirs', + 'shish', + 'shiso', + 'shist', + 'shite', + 'shits', + 'shiur', + 'shiva', + 'shive', + 'shivs', + 'shlep', + 'shlub', + 'shmek', + 'shmoe', + 'shoat', + 'shoed', + 'shoer', + 'shoes', + 'shogi', + 'shogs', + 'shoji', + 'shojo', + 'shola', + 'shool', + 'shoon', + 'shoos', + 'shope', + 'shops', + 'shorl', + 'shote', + 'shots', + 'shott', + 'showd', + 'shows', + 'shoyu', + 'shred', + 'shris', + 'shrow', + 'shtik', + 'shtum', + 'shtup', + 'shule', + 'shuln', + 'shuls', + 'shuns', + 'shura', + 'shute', + 'shuts', + 'shwas', + 'shyer', + 'sials', + 'sibbs', + 'sibyl', + 'sices', + 'sicht', + 'sicko', + 'sicks', + 'sicky', + 'sidas', + 'sided', + 'sider', + 'sides', + 'sidha', + 'sidhe', + 'sidle', + 'sield', + 'siens', + 'sient', + 'sieth', + 'sieur', + 'sifts', + 'sighs', + 'sigil', + 'sigla', + 'signa', + 'signs', + 'sijos', + 'sikas', + 'siker', + 'sikes', + 'silds', + 'siled', + 'silen', + 'siler', + 'siles', + 'silex', + 'silks', + 'sills', + 'silos', + 'silts', + 'silty', + 'silva', + 'simar', + 'simas', + 'simba', + 'simis', + 'simps', + 'simul', + 'sinds', + 'sined', + 'sines', + 'sings', + 'sinhs', + 'sinks', + 'sinky', + 'sinus', + 'siped', + 'sipes', + 'sippy', + 'sired', + 'siree', + 'sires', + 'sirih', + 'siris', + 'siroc', + 'sirra', + 'sirup', + 'sisal', + 'sises', + 'sista', + 'sists', + 'sitar', + 'sited', + 'sites', + 'sithe', + 'sitka', + 'situp', + 'situs', + 'siver', + 'sixer', + 'sixes', + 'sixmo', + 'sixte', + 'sizar', + 'sized', + 'sizel', + 'sizer', + 'sizes', + 'skags', + 'skail', + 'skald', + 'skank', + 'skart', + 'skats', + 'skatt', + 'skaws', + 'skean', + 'skear', + 'skeds', + 'skeed', + 'skeef', + 'skeen', + 'skeer', + 'skees', + 'skeet', + 'skegg', + 'skegs', + 'skein', + 'skelf', + 'skell', + 'skelm', + 'skelp', + 'skene', + 'skens', + 'skeos', + 'skeps', + 'skers', + 'skets', + 'skews', + 'skids', + 'skied', + 'skies', + 'skiey', + 'skimo', + 'skims', + 'skink', + 'skins', + 'skint', + 'skios', + 'skips', + 'skirl', + 'skirr', + 'skite', + 'skits', + 'skive', + 'skivy', + 'sklim', + 'skoal', + 'skody', + 'skoff', + 'skogs', + 'skols', + 'skool', + 'skort', + 'skosh', + 'skran', + 'skrik', + 'skuas', + 'skugs', + 'skyed', + 'skyer', + 'skyey', + 'skyfs', + 'skyre', + 'skyrs', + 'skyte', + 'slabs', + 'slade', + 'slaes', + 'slags', + 'slaid', + 'slake', + 'slams', + 'slane', + 'slank', + 'slaps', + 'slart', + 'slats', + 'slaty', + 'slaws', + 'slays', + 'slebs', + 'sleds', + 'sleer', + 'slews', + 'sleys', + 'slier', + 'slily', + 'slims', + 'slipe', + 'slips', + 'slipt', + 'slish', + 'slits', + 'slive', + 'sloan', + 'slobs', + 'sloes', + 'slogs', + 'sloid', + 'slojd', + 'slomo', + 'sloom', + 'sloot', + 'slops', + 'slopy', + 'slorm', + 'slots', + 'slove', + 'slows', + 'sloyd', + 'slubb', + 'slubs', + 'slued', + 'slues', + 'sluff', + 'slugs', + 'sluit', + 'slums', + 'slurb', + 'slurs', + 'sluse', + 'sluts', + 'slyer', + 'slype', + 'smaak', + 'smaik', + 'smalm', + 'smalt', + 'smarm', + 'smaze', + 'smeek', + 'smees', + 'smeik', + 'smeke', + 'smerk', + 'smews', + 'smirr', + 'smirs', + 'smits', + 'smogs', + 'smoko', + 'smolt', + 'smoor', + 'smoot', + 'smore', + 'smorg', + 'smout', + 'smowt', + 'smugs', + 'smurs', + 'smush', + 'smuts', + 'snabs', + 'snafu', + 'snags', + 'snaps', + 'snarf', + 'snark', + 'snars', + 'snary', + 'snash', + 'snath', + 'snaws', + 'snead', + 'sneap', + 'snebs', + 'sneck', + 'sneds', + 'sneed', + 'snees', + 'snell', + 'snibs', + 'snick', + 'snies', + 'snift', + 'snigs', + 'snips', + 'snipy', + 'snirt', + 'snits', + 'snobs', + 'snods', + 'snoek', + 'snoep', + 'snogs', + 'snoke', + 'snood', + 'snook', + 'snool', + 'snoot', + 'snots', + 'snowk', + 'snows', + 'snubs', + 'snugs', + 'snush', + 'snyes', + 'soaks', + 'soaps', + 'soare', + 'soars', + 'soave', + 'sobas', + 'socas', + 'soces', + 'socko', + 'socks', + 'socle', + 'sodas', + 'soddy', + 'sodic', + 'sodom', + 'sofar', + 'sofas', + 'softa', + 'softs', + 'softy', + 'soger', + 'sohur', + 'soils', + 'soily', + 'sojas', + 'sojus', + 'sokah', + 'soken', + 'sokes', + 'sokol', + 'solah', + 'solan', + 'solas', + 'solde', + 'soldi', + 'soldo', + 'solds', + 'soled', + 'solei', + 'soler', + 'soles', + 'solon', + 'solos', + 'solum', + 'solus', + 'soman', + 'somas', + 'sonce', + 'sonde', + 'sones', + 'songs', + 'sonly', + 'sonne', + 'sonny', + 'sonse', + 'sonsy', + 'sooey', + 'sooks', + 'sooky', + 'soole', + 'sools', + 'sooms', + 'soops', + 'soote', + 'soots', + 'sophs', + 'sophy', + 'sopor', + 'soppy', + 'sopra', + 'soral', + 'soras', + 'sorbo', + 'sorbs', + 'sorda', + 'sordo', + 'sords', + 'sored', + 'soree', + 'sorel', + 'sorer', + 'sores', + 'sorex', + 'sorgo', + 'sorns', + 'sorra', + 'sorta', + 'sorts', + 'sorus', + 'soths', + 'sotol', + 'souce', + 'souct', + 'sough', + 'souks', + 'souls', + 'soums', + 'soups', + 'soupy', + 'sours', + 'souse', + 'souts', + 'sowar', + 'sowce', + 'sowed', + 'sowff', + 'sowfs', + 'sowle', + 'sowls', + 'sowms', + 'sownd', + 'sowne', + 'sowps', + 'sowse', + 'sowth', + 'soyas', + 'soyle', + 'soyuz', + 'sozin', + 'spacy', + 'spado', + 'spaed', + 'spaer', + 'spaes', + 'spags', + 'spahi', + 'spail', + 'spain', + 'spait', + 'spake', + 'spald', + 'spale', + 'spall', + 'spalt', + 'spams', + 'spane', + 'spang', + 'spans', + 'spard', + 'spars', + 'spart', + 'spate', + 'spats', + 'spaul', + 'spawl', + 'spaws', + 'spayd', + 'spays', + 'spaza', + 'spazz', + 'speal', + 'spean', + 'speat', + 'specs', + 'spect', + 'speel', + 'speer', + 'speil', + 'speir', + 'speks', + 'speld', + 'spelk', + 'speos', + 'spets', + 'speug', + 'spews', + 'spewy', + 'spial', + 'spica', + 'spick', + 'spics', + 'spide', + 'spier', + 'spies', + 'spiff', + 'spifs', + 'spiks', + 'spile', + 'spims', + 'spina', + 'spink', + 'spins', + 'spirt', + 'spiry', + 'spits', + 'spitz', + 'spivs', + 'splay', + 'splog', + 'spode', + 'spods', + 'spoom', + 'spoor', + 'spoot', + 'spork', + 'sposh', + 'spots', + 'sprad', + 'sprag', + 'sprat', + 'spred', + 'sprew', + 'sprit', + 'sprod', + 'sprog', + 'sprue', + 'sprug', + 'spuds', + 'spued', + 'spuer', + 'spues', + 'spugs', + 'spule', + 'spume', + 'spumy', + 'spurs', + 'sputa', + 'spyal', + 'spyre', + 'squab', + 'squaw', + 'squeg', + 'squid', + 'squit', + 'squiz', + 'stabs', + 'stade', + 'stags', + 'stagy', + 'staig', + 'stane', + 'stang', + 'staph', + 'staps', + 'starn', + 'starr', + 'stars', + 'stats', + 'staun', + 'staws', + 'stays', + 'stean', + 'stear', + 'stedd', + 'stede', + 'steds', + 'steek', + 'steem', + 'steen', + 'steil', + 'stela', + 'stele', + 'stell', + 'steme', + 'stems', + 'stend', + 'steno', + 'stens', + 'stent', + 'steps', + 'stept', + 'stere', + 'stets', + 'stews', + 'stewy', + 'steys', + 'stich', + 'stied', + 'sties', + 'stilb', + 'stile', + 'stime', + 'stims', + 'stimy', + 'stipa', + 'stipe', + 'stire', + 'stirk', + 'stirp', + 'stirs', + 'stive', + 'stivy', + 'stoae', + 'stoai', + 'stoas', + 'stoat', + 'stobs', + 'stoep', + 'stogy', + 'stoit', + 'stoln', + 'stoma', + 'stond', + 'stong', + 'stonk', + 'stonn', + 'stook', + 'stoor', + 'stope', + 'stops', + 'stopt', + 'stoss', + 'stots', + 'stott', + 'stoun', + 'stoup', + 'stour', + 'stown', + 'stowp', + 'stows', + 'strad', + 'strae', + 'strag', + 'strak', + 'strep', + 'strew', + 'stria', + 'strig', + 'strim', + 'strop', + 'strow', + 'stroy', + 'strum', + 'stubs', + 'stude', + 'studs', + 'stull', + 'stulm', + 'stumm', + 'stums', + 'stuns', + 'stupa', + 'stupe', + 'sture', + 'sturt', + 'styed', + 'styes', + 'styli', + 'stylo', + 'styme', + 'stymy', + 'styre', + 'styte', + 'subah', + 'subas', + 'subby', + 'suber', + 'subha', + 'succi', + 'sucks', + 'sucky', + 'sucre', + 'sudds', + 'sudor', + 'sudsy', + 'suede', + 'suent', + 'suers', + 'suete', + 'suets', + 'suety', + 'sugan', + 'sughs', + 'sugos', + 'suhur', + 'suids', + 'suint', + 'suits', + 'sujee', + 'sukhs', + 'sukuk', + 'sulci', + 'sulfa', + 'sulfo', + 'sulks', + 'sulph', + 'sulus', + 'sumis', + 'summa', + 'sumos', + 'sumph', + 'sumps', + 'sunis', + 'sunks', + 'sunna', + 'sunns', + 'sunup', + 'supes', + 'supra', + 'surah', + 'sural', + 'suras', + 'surat', + 'surds', + 'sured', + 'sures', + 'surfs', + 'surfy', + 'surgy', + 'surra', + 'sused', + 'suses', + 'susus', + 'sutor', + 'sutra', + 'sutta', + 'swabs', + 'swack', + 'swads', + 'swage', + 'swags', + 'swail', + 'swain', + 'swale', + 'swaly', + 'swamy', + 'swang', + 'swank', + 'swans', + 'swaps', + 'swapt', + 'sward', + 'sware', + 'swarf', + 'swart', + 'swats', + 'swayl', + 'sways', + 'sweal', + 'swede', + 'sweed', + 'sweel', + 'sweer', + 'swees', + 'sweir', + 'swelt', + 'swerf', + 'sweys', + 'swies', + 'swigs', + 'swile', + 'swims', + 'swink', + 'swipe', + 'swire', + 'swiss', + 'swith', + 'swits', + 'swive', + 'swizz', + 'swobs', + 'swole', + 'swoln', + 'swops', + 'swopt', + 'swots', + 'swoun', + 'sybbe', + 'sybil', + 'syboe', + 'sybow', + 'sycee', + 'syces', + 'sycon', + 'syens', + 'syker', + 'sykes', + 'sylis', + 'sylph', + 'sylva', + 'symar', + 'synch', + 'syncs', + 'synds', + 'syned', + 'synes', + 'synth', + 'syped', + 'sypes', + 'syphs', + 'syrah', + 'syren', + 'sysop', + 'sythe', + 'syver', + 'taals', + 'taata', + 'taber', + 'tabes', + 'tabid', + 'tabis', + 'tabla', + 'tabor', + 'tabun', + 'tabus', + 'tacan', + 'taces', + 'tacet', + 'tache', + 'tacho', + 'tachs', + 'tacks', + 'tacos', + 'tacts', + 'taels', + 'tafia', + 'taggy', + 'tagma', + 'tahas', + 'tahrs', + 'taiga', + 'taigs', + 'taiko', + 'tails', + 'tains', + 'taira', + 'taish', + 'taits', + 'tajes', + 'takas', + 'takes', + 'takhi', + 'takin', + 'takis', + 'takky', + 'talak', + 'talaq', + 'talar', + 'talas', + 'talcs', + 'talcy', + 'talea', + 'taler', + 'tales', + 'talks', + 'talky', + 'talls', + 'talma', + 'talpa', + 'taluk', + 'talus', + 'tamal', + 'tamed', + 'tames', + 'tamin', + 'tamis', + 'tammy', + 'tamps', + 'tanas', + 'tanga', + 'tangi', + 'tangs', + 'tanhs', + 'tanka', + 'tanks', + 'tanky', + 'tanna', + 'tansy', + 'tanti', + 'tanto', + 'tanty', + 'tapas', + 'taped', + 'tapen', + 'tapes', + 'tapet', + 'tapis', + 'tappa', + 'tapus', + 'taras', + 'tardo', + 'tared', + 'tares', + 'targa', + 'targe', + 'tarns', + 'taroc', + 'tarok', + 'taros', + 'tarps', + 'tarre', + 'tarry', + 'tarsi', + 'tarts', + 'tarty', + 'tasar', + 'tased', + 'taser', + 'tases', + 'tasks', + 'tassa', + 'tasse', + 'tasso', + 'tatar', + 'tater', + 'tates', + 'taths', + 'tatie', + 'tatou', + 'tatts', + 'tatus', + 'taube', + 'tauld', + 'tauon', + 'taupe', + 'tauts', + 'tavah', + 'tavas', + 'taver', + 'tawai', + 'tawas', + 'tawed', + 'tawer', + 'tawie', + 'tawse', + 'tawts', + 'taxed', + 'taxer', + 'taxes', + 'taxis', + 'taxol', + 'taxon', + 'taxor', + 'taxus', + 'tayra', + 'tazza', + 'tazze', + 'teade', + 'teads', + 'teaed', + 'teaks', + 'teals', + 'teams', + 'tears', + 'teats', + 'teaze', + 'techs', + 'techy', + 'tecta', + 'teels', + 'teems', + 'teend', + 'teene', + 'teens', + 'teeny', + 'teers', + 'teffs', + 'teggs', + 'tegua', + 'tegus', + 'tehrs', + 'teiid', + 'teils', + 'teind', + 'teins', + 'telae', + 'telco', + 'teles', + 'telex', + 'telia', + 'telic', + 'tells', + 'telly', + 'teloi', + 'telos', + 'temed', + 'temes', + 'tempi', + 'temps', + 'tempt', + 'temse', + 'tench', + 'tends', + 'tendu', + 'tenes', + 'tenge', + 'tenia', + 'tenne', + 'tenno', + 'tenny', + 'tenon', + 'tents', + 'tenty', + 'tenue', + 'tepal', + 'tepas', + 'tepoy', + 'terai', + 'teras', + 'terce', + 'terek', + 'teres', + 'terfe', + 'terfs', + 'terga', + 'terms', + 'terne', + 'terns', + 'terry', + 'terts', + 'tesla', + 'testa', + 'teste', + 'tests', + 'tetes', + 'teths', + 'tetra', + 'tetri', + 'teuch', + 'teugh', + 'tewed', + 'tewel', + 'tewit', + 'texas', + 'texes', + 'texts', + 'thack', + 'thagi', + 'thaim', + 'thale', + 'thali', + 'thana', + 'thane', + 'thang', + 'thans', + 'thanx', + 'tharm', + 'thars', + 'thaws', + 'thawy', + 'thebe', + 'theca', + 'theed', + 'theek', + 'thees', + 'thegn', + 'theic', + 'thein', + 'thelf', + 'thema', + 'thens', + 'theow', + 'therm', + 'thesp', + 'thete', + 'thews', + 'thewy', + 'thigs', + 'thilk', + 'thill', + 'thine', + 'thins', + 'thiol', + 'thirl', + 'thoft', + 'thole', + 'tholi', + 'thoro', + 'thorp', + 'thous', + 'thowl', + 'thrae', + 'thraw', + 'thrid', + 'thrip', + 'throe', + 'thuds', + 'thugs', + 'thuja', + 'thunk', + 'thurl', + 'thuya', + 'thymi', + 'thymy', + 'tians', + 'tiars', + 'tical', + 'ticca', + 'ticed', + 'tices', + 'tichy', + 'ticks', + 'ticky', + 'tiddy', + 'tided', + 'tides', + 'tiers', + 'tiffs', + 'tifos', + 'tifts', + 'tiges', + 'tigon', + 'tikas', + 'tikes', + 'tikis', + 'tikka', + 'tilak', + 'tiled', + 'tiler', + 'tiles', + 'tills', + 'tilly', + 'tilth', + 'tilts', + 'timbo', + 'timed', + 'times', + 'timon', + 'timps', + 'tinas', + 'tinct', + 'tinds', + 'tinea', + 'tined', + 'tines', + 'tinge', + 'tings', + 'tinks', + 'tinny', + 'tints', + 'tinty', + 'tipis', + 'tippy', + 'tired', + 'tires', + 'tirls', + 'tiros', + 'tirrs', + 'titch', + 'titer', + 'titis', + 'titre', + 'titty', + 'titup', + 'tiyin', + 'tiyns', + 'tizes', + 'tizzy', + 'toads', + 'toady', + 'toaze', + 'tocks', + 'tocky', + 'tocos', + 'todde', + 'toeas', + 'toffs', + 'toffy', + 'tofts', + 'tofus', + 'togae', + 'togas', + 'toged', + 'toges', + 'togue', + 'tohos', + 'toile', + 'toils', + 'toing', + 'toise', + 'toits', + 'tokay', + 'toked', + 'toker', + 'tokes', + 'tokos', + 'tolan', + 'tolar', + 'tolas', + 'toled', + 'toles', + 'tolls', + 'tolly', + 'tolts', + 'tolus', + 'tolyl', + 'toman', + 'tombs', + 'tomes', + 'tomia', + 'tommy', + 'tomos', + 'tondi', + 'tondo', + 'toned', + 'toner', + 'tones', + 'toney', + 'tongs', + 'tonka', + 'tonks', + 'tonne', + 'tonus', + 'tools', + 'tooms', + 'toons', + 'toots', + 'toped', + 'topee', + 'topek', + 'toper', + 'topes', + 'tophe', + 'tophi', + 'tophs', + 'topis', + 'topoi', + 'topos', + 'toppy', + 'toque', + 'torah', + 'toran', + 'toras', + 'torcs', + 'tores', + 'toric', + 'torii', + 'toros', + 'torot', + 'torrs', + 'torse', + 'torsi', + 'torsk', + 'torta', + 'torte', + 'torts', + 'tosas', + 'tosed', + 'toses', + 'toshy', + 'tossy', + 'toted', + 'toter', + 'totes', + 'totty', + 'touks', + 'touns', + 'tours', + 'touse', + 'tousy', + 'touts', + 'touze', + 'touzy', + 'towed', + 'towie', + 'towns', + 'towny', + 'towse', + 'towsy', + 'towts', + 'towze', + 'towzy', + 'toyed', + 'toyer', + 'toyon', + 'toyos', + 'tozed', + 'tozes', + 'tozie', + 'trabs', + 'trads', + 'tragi', + 'traik', + 'trams', + 'trank', + 'tranq', + 'trans', + 'trant', + 'trape', + 'traps', + 'trapt', + 'trass', + 'trats', + 'tratt', + 'trave', + 'trayf', + 'trays', + 'treck', + 'treed', + 'treen', + 'trees', + 'trefa', + 'treif', + 'treks', + 'trema', + 'trems', + 'tress', + 'trest', + 'trets', + 'trews', + 'treyf', + 'treys', + 'triac', + 'tride', + 'trier', + 'tries', + 'triff', + 'trigo', + 'trigs', + 'trike', + 'trild', + 'trill', + 'trims', + 'trine', + 'trins', + 'triol', + 'trior', + 'trios', + 'trips', + 'tripy', + 'trist', + 'troad', + 'troak', + 'troat', + 'trock', + 'trode', + 'trods', + 'trogs', + 'trois', + 'troke', + 'tromp', + 'trona', + 'tronc', + 'trone', + 'tronk', + 'trons', + 'trooz', + 'troth', + 'trots', + 'trows', + 'troys', + 'trued', + 'trues', + 'trugo', + 'trugs', + 'trull', + 'tryer', + 'tryke', + 'tryma', + 'tryps', + 'tsade', + 'tsadi', + 'tsars', + 'tsked', + 'tsuba', + 'tsubo', + 'tuans', + 'tuart', + 'tuath', + 'tubae', + 'tubar', + 'tubas', + 'tubby', + 'tubed', + 'tubes', + 'tucks', + 'tufas', + 'tuffe', + 'tuffs', + 'tufts', + 'tufty', + 'tugra', + 'tuile', + 'tuina', + 'tuism', + 'tuktu', + 'tules', + 'tulpa', + 'tulsi', + 'tumid', + 'tummy', + 'tumps', + 'tumpy', + 'tunas', + 'tunds', + 'tuned', + 'tuner', + 'tunes', + 'tungs', + 'tunny', + 'tupek', + 'tupik', + 'tuple', + 'tuque', + 'turds', + 'turfs', + 'turfy', + 'turks', + 'turme', + 'turms', + 'turns', + 'turnt', + 'turps', + 'turrs', + 'tushy', + 'tusks', + 'tusky', + 'tutee', + 'tutti', + 'tutty', + 'tutus', + 'tuxes', + 'tuyer', + 'twaes', + 'twain', + 'twals', + 'twank', + 'twats', + 'tways', + 'tweel', + 'tween', + 'tweep', + 'tweer', + 'twerk', + 'twerp', + 'twier', + 'twigs', + 'twill', + 'twilt', + 'twink', + 'twins', + 'twiny', + 'twire', + 'twirp', + 'twite', + 'twits', + 'twoer', + 'twyer', + 'tyees', + 'tyers', + 'tyiyn', + 'tykes', + 'tyler', + 'tymps', + 'tynde', + 'tyned', + 'tynes', + 'typal', + 'typed', + 'types', + 'typey', + 'typic', + 'typos', + 'typps', + 'typto', + 'tyran', + 'tyred', + 'tyres', + 'tyros', + 'tythe', + 'tzars', + 'udals', + 'udons', + 'ugali', + 'ugged', + 'uhlan', + 'uhuru', + 'ukase', + 'ulama', + 'ulans', + 'ulema', + 'ulmin', + 'ulnad', + 'ulnae', + 'ulnar', + 'ulnas', + 'ulpan', + 'ulvas', + 'ulyie', + 'ulzie', + 'umami', + 'umbel', + 'umber', + 'umble', + 'umbos', + 'umbre', + 'umiac', + 'umiak', + 'umiaq', + 'ummah', + 'ummas', + 'ummed', + 'umped', + 'umphs', + 'umpie', + 'umpty', + 'umrah', + 'umras', + 'unais', + 'unapt', + 'unarm', + 'unary', + 'unaus', + 'unbag', + 'unban', + 'unbar', + 'unbed', + 'unbid', + 'unbox', + 'uncap', + 'unces', + 'uncia', + 'uncos', + 'uncoy', + 'uncus', + 'undam', + 'undee', + 'undos', + 'undug', + 'uneth', + 'unfix', + 'ungag', + 'unget', + 'ungod', + 'ungot', + 'ungum', + 'unhat', + 'unhip', + 'unica', + 'units', + 'unjam', + 'unked', + 'unket', + 'unkid', + 'unlaw', + 'unlay', + 'unled', + 'unlet', + 'unlid', + 'unman', + 'unmew', + 'unmix', + 'unpay', + 'unpeg', + 'unpen', + 'unpin', + 'unred', + 'unrid', + 'unrig', + 'unrip', + 'unsaw', + 'unsay', + 'unsee', + 'unsew', + 'unsex', + 'unsod', + 'untax', + 'untin', + 'unwet', + 'unwit', + 'unwon', + 'upbow', + 'upbye', + 'updos', + 'updry', + 'upend', + 'upjet', + 'uplay', + 'upled', + 'uplit', + 'upped', + 'upran', + 'uprun', + 'upsee', + 'upsey', + 'uptak', + 'upter', + 'uptie', + 'uraei', + 'urali', + 'uraos', + 'urare', + 'urari', + 'urase', + 'urate', + 'urbex', + 'urbia', + 'urdee', + 'ureal', + 'ureas', + 'uredo', + 'ureic', + 'urena', + 'urent', + 'urged', + 'urger', + 'urges', + 'urial', + 'urite', + 'urman', + 'urnal', + 'urned', + 'urped', + 'ursae', + 'ursid', + 'urson', + 'urubu', + 'urvas', + 'users', + 'usnea', + 'usque', + 'usure', + 'usury', + 'uteri', + 'uveal', + 'uveas', + 'uvula', + 'vacua', + 'vaded', + 'vades', + 'vagal', + 'vagus', + 'vails', + 'vaire', + 'vairs', + 'vairy', + 'vakas', + 'vakil', + 'vales', + 'valis', + 'valse', + 'vamps', + 'vampy', + 'vanda', + 'vaned', + 'vanes', + 'vangs', + 'vants', + 'vaped', + 'vaper', + 'vapes', + 'varan', + 'varas', + 'vardy', + 'varec', + 'vares', + 'varia', + 'varix', + 'varna', + 'varus', + 'varve', + 'vasal', + 'vases', + 'vasts', + 'vasty', + 'vatic', + 'vatus', + 'vauch', + 'vaute', + 'vauts', + 'vawte', + 'vaxes', + 'veale', + 'veals', + 'vealy', + 'veena', + 'veeps', + 'veers', + 'veery', + 'vegas', + 'veges', + 'vegie', + 'vegos', + 'vehme', + 'veils', + 'veily', + 'veins', + 'veiny', + 'velar', + 'velds', + 'veldt', + 'veles', + 'vells', + 'velum', + 'venae', + 'venal', + 'vends', + 'vendu', + 'veney', + 'venge', + 'venin', + 'vents', + 'venus', + 'verbs', + 'verra', + 'verry', + 'verst', + 'verts', + 'vertu', + 'vespa', + 'vesta', + 'vests', + 'vetch', + 'vexed', + 'vexer', + 'vexes', + 'vexil', + 'vezir', + 'vials', + 'viand', + 'vibes', + 'vibex', + 'vibey', + 'viced', + 'vices', + 'vichy', + 'viers', + 'views', + 'viewy', + 'vifda', + 'viffs', + 'vigas', + 'vigia', + 'vilde', + 'viler', + 'villi', + 'vills', + 'vimen', + 'vinal', + 'vinas', + 'vinca', + 'vined', + 'viner', + 'vines', + 'vinew', + 'vinic', + 'vinos', + 'vints', + 'viold', + 'viols', + 'vired', + 'vireo', + 'vires', + 'virga', + 'virge', + 'virid', + 'virls', + 'virtu', + 'visas', + 'vised', + 'vises', + 'visie', + 'visne', + 'vison', + 'visto', + 'vitae', + 'vitas', + 'vitex', + 'vitro', + 'vitta', + 'vivas', + 'vivat', + 'vivda', + 'viver', + 'vives', + 'vizir', + 'vizor', + 'vleis', + 'vlies', + 'vlogs', + 'voars', + 'vocab', + 'voces', + 'voddy', + 'vodou', + 'vodun', + 'voema', + 'vogie', + 'voids', + 'voile', + 'voips', + 'volae', + 'volar', + 'voled', + 'voles', + 'volet', + 'volks', + 'volta', + 'volte', + 'volti', + 'volts', + 'volva', + 'volve', + 'vomer', + 'voted', + 'votes', + 'vouge', + 'voulu', + 'vowed', + 'vower', + 'voxel', + 'vozhd', + 'vraic', + 'vrils', + 'vroom', + 'vrous', + 'vrouw', + 'vrows', + 'vuggs', + 'vuggy', + 'vughs', + 'vughy', + 'vulgo', + 'vulns', + 'vulva', + 'vutty', + 'waacs', + 'wacke', + 'wacko', + 'wacks', + 'wadds', + 'waddy', + 'waded', + 'wader', + 'wades', + 'wadge', + 'wadis', + 'wadts', + 'waffs', + 'wafts', + 'waged', + 'wages', + 'wagga', + 'wagyu', + 'wahoo', + 'waide', + 'waifs', + 'waift', + 'wails', + 'wains', + 'wairs', + 'waite', + 'waits', + 'wakas', + 'waked', + 'waken', + 'waker', + 'wakes', + 'wakfs', + 'waldo', + 'walds', + 'waled', + 'waler', + 'wales', + 'walie', + 'walis', + 'walks', + 'walla', + 'walls', + 'wally', + 'walty', + 'wamed', + 'wames', + 'wamus', + 'wands', + 'waned', + 'wanes', + 'waney', + 'wangs', + 'wanks', + 'wanky', + 'wanle', + 'wanly', + 'wanna', + 'wants', + 'wanty', + 'wanze', + 'waqfs', + 'warbs', + 'warby', + 'wards', + 'wared', + 'wares', + 'warez', + 'warks', + 'warms', + 'warns', + 'warps', + 'warre', + 'warst', + 'warts', + 'wases', + 'washy', + 'wasms', + 'wasps', + 'waspy', + 'wasts', + 'watap', + 'watts', + 'wauff', + 'waugh', + 'wauks', + 'waulk', + 'wauls', + 'waurs', + 'waved', + 'waves', + 'wavey', + 'wawas', + 'wawes', + 'wawls', + 'waxed', + 'waxer', + 'waxes', + 'wayed', + 'wazir', + 'wazoo', + 'weald', + 'weals', + 'weamb', + 'weans', + 'wears', + 'webby', + 'weber', + 'wecht', + 'wedel', + 'wedgy', + 'weeds', + 'weeke', + 'weeks', + 'weels', + 'weems', + 'weens', + 'weeny', + 'weeps', + 'weepy', + 'weest', + 'weete', + 'weets', + 'wefte', + 'wefts', + 'weids', + 'weils', + 'weirs', + 'weise', + 'weize', + 'wekas', + 'welds', + 'welke', + 'welks', + 'welkt', + 'wells', + 'welly', + 'welts', + 'wembs', + 'wends', + 'wenge', + 'wenny', + 'wents', + 'weros', + 'wersh', + 'wests', + 'wetas', + 'wetly', + 'wexed', + 'wexes', + 'whamo', + 'whams', + 'whang', + 'whaps', + 'whare', + 'whata', + 'whats', + 'whaup', + 'whaur', + 'wheal', + 'whear', + 'wheen', + 'wheep', + 'wheft', + 'whelk', + 'whelm', + 'whens', + 'whets', + 'whews', + 'wheys', + 'whids', + 'whift', + 'whigs', + 'whilk', + 'whims', + 'whins', + 'whios', + 'whips', + 'whipt', + 'whirr', + 'whirs', + 'whish', + 'whiss', + 'whist', + 'whits', + 'whity', + 'whizz', + 'whomp', + 'whoof', + 'whoot', + 'whops', + 'whore', + 'whorl', + 'whort', + 'whoso', + 'whows', + 'whump', + 'whups', + 'whyda', + 'wicca', + 'wicks', + 'wicky', + 'widdy', + 'wides', + 'wiels', + 'wifed', + 'wifes', + 'wifey', + 'wifie', + 'wifty', + 'wigan', + 'wigga', + 'wiggy', + 'wikis', + 'wilco', + 'wilds', + 'wiled', + 'wiles', + 'wilga', + 'wilis', + 'wilja', + 'wills', + 'wilts', + 'wimps', + 'winds', + 'wined', + 'wines', + 'winey', + 'winge', + 'wings', + 'wingy', + 'winks', + 'winna', + 'winns', + 'winos', + 'winze', + 'wiped', + 'wiper', + 'wipes', + 'wired', + 'wirer', + 'wires', + 'wirra', + 'wised', + 'wises', + 'wisha', + 'wisht', + 'wisps', + 'wists', + 'witan', + 'wited', + 'wites', + 'withe', + 'withs', + 'withy', + 'wived', + 'wiver', + 'wives', + 'wizen', + 'wizes', + 'woads', + 'woald', + 'wocks', + 'wodge', + 'woful', + 'wojus', + 'woker', + 'wokka', + 'wolds', + 'wolfs', + 'wolly', + 'wolve', + 'wombs', + 'womby', + 'womyn', + 'wonga', + 'wongi', + 'wonks', + 'wonky', + 'wonts', + 'woods', + 'wooed', + 'woofs', + 'woofy', + 'woold', + 'wools', + 'woons', + 'woops', + 'woopy', + 'woose', + 'woosh', + 'wootz', + 'words', + 'works', + 'worms', + 'wormy', + 'worts', + 'wowed', + 'wowee', + 'woxen', + 'wrang', + 'wraps', + 'wrapt', + 'wrast', + 'wrate', + 'wrawl', + 'wrens', + 'wrick', + 'wried', + 'wrier', + 'wries', + 'writs', + 'wroke', + 'wroot', + 'wroth', + 'wryer', + 'wuddy', + 'wudus', + 'wulls', + 'wurst', + 'wuses', + 'wushu', + 'wussy', + 'wuxia', + 'wyled', + 'wyles', + 'wynds', + 'wynns', + 'wyted', + 'wytes', + 'xebec', + 'xenia', + 'xenic', + 'xenon', + 'xeric', + 'xerox', + 'xerus', + 'xoana', + 'xrays', + 'xylan', + 'xylem', + 'xylic', + 'xylol', + 'xylyl', + 'xysti', + 'xysts', + 'yaars', + 'yabas', + 'yabba', + 'yabby', + 'yacca', + 'yacka', + 'yacks', + 'yaffs', + 'yager', + 'yages', + 'yagis', + 'yahoo', + 'yaird', + 'yakka', + 'yakow', + 'yales', + 'yamen', + 'yampy', + 'yamun', + 'yangs', + 'yanks', + 'yapok', + 'yapon', + 'yapps', + 'yappy', + 'yarak', + 'yarco', + 'yards', + 'yarer', + 'yarfa', + 'yarks', + 'yarns', + 'yarrs', + 'yarta', + 'yarto', + 'yates', + 'yauds', + 'yauld', + 'yaups', + 'yawed', + 'yawey', + 'yawls', + 'yawns', + 'yawny', + 'yawps', + 'ybore', + 'yclad', + 'ycled', + 'ycond', + 'ydrad', + 'ydred', + 'yeads', + 'yeahs', + 'yealm', + 'yeans', + 'yeard', + 'years', + 'yecch', + 'yechs', + 'yechy', + 'yedes', + 'yeeds', + 'yeesh', + 'yeggs', + 'yelks', + 'yells', + 'yelms', + 'yelps', + 'yelts', + 'yenta', + 'yente', + 'yerba', + 'yerds', + 'yerks', + 'yeses', + 'yesks', + 'yests', + 'yesty', + 'yetis', + 'yetts', + 'yeuks', + 'yeuky', + 'yeven', + 'yeves', + 'yewen', + 'yexed', + 'yexes', + 'yfere', + 'yiked', + 'yikes', + 'yills', + 'yince', + 'yipes', + 'yippy', + 'yirds', + 'yirks', + 'yirrs', + 'yirth', + 'yites', + 'yitie', + 'ylems', + 'ylike', + 'ylkes', + 'ymolt', + 'ympes', + 'yobbo', + 'yobby', + 'yocks', + 'yodel', + 'yodhs', + 'yodle', + 'yogas', + 'yogee', + 'yoghs', + 'yogic', + 'yogin', + 'yogis', + 'yoick', + 'yojan', + 'yoked', + 'yokel', + 'yoker', + 'yokes', + 'yokul', + 'yolks', + 'yolky', + 'yomim', + 'yomps', + 'yonic', + 'yonis', + 'yonks', + 'yoofs', + 'yoops', + 'yores', + 'yorks', + 'yorps', + 'youks', + 'yourn', + 'yours', + 'yourt', + 'youse', + 'yowed', + 'yowes', + 'yowie', + 'yowls', + 'yowza', + 'yrapt', + 'yrent', + 'yrivd', + 'yrneh', + 'ysame', + 'ytost', + 'yuans', + 'yucas', + 'yucca', + 'yucch', + 'yucko', + 'yucks', + 'yucky', + 'yufts', + 'yugas', + 'yuked', + 'yukes', + 'yukky', + 'yukos', + 'yulan', + 'yules', + 'yummo', + 'yummy', + 'yumps', + 'yupon', + 'yuppy', + 'yurta', + 'yurts', + 'yuzus', + 'zabra', + 'zacks', + 'zaida', + 'zaidy', + 'zaire', + 'zakat', + 'zaman', + 'zambo', + 'zamia', + 'zanja', + 'zante', + 'zanza', + 'zanze', + 'zappy', + 'zarfs', + 'zaris', + 'zatis', + 'zaxes', + 'zayin', + 'zazen', + 'zeals', + 'zebec', + 'zebub', + 'zebus', + 'zedas', + 'zeins', + 'zendo', + 'zerda', + 'zerks', + 'zeros', + 'zests', + 'zetas', + 'zexes', + 'zezes', + 'zhomo', + 'zibet', + 'ziffs', + 'zigan', + 'zilas', + 'zilch', + 'zilla', + 'zills', + 'zimbi', + 'zimbs', + 'zinco', + 'zincs', + 'zincy', + 'zineb', + 'zines', + 'zings', + 'zingy', + 'zinke', + 'zinky', + 'zippo', + 'zippy', + 'ziram', + 'zitis', + 'zizel', + 'zizit', + 'zlote', + 'zloty', + 'zoaea', + 'zobos', + 'zobus', + 'zocco', + 'zoeae', + 'zoeal', + 'zoeas', + 'zoism', + 'zoist', + 'zombi', + 'zonae', + 'zonda', + 'zoned', + 'zoner', + 'zones', + 'zonks', + 'zooea', + 'zooey', + 'zooid', + 'zooks', + 'zooms', + 'zoons', + 'zooty', + 'zoppa', + 'zoppo', + 'zoril', + 'zoris', + 'zorro', + 'zouks', + 'zowee', + 'zowie', + 'zulus', + 'zupan', + 'zupas', + 'zuppa', + 'zurfs', + 'zuzim', + 'zygal', + 'zygon', + 'zymes', + 'zymic' +]); diff --git a/static/favicon.png b/static/favicon.png Binary files differ. diff --git a/static/robots.txt b/static/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/svelte.config.js b/svelte.config.js @@ -0,0 +1,18 @@ +import adapter from '@sveltejs/adapter-auto'; +import { vitePreprocess } from '@sveltejs/kit/vite'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + // Consult https://kit.svelte.dev/docs/integrations#preprocessors + // for more information about preprocessors + preprocess: vitePreprocess(), + + kit: { + // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. + // If your environment is not supported or you settled on a specific environment, switch out the adapter. + // See https://kit.svelte.dev/docs/adapters for more information about adapters. + adapter: adapter() + } +}; + +export default config; diff --git a/tsconfig.json b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true + } + // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/vite.config.ts b/vite.config.ts @@ -0,0 +1,9 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + plugins: [sveltekit()], + test: { + include: ['src/**/*.{test,spec}.{js,ts}'] + } +});