-
新的协议内容
-
- HNS重新索赔通货膨胀漏洞:完全披露 新协议规则 声明必须提交到主网块散列。默认情况下,所有的请求都提交到块#1。现有的规则已经要求,随后的收回必须保证更高的区块高度。这使得在软件中,当索赔被重新提交时很容易确定(commitHeight > 1)。以下新规则由软分叉代码强制执行 最初的声明必须提交到区块1。 初始索赔必须支付低于1,000 HNS的费用。 重新申索必须支付与首次申索完全相同的费用。 矿商不能收取任何重新申请的费用:这些费用被“烧掉”(销毁)了,或者更准确地说,它已经存在于以前的区块中。 直到自上次索赔或重新索赔以来已经过288个区块后,才能挖掘重新索赔。
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..003897a
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5794 @@
+{
+ "name": "tmp-astro",
+ "version": "0.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "tmp-astro",
+ "version": "0.0.1",
+ "dependencies": {
+ "@astrojs/sitemap": "3.1.5",
+ "@astrojs/tailwind": "^5.1.0",
+ "astro": "^4.11.0",
+ "tailwindcss": "^3.4.19",
+ "three": "^0.184.0"
+ },
+ "devDependencies": {
+ "@tailwindcss/typography": "^0.5.19"
+ },
+ "engines": {
+ "node": ">=20.11.1"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@astrojs/compiler": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz",
+ "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg=="
+ },
+ "node_modules/@astrojs/internal-helpers": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.1.tgz",
+ "integrity": "sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g=="
+ },
+ "node_modules/@astrojs/markdown-remark": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.3.0.tgz",
+ "integrity": "sha512-r0Ikqr0e6ozPb5bvhup1qdWnSPUvQu6tub4ZLYaKyG50BXZ0ej6FhGz3GpChKpH7kglRFPObJd/bDyf2VM9pkg==",
+ "dependencies": {
+ "@astrojs/prism": "3.1.0",
+ "github-slugger": "^2.0.0",
+ "hast-util-from-html": "^2.0.3",
+ "hast-util-to-text": "^4.0.2",
+ "import-meta-resolve": "^4.1.0",
+ "mdast-util-definitions": "^6.0.0",
+ "rehype-raw": "^7.0.0",
+ "rehype-stringify": "^10.0.1",
+ "remark-gfm": "^4.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.1.1",
+ "remark-smartypants": "^3.0.2",
+ "shiki": "^1.22.0",
+ "unified": "^11.0.5",
+ "unist-util-remove-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.1",
+ "vfile": "^6.0.3"
+ }
+ },
+ "node_modules/@astrojs/prism": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.1.0.tgz",
+ "integrity": "sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==",
+ "dependencies": {
+ "prismjs": "^1.29.0"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0"
+ }
+ },
+ "node_modules/@astrojs/sitemap": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.1.5.tgz",
+ "integrity": "sha512-GLdzJ01387Uzb8RKYpsYLlg/GzoPnGbmDeQNkarSE11i2+l9Qp8Nj/WoTEy9nkTS25fxxy0kxDfJmreeVleCqg==",
+ "dependencies": {
+ "sitemap": "^7.1.1",
+ "stream-replace-string": "^2.0.0",
+ "zod": "^3.23.8"
+ }
+ },
+ "node_modules/@astrojs/tailwind": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-5.1.5.tgz",
+ "integrity": "sha512-1diguZEau7FZ9vIjzE4BwavGdhD3+JkdS8zmibl1ene+EHgIU5hI0NMgRYG3yea+Niaf7cyMwjeWeLvzq/maxg==",
+ "dependencies": {
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.5.1",
+ "postcss-load-config": "^4.0.2"
+ },
+ "peerDependencies": {
+ "astro": "^3.0.0 || ^4.0.0 || ^5.0.0",
+ "tailwindcss": "^3.0.24"
+ }
+ },
+ "node_modules/@astrojs/telemetry": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.1.0.tgz",
+ "integrity": "sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==",
+ "dependencies": {
+ "ci-info": "^4.0.0",
+ "debug": "^4.3.4",
+ "dlv": "^1.1.3",
+ "dset": "^3.1.3",
+ "is-docker": "^3.0.0",
+ "is-wsl": "^3.0.0",
+ "which-pm-runs": "^1.1.0"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.29.3",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz",
+ "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
+ "dependencies": {
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+ "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
+ "dependencies": {
+ "@babel/types": "^7.27.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
+ "dependencies": {
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
+ "dependencies": {
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
+ "dependencies": {
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz",
+ "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==",
+ "dependencies": {
+ "@babel/types": "^7.29.0"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz",
+ "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-syntax-jsx": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
+ "dependencies": {
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.0.5"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@oslojs/encoding": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
+ "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
+ "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.3.tgz",
+ "integrity": "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.3.tgz",
+ "integrity": "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.3.tgz",
+ "integrity": "sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.3.tgz",
+ "integrity": "sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.3.tgz",
+ "integrity": "sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.3.tgz",
+ "integrity": "sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.3.tgz",
+ "integrity": "sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.3.tgz",
+ "integrity": "sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.3.tgz",
+ "integrity": "sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.3.tgz",
+ "integrity": "sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.3.tgz",
+ "integrity": "sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.3.tgz",
+ "integrity": "sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.3.tgz",
+ "integrity": "sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.3.tgz",
+ "integrity": "sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.3.tgz",
+ "integrity": "sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.3.tgz",
+ "integrity": "sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.3.tgz",
+ "integrity": "sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.3.tgz",
+ "integrity": "sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.3.tgz",
+ "integrity": "sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.3.tgz",
+ "integrity": "sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.3.tgz",
+ "integrity": "sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.3.tgz",
+ "integrity": "sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.3.tgz",
+ "integrity": "sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.3.tgz",
+ "integrity": "sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.3.tgz",
+ "integrity": "sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@shikijs/core": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz",
+ "integrity": "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==",
+ "dependencies": {
+ "@shikijs/engine-javascript": "1.29.2",
+ "@shikijs/engine-oniguruma": "1.29.2",
+ "@shikijs/types": "1.29.2",
+ "@shikijs/vscode-textmate": "^10.0.1",
+ "@types/hast": "^3.0.4",
+ "hast-util-to-html": "^9.0.4"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.29.2.tgz",
+ "integrity": "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==",
+ "dependencies": {
+ "@shikijs/types": "1.29.2",
+ "@shikijs/vscode-textmate": "^10.0.1",
+ "oniguruma-to-es": "^2.2.0"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz",
+ "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==",
+ "dependencies": {
+ "@shikijs/types": "1.29.2",
+ "@shikijs/vscode-textmate": "^10.0.1"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.29.2.tgz",
+ "integrity": "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==",
+ "dependencies": {
+ "@shikijs/types": "1.29.2"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.29.2.tgz",
+ "integrity": "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==",
+ "dependencies": {
+ "@shikijs/types": "1.29.2"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz",
+ "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.1",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz",
+ "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "6.0.10"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
+ }
+ },
+ "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+ "dependencies": {
+ "@babel/types": "^7.28.2"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz",
+ "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="
+ },
+ "node_modules/@types/nlcst": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
+ "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "24.12.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz",
+ "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==",
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/sax": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
+ "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz",
+ "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="
+ },
+ "node_modules/acorn": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ansi-align": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
+ "dependencies": {
+ "string-width": "^4.1.0"
+ }
+ },
+ "node_modules/ansi-align/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/ansi-align/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/array-iterate": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
+ "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/astro": {
+ "version": "4.16.19",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-4.16.19.tgz",
+ "integrity": "sha512-baeSswPC5ZYvhGDoj25L2FuzKRWMgx105FetOPQVJFMCAp0o08OonYC7AhwsFdhvp7GapqjnC1Fe3lKb2lupYw==",
+ "dependencies": {
+ "@astrojs/compiler": "^2.10.3",
+ "@astrojs/internal-helpers": "0.4.1",
+ "@astrojs/markdown-remark": "5.3.0",
+ "@astrojs/telemetry": "3.1.0",
+ "@babel/core": "^7.26.0",
+ "@babel/plugin-transform-react-jsx": "^7.25.9",
+ "@babel/types": "^7.26.0",
+ "@oslojs/encoding": "^1.1.0",
+ "@rollup/pluginutils": "^5.1.3",
+ "@types/babel__core": "^7.20.5",
+ "@types/cookie": "^0.6.0",
+ "acorn": "^8.14.0",
+ "aria-query": "^5.3.2",
+ "axobject-query": "^4.1.0",
+ "boxen": "8.0.1",
+ "ci-info": "^4.1.0",
+ "clsx": "^2.1.1",
+ "common-ancestor-path": "^1.0.1",
+ "cookie": "^0.7.2",
+ "cssesc": "^3.0.0",
+ "debug": "^4.3.7",
+ "deterministic-object-hash": "^2.0.2",
+ "devalue": "^5.1.1",
+ "diff": "^5.2.0",
+ "dlv": "^1.1.3",
+ "dset": "^3.1.4",
+ "es-module-lexer": "^1.5.4",
+ "esbuild": "^0.21.5",
+ "estree-walker": "^3.0.3",
+ "fast-glob": "^3.3.2",
+ "flattie": "^1.1.1",
+ "github-slugger": "^2.0.0",
+ "gray-matter": "^4.0.3",
+ "html-escaper": "^3.0.3",
+ "http-cache-semantics": "^4.1.1",
+ "js-yaml": "^4.1.0",
+ "kleur": "^4.1.5",
+ "magic-string": "^0.30.14",
+ "magicast": "^0.3.5",
+ "micromatch": "^4.0.8",
+ "mrmime": "^2.0.0",
+ "neotraverse": "^0.6.18",
+ "ora": "^8.1.1",
+ "p-limit": "^6.1.0",
+ "p-queue": "^8.0.1",
+ "preferred-pm": "^4.0.0",
+ "prompts": "^2.4.2",
+ "rehype": "^13.0.2",
+ "semver": "^7.6.3",
+ "shiki": "^1.23.1",
+ "tinyexec": "^0.3.1",
+ "tsconfck": "^3.1.4",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.3",
+ "vite": "^5.4.11",
+ "vitefu": "^1.0.4",
+ "which-pm": "^3.0.0",
+ "xxhash-wasm": "^1.1.0",
+ "yargs-parser": "^21.1.1",
+ "zod": "^3.23.8",
+ "zod-to-json-schema": "^3.23.5",
+ "zod-to-ts": "^1.2.0"
+ },
+ "bin": {
+ "astro": "astro.js"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0"
+ },
+ "optionalDependencies": {
+ "sharp": "^0.33.3"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz",
+ "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "caniuse-lite": "^1.0.30001787",
+ "fraction.js": "^5.3.4",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/base-64": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
+ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.29",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.29.tgz",
+ "integrity": "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/boxen": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz",
+ "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==",
+ "dependencies": {
+ "ansi-align": "^3.0.1",
+ "camelcase": "^8.0.0",
+ "chalk": "^5.3.0",
+ "cli-boxes": "^3.0.0",
+ "string-width": "^7.2.0",
+ "type-fest": "^4.21.0",
+ "widest-line": "^5.0.0",
+ "wrap-ansi": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
+ "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "baseline-browser-mapping": "^2.10.12",
+ "caniuse-lite": "^1.0.30001782",
+ "electron-to-chromium": "^1.5.328",
+ "node-releases": "^2.0.36",
+ "update-browserslist-db": "^1.2.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
+ "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001792",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001792.tgz",
+ "integrity": "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-boxes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
+ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+ "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
+ "dependencies": {
+ "restore-cursor": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "optional": true,
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
+ "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==",
+ "optional": 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==",
+ "optional": true
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "optional": true,
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/common-ancestor-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
+ "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+ },
+ "node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
+ "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/deterministic-object-hash": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz",
+ "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==",
+ "dependencies": {
+ "base-64": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/devalue": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.0.tgz",
+ "integrity": "sha512-2zA9pFEsnp7vWBZbXF5JAgAq0fsUIt/1XPbRiAmRV3lp/2C3upzH+sADiyy66aFCihoLEsrQHxNM5w1gIDfsBg=="
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/diff": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz",
+ "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/dset": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
+ "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.355",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.355.tgz",
+ "integrity": "sha512-LUPZhKzZPYSPme1jEYohpkA+ybYCJztr1quAdBd7E7h3+VOBVcKkwwtBJu41nrjawrRzfb8mtMfzWozoaK0ZIQ=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="
+ },
+ "node_modules/emoji-regex-xs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
+ "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="
+ },
+ "node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
+ "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "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.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-yarn-workspace-root2": {
+ "version": "1.2.16",
+ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz",
+ "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==",
+ "dependencies": {
+ "micromatch": "^4.0.2",
+ "pkg-dir": "^4.2.0"
+ }
+ },
+ "node_modules/flattie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
+ "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
+ "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
+ "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-slugger": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/gray-matter": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
+ "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
+ "dependencies": {
+ "js-yaml": "^3.13.1",
+ "kind-of": "^6.0.2",
+ "section-matter": "^1.0.0",
+ "strip-bom-string": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/gray-matter/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/gray-matter/node_modules/js-yaml": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
+ "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hast-util-from-html": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
+ "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "devlop": "^1.1.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "parse5": "^7.0.0",
+ "vfile": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-parse5": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
+ "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "hastscript": "^9.0.0",
+ "property-information": "^7.0.0",
+ "vfile": "^6.0.0",
+ "vfile-location": "^5.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+ "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-raw": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
+ "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "hast-util-to-parse5": "^8.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "parse5": "^7.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-parse5": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
+ "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-text": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
+ "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "unist-util-find-after": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
+ "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="
+ },
+ "node_modules/import-meta-resolve": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
+ "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz",
+ "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
+ "optional": 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==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.16.2",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
+ "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+ "dependencies": {
+ "hasown": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-interactive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+ "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
+ "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
+ "dependencies": {
+ "is-inside-container": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/load-yaml-file": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz",
+ "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==",
+ "dependencies": {
+ "graceful-fs": "^4.1.5",
+ "js-yaml": "^3.13.0",
+ "pify": "^4.0.1",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/load-yaml-file/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/load-yaml-file/node_modules/js-yaml": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-symbols": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
+ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "is-unicode-supported": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/magicast": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
+ "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
+ "dependencies": {
+ "@babel/parser": "^7.25.4",
+ "@babel/types": "^7.25.4",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/markdown-table": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-definitions": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
+ "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
+ "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz",
+ "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
+ "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-gfm-autolink-literal": "^2.0.0",
+ "mdast-util-gfm-footnote": "^2.0.0",
+ "mdast-util-gfm-strikethrough": "^2.0.0",
+ "mdast-util-gfm-table": "^2.0.0",
+ "mdast-util-gfm-task-list-item": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
+ "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-find-and-replace": "^3.0.0",
+ "micromark-util-character": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
+ "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
+ "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "markdown-table": "^3.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
+ "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromark": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
+ "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+ "dependencies": {
+ "micromark-extension-gfm-autolink-literal": "^2.0.0",
+ "micromark-extension-gfm-footnote": "^2.0.0",
+ "micromark-extension-gfm-strikethrough": "^2.0.0",
+ "micromark-extension-gfm-table": "^2.0.0",
+ "micromark-extension-gfm-tagfilter": "^2.0.0",
+ "micromark-extension-gfm-task-list-item": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
+ "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
+ "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
+ "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
+ "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
+ "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/mimic-function": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.12",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
+ "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
+ "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/neotraverse": {
+ "version": "0.6.18",
+ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
+ "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/nlcst-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
+ "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.44",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.44.tgz",
+ "integrity": "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ=="
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+ "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+ "dependencies": {
+ "mimic-function": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-2.3.0.tgz",
+ "integrity": "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==",
+ "dependencies": {
+ "emoji-regex-xs": "^1.0.0",
+ "regex": "^5.1.1",
+ "regex-recursion": "^5.1.1"
+ }
+ },
+ "node_modules/ora": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz",
+ "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "cli-cursor": "^5.0.0",
+ "cli-spinners": "^2.9.2",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^2.0.0",
+ "log-symbols": "^6.0.0",
+ "stdin-discarder": "^0.2.2",
+ "string-width": "^7.2.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz",
+ "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==",
+ "dependencies": {
+ "yocto-queue": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-queue": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz",
+ "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==",
+ "dependencies": {
+ "eventemitter3": "^5.0.1",
+ "p-timeout": "^6.1.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz",
+ "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-latin": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
+ "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "@types/unist": "^3.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-modify-children": "^4.0.0",
+ "unist-util-visit-children": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz",
+ "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==",
+ "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.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
+ "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/preferred-pm": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-4.1.1.tgz",
+ "integrity": "sha512-rU+ZAv1Ur9jAUZtGPebQVQPzdGhNzaEiQ7VL9+cjsAWPHFYOccNXPNiev1CCDSOg/2j7UujM7ojNhpkuILEVNQ==",
+ "dependencies": {
+ "find-up-simple": "^1.0.0",
+ "find-yarn-workspace-root2": "1.2.16",
+ "which-pm": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=18.12"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prompts/node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/read-cache/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/regex": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz",
+ "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz",
+ "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==",
+ "dependencies": {
+ "regex": "^5.1.1",
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="
+ },
+ "node_modules/rehype": {
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz",
+ "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "rehype-parse": "^9.0.0",
+ "rehype-stringify": "^10.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-parse": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz",
+ "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-from-html": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-raw": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
+ "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-raw": "^9.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-stringify": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz",
+ "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-to-html": "^9.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-gfm": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
+ "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-gfm": "^3.0.0",
+ "micromark-extension-gfm": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-stringify": "^11.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "11.1.2",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-smartypants": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
+ "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
+ "dependencies": {
+ "retext": "^9.0.0",
+ "retext-smartypants": "^6.0.0",
+ "unified": "^11.0.4",
+ "unist-util-visit": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.12",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+ "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
+ "dependencies": {
+ "onetime": "^7.0.0",
+ "signal-exit": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/retext": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
+ "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "retext-latin": "^4.0.0",
+ "retext-stringify": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-latin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
+ "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "parse-latin": "^7.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-smartypants": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
+ "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-stringify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
+ "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.60.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.3.tgz",
+ "integrity": "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.60.3",
+ "@rollup/rollup-android-arm64": "4.60.3",
+ "@rollup/rollup-darwin-arm64": "4.60.3",
+ "@rollup/rollup-darwin-x64": "4.60.3",
+ "@rollup/rollup-freebsd-arm64": "4.60.3",
+ "@rollup/rollup-freebsd-x64": "4.60.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.60.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.60.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.60.3",
+ "@rollup/rollup-linux-arm64-musl": "4.60.3",
+ "@rollup/rollup-linux-loong64-gnu": "4.60.3",
+ "@rollup/rollup-linux-loong64-musl": "4.60.3",
+ "@rollup/rollup-linux-ppc64-gnu": "4.60.3",
+ "@rollup/rollup-linux-ppc64-musl": "4.60.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.60.3",
+ "@rollup/rollup-linux-riscv64-musl": "4.60.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.60.3",
+ "@rollup/rollup-linux-x64-gnu": "4.60.3",
+ "@rollup/rollup-linux-x64-musl": "4.60.3",
+ "@rollup/rollup-openbsd-x64": "4.60.3",
+ "@rollup/rollup-openharmony-arm64": "4.60.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.60.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.60.3",
+ "@rollup/rollup-win32-x64-gnu": "4.60.3",
+ "@rollup/rollup-win32-x64-msvc": "4.60.3",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rollup/node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
+ "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
+ "engines": {
+ "node": ">=11.0.0"
+ }
+ },
+ "node_modules/section-matter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
+ "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz",
+ "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sharp": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.3",
+ "semver": "^7.6.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
+ }
+ },
+ "node_modules/shiki": {
+ "version": "1.29.2",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.29.2.tgz",
+ "integrity": "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==",
+ "dependencies": {
+ "@shikijs/core": "1.29.2",
+ "@shikijs/engine-javascript": "1.29.2",
+ "@shikijs/engine-oniguruma": "1.29.2",
+ "@shikijs/langs": "1.29.2",
+ "@shikijs/themes": "1.29.2",
+ "@shikijs/types": "1.29.2",
+ "@shikijs/vscode-textmate": "^10.0.1",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
+ "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
+ "optional": true,
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+ },
+ "node_modules/sitemap": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.3.tgz",
+ "integrity": "sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw==",
+ "dependencies": {
+ "@types/node": "^17.0.5",
+ "@types/sax": "^1.2.1",
+ "arg": "^5.0.0",
+ "sax": "^1.2.4"
+ },
+ "bin": {
+ "sitemap": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=12.0.0",
+ "npm": ">=5.6.0"
+ }
+ },
+ "node_modules/sitemap/node_modules/@types/node": {
+ "version": "17.0.45",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "node_modules/stdin-discarder": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
+ "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stream-replace-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
+ "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="
+ },
+ "node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dependencies": {
+ "ansi-regex": "^6.2.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-bom-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.1",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "tinyglobby": "^0.2.11",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.19",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
+ "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.7",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/three": {
+ "version": "0.184.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.184.0.tgz",
+ "integrity": "sha512-wtTRjG92pM5eUg/KuUnHsqSAlPM296brTOcLgMRqEeylYTh/CdtvKUvCyyCQTzFuStieWxvZb8mVTMvdPyUpxg=="
+ },
+ "node_modules/tinyexec": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
+ "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.16",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
+ "node_modules/tsconfck": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
+ "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
+ "bin": {
+ "tsconfck": "bin/tsconfck.js"
+ },
+ "engines": {
+ "node": "^18 || >=20"
+ },
+ "peerDependencies": {
+ "typescript": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "optional": true
+ },
+ "node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="
+ },
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-find-after": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
+ "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-modify-children": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
+ "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "array-iterate": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-remove-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+ "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-children": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
+ "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-location": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
+ "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitefu": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz",
+ "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==",
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/which-pm": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-3.0.1.tgz",
+ "integrity": "sha512-v2JrMq0waAI4ju1xU5x3blsxBBMgdgZve580iYMN5frDaLGjbA24fok7wKCsya8KLVO19Ju4XDc5+zTZCJkQfg==",
+ "dependencies": {
+ "load-yaml-file": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=18.12"
+ }
+ },
+ "node_modules/which-pm-runs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
+ "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/widest-line": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz",
+ "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==",
+ "dependencies": {
+ "string-width": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/xxhash-wasm": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
+ "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ },
+ "node_modules/yaml": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
+ "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz",
+ "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.25.76",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-to-json-schema": {
+ "version": "3.25.2",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz",
+ "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==",
+ "peerDependencies": {
+ "zod": "^3.25.28 || ^4"
+ }
+ },
+ "node_modules/zod-to-ts": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz",
+ "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==",
+ "peerDependencies": {
+ "typescript": "^4.9.4 || ^5.0.2",
+ "zod": "^3"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..6f5cf22
--- /dev/null
+++ b/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "tmp-astro",
+ "type": "module",
+ "version": "0.0.1",
+ "engines": {
+ "node": ">=20.11.1"
+ },
+ "scripts": {
+ "dev": "astro dev",
+ "build": "astro build",
+ "preview": "astro preview",
+ "astro": "astro"
+ },
+ "dependencies": {
+ "@astrojs/sitemap": "3.1.5",
+ "@astrojs/tailwind": "^5.1.0",
+ "astro": "^4.11.0",
+ "tailwindcss": "^3.4.19",
+ "three": "^0.184.0"
+ },
+ "devDependencies": {
+ "@tailwindcss/typography": "^0.5.19"
+ }
+}
diff --git a/public/CNAME b/public/CNAME
new file mode 100644
index 0000000..a108a3a
--- /dev/null
+++ b/public/CNAME
@@ -0,0 +1 @@
+handshake.org
diff --git a/public/css/fonts/ibmplexmono.css b/public/css/fonts/ibmplexmono.css
new file mode 100644
index 0000000..47b0c34
--- /dev/null
+++ b/public/css/fonts/ibmplexmono.css
@@ -0,0 +1,116 @@
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: bold;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Bold.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: bold;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-BoldItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 700;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Bold.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 700;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-BoldItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 600;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-SemiBold.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 600;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-SemiBoldItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: normal;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Regular.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-style: italic;
+ font-weight: normal;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Italic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 500;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Medium.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 500;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-MediumItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 400;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Regular.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 400;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Italic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 300;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Light.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 300;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-LightItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 200;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-ExtraLight.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 200;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-ExtraLightItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 100;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-Thin.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 100;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexMono/IBMPlexMono-ThinItalic.ttf');
+}
diff --git a/public/css/fonts/ibmplexsans.css b/public/css/fonts/ibmplexsans.css
new file mode 100644
index 0000000..997e839
--- /dev/null
+++ b/public/css/fonts/ibmplexsans.css
@@ -0,0 +1,116 @@
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: bold;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Bold.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: bold;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-BoldItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 700;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Bold.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 700;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-BoldItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 600;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-SemiBold.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 600;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-SemiBoldItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: normal;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Regular.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-style: italic;
+ font-weight: normal;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Italic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 500;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Medium.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 500;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-MediumItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 400;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Regular.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 400;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Italic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 300;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Light.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 300;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-LightItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 200;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-ExtraLight.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 200;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-ExtraLightItalic.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 100;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-Thin.ttf');
+}
+
+@font-face {
+ font-family: "IBM Plex Sans";
+ font-weight: 100;
+ font-style: italic;
+ src: url('../../fonts/IBMPlexSans/IBMPlexSans-ThinItalic.ttf');
+}
diff --git a/public/css/fonts/nitti.css b/public/css/fonts/nitti.css
new file mode 100644
index 0000000..77763c4
--- /dev/null
+++ b/public/css/fonts/nitti.css
@@ -0,0 +1,14 @@
+@font-face {
+ font-family: "Nitti Light";
+ font-weight: normal;
+ src: url('../../fonts/nitti/nitti-light-v500.eot') format('embedded-opentype'),
+ url('../../fonts/nitti/nitti-light-v500.woff') format('woff');
+}
+
+@font-face {
+ font-family: "Nitti Light";
+ font-weight: bold;
+ src: url('../../fonts/nitti/nitti-medium-v500.eot') format('embedded-opentype'),
+ url('../../fonts/nitti/nitti-medium-v500.woff') format('woff'),
+ url('../../fonts/nitti/nitti-medium-v500.woff2') format('woff2');
+}
diff --git a/public/css/fonts/opensans.css b/public/css/fonts/opensans.css
new file mode 100644
index 0000000..8824ba8
--- /dev/null
+++ b/public/css/fonts/opensans.css
@@ -0,0 +1,114 @@
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 300;
+ src: url('../../fonts/Light/OpenSans-Light.eot');
+ src: url('../../fonts/Light/OpenSans-Light.eot?') format('embedded-opentype'),
+ url('../../fonts/Light/OpenSans-Light.woff2') format('woff2'),
+ url('../../fonts/Light/OpenSans-Light.woff') format('woff'),
+ url('../../fonts/Light/OpenSans-Light.ttf') format('truetype'),
+ url('../../fonts/Light/OpenSans-Light.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 300;
+ font-style: italic;
+ src: url('../../fonts/LightItalic/OpenSans-LightItalic.eot');
+ src: url('../../fonts/LightItalic/OpenSans-LightItalic.eot?') format('embedded-opentype'),
+ url('../../fonts/LightItalic/OpenSans-LightItalic.woff2') format('woff2'),
+ url('../../fonts/LightItalic/OpenSans-LightItalic.woff') format('woff'),
+ url('../../fonts/LightItalic/OpenSans-LightItalic.ttf') format('truetype'),
+ url('../../fonts/LightItalic/OpenSans-LightItalic.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: normal;
+ src: url('../../fonts/Regular/OpenSans-Regular.eot');
+ src: url('../../fonts/Regular/OpenSans-Regular.eot?') format('embedded-opentype'),
+ url('../../fonts/Regular/OpenSans-Regular.woff2') format('woff2'),
+ url('../../fonts/Regular/OpenSans-Regular.woff') format('woff'),
+ url('../../fonts/Regular/OpenSans-Regular.ttf') format('truetype'),
+ url('../../fonts/Regular/OpenSans-Regular.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: normal;
+ font-style: italic;
+ src: url('../../fonts/Regular/OpenSans-Italic.eot');
+ src: url('../../fonts/Italic/OpenSans-Italic.eot?') format('embedded-opentype'),
+ url('../../fonts/Italic/OpenSans-Italic.woff2') format('woff2'),
+ url('../../fonts/Italic/OpenSans-Italic.woff') format('woff'),
+ url('../../fonts/Italic/OpenSans-Italic.ttf') format('truetype'),
+ url('../../fonts/Italic/OpenSans-Italic.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 600;
+ src: url('../../fonts/Semibold/OpenSans-Semibold.eot');
+ src: url('../../fonts/Semibold/OpenSans-Semibold.eot?') format('embedded-opentype'),
+ url('../../fonts/Semibold/OpenSans-Semibold.woff2') format('woff2'),
+ url('../../fonts/Semibold/OpenSans-Semibold.woff') format('woff'),
+ url('../../fonts/Semibold/OpenSans-Semibold.ttf') format('truetype'),
+ url('../../fonts/Semibold/OpenSans-Semibold.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 600;
+ font-style: italic;
+ src: url('../../fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot');
+ src: url('../../fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot?') format('embedded-opentype'),
+ url('../../fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff2') format('woff2'),
+ url('../../fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff') format('woff'),
+ url('../../fonts/SemiboldItalic/OpenSans-SemiboldItalic.ttf') format('truetype'),
+ url('../../fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: bold;
+ src: url('../../fonts/Bold/OpenSans-Bold.eot');
+ src: url('../../fonts/Bold/OpenSans-Bold.eot?') format('embedded-opentype'),
+ url('../../fonts/Bold/OpenSans-Bold.woff2') format('woff2'),
+ url('../../fonts/Bold/OpenSans-Bold.woff') format('woff'),
+ url('../../fonts/Bold/OpenSans-Bold.ttf') format('truetype'),
+ url('../../fonts/Bold/OpenSans-Bold.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: bold;
+ font-style: italic;
+ src: url('../../fonts/BoldItalic/OpenSans-BoldItalic.eot');
+ src: url('../../fonts/BoldItalic/OpenSans-BoldItalic.eot?') format('embedded-opentype'),
+ url('../../fonts/BoldItalic/OpenSans-BoldItalic.woff2') format('woff2'),
+ url('../../fonts/BoldItalic/OpenSans-BoldItalic.woff') format('woff'),
+ url('../../fonts/BoldItalic/OpenSans-BoldItalic.ttf') format('truetype'),
+ url('../../fonts/BoldItalic/OpenSans-BoldItalic.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 800;
+ src: url('../../fonts/ExtraBold/OpenSans-ExtraBold.eot');
+ src: url('../../fonts/ExtraBold/OpenSans-ExtraBold.eot?') format('embedded-opentype'),
+ url('../../fonts/ExtraBold/OpenSans-ExtraBold.woff2') format('woff2'),
+ url('../../fonts/ExtraBold/OpenSans-ExtraBold.woff') format('woff'),
+ url('../../fonts/ExtraBold/OpenSans-ExtraBold.ttf') format('truetype'),
+ url('../../fonts/ExtraBold/OpenSans-ExtraBold.svg') format('svg');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 800;
+ font-style: italic;
+ src: url('../../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot');
+ src: url('../../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot?') format('embedded-opentype'),
+ url('../../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff2') format('woff2'),
+ url('../../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff') format('woff'),
+ url('../../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.ttf') format('truetype'),
+ url('../../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg') format('svg');
+}
diff --git a/public/css/footer.css b/public/css/footer.css
new file mode 100644
index 0000000..d493e7e
--- /dev/null
+++ b/public/css/footer.css
@@ -0,0 +1,163 @@
+footer {
+ flex-shrink: 0; }
+
+#footer .footer-caret-up, #footer .footer-caret-down {
+ pointer-events: none; }
+
+#footer {
+ margin-top: 1em;
+ margin: 0;
+ height: auto; }
+
+#footer div.footer-logo {
+ display: none; }
+#footer .links {
+ color: #ffffff;
+ font-weight: 400;
+ font-size: 14px; }
+#footer .links a {
+ margin-bottom: 0;
+ padding-bottom: 26px; }
+#footer .footer-wrap {
+ flex-direction: row;
+ max-width: 1300px;
+ margin: 0 auto;
+ padding: 42px 180px 70px;
+ display: flex; }
+#footer .footer-wrap h3 {
+ font-weight: 500;
+ text-transform: uppercase;
+ margin-bottom: 12px; }
+#footer .footer-wrap nav {
+ margin-right: 80px;
+ width: 200px; }
+#footer .footer-wrap nav .links {
+ display: flex;
+ flex-direction: column; }
+#footer .footer-wrap nav .links a {
+ text-decoration: none;
+ font-size: 0.937em;
+ font-weight: 500; }
+#footer .footer-wrap > :last-child {
+ display: flex;
+ justify-content: flex-start; }
+#footer .footer-wrap > p {
+ color: rgba(194, 194, 194, 0.5);
+ font-size: 12px;
+ max-width: unset; }
+
+#footer .bottom-wrap {
+ display: flex;
+ flex-direction: row;
+ padding: 0px 70px;
+ border-top: 1px solid rgba(71, 64, 104, 0.5);
+ justify-content: space-between;
+ align-items: center;
+ font-size: 0.75em;
+ min-height: 5em; }
+#footer .bottom-wrap:last-of-type {
+ border: unset; }
+#footer .bottom-wrap a, #footer .bottom-wrap .copy {
+ color: white; }
+#footer h4 {
+ font-weight: 100;
+ font-size: 14px;
+ color: white;
+ padding: 0 70px;
+ margin-top: 0; }
+
+.dark #footer h3, .ownership #footer h3 {
+ color: white; }
+
+.dark #footer {
+ background-color: black; }
+
+.ownership #footer {
+ background-color: #251C47; }
+
+.landing #footer, .light #footer {
+ background-color: black; }
+.landing #footer h3, .light #footer h3 {
+ color: white; }
+.landing #footer .links a, .light #footer .links a {
+ color: white; }
+
+.social-icons, .social-icons-small-footer {
+ display: flex;
+ justify-content: space-between; }
+.social-icons a, .social-icons-small-footer a {
+ margin-left: 0;
+ margin-right: 25px; }
+.social-icons a img, .social-icons-small-footer a img {
+ height: 26px; }
+
+.coindrop-message-mobile {
+ display: none; }
+
+.header {
+ display: flex; }
+.header span {
+ display: none; }
+.header > h3 {
+ flex: 1 0 auto;
+ margin: 0;
+ margin-bottom: 1.375em;
+ font-size: 1.063em;
+ color: #696589; }
+.header a {
+ color: white;
+ text-decoration: none;
+ font-weight: normal; }
+
+@media (max-width: 1024px) {
+ #footer {
+ height: auto; }
+ #footer .bottom-wrap {
+ align-items: flex-start;
+ flex-direction: column;
+ padding: 0 25px; }
+ #footer .bottom-wrap a, #footer .bottom-wrap .copy {
+ padding: 15px 0px; }
+ #footer .footer-wrap {
+ padding: 25px; }
+ #footer h4 {
+ padding: 15px 25px; }
+ #footer .footer-wrap {
+ padding: 0;
+ flex-direction: column; }
+ #footer .footer-wrap > * {
+ width: 100%;
+ padding: 0; }
+ #footer .footer-wrap.bottom-wrap {
+ padding: 0 25px 25px; }
+ #footer .footer-wrap a {
+ padding-bottom: 1.5em; }
+ #footer .footer-wrap h3 {
+ padding-left: 0;
+ margin: 0;
+ font-weight: 500; }
+ #footer .footer-wrap nav {
+ padding: 0;
+ width: 100%; }
+ #footer .footer-wrap nav .header {
+ border-top: 1px solid rgba(71, 64, 104, 0.5); }
+ #footer .footer-wrap nav .header span {
+ display: initial; }
+ #footer .footer-wrap nav .header span.hide {
+ display: none; }
+ #footer .footer-wrap nav .links {
+ display: none; }
+ #footer .footer-wrap nav .links.open {
+ display: flex;
+ padding-left: 1.7em;
+ padding-right: 2em; }
+ #footer .footer-wrap nav .header {
+ cursor: pointer;
+ padding-left: 1.5em;
+ padding-right: 2em;
+ padding-top: 1.5em;
+ padding-bottom: 1.5em; }
+ #footer .footer-wrap nav .header h3 {
+ text-align: left; } }
+
+/*# sourceMappingURL=footer.css.map */
diff --git a/public/css/marketing.css b/public/css/marketing.css
new file mode 100644
index 0000000..8499d86
--- /dev/null
+++ b/public/css/marketing.css
@@ -0,0 +1,1217 @@
+/* Eric Meyer's CSS Reset
+ http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+ This is a Sass partial
+*/
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ vertical-align: baseline; }
+
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
+ display: block; }
+
+body {
+ line-height: 1; }
+
+ol, ul {
+ list-style: none; }
+
+blockquote, q {
+ quotes: none; }
+
+blockquote:before, blockquote:after, q:before, q:after {
+ content: '';
+ content: none; }
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+/* BEGIN Light */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Light/OpenSans-Light.eot?v=1.1.0");
+ src: url("../fonts/Light/OpenSans-Light.eot?") format("embedded-opentype"), url("../fonts/Light/OpenSans-Light.woff2?v=1.1.0") format("woff2"), url("../fonts/Light/OpenSans-Light.woff?v=1.1.0") format("woff"), url("../fonts/Light/OpenSans-Light.ttf?v=1.1.0") format("truetype"), url("../fonts/Light/OpenSans-Light.svg?v=1.1.0") format("svg");
+ font-weight: 300;
+ font-style: normal; }
+/* END Light */
+/* BEGIN Light Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/LightItalic/OpenSans-LightItalic.eot?v=1.1.0");
+ src: url("../fonts/LightItalic/OpenSans-LightItalic.eot?") format("embedded-opentype"), url("../fonts/LightItalic/OpenSans-LightItalic.woff2?v=1.1.0") format("woff2"), url("../fonts/LightItalic/OpenSans-LightItalic.woff?v=1.1.0") format("woff"), url("../fonts/LightItalic/OpenSans-LightItalic.ttf?v=1.1.0") format("truetype"), url("../fonts/LightItalic/OpenSans-LightItalic.svg?v=1.1.0") format("svg");
+ font-weight: 300;
+ font-style: italic; }
+/* END Light Italic */
+/* BEGIN Regular */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Regular/OpenSans-Regular.eot?v=1.1.0");
+ src: url("../fonts/Regular/OpenSans-Regular.eot?") format("embedded-opentype"), url("../fonts/Regular/OpenSans-Regular.woff2?v=1.1.0") format("woff2"), url("../fonts/Regular/OpenSans-Regular.woff?v=1.1.0") format("woff"), url("../fonts/Regular/OpenSans-Regular.ttf?v=1.1.0") format("truetype"), url("../fonts/Regular/OpenSans-Regular.svg?v=1.1.0") format("svg");
+ font-weight: normal;
+ font-style: normal; }
+/* END Regular */
+/* BEGIN Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Italic/OpenSans-Italic.eot?v=1.1.0");
+ src: url("../fonts/Italic/OpenSans-Italic.eot?") format("embedded-opentype"), url("../fonts/Italic/OpenSans-Italic.woff2?v=1.1.0") format("woff2"), url("../fonts/Italic/OpenSans-Italic.woff?v=1.1.0") format("woff"), url("../fonts/Italic/OpenSans-Italic.ttf?v=1.1.0") format("truetype"), url("../fonts/Italic/OpenSans-Italic.svg?v=1.1.0") format("svg");
+ font-weight: normal;
+ font-style: italic; }
+/* END Italic */
+/* BEGIN Semibold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Semibold/OpenSans-Semibold.eot?v=1.1.0");
+ src: url("../fonts/Semibold/OpenSans-Semibold.eot?") format("embedded-opentype"), url("../fonts/Semibold/OpenSans-Semibold.woff2?v=1.1.0") format("woff2"), url("../fonts/Semibold/OpenSans-Semibold.woff?v=1.1.0") format("woff"), url("../fonts/Semibold/OpenSans-Semibold.ttf?v=1.1.0") format("truetype"), url("../fonts/Semibold/OpenSans-Semibold.svg?v=1.1.0") format("svg");
+ font-weight: 600;
+ font-style: normal; }
+/* END Semibold */
+/* BEGIN Semibold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot?v=1.1.0");
+ src: url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot?") format("embedded-opentype"), url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff2?v=1.1.0") format("woff2"), url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff?v=1.1.0") format("woff"), url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.ttf?v=1.1.0") format("truetype"), url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg?v=1.1.0") format("svg");
+ font-weight: 600;
+ font-style: italic; }
+/* END Semibold Italic */
+/* BEGIN Bold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Bold/OpenSans-Bold.eot?v=1.1.0");
+ src: url("../fonts/Bold/OpenSans-Bold.eot?") format("embedded-opentype"), url("../fonts/Bold/OpenSans-Bold.woff2?v=1.1.0") format("woff2"), url("../fonts/Bold/OpenSans-Bold.woff?v=1.1.0") format("woff"), url("../fonts/Bold/OpenSans-Bold.ttf?v=1.1.0") format("truetype"), url("../fonts/Bold/OpenSans-Bold.svg?v=1.1.0") format("svg");
+ font-weight: bold;
+ font-style: normal; }
+/* END Bold */
+/* BEGIN Bold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/BoldItalic/OpenSans-BoldItalic.eot?v=1.1.0");
+ src: url("../fonts/BoldItalic/OpenSans-BoldItalic.eot?") format("embedded-opentype"), url("../fonts/BoldItalic/OpenSans-BoldItalic.woff2?v=1.1.0") format("woff2"), url("../fonts/BoldItalic/OpenSans-BoldItalic.woff?v=1.1.0") format("woff"), url("../fonts/BoldItalic/OpenSans-BoldItalic.ttf?v=1.1.0") format("truetype"), url("../fonts/BoldItalic/OpenSans-BoldItalic.svg?v=1.1.0") format("svg");
+ font-weight: bold;
+ font-style: italic; }
+/* END Bold Italic */
+/* BEGIN Extrabold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/ExtraBold/OpenSans-ExtraBold.eot?v=1.1.0");
+ src: url("../fonts/ExtraBold/OpenSans-ExtraBold.eot?") format("embedded-opentype"), url("../fonts/ExtraBold/OpenSans-ExtraBold.woff2?v=1.1.0") format("woff2"), url("../fonts/ExtraBold/OpenSans-ExtraBold.woff?v=1.1.0") format("woff"), url("../fonts/ExtraBold/OpenSans-ExtraBold.ttf?v=1.1.0") format("truetype"), url("../fonts/ExtraBold/OpenSans-ExtraBold.svg?v=1.1.0") format("svg");
+ font-weight: 800;
+ font-style: normal; }
+/* END Extrabold */
+/* BEGIN Extrabold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot?v=1.1.0");
+ src: url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot?") format("embedded-opentype"), url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff2?v=1.1.0") format("woff2"), url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff?v=1.1.0") format("woff"), url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.ttf?v=1.1.0") format("truetype"), url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg?v=1.1.0") format("svg");
+ font-weight: 800;
+ font-style: italic; }
+/* END Extrabold Italic */
+/*# sourceMappingURL=open-sans.css.map */
+@media (max-width: 46rem) {
+ .nomobile, .tablet, .desktop {
+ display: none !important; } }
+@media (min-width: 46.001rem) and (max-width: 63rem) {
+ .mobile, .notablet, .desktop {
+ display: none !important; } }
+@media (min-width: 63.001rem) {
+ .mobile, .tablet, .nodesktop {
+ display: none !important; } }
+@media (max-width: 46rem) {
+ .nomobile, .tablet, .desktop {
+ display: none !important; } }
+@media (min-width: 46.001rem) and (max-width: 63rem) {
+ .mobile, .notablet, .desktop {
+ display: none !important; } }
+@media (min-width: 63.001rem) {
+ .mobile, .tablet, .nodesktop {
+ display: none !important; } }
+.header-wrapper {
+ display: flex;
+ justify-content: center; }
+.header-wrapper .inner-wrapper {
+ max-width: 1440px;
+ width: 100%; }
+
+#overlay {
+ background-color: transparent;
+ display: none;
+ height: 2500%;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ z-index: 9; }
+
+.nav-bar {
+ font-family: "Nitti Light", Helvetica, sans-serif;
+ -ms-flex-align: center;
+ -ms-grid-row-align: center;
+ position: relative;
+ z-index: 8;
+ align-items: center;
+ padding: 30px 50px;
+ justify-content: space-between; }
+@media (max-width: 63rem) {
+ .nav-bar {
+ justify-content: space-between; } }
+@media(max-width: 414px) {
+ .nav-bar {
+ padding-left: 25px;
+ padding-right: 25px; } }
+.nav-bar a.nav-logo {
+ margin-left: unset;
+ text-align: center; }
+.nav-bar a.nav-logo img {
+ max-width: 140px; }
+.nav-bar .nav-right {
+ align-items: center;
+ display: flex;
+ display: -ms-flexbox;
+ justify-content: flex-end;
+ margin-top: 13px; }
+.nav-bar .nav-right.links-left {
+ width: 100%;
+ justify-content: flex-start; }
+@media (max-width: 63rem) {
+ .nav-bar .nav-right.links-left {
+ width: unset; } }
+.nav-bar .nav-right .nav-links.user-menu {
+ margin-left: 50px; }
+@media (max-width: 63rem) {
+ .nav-bar .nav-right .nav-links.user-menu {
+ margin-left: 0; } }
+.nav-bar, .nav-bar .nav-links > ul {
+ display: -ms-flexbox;
+ display: flex; }
+.nav-bar a, .nav-bar .nav-links > ul a {
+ font-size: 14px;
+ line-height: 14px;
+ margin-left: 30px;
+ font-weight: 600;
+ color: #000;
+ text-transform: uppercase;
+ text-decoration: none; }
+.nav-bar a:hover, .nav-bar .nav-links > ul a:hover {
+ text-decoration: underline; }
+.nav-bar .user-menu, .nav-bar .nav-links > ul .user-menu {
+ flex: 0 0 auto; }
+.nav-bar .user-menu .dropdown a, .nav-bar .nav-links > ul .user-menu .dropdown a {
+ height: 30px;
+ line-height: 30px;
+ margin-left: 0;
+ margin-top: 12px; }
+> .nav-bar .user-menu .dropdown:before, > .nav-bar .nav-links > ul .user-menu .dropdown:before {
+ display: inline-block;
+ width: 30px;
+ height: 30px; }
+> .nav-bar .user-menu .dropdown:after, > .nav-bar .nav-links > ul .user-menu .dropdown:after {
+ display: inline-block;
+ margin-left: 5px;
+ width: 12px;
+ height: 5px;
+ vertical-align: top; }
+.nav-bar .user-menu .dropdown .dropdown-menu, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu {
+ display: block;
+ position: absolute;
+ right: 40px;
+ top: 70px;
+ border-radius: 10px;
+ text-align: left;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); }
+.nav-bar .user-menu .dropdown .dropdown-menu.hide, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu.hide {
+ display: none; }
+.nav-bar .user-menu .dropdown .dropdown-menu ul, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu ul {
+ flex-direction: column;
+ padding-left: 28px;
+ padding-right: 28px; }
+.nav-bar .user-menu .dropdown .dropdown-menu li, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu li {
+ display: block;
+ margin-left: 0px;
+ color: black;
+ padding: 0.5em 0; }
+.nav-bar .user-menu .dropdown .dropdown-menu .dropdown-header, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu .dropdown-header {
+ align-items: center;
+ border-bottom: 1px solid #505274;
+ padding: 15px 20px;
+ display: flex;
+ display: -ms-flexbox;
+ -ms-flex-align: center;
+ align-items: center;
+ border-bottom: 1px solid #c2c2c2;
+ padding: 15px 20px; }
+.nav-bar .user-menu .dropdown .dropdown-menu .dropdown-header h5, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu .dropdown-header h5 {
+ margin: 0;
+ margin-top: 5px; }
+.nav-bar .user-menu .dropdown .dropdown-menu .dropdown-header a.button, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu .dropdown-header a.button {
+ background: #693AFA;
+ color: white;
+ margin-left: 10px;
+ margin-right: 0;
+ float: right;
+ padding: 5px 10px;
+ text-transform: none;
+ font-size: 12px; }
+.nav-bar .user-menu .dropdown .dropdown-menu .dropdown-header h5, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu .dropdown-header h5 {
+ color: #A5A5A5;
+ border: none;
+ margin-right: 5px;
+ margin-top: 13px;
+ font-size: 9px; }
+
+.dropdown .dropdown-menu.overflow {
+ right: 10px; }
+
+.dropdown .dropdown-menu:not(.dropdown-menu-header) {
+ padding-top: 38px; }
+
+.dark .dropdown .dropdown-menu .dropdown-header {
+ background-color: black; }
+.dark .dropdown .dropdown-menu .dropdown-header h5 {
+ color: #8B8B8B; }
+
+.landing .dropdown .dropdown-menu .dropdown-header, .light .dropdown .dropdown-menu .dropdown-header {
+ background-color: #F2F2F2; }
+.landing .dropdown .dropdown-menu .dropdown-header .button, .light .dropdown .dropdown-menu .dropdown-header .button {
+ background: #693AFA;
+ color: white;
+ margin-left: 10px;
+ float: right;
+ text-transform: none; }
+.landing .dropdown .dropdown-menu .dropdown-header h5, .light .dropdown .dropdown-menu .dropdown-header h5 {
+ color: #A5A5A5;
+ border: none;
+ margin-right: 5px;
+ font-size: 9px; }
+
+.light .user-menu .dropdown > a:before, .landing .user-menu .dropdown > a:before {
+ content: url("../img/icons/user_icon_black.svg"); }
+
+.dark .user-menu .dropdown > a:before, .ownership .user-menu .dropdown > a:before {
+ content: url("../img/icons/user_icon_white.svg"); }
+
+.dark .dropdown .dropdown-menu {
+ background-color: black;
+ color: white; }
+
+.ownership .dropdown .dropdown-menu {
+ background-color: #434262;
+ color: white; }
+
+.light .dropdown .dropdown-menu, .landing .dropdown .dropdown-menu {
+ background-color: white;
+ color: black; }
+.light .dropdown .dropdown-menu ul, .landing .dropdown .dropdown-menu ul {
+ color: green;
+ padding: 25px 0px;
+ background-color: #F2F2F2; }
+
+dropdown .dropdown-menu li {
+ display: block;
+ margin-left: 0px; }
+
+#burgernav {
+ position: absolute;
+ right: 0;
+ width: 100%;
+ top: 105px;
+ z-index: 10;
+ color: black;
+ padding: 2em 0 1.5em;
+ display: none;
+ border-top: #cccccc 1px solid;
+ border-bottom: 1px solid #cccccc; }
+
+.landing #burgernav, .light #burgernav {
+ background-color: white; }
+
+.dark #burgernav {
+ background-color: black; }
+.dark #burgernav a {
+ color: white; }
+
+.ownership #burgernav {
+ background-color: #251C47; }
+.ownership #burgernav a {
+ color: white; }
+
+#burgernav ul {
+ display: block;
+ margin: 0;
+ text-transform: uppercase; }
+
+#burgernav li {
+ list-style: none;
+ margin-left: 0; }
+
+#burgernav li ul {
+ text-transform: none; }
+
+#burgernav li a {
+ padding: 1em 0;
+ font-weight: 100;
+ display: block;
+ font-size: initial;
+ text-align: left;
+ font-weight: bold; }
+#burgernav li a:hover {
+ text-decoration: underline; }
+
+#burgernav li a.button {
+ font-weight: bold;
+ padding: 5px 10px;
+ text-align: center; }
+
+.dark #burgernav li a.button {
+ color: black; }
+
+#burgernav.dropped {
+ display: block; }
+
+.hide {
+ display: none; }
+
+.burgermenu {
+ font-size: 2.5em;
+ display: none; }
+
+@media (max-width: 63rem) {
+ .nav-links:not(.user-menu) {
+ display: none; }
+
+ .user-menu li {
+ margin-left: 0; }
+
+ .burgermenu {
+ display: inherit; } }
+.active-nav {
+ overflow-y: visible; }
+
+.active-nav #overlay {
+ display: block; }
+
+.dark header {
+ background-color: black;
+ background: black; }
+.dark, .dark .nav-links ul li a {
+ color: white; }
+.dark .logo-dark {
+ display: none; }
+.dark .logo-light {
+ display: block; }
+.dark .burgermenu {
+ background-color: black; }
+
+.light header {
+ background-color: #f7f9fb; }
+.light .burgermenu {
+ background-color: #white; }
+.light, .light .nav-links ul li a {
+ color: black; }
+.light .logo-light {
+ display: none; }
+.light .logo-dark {
+ display: block; }
+
+.ownership header {
+ background-color: #251C47;
+ border-bottom: 1px solid #505274; }
+.ownership header .nav-bar .nav-links {
+ justify-content: flex-start; }
+.ownership header .nav-bar .logo-dark {
+ display: none; }
+
+.landing header .logo-light {
+ display: none; }
+.landing header .nav-links ul li a {
+ color: black; }
+
+.ownership .nav-bar .nav-links a {
+ color: white;
+ margin-top: 11px; }
+
+.no-js-fix {
+ display: none; }
+
+.no-js .no-js-fix {
+ display: inline; }
+
+.no-js .on-js-fix {
+ display: none; }
+
+html {
+ height: 100%;
+ margin: 0;
+ padding: 0; }
+
+body {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ height: 100%;
+ font-family: "Nitti Light", Helvetica, sans-serif;
+ margin: 0 auto;
+ max-width: 100%;
+ overflow-x: hidden;
+ padding: 0; }
+body.light {
+ color: #000000;
+ background-color: #ffffff; }
+body p {
+ font-size: 17px;
+ font-weight: 400;
+ line-height: 34px; }
+
+h1, h2, h3, h4, h5, h6, p {
+ margin-top: 0;
+ margin-bottom: 12px; }
+
+h1 {
+ margin-bottom: 50px; }
+h1.low-margin {
+ margin-bottom: 30px; }
+
+.content {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto; }
+.content .wrapper {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 100%;
+ width: 100%; }
+
+.columns {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ margin-bottom: 30px; }
+.columns > img#faucet {
+ width: 90px;
+ margin-left: 10px; }
+
+section {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ width: 100%;
+ padding: 70px 0; }
+section .section-wrapper {
+ box-sizing: border-box;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ max-width: 1064px;
+ margin: 0 50px;
+ width: calc(100% - 100px);
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: column; }
+section .section-wrapper.faq {
+ flex-direction: row; }
+section .section-wrapper > div.columns {
+ display: inherit;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ align-items: stretch; }
+section .section-wrapper > div.columns.wide-left div:first-of-type {
+ width: 60%; }
+section .section-wrapper > div.columns.wide-left div:nth-of-type(2) {
+ text-align: center;
+ width: 40%; }
+section .section-wrapper > div.columns > div {
+ width: 43.5%; }
+section .section-wrapper > div.columns > div .faucet-cta {
+ border: 1px solid black;
+ padding: 50px;
+ background-color: white; }
+section .section-wrapper > div.columns > div .faucet-cta p:last-of-type {
+ margin-bottom: 0; }
+section .section-wrapper > div.columns > div .faucet-cta p.button-wrap a.button {
+ width: calc(100% - 100px);
+ padding: 20px 35px;
+ text-align: center;
+ display: block; }
+section .button {
+ font-size: 16px;
+ font-weight: 600;
+ height: 24px;
+ line-height: 24px;
+ text-decoration: none;
+ padding: 16px 30px;
+ border-radius: 5px; }
+section a.button {
+ color: white; }
+
+/* Chrome/Opera/Safari */
+::-webkit-input-placeholder {
+ color: #c2c2c2; }
+
+/* Firefox 19+ */
+::-moz-placeholder {
+ color: #c2c2c2; }
+
+/* IE 10+ */
+::-ms-input-placeholder {
+ color: #c2c2c2; }
+
+/* Firefox 18- */
+::-moz-placeholder {
+ color: #c2c2c2; }
+
+h1 {
+ font-family: "IBM Plex Sans", Helvetica, sans-serif;
+ line-height: 75px;
+ font-size: 68px;
+ font-weight: 600;
+ margin-top: 0; }
+
+h2 {
+ font-size: 36px;
+ font-weight: 600;
+ line-height: 46px;
+ margin-bottom: 30px;
+ max-width: 884px; }
+
+h3 {
+ font-size: 20px;
+ font-weight: 600;
+ line-height: 34px; }
+
+h4 {
+ font-size: 16px;
+ line-height: 32px;
+ font-weight: 400; }
+
+h5 {
+ border: 1px solid #ffffff;
+ display: block;
+ margin: 0;
+ padding: 0; }
+
+.space-top {
+ padding-top: 30px; }
+
+.no-pad {
+ padding-bottom: unset;
+ padding-top: unset;
+ margin: unset; }
+
+.footnote {
+ font-size: 10px; }
+
+.cta {
+ text-align: center;
+ margin-top: 2em !important; }
+
+.purple-link {
+ color: #693AFA !important;
+ text-decoration: underline !important; }
+.purple-link:hover {
+ color: #5630CD !important; }
+
+.long-list-item {
+ word-wrap: break-word; }
+
+a {
+ color: #693AFA;
+ font-weight: 400; }
+
+.community ul li {
+ margin-bottom: 30px; }
+.community .hero-no-split ul li {
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center; }
+.community .hero-no-split strong {
+ display: block; }
+
+ul.events {
+ list-style: none;
+ padding: 0; }
+ul.events li {
+ margin-bottom: 30px; }
+ul.events li span, ul.events li a {
+ display: inline-block;
+ margin-bottom: 12px; }
+ul.events li span {
+ font-weight: bold;
+ width: 205px; }
+
+.name-container strong {
+ display: inline-block;
+ line-height: 34px; }
+
+p {
+ margin-bottom: 30px;
+ max-width: 884px; }
+
+ul.name-list {
+ padding: 0;
+ margin: 0;
+ list-style-type: none;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-line-pack: justify;
+ align-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ul.name-list + strong {
+ margin-top: 30px; }
+ul.name-list li {
+ width: 33.33%;
+ margin: 0; }
+ul.name-list a {
+ text-decoration: none;
+ color: black;
+ font-weight: 400;
+ line-height: 34px; }
+
+ul.notes {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0;
+ flex-wrap: wrap;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+ul.notes strong {
+ display: inline-block;
+ margin-right: 10px; }
+ul.notes.pad {
+ margin-bottom: unset; }
+ul.notes li {
+ margin-top: 12px;
+ max-width: 43.5%;
+ min-height: 160px;
+ line-height: 34px;
+ position: relative;
+ display: block;
+ padding-top: 20px;
+ -webkit-box-flex: 1;
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto; }
+ul.notes li:before {
+ content: " ";
+ background: black;
+ height: 5px;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 32px; }
+
+img:not(.logo) {
+ max-width: 100%; }
+
+.inner-wrap {
+ max-width: 884px; }
+.inner-wrap h2 {
+ font-weight: normal; }
+
+.center {
+ text-align: center; }
+
+#privacy-policy h4, #terms-of-use h4 {
+ margin: 0 0 5px; }
+#privacy-policy ul, #terms-of-use ul {
+ display: block;
+ list-style: none;
+ max-width: 884px; }
+
+#terms-of-use ul li {
+ margin-bottom: 30px;
+ line-height: 32px; }
+
+.links a {
+ display: block;
+ margin: 0 0 30px; }
+.links a.button {
+ display: inline-block; }
+
+.text a {
+ text-decoration: none;
+ color: black; }
+.text a:hover {
+ color: black;
+ text-decoration: underline; }
+
+#roadmap ol {
+ margin: 0;
+ padding: 0;
+ display: flex;
+ list-style-type: none;
+ justify-content: space-between; }
+
+#roadmap ol li {
+ position: relative;
+ padding: 80px 30px 0 0;
+ display: block;
+ width: 28%; }
+
+#roadmap ol li p {
+ margin: 15px 0;
+ line-height: 200%; }
+
+#roadmap ol li:before {
+ position: absolute;
+ left: 0;
+ top: 10px;
+ width: 60px;
+ height: 60px;
+ border-radius: 30px;
+ background: #222646;
+ content: " "; }
+
+#roadmap ol li:after {
+ position: absolute;
+ left: 90px;
+ top: 38px;
+ width: 310px;
+ height: 4px;
+ border-radius: 30px;
+ background: #222646;
+ content: " "; }
+
+#roadmap ol li:first-child:before {
+ background: #00f9ca; }
+
+#roadmap ol li:last-child:after {
+ content: none; }
+
+#roadmap ol li.phase-2 {
+ margin-top: 60px; }
+
+#roadmap ol li.phase-3 {
+ margin-top: 120px; }
+
+#roadmap .date {
+ font-style: italic; }
+
+.center-link {
+ max-width: unset;
+ width: 100%;
+ text-align: center;
+ margin-top: 50px; }
+
+body.landing .links {
+ display: block; }
+body.landing .links a {
+ display: block; }
+body.landing .links .verified {
+ display: inline-block; }
+body.landing .button:hover {
+ color: white !important; }
+
+.hero-info {
+ padding: 14px 0px; }
+.hero-info:not(:last-child) {
+ border-bottom: 1px solid #C2C2C2; }
+.hero-info h4 {
+ padding-bottom: 0px;
+ margin-bottom: 0px;
+ font-weight: 600;
+ font-size: 1em; }
+.hero-info p {
+ margin-bottom: 0; }
+
+.hero-no-split {
+ display: flex;
+ flex-direction: column;
+ align-items: center; }
+.hero-no-split ul li {
+ width: unset; }
+.hero-no-split p {
+ margin-bottom: 0; }
+.hero-no-split p a {
+ color: #693AFA; }
+.hero-no-split h4 {
+ padding-bottom: 0px;
+ margin-bottom: 0px;
+ font-weight: 600;
+ font-size: 1em; }
+.hero-no-split ul {
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ -webkit-box-pack: justify;
+ -ms-flex-wrap: wrap;
+ -ms-flex-pack: justify; }
+.hero-no-split ul li {
+ margin: 0 70px 12px 0; }
+.hero-no-split ul h4 {
+ font-weight: 600; }
+.hero-no-split ul h4, .hero-no-split ul p {
+ margin-bottom: 0; }
+.hero-no-split.short {
+ height: 300px; }
+
+.light .button, .default .button {
+ background-color: #693AFA; }
+
+.light .button:hover, .default .button:hover {
+ background-color: #5630CD; }
+
+.light .button {
+ color: white; }
+
+.default .button {
+ color: #f7f9fb; }
+
+.light .nav-links .button, .landing .nav-links .button, .default .nav-links .button {
+ padding: 12px 20px;
+ border-radius: 5px;
+ background-color: #693AFA;
+ color: white; }
+.light .nav-links .button:hover, .landing .nav-links .button:hover, .default .nav-links .button:hover {
+ background-color: #5630CD; }
+
+section.light {
+ background-color: white; }
+
+section.default {
+ background-color: #f7f9fb; }
+
+.foss-list {
+ max-width: 800px;
+ display: block;
+ width: 90%;
+ margin-left: 1.5em;
+ padding-bottom: 2em; }
+.foss-list li {
+ padding-top: 0.4em; }
+
+.cta {
+ text-align: center; }
+
+.collapse-margin {
+ margin: 0; }
+
+#faq h2:first-of-type {
+ margin-top: 0; }
+#faq h2 {
+ margin-top: 70px; }
+#faq .links {
+ width: 150px; }
+#faq .links a {
+ display: block;
+ color: black;
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 35px;
+ text-decoration: none; }
+#faq .links a:hover {
+ text-decoration: underline; }
+#faq .links a.active {
+ color: #693AFA; }
+
+#questions {
+ margin-left: 100px; }
+#questions .question h3 {
+ border-bottom: 1px solid black;
+ display: flex;
+ justify-content: space-between;
+ padding: 30px 0; }
+#questions .question ul {
+ display: block;
+ line-height: 22px;
+ margin-top: 5px; }
+
+.airdrop-phase ul {
+ list-style-type: circle;
+ padding-left: 30px; }
+.airdrop-phase ul li {
+ line-height: 22px;
+ margin-bottom: 22px; }
+
+#phase-2 img {
+ max-width: 60%; }
+
+@media (max-width: 900px) {
+ #roadmap {
+ padding-top: 45px; }
+
+ #roadmap h2 {
+ display: inline-block;
+ text-align: left;
+ margin-bottom: 40px; }
+
+ #roadmap h2:before {
+ position: relative;
+ left: -30px;
+ width: 110%;
+ margin-bottom: 22px; }
+
+ #roadmap ol {
+ flex-direction: column;
+ padding: 0; }
+
+ #roadmap ol li {
+ padding-top: 0;
+ padding-left: 80px;
+ width: auto; }
+
+ #roadmap ol li:after {
+ left: 28px;
+ top: 80px;
+ bottom: 10px;
+ width: 4px;
+ height: auto;
+ /* this should be 20px but theres a space already there that 10px */
+ margin-top: 10px; }
+
+ #roadmap ol li h3 {
+ text-align: left; }
+
+ #roadmap ol li:last-child:after {
+ content: none; }
+
+ #roadmap ol li.phase-2, #roadmap ol li.phase-3 {
+ margin-top: 0; } }
+@media(max-width: 1200px) {
+ ul.notes li {
+ min-height: 106px; }
+
+ .name-list li.text {
+ width: 50%; }
+ .name-list li.text.stanford {
+ letter-spacing: -0.5px; }
+
+ .name-container strong, .name-container li {
+ font-size: 16px; } }
+@media(max-width: 1024px) {
+ h2 {
+ margin-bottom: 30px; }
+
+ body p {
+ margin-bottom: 30px; }
+
+ ul + strong {
+ margin-top: 30px; }
+ ul.name-list {
+ margin-bottom: 0; }
+ ul.notes li {
+ margin-bottom: 30px;
+ min-height: unset; }
+
+ .light .nav-bar {
+ background-color: white; }
+
+ .nav-bar .nav-links:not(.user-menu) {
+ display: none; }
+
+ .nav-bar .burgermenu {
+ display: inherit; }
+
+ .hero.short {
+ height: 200px;
+ min-height: unset; }
+
+ .center-wrap {
+ padding-left: 30px;
+ padding-right: 30px; }
+
+ section:first-of-type .center-wrap {
+ padding-left: 25px;
+ padding-right: 25px; }
+ section:first-of-type .center-wrap .hero {
+ flex-direction: column;
+ margin-left: 0;
+ align-items: left; }
+ section:first-of-type .center-wrap .hero .left {
+ max-width: 100%; }
+ section:first-of-type .center-wrap .hero .left h2 {
+ font-size: 44px; }
+ section:first-of-type .center-wrap .hero .right {
+ max-width: 100%;
+ margin: 0; }
+
+ #faq .links {
+ display: none; }
+
+ #questions {
+ margin-left: 0; }
+
+ #landing .center-wrap {
+ height: unset; }
+ #landing li:first-of-type {
+ margin: 0; }
+ #landing li {
+ margin: 0 50px 0 0; }
+ #landing p {
+ margin-bottom: 30px; }
+
+ #questions h2 {
+ margin-top: 50px;
+ margin-bottom: 0; } }
+@media(max-width: 768px) {
+ section .section-wrapper > div.columns {
+ flex-direction: column; }
+ section .section-wrapper > div.columns > div:first-child {
+ margin-bottom: 30px; }
+ section .section-wrapper > div.columns > div {
+ width: 100%; }
+ section .section-wrapper > div.columns.wide-left > div:first-of-type {
+ width: unset; } }
+@media(max-width: 414px) {
+ section .section-wrapper {
+ margin: 0 25px;
+ width: calc(100% - 50px); }
+ section .section-wrapper > div.columns div .faucet-cta {
+ padding: 20px; }
+ section .section-wrapper > div.columns div .faucet-cta p.button-wrap a.button {
+ width: calc(100% - 70px); }
+
+ body p, body .links a, body ul.notes li, body .name-list li.text {
+ font-size: 14px;
+ line-height: 26px;
+ width: 100%; }
+ body .links {
+ margin-bottom: 30px; }
+ body .links a {
+ margin-bottom: 12px; }
+ body p {
+ margin-bottom: 30px; }
+
+ h1 {
+ font-size: 42px;
+ line-height: 48px;
+ margin-bottom: 0; }
+ h1 + * {
+ margin-top: 30px; }
+
+ h2 {
+ font-size: 26px;
+ line-height: 30px; }
+
+ h3 {
+ font-size: 16px;
+ line-height: 24px; }
+ h3 strong {
+ display: block;
+ font-size: 14px; }
+
+ h4 {
+ font-size: 12px; }
+
+ ul li {
+ line-height: 22px; }
+
+ ul {
+ font-size: 14px; }
+ ul + strong {
+ margin-top: 30px; }
+ ul.name-list {
+ font-size: 12px;
+ line-height: 22px;
+ margin-bottom: 30px; }
+ ul.notes li {
+ line-height: 22px;
+ margin-bottom: 30px;
+ min-height: unset;
+ min-width: 100%; }
+ ul.events {
+ display: block;
+ list-style: none;
+ padding: 0; }
+ ul.events li {
+ margin-bottom: 30px; }
+ ul.events li span, ul.events li a {
+ display: block;
+ margin-bottom: 12px; }
+ ul.events li span {
+ font-weight: bold; }
+
+ .community .hero-no-split ul {
+ display: inherit;
+ flex-direction: column;
+ width: 100%;
+ margin-top: 30px; }
+ .community .hero-no-split ul li {
+ align-items: flex-start; } }
+.pledge-body {
+ background-color: #111111;
+ color: #C2C2C2; }
+
+.fo-oh-fo h1 {
+ font-size: 120px; }
+
+.bio ul {
+ margin-bottom: 30px; }
+.bio ul li {
+ line-height: 34px; }
+
+.notice {
+ font-family: Open Sans;
+}
+
+.timeline {
+ line-height: 1.5em;
+}
+
+@media(min-width: 1200px) {
+ .hero-no-split {
+ text-align: center; }
+
+ #faq.fixed #navigation {
+ position: fixed;
+ top: 65px; }
+
+ #faq.absolute #navigation {
+ position: absolute;
+ top: 5945px; }
+
+ #faq.fixed #questions, #faq.absolute #questions {
+ margin-left: 192px; } }
+@media(min-width: 1600px) {
+ #roadmap .center-wrap {
+ max-width: 1600px;
+ margin-left: 90px; } }
+@media(min-width: 2000px) {
+ #roadmap .center-wrap {
+ max-width: 1600px;
+ padding-left: 300px; } }
+
+/*# sourceMappingURL=marketing.css.map */
diff --git a/public/css/newstyle.css b/public/css/newstyle.css
new file mode 100644
index 0000000..0034ec9
--- /dev/null
+++ b/public/css/newstyle.css
@@ -0,0 +1,2124 @@
+/* Eric Meyer's CSS Reset
+ http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+ This is a Sass partial
+*/
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ vertical-align: baseline; }
+
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
+ display: block; }
+
+body {
+ line-height: 1; }
+
+ol, ul {
+ list-style: none; }
+
+blockquote, q {
+ quotes: none; }
+
+blockquote:before, blockquote:after, q:before, q:after {
+ content: '';
+ content: none; }
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+/* BEGIN Light */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Light/OpenSans-Light.eot?v=1.1.0");
+ src: url("../fonts/Light/OpenSans-Light.eot?") format("embedded-opentype"), url("../fonts/Light/OpenSans-Light.woff2?v=1.1.0") format("woff2"), url("../fonts/Light/OpenSans-Light.woff?v=1.1.0") format("woff"), url("../fonts/Light/OpenSans-Light.ttf?v=1.1.0") format("truetype"), url("../fonts/Light/OpenSans-Light.svg?v=1.1.0") format("svg");
+ font-weight: 300;
+ font-style: normal; }
+/* END Light */
+/* BEGIN Light Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/LightItalic/OpenSans-LightItalic.eot?v=1.1.0");
+ src: url("../fonts/LightItalic/OpenSans-LightItalic.eot?") format("embedded-opentype"), url("../fonts/LightItalic/OpenSans-LightItalic.woff2?v=1.1.0") format("woff2"), url("../fonts/LightItalic/OpenSans-LightItalic.woff?v=1.1.0") format("woff"), url("../fonts/LightItalic/OpenSans-LightItalic.ttf?v=1.1.0") format("truetype"), url("../fonts/LightItalic/OpenSans-LightItalic.svg?v=1.1.0") format("svg");
+ font-weight: 300;
+ font-style: italic; }
+/* END Light Italic */
+/* BEGIN Regular */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Regular/OpenSans-Regular.eot?v=1.1.0");
+ src: url("../fonts/Regular/OpenSans-Regular.eot?") format("embedded-opentype"), url("../fonts/Regular/OpenSans-Regular.woff2?v=1.1.0") format("woff2"), url("../fonts/Regular/OpenSans-Regular.woff?v=1.1.0") format("woff"), url("../fonts/Regular/OpenSans-Regular.ttf?v=1.1.0") format("truetype"), url("../fonts/Regular/OpenSans-Regular.svg?v=1.1.0") format("svg");
+ font-weight: normal;
+ font-style: normal; }
+/* END Regular */
+/* BEGIN Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Italic/OpenSans-Italic.eot?v=1.1.0");
+ src: url("../fonts/Italic/OpenSans-Italic.eot?") format("embedded-opentype"), url("../fonts/Italic/OpenSans-Italic.woff2?v=1.1.0") format("woff2"), url("../fonts/Italic/OpenSans-Italic.woff?v=1.1.0") format("woff"), url("../fonts/Italic/OpenSans-Italic.ttf?v=1.1.0") format("truetype"), url("../fonts/Italic/OpenSans-Italic.svg?v=1.1.0") format("svg");
+ font-weight: normal;
+ font-style: italic; }
+/* END Italic */
+/* BEGIN Semibold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Semibold/OpenSans-Semibold.eot?v=1.1.0");
+ src: url("../fonts/Semibold/OpenSans-Semibold.eot?") format("embedded-opentype"), url("../fonts/Semibold/OpenSans-Semibold.woff2?v=1.1.0") format("woff2"), url("../fonts/Semibold/OpenSans-Semibold.woff?v=1.1.0") format("woff"), url("../fonts/Semibold/OpenSans-Semibold.ttf?v=1.1.0") format("truetype"), url("../fonts/Semibold/OpenSans-Semibold.svg?v=1.1.0") format("svg");
+ font-weight: 600;
+ font-style: normal; }
+/* END Semibold */
+/* BEGIN Semibold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot?v=1.1.0");
+ src: url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot?") format("embedded-opentype"), url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff2?v=1.1.0") format("woff2"), url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff?v=1.1.0") format("woff"), url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.ttf?v=1.1.0") format("truetype"), url("../fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg?v=1.1.0") format("svg");
+ font-weight: 600;
+ font-style: italic; }
+/* END Semibold Italic */
+/* BEGIN Bold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/Bold/OpenSans-Bold.eot?v=1.1.0");
+ src: url("../fonts/Bold/OpenSans-Bold.eot?") format("embedded-opentype"), url("../fonts/Bold/OpenSans-Bold.woff2?v=1.1.0") format("woff2"), url("../fonts/Bold/OpenSans-Bold.woff?v=1.1.0") format("woff"), url("../fonts/Bold/OpenSans-Bold.ttf?v=1.1.0") format("truetype"), url("../fonts/Bold/OpenSans-Bold.svg?v=1.1.0") format("svg");
+ font-weight: bold;
+ font-style: normal; }
+/* END Bold */
+/* BEGIN Bold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/BoldItalic/OpenSans-BoldItalic.eot?v=1.1.0");
+ src: url("../fonts/BoldItalic/OpenSans-BoldItalic.eot?") format("embedded-opentype"), url("../fonts/BoldItalic/OpenSans-BoldItalic.woff2?v=1.1.0") format("woff2"), url("../fonts/BoldItalic/OpenSans-BoldItalic.woff?v=1.1.0") format("woff"), url("../fonts/BoldItalic/OpenSans-BoldItalic.ttf?v=1.1.0") format("truetype"), url("../fonts/BoldItalic/OpenSans-BoldItalic.svg?v=1.1.0") format("svg");
+ font-weight: bold;
+ font-style: italic; }
+/* END Bold Italic */
+/* BEGIN Extrabold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/ExtraBold/OpenSans-ExtraBold.eot?v=1.1.0");
+ src: url("../fonts/ExtraBold/OpenSans-ExtraBold.eot?") format("embedded-opentype"), url("../fonts/ExtraBold/OpenSans-ExtraBold.woff2?v=1.1.0") format("woff2"), url("../fonts/ExtraBold/OpenSans-ExtraBold.woff?v=1.1.0") format("woff"), url("../fonts/ExtraBold/OpenSans-ExtraBold.ttf?v=1.1.0") format("truetype"), url("../fonts/ExtraBold/OpenSans-ExtraBold.svg?v=1.1.0") format("svg");
+ font-weight: 800;
+ font-style: normal; }
+/* END Extrabold */
+/* BEGIN Extrabold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot?v=1.1.0");
+ src: url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot?") format("embedded-opentype"), url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff2?v=1.1.0") format("woff2"), url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff?v=1.1.0") format("woff"), url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.ttf?v=1.1.0") format("truetype"), url("../fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg?v=1.1.0") format("svg");
+ font-weight: 800;
+ font-style: italic; }
+/* END Extrabold Italic */
+/*# sourceMappingURL=open-sans.css.map */
+@media (max-width: 46rem) {
+ .nomobile, .tablet, .desktop {
+ display: none !important; } }
+@media (min-width: 46.001rem) and (max-width: 63rem) {
+ .mobile, .notablet, .desktop {
+ display: none !important; } }
+@media (min-width: 63.001rem) {
+ .mobile, .tablet, .nodesktop {
+ display: none !important; } }
+@media (max-width: 46rem) {
+ .nomobile, .tablet, .desktop {
+ display: none !important; } }
+@media (min-width: 46.001rem) and (max-width: 63rem) {
+ .mobile, .notablet, .desktop {
+ display: none !important; } }
+@media (min-width: 63.001rem) {
+ .mobile, .tablet, .nodesktop {
+ display: none !important; } }
+.header-wrapper {
+ display: flex;
+ justify-content: center; }
+.header-wrapper .inner-wrapper {
+ max-width: 1440px;
+ width: 100%; }
+
+#overlay {
+ background-color: transparent;
+ display: none;
+ height: 2500%;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ z-index: 9; }
+
+.nav-bar {
+ font-family: "Nitti Light", Helvetica, sans-serif;
+ -ms-flex-align: center;
+ -ms-grid-row-align: center;
+ position: relative;
+ z-index: 8;
+ align-items: center;
+ padding: 30px 50px;
+ justify-content: space-between; }
+@media (max-width: 63rem) {
+ .nav-bar {
+ justify-content: space-between; } }
+@media(max-width: 414px) {
+ .nav-bar {
+ padding-left: 25px;
+ padding-right: 25px; } }
+.nav-bar a.nav-logo {
+ margin-left: unset;
+ text-align: center; }
+.nav-bar a.nav-logo img {
+ max-width: 140px; }
+.nav-bar .nav-right {
+ align-items: center;
+ display: flex;
+ display: -ms-flexbox;
+ justify-content: flex-end;
+ margin-top: 13px; }
+.nav-bar .nav-right.links-left {
+ width: 100%;
+ justify-content: flex-start; }
+@media (max-width: 63rem) {
+ .nav-bar .nav-right.links-left {
+ width: unset; } }
+.nav-bar .nav-right .nav-links.user-menu {
+ margin-left: 50px; }
+@media (max-width: 63rem) {
+ .nav-bar .nav-right .nav-links.user-menu {
+ margin-left: 0; } }
+.nav-bar, .nav-bar .nav-links > ul {
+ display: -ms-flexbox;
+ display: flex; }
+.nav-bar a, .nav-bar .nav-links > ul a {
+ font-size: 14px;
+ line-height: 14px;
+ margin-left: 30px;
+ font-weight: 600;
+ color: #000;
+ text-transform: uppercase;
+ text-decoration: none; }
+.nav-bar a:hover, .nav-bar .nav-links > ul a:hover {
+ text-decoration: underline; }
+.nav-bar .user-menu, .nav-bar .nav-links > ul .user-menu {
+ flex: 0 0 auto; }
+.nav-bar .user-menu .dropdown a, .nav-bar .nav-links > ul .user-menu .dropdown a {
+ height: 30px;
+ line-height: 30px;
+ margin-left: 0;
+ margin-top: 12px; }
+> .nav-bar .user-menu .dropdown:before, > .nav-bar .nav-links > ul .user-menu .dropdown:before {
+ display: inline-block;
+ width: 30px;
+ height: 30px; }
+> .nav-bar .user-menu .dropdown:after, > .nav-bar .nav-links > ul .user-menu .dropdown:after {
+ display: inline-block;
+ margin-left: 5px;
+ width: 12px;
+ height: 5px;
+ vertical-align: top; }
+.nav-bar .user-menu .dropdown .dropdown-menu, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu {
+ display: block;
+ position: absolute;
+ right: 40px;
+ top: 70px;
+ border-radius: 10px;
+ text-align: left;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); }
+.nav-bar .user-menu .dropdown .dropdown-menu.hide, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu.hide {
+ display: none; }
+.nav-bar .user-menu .dropdown .dropdown-menu ul, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu ul {
+ flex-direction: column;
+ padding-left: 28px;
+ padding-right: 28px; }
+.nav-bar .user-menu .dropdown .dropdown-menu li, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu li {
+ display: block;
+ margin-left: 0px;
+ color: black;
+ padding: 0.5em 0; }
+.nav-bar .user-menu .dropdown .dropdown-menu .dropdown-header, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu .dropdown-header {
+ align-items: center;
+ border-bottom: 1px solid #505274;
+ padding: 15px 20px;
+ display: flex;
+ display: -ms-flexbox;
+ -ms-flex-align: center;
+ align-items: center;
+ border-bottom: 1px solid #c2c2c2;
+ padding: 15px 20px; }
+.nav-bar .user-menu .dropdown .dropdown-menu .dropdown-header h5, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu .dropdown-header h5 {
+ margin: 0;
+ margin-top: 5px; }
+.nav-bar .user-menu .dropdown .dropdown-menu .dropdown-header a.button, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu .dropdown-header a.button {
+ background: #693AFA;
+ color: white;
+ margin-left: 10px;
+ margin-right: 0;
+ float: right;
+ padding: 5px 10px;
+ text-transform: none;
+ font-size: 12px; }
+.nav-bar .user-menu .dropdown .dropdown-menu .dropdown-header h5, .nav-bar .nav-links > ul .user-menu .dropdown .dropdown-menu .dropdown-header h5 {
+ color: #A5A5A5;
+ border: none;
+ margin-right: 5px;
+ margin-top: 13px;
+ font-size: 9px; }
+
+.dropdown .dropdown-menu.overflow {
+ right: 10px; }
+
+.dropdown .dropdown-menu:not(.dropdown-menu-header) {
+ padding-top: 38px; }
+
+.dark .dropdown .dropdown-menu .dropdown-header {
+ background-color: black; }
+.dark .dropdown .dropdown-menu .dropdown-header h5 {
+ color: #8B8B8B; }
+
+.landing .dropdown .dropdown-menu .dropdown-header, .light .dropdown .dropdown-menu .dropdown-header {
+ background-color: #F2F2F2; }
+.landing .dropdown .dropdown-menu .dropdown-header .button, .light .dropdown .dropdown-menu .dropdown-header .button {
+ background: #693AFA;
+ color: white;
+ margin-left: 10px;
+ float: right;
+ text-transform: none; }
+.landing .dropdown .dropdown-menu .dropdown-header h5, .light .dropdown .dropdown-menu .dropdown-header h5 {
+ color: #A5A5A5;
+ border: none;
+ margin-right: 5px;
+ font-size: 9px; }
+
+.light .user-menu .dropdown > a:before, .landing .user-menu .dropdown > a:before {
+ content: url("../img/icons/user_icon_black.svg"); }
+
+.dark .user-menu .dropdown > a:before, .ownership .user-menu .dropdown > a:before {
+ content: url("../img/icons/user_icon_white.svg"); }
+
+.dark .dropdown .dropdown-menu {
+ background-color: black;
+ color: white; }
+
+.ownership .dropdown .dropdown-menu {
+ background-color: #434262;
+ color: white; }
+
+.light .dropdown .dropdown-menu, .landing .dropdown .dropdown-menu {
+ background-color: white;
+ color: black; }
+.light .dropdown .dropdown-menu ul, .landing .dropdown .dropdown-menu ul {
+ color: green;
+ padding: 25px 0px;
+ background-color: #F2F2F2; }
+
+dropdown .dropdown-menu li {
+ display: block;
+ margin-left: 0px; }
+
+#burgernav {
+ position: absolute;
+ right: 0;
+ width: 100%;
+ top: 105px;
+ z-index: 10;
+ color: black;
+ padding: 2em 0 1.5em;
+ display: none;
+ border-top: #cccccc 1px solid;
+ border-bottom: 1px solid #cccccc; }
+
+.landing #burgernav, .light #burgernav {
+ background-color: white; }
+
+.dark #burgernav {
+ background-color: black; }
+.dark #burgernav a {
+ color: white; }
+
+.ownership #burgernav {
+ background-color: #251C47; }
+.ownership #burgernav a {
+ color: white; }
+
+#burgernav ul {
+ display: block;
+ margin: 0;
+ text-transform: uppercase; }
+
+#burgernav li {
+ list-style: none;
+ margin-left: 0; }
+
+#burgernav li ul {
+ text-transform: none; }
+
+#burgernav li a {
+ padding: 1em 0;
+ font-weight: 100;
+ display: block;
+ font-size: initial;
+ text-align: left;
+ font-weight: bold; }
+#burgernav li a:hover {
+ text-decoration: underline; }
+
+#burgernav li a.button {
+ font-weight: bold;
+ padding: 5px 10px;
+ text-align: center; }
+
+.dark #burgernav li a.button {
+ color: black; }
+
+#burgernav.dropped {
+ display: block; }
+
+.hide {
+ display: none; }
+
+.burgermenu {
+ font-size: 2.5em;
+ display: none; }
+
+@media (max-width: 63rem) {
+ .nav-links:not(.user-menu) {
+ display: none; }
+
+ .user-menu li {
+ margin-left: 0; }
+
+ .burgermenu {
+ display: inherit; } }
+.active-nav {
+ overflow-y: visible; }
+
+.active-nav #overlay {
+ display: block; }
+
+.dark header {
+ background-color: black;
+ background: black; }
+.dark, .dark .nav-links ul li a {
+ color: white; }
+.dark .logo-dark {
+ display: none; }
+.dark .logo-light {
+ display: block; }
+.dark .burgermenu {
+ background-color: black; }
+
+.light header {
+ background-color: #f7f9fb; }
+.light .burgermenu {
+ background-color: #white; }
+.light, .light .nav-links ul li a {
+ color: black; }
+.light .logo-light {
+ display: none; }
+.light .logo-dark {
+ display: block; }
+
+.ownership header {
+ background-color: #251C47;
+ border-bottom: 1px solid #505274; }
+.ownership header .nav-bar .nav-links {
+ justify-content: flex-start; }
+.ownership header .nav-bar .logo-dark {
+ display: none; }
+
+.landing header .logo-light {
+ display: none; }
+.landing header .nav-links ul li a {
+ color: black; }
+
+.ownership .nav-bar .nav-links a {
+ color: white;
+ margin-top: 11px; }
+
+.no-js-fix {
+ display: none; }
+
+.no-js .no-js-fix {
+ display: inline; }
+
+.no-js .on-js-fix {
+ display: none; }
+
+.dashboard-contribute-container {
+ max-width: 81.25rem;
+ width: 85%;
+ margin: 0 auto;
+ margin-top: 5.875em; }
+.dashboard-contribute-container h1 {
+ font-size: 2.75em;
+ opacity: 0.9;
+ font-weight: 600;
+ padding-bottom: 0.6em; }
+@media (max-width: 46rem) {
+ .dashboard-contribute-container h1 {
+ padding-bottom: 1.5em;
+ font-size: 1.8em; } }
+.dashboard-contribute-container h4 {
+ font-size: 1.25em;
+ opacity: 0.7;
+ font-weight: 500;
+ line-height: 1.4em;
+ padding-bottom: 1.6em; }
+@media (max-width: 46rem) {
+ .dashboard-contribute-container h4 {
+ line-height: 1.5em; } }
+.dashboard-contribute-container .contribution-flex .contribution-ideas-row {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ min-width: 30em;
+ margin-top: 1.8em; }
+@media (max-width: 46rem) {
+ .dashboard-contribute-container .contribution-flex .contribution-ideas-row {
+ flex-direction: column;
+ justify-content: space-between;
+ display: flex;
+ margin-top: 0;
+ width: 100%; } }
+.dashboard-contribute-container .contribution-flex .contribution-ideas-row .contribution-idea {
+ margin: 0.5em;
+ margin-left: 0;
+ min-width: 14em;
+ width: 28%;
+ height: 16em; }
+@media (max-width: 46rem) {
+ .dashboard-contribute-container .contribution-flex .contribution-ideas-row .contribution-idea {
+ margin-top: 1.5em;
+ height: 12em;
+ width: 80%;
+ display: block; } }
+.dashboard-contribute-container .contribution-flex .contribution-ideas-row .contribution-idea hr {
+ display: inline-block;
+ border: 0;
+ width: 4em;
+ background-color: #00F9CA;
+ height: 0.3em;
+ margin-bottom: 1em; }
+.dashboard-contribute-container .contribution-flex .contribution-ideas-row .contribution-idea h4 {
+ font-size: 1.1em;
+ opacity: 0.7;
+ line-height: 1.4em;
+ padding-bottom: 0.6em;
+ font-weight: 600; }
+@media (max-width: 46rem) {
+ .dashboard-contribute-container .contribution-flex .contribution-ideas-row .contribution-idea h4 {
+ font-size: 0.8em; } }
+.dashboard-contribute-container .contribution-flex .contribution-ideas-row .contribution-idea h3 {
+ font-weight: 300;
+ opacity: 0.7;
+ line-height: 2.2em;
+ font-size: 1em;
+ padding-bottom: 1.2em; }
+.dashboard-contribute-container .contribution-flex .contribution-ideas-row .contribution-idea div .link {
+ color: #7549FB;
+ font-size: 0.9em;
+ opacity: 0.7;
+ font-weight: 500;
+ text-decoration: underline; }
+.dashboard-contribute-container .contribution-flex .contribution-ideas-row .contribution-idea div .link:hover {
+ opacity: 0.5; }
+
+.contribute-container {
+ max-width: 81.25rem;
+ width: 85%;
+ margin: 0 auto;
+ margin-top: 5.875em; }
+.contribute-container h1 {
+ font-size: 2.75em;
+ opacity: 0.9;
+ font-weight: 600;
+ padding-bottom: 0.6em; }
+@media (max-width: 46rem) {
+ .contribute-container h1 {
+ padding-bottom: 1.5em;
+ font-size: 1.8em; } }
+.contribute-container h4 {
+ font-size: 1.25em;
+ opacity: 0.7;
+ font-weight: 500;
+ line-height: 1.4em;
+ padding-bottom: 1.6em; }
+@media (max-width: 46rem) {
+ .contribute-container h4 {
+ line-height: 1.5em; } }
+.contribute-container .contribution-flex .contribution-ideas-row {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ min-width: 30em;
+ margin-top: 1.8em; }
+@media (max-width: 46rem) {
+ .contribute-container .contribution-flex .contribution-ideas-row {
+ flex-direction: column;
+ justify-content: space-between;
+ display: flex;
+ margin-top: 0;
+ width: 100%; } }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea {
+ margin: 0.5em;
+ margin-left: 0;
+ min-width: 14em;
+ width: 28%;
+ height: 16em;
+ color: #312751; }
+@media (max-width: 46rem) {
+ .contribute-container .contribution-flex .contribution-ideas-row .contribution-idea {
+ margin-top: 1.5em;
+ height: 12em;
+ width: 80%;
+ display: block; } }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea hr {
+ display: inline-block;
+ border: 0;
+ width: 4em;
+ background-color: #00F9CA;
+ height: 0.3em;
+ margin-bottom: 1em; }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea h4 {
+ font-size: 1.1em;
+ opacity: 0.7;
+ line-height: 1.4em;
+ padding-bottom: 0.6em;
+ font-weight: 600; }
+@media (max-width: 46rem) {
+ .contribute-container .contribution-flex .contribution-ideas-row .contribution-idea h4 {
+ font-size: 0.8em; } }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea h3 {
+ font-weight: 300;
+ opacity: 0.7;
+ line-height: 2.2em;
+ font-size: 1em;
+ padding-bottom: 1.2em; }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea div .link {
+ color: #202544;
+ font-size: 0.9em;
+ opacity: 0.7;
+ font-weight: 500;
+ text-decoration: underline; }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea div .link:hover {
+ opacity: 0.5; }
+
+.editorial {
+ background-color: #F7F9FB; }
+.editorial .wrapper {
+ max-width: 54.063em;
+ width: 90%;
+ margin: 0 auto; }
+
+.editorial-content {
+ color: #2B2152; }
+.editorial-content .initial-message {
+ margin-bottom: 4.5em; }
+@media (max-width: 63rem) {
+ .editorial-content .initial-message {
+ margin-bottom: 2.5em; } }
+.editorial-content h1, .editorial-content h2, .editorial-content h3, .editorial-content h4, .editorial-content h5, .editorial-content strong {
+ color: #2B2152;
+ font-weight: 400;
+ font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; }
+.editorial-content span {
+ padding-bottom: 0.688em; }
+.editorial-content h1 {
+ text-transform: uppercase;
+ font-size: 2.75em;
+ padding-bottom: 1.15em; }
+.editorial-content h1:first-child {
+ padding-top: 1.1em; }
+.editorial-content h3 {
+ font-size: 1.375em;
+ margin-bottom: 0.2em; }
+.editorial-content ul {
+ margin: 1em; }
+.editorial-content ul li {
+ font-size: 1em;
+ padding: 0.4em;
+ padding-bottom: 0;
+ line-height: 2.3em;
+ display: flex; }
+.editorial-content ul li span {
+ padding-right: 1.3em;
+ padding-bottom: 0;
+ font-family: "Open Sans", Helvetica, Arial, sans-serif; }
+@media (max-width: 63rem) {
+ .editorial-content ul {
+ margin-bottom: 1em; } }
+.editorial-content p {
+ margin: 0;
+ font-family: "Open Sans", Helvetica, Arial, sans-serif;
+ color: #2B2152;
+ margin-bottom: 2.8em;
+ line-height: 2.34em; }
+@media (max-width: 63rem) {
+ .editorial-content p {
+ margin-bottom: 1.5em; } }
+.editorial-content p strong {
+ padding-bottom: 0; }
+.editorial-content a {
+ font-family: "Open Sans", Helvetica, Arial, sans-serif;
+ color: #2B2152;
+ font-size: 1em; }
+.editorial-content strong {
+ padding-bottom: 0.2em;
+ display: inline-block; }
+.editorial-content div {
+ line-height: 2.34em; }
+.editorial-content .extra-info {
+ margin-bottom: 0; }
+.editorial-content .extra-margin {
+ margin-bottom: 2.8em; }
+
+.account-settings-qualification-display {
+ max-width: 17.5em;
+ width: 100%; }
+
+.wallet a {
+ color: white; }
+.wallet .qual-box {
+ display: flex;
+ justify-content: center;
+ align-items: center; }
+.wallet h2 {
+ margin-bottom: 35px; }
+.wallet .qualified {
+ background-color: #696589; }
+.wallet .button {
+ font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
+ margin: 0;
+ margin-bottom: 16px;
+ width: 100%;
+ padding: 20px 0;
+ height: 2.1em;
+ font-size: 93.75%; }
+.wallet img {
+ padding-right: 10px;
+ width: 26px;
+ height: 26px; }
+
+.settings-display .wallet {
+ padding: 0;
+ width: 50%; }
+
+.account-settings-container {
+ max-width: 78.75em;
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ margin-bottom: 2em; }
+@media (max-width: 46rem) {
+ .account-settings-container {
+ display: block;
+ height: auto; } }
+
+.settings-nav {
+ background-color: #434262;
+ max-width: 14.25em;
+ min-width: 10em;
+ width: 100%;
+ border-radius: 0.25em;
+ padding-top: 5.25em;
+ margin-right: 0.3em; }
+.settings-nav ul {
+ margin-left: 30%; }
+.settings-nav ul > li {
+ padding-bottom: 1em; }
+.settings-nav ul > li > a {
+ font-size: 0.75em;
+ color: #FFFFFF; }
+.settings-nav ul > li > a.selected {
+ font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif;
+ color: #00F9CA; }
+@media (max-width: 46rem) {
+ .settings-nav {
+ max-width: 100%;
+ background-color: transparent;
+ width: 100%;
+ margin: 0;
+ margin-bottom: 1em;
+ padding-top: 1em; }
+ .settings-nav ul {
+ margin: 0 auto;
+ width: 25em;
+ font-size: 0.9em;
+ display: flex;
+ justify-content: space-around; }
+ .settings-nav ul li {
+ display: inline-block;
+ text-align: center; } }
+
+.settings-display {
+ background-color: #434262;
+ max-width: 64em;
+ width: 100%;
+ border-radius: 0.25em;
+ padding: 5.25em; }
+@media (max-width: 46rem) {
+ .settings-display {
+ height: auto;
+ width: 100%;
+ padding: 0;
+ padding-top: 1em;
+ padding-bottom: 1em; } }
+
+.settings-content {
+ background-color: #434262; }
+@media (max-width: 46rem) {
+ .settings-content {
+ height: 100%; } }
+
+.settings-content {
+ display: block; }
+
+.settings-title {
+ font-size: 1.375em;
+ font-weight: 300;
+ margin-bottom: 1em; }
+
+.account-settings-qual-buttons {
+ max-width: 17.5em;
+ width: 100%; }
+
+#yourHNSCoins {
+ width: 90%;
+ margin-bottom: 100px; }
+#yourHNSCoins .hns-coins {
+ margin-bottom: 1.5em;
+ color: #00F9CA;
+ display: inline-block;
+ font-size: 2.75em;
+ font-weight: 700; }
+#yourHNSCoins .hns-title {
+ color: #00F9CA;
+ font-size: 1.3125em;
+ padding-left: 0.5em; }
+@media (max-width: 46rem) {
+ #yourHNSCoins h2 {
+ font-size: 110%; } }
+
+#editProfile {
+ width: 90%;
+ margin-bottom: 100px; }
+#editProfile .email {
+ font-size: 0.9375em; }
+#editProfile form {
+ max-width: 22em; }
+#editProfile form input[type='password'] {
+ width: 100%; }
+@media (max-width: 46rem) {
+ #editProfile form {
+ max-width: 100%; } }
+#editProfile .change-password-container {
+ margin-top: 50px; }
+
+#security {
+ width: 100%;
+ max-width: 32.25em; }
+#security form {
+ margin-top: 1em;
+ width: 100%; }
+#security form .form-header {
+ font-size: 0.97em;
+ padding-top: 1.75em;
+ padding-bottom: 1.75em; }
+#security form textarea {
+ height: 6.2em;
+ with: 100%;
+ margin-bottom: 1.75em; }
+@media (max-width: 63rem) {
+ #security {
+ width: 90%;
+ margin: 1em auto; } }
+
+html > body {
+ font-family: "Open Sans", Helvetica, Arial, sans-serif;
+ overflow-x: hidden;
+ font-size: 16px;
+ color: #F7F9FB; }
+
+.wrapper {
+ position: relative;
+ width: 77rem;
+ max-width: calc(100% - 3rem);
+ max-width: calc(100% - 3rem - env(safe-area-inset-left) - env(safe-area-inset-right));
+ margin: 0 auto; }
+
+html, body {
+ height: 100%;
+ background: #251C47;
+ letter-spacing: 0.02em; }
+
+body {
+ display: flex;
+ flex-direction: column; }
+body > content {
+ flex: 1 0 auto; }
+
+textarea {
+ border: none;
+ font-size: 75%;
+ font-weight: 300;
+ color: white;
+ background: #2B2152;
+ padding-top: 15px;
+ padding-left: 15px;
+ padding-bottom: 15px;
+ border-radius: 0.4em;
+ box-sizing: border-box;
+ width: 90%; }
+
+input, textarea {
+ max-width: 100%;
+ box-sizing: border-box; }
+
+input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus, input:-webkit-autofill:active {
+ -webkit-transition: "color 9999s ease-out, background-color 9999s ease-out";
+ -webkit-transition-delay: 9999s; }
+
+.checkbox {
+ border: 1px solid white;
+ border-radius: 4px;
+ position: relative;
+ height: 16px;
+ width: 16px;
+ margin-top: 0.3em;
+ margin-bottom: 0.2em;
+ display: inline-block; }
+
+.checkbox-container {
+ display: flex;
+ padding-bottom: 12px; }
+
+.checkbox-container.error-text > h5, .checkbox-container.error-text > h5 > a {
+ color: #00FFEB; }
+
+.checkbox-container.error-text > .checkbox {
+ border: 1px solid #00FFEB; }
+
+.checkbox label {
+ display: block;
+ cursor: pointer;
+ position: absolute;
+ width: 100%;
+ padding: 0;
+ color: white;
+ top: 0;
+ bottom: 0;
+ border-radius: 4px; }
+
+.checkbox label::before {
+ content: "";
+ display: inline-block;
+ height: 15px;
+ width: 15px; }
+
+.checkbox label:after {
+ content: "";
+ height: 15px;
+ width: 15px;
+ top: 0;
+ left: 0;
+ position: absolute; }
+
+.checkbox label:hover::after {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+ filter: alpha(opacity=30);
+ opacity: 0.5;
+ background: url("../img/white_checkmark.svg") no-repeat;
+ background-size: 12px;
+ background-position: center center;
+ width: 100%; }
+
+.checkbox input[type=checkbox] {
+ opacity: 0;
+ color: white; }
+
+.checkbox input[type=checkbox]:checked + label:after {
+ opacity: 1;
+ background: url("../img/white_checkmark.svg") no-repeat;
+ background-size: 12px;
+ background-position: center center;
+ background-color: #693AFA;
+ border-radius: 4px;
+ width: 100%; }
+
+.checkbox input[type="checkbox"]:focus + label:before {
+ outline: #3b99fc auto 5px; }
+
+.content {
+ background: #251C47;
+ color: #FFFFFF; }
+.content .wrapper {
+ padding: 1.85em 0 2.14em; }
+
+h1 {
+ color: #00FFEB;
+ font-size: 275%;
+ font-weight: 600; }
+
+h2 {
+ color: #F7F9FB;
+ font-weight: 300;
+ font-size: 162.5%;
+ line-height: 225%;
+ margin-bottom: 12px; }
+
+h3 {
+ color: #F7F9FB;
+ font-size: 93.75%;
+ line-height: 150%;
+ margin-bottom: 32px;
+ font-weight: 400; }
+
+h4 {
+ color: #F7F9FB;
+ font-size: 75%;
+ font-weight: 300;
+ line-height: 150%;
+ margin-bottom: 32px; }
+
+h5 {
+ color: #C8C8C8;
+ font-size: 75%;
+ font-weight: 300;
+ line-height: 150%;
+ margin-top: 22px; }
+
+a {
+ color: #00FFEB;
+ font-weight: 500;
+ text-decoration: none;
+ transition: color 0.3s ease; }
+a:hover {
+ color: #00ccbc; }
+@media (max-width: 46rem) {
+ a {
+ font-size: 81.25%; } }
+
+.error-text {
+ color: #00FFEB; }
+.error-text.padded {
+ padding: 1em 0em;
+ line-height: 20px;
+ font-size: 12px; }
+
+.navbuttonbak {
+ color: #FFFFFF;
+ font-size: 75%;
+ margin-bottom: 22px;
+ cursor: pointer;
+ display: inline-block;
+ margin-bottom: 12px; }
+
+.button {
+ background-color: #693AFA;
+ border-radius: 4px;
+ border: none;
+ color: #F7F9FB;
+ cursor: pointer;
+ display: inline-block;
+ font-weight: 600;
+ margin: 5px 32px 5px 0;
+ text-align: center;
+ width: 40%;
+ font-size: 75%; }
+.button:hover {
+ background-color: #6530cd; }
+.button:active {
+ border: 1px solid #00FFEB;
+ color: #00FFEB; }
+.button.primary {
+ padding: 15px; }
+.button.large {
+ padding: 25px; }
+.button.disabled {
+ background-color: #696589; }
+.button.small {
+ padding: 1px; }
+.button.inline {
+ display: inline;
+ padding: 0.9em;
+ margin: 0 0 0 1em; }
+.button.no-wrap {
+ width: inherit;
+ white-space: nowrap; }
+
+.fatbutton {
+ display: block;
+ width: 100%;
+ padding: 1.65em 0;
+ background: #693AFA;
+ color: #F7F9FB;
+ font-size: 1.1em;
+ text-align: center;
+ border-radius: 0.3em; }
+.fatbutton.qualified {
+ background-color: #696589; }
+.fatbutton.pending {
+ background: #696589;
+ opacity: 0.7; }
+
+label {
+ flex: 0 0 auto;
+ width: 10em;
+ text-align: right;
+ padding-right: 2em;
+ box-sizing: border-box;
+ padding-top: 0.95em; }
+label.error-text {
+ color: #00FFEB; }
+
+input::placeholder, textarea::placeholder {
+ color: #B8B7C7;
+ opacity: 1; }
+
+select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ padding: 5px; }
+
+input[type=text], input[type=password], input[type=email], select {
+ flex: 1 1 auto;
+ font-weight: 300;
+ color: white;
+ background: #2B2152;
+ border-radius: 0.4em;
+ padding-bottom: 15px;
+ padding-top: 15px;
+ padding-left: 15px;
+ width: 70%;
+ font-size: 75%;
+ margin: 0 0 22px;
+ border: 2px solid transparent; }
+input[type=text].error, input[type=password].error, input[type=email].error, select.error {
+ border: 1px solid #00FFEB; }
+@media (max-width: 46rem) {
+ input[type=text], input[type=password], input[type=email], select {
+ width: 100%; } }
+
+input[type=submit] {
+ font-size: 68.75%; }
+
+.password-input-container {
+ position: relative; }
+
+#passwordWarningMessage, #passwordConfirmWarningMessage, #passWarningMessage, #confirmPassWarningMessage, #currentPassWarningMessage {
+ display: none; }
+
+.error-input + #passwordWarningMessage {
+ font-size: 68.75%;
+ position: relative;
+ display: block;
+ color: #00F9CA;
+ margin-top: 5px;
+ margin-bottom: 22px; }
+
+.error-input + #passwordConfirmWarningMessage, .error-input + #passWarningMessage, .error-input + #confirmPassWarningMessage, .error-input + #currentPassWarningMessage, .error-input + .error-message {
+ color: #00F9CA;
+ position: absolute;
+ display: block;
+ top: 0.45em;
+ right: -14em;
+ font-size: 68.75%; }
+@media( max-width: 800px ) {
+ .error-input + #passwordConfirmWarningMessage, .error-input + #passWarningMessage, .error-input + #confirmPassWarningMessage, .error-input + #currentPassWarningMessage, .error-input + .error-message {
+ position: initial;
+ margin-bottom: 22px;
+ margin-top: 10px; } }
+subtitle {
+ display: block;
+ margin-top: 2em;
+ font-size: 0.8em;
+ font-weight: 300;
+ line-height: 1.4;
+ color: #F7F9FB; }
+
+.inputfield.inline {
+ display: flex;
+ flex-direction: row; }
+
+.seperator {
+ border: 0.5px solid #251C47;
+ width: 100%;
+ margin: 2em 0 2em 0; }
+
+@keyframes fadeOut {
+ 100% {
+ opacity: 0; } }
+.flashmessage-container {
+ font-size: 0.938em;
+ font-weight: 600;
+ position: absolute;
+ width: 100%;
+ animation: fadeOut 1s forwards;
+ animation-iteration-count: 1;
+ animation-delay: 7s;
+ -webkit-animation: fadeOut 1s forwards;
+ -webkit-animation-iteration-count: 1;
+ -webkit-animation-delay: 7s; }
+.flashmessage-container .flash-message {
+ margin: 0 auto;
+ display: flex; }
+.flashmessage-container .flash-message .content {
+ color: black;
+ display: flex;
+ background: #7FFCE4;
+ margin: 0 auto;
+ height: 3.75em;
+ align-items: center;
+ text-align: center;
+ border-radius: 0.3em; }
+.flashmessage-container .flash-message .content h3 {
+ color: black !important;
+ line-height: 300%;
+ display: inline-block;
+ margin-left: 2.813em;
+ margin-bottom: 0; }
+@media (max-width: 46rem) {
+ .flashmessage-container .flash-message .content h3 {
+ margin-left: 0.2em;
+ margin-right: 0.2em;
+ line-height: 150%; } }
+.flashmessage-container .flash-message .content .close-flash-message {
+ margin-right: 2.813em;
+ margin-left: 1.25em;
+ cursor: pointer;
+ width: 1.5em;
+ float: right; }
+@media (max-width: 46rem) {
+ .flashmessage-container .flash-message .content .close-flash-message {
+ display: none; } }
+
+.container {
+ display: flex;
+ flex-direction: row; }
+@media (max-width: 63rem) {
+ .container {
+ flex-direction: column; } }
+.container .left {
+ flex: 0 0 auto;
+ width: 30%;
+ margin: 5em 6em 0 0;
+ background-color: #251C47; }
+@media (max-width: 63rem) {
+ .container .left {
+ display: flex;
+ justify-content: center;
+ margin: 0 0 20px 0;
+ width: 100%; } }
+.container .left .pageicon-1 {
+ display: block;
+ margin: 3.4em 0; }
+.container .left .pageicon-2 {
+ display: block;
+ width: 74%;
+ margin: 15em 0; }
+.container .left .onboard-progress-bar {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center; }
+.container .left .onboard-progress-bar img {
+ width: 80%;
+ margin-left: auto;
+ margin-right: auto;
+ margin-bottom: 1em; }
+@media (max-width: 63rem) {
+ .container .left .onboard-progress-bar img {
+ width: 100%; } }
+.container .left .onboard-progress-bar span {
+ font-family: IBM Plex Mono, Medium;
+ font-size: 12px;
+ width: 90%;
+ margin-bottom: 1em;
+ margin: 0 auto; }
+@media (max-width: 63rem) {
+ .container .left .onboard-progress-bar span {
+ width: 100%; } }
+.container .left img.onboard-icon {
+ width: 425px;
+ height: 425px;
+ display: block;
+ margin: 3em 4em 0 0; }
+.container .left .pg-label-1, .container .left .pg-label-2, .container .left .pg-label-3 {
+ display: block; }
+.container .left .pg-label-1 {
+ text-align: left;
+ padding-left: 2em; }
+.container .left .pg-label-3 {
+ text-align: right;
+ padding-left: 2em;
+ width: 100% !important; }
+@media (max-width: 63rem) {
+ .container .left .pg-label-3 {
+ padding-left: 4em; } }
+@media (max-width: 46rem) {
+ .container .left .pg-label-3 {
+ padding-left: 1em; } }
+.container .right {
+ min-height: 600px;
+ flex: 1 1 auto;
+ background: #434262;
+ padding: 92px;
+ border-radius: 0.34em;
+ display: flex;
+ flex-direction: column; }
+@media (max-width: 63rem) {
+ .container .right {
+ flex-direction: column; } }
+
+.onboarding-text-blob-max-width {
+ max-width: 481px; }
+.onboarding-text-blob-max-width.blocked {
+ text-align: justify; }
+
+@media (max-width: 46rem) {
+ .onboarding-page h2 {
+ line-height: 170%; } }
+
+@media (max-width: 46rem) {
+ .onboarding-page textarea, .onboarding-page input, .onboarding-page .button {
+ box-sizing: border-box; }
+ .onboarding-page textarea, .onboarding-page input {
+ width: 100%; }
+ .onboarding-page .button {
+ width: 100%;
+ margin-left: 0;
+ margin-right: 0; } }
+
+.onboarding-container > .hndshk-container {
+ display: flex;
+ flex-direction: column; }
+.onboarding-container > .hndshk-container h2 {
+ margin-top: 50px; }
+.onboarding-container > .hndshk-container p {
+ max-width: 884px;
+ display: block;
+ margin-bottom: 20px;
+ line-height: 34px; }
+
+.onboarding-container .right.centered {
+ margin: 0 15%; }
+.onboarding-container .right #freenodeVerif .button {
+ width: 60%; }
+.onboarding-container .right #freenodeOnboard h2 {
+ line-height: 150%; }
+.onboarding-container .right input, .onboarding-container .right #freenodeCode {
+ box-sizing: border-box;
+ max-width: 100%;
+ width: 100%; }
+.onboarding-container .right .onboard-back, .onboarding-container .right .onboard-dash, .onboarding-container .right .dash-back {
+ color: #F7F9FB;
+ font-size: 70%;
+ position: relative;
+ top: -3em; }
+@media (max-width: 46rem) {
+ .onboarding-container .right .onboard-back, .onboarding-container .right .onboard-dash, .onboarding-container .right .dash-back {
+ top: -1em; } }
+.onboarding-container .right .qual-panel {
+ flex-direction: column; }
+.onboarding-container .right .verif-boxes {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ margin-bottom: 4em; }
+@media (max-width: 63rem) {
+ .onboarding-container .right .verif-boxes {
+ flex-direction: column; } }
+.onboarding-container .right .verif-boxes .button-box {
+ width: 27%; }
+@media (max-width: 63rem) {
+ .onboarding-container .right .verif-boxes .button-box {
+ width: 100%; } }
+.onboarding-container .right .verif-boxes .button-box .fatbutton {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 30px 0;
+ font-size: 93.75%; }
+.onboarding-container .right .verif-boxes .button-box .fatbutton.qualified {
+ padding: 24px 0;
+ background-color: #696589; }
+.onboarding-container .right .verif-boxes .button-box .fatbutton img {
+ padding-right: 10px;
+ width: 26px;
+ height: 26px; }
+.onboarding-container .right .verif-boxes .button-box:nth-last-child(1) subtitle {
+ margin-bottom: 0; }
+@media (max-width: 63rem) {
+ .onboarding-container .right .verif-boxes h5 {
+ margin-top: 12px;
+ margin-bottom: 2em; } }
+.onboarding-container .right .verif-flow-box {
+ display: none;
+ border-radius: 0.3em;
+ margin-top: 50px; }
+.onboarding-container .right .verif-flow-box.show {
+ display: block; }
+.onboarding-container .right #freenodeCode {
+ background-color: #292d46;
+ padding: 20px;
+ text-align: center;
+ border-radius: 2px;
+ margin: 30px 0 30px 0;
+ word-wrap: break-word;
+ word-wrap: break-all; }
+.onboarding-container .right #pgpFormLabel {
+ margin-bottom: 22px; }
+.onboarding-container .right .hsicon {
+ padding: 0.3em 0.4em;
+ color: #FFFFFF; }
+.onboarding-container .right .hsicon:not(.invisible) {
+ cursor: pointer; }
+.onboarding-container .right .hsicon:first-child {
+ padding-left: 0.7em; }
+.onboarding-container .right .hsicon:last-child {
+ padding-right: 0.7em; }
+.onboarding-container .right #surveyHeader h4, .onboarding-container .right #surveyHeader h3, .onboarding-container .right #surveyHeader h5 {
+ margin-bottom: 10px; }
+.onboarding-container .right #surveyOnboard h3 {
+ margin-bottom: 0; }
+.onboarding-container .right #surveyForm textarea {
+ width: 100%;
+ height: 114px; }
+.onboarding-container .right #surveyForm .button {
+ margin-top: 22px; }
+@media (max-width: 46rem) {
+ .onboarding-container .right #surveyForm .button {
+ width: 100%; } }
+.onboarding-container .right #surveyForm .splitinput {
+ display: flex;
+ width: 100%;
+ justify-content: space-between; }
+.onboarding-container .right #surveyForm input {
+ width: 60%; }
+.onboarding-container .right #surveyForm input + input {
+ margin-left: 22px; }
+
+.pubkey-container .right textarea {
+ line-height: 162.5%;
+ margin-bottom: 22px;
+ font-size: 16px; }
+.pubkey-container .right h4 {
+ margin-bottom: 22px; }
+.pubkey-container .right #generated-3 h3 {
+ margin-bottom: 22px; }
+.pubkey-container .right #claimpage h4:nth-child(3) {
+ margin-bottom: 36px; }
+.pubkey-container .right .important-text {
+ color: #00F9CA; }
+.pubkey-container .right .navConfirm.primary {
+ margin-top: 26px; }
+.pubkey-container .right .buttons {
+ display: flex;
+ flex-direction: row; }
+.pubkey-container .right .buttons .first-button {
+ margin-right: 3em; }
+.pubkey-container .right .buttons .first-button.no-js a {
+ cursor: not-allowed;
+ pointer-events: none; }
+.pubkey-container .right .buttons .first-button.no-js div {
+ background-color: #696589; }
+.pubkey-container .right .onboard-back {
+ color: #F7F9FB;
+ font-size: 70%;
+ position: relative;
+ top: -3em; }
+@media (max-width: 46rem) {
+ .pubkey-container .right .onboard-back {
+ top: -1em; } }
+.pubkey-container .right .hsoutput {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ background: #292d46;
+ border-radius: 0.3em; }
+.pubkey-container .right .hsoutput .hsicon {
+ padding: 0.3em 0.4em;
+ color: #FFFFFF; }
+.pubkey-container .right .hsoutput .hsicon:not(.invisible) {
+ cursor: pointer; }
+.pubkey-container .right .hsoutput .hsicon:first-child {
+ padding-left: 0.7em; }
+.pubkey-container .right .hsoutput .hsicon:last-child {
+ padding-right: 0.7em; }
+.pubkey-container .right .hsoutput .iconcont {
+ display: flex;
+ position: relative;
+ box-shadow: -0.7em 0 0.7em 0 #292d46; }
+
+.pubkey-container .right .skiplink {
+ display: block;
+ text-align: right;
+ margin-top: 3em;
+ font-size: 0.8em;
+ font-weight: 300;
+ padding-left: 0.2em;
+ padding-right: 0.2em; }
+
+.fx {
+ display: flex;
+ flex-direction: row; }
+@media (max-width: 46rem) {
+ .fx {
+ display: block; } }
+.fx .fx-grow {
+ flex: 1 1 auto; }
+
+#preBoarding {
+ text-align: left;
+ padding-top: 20px;
+ padding-bottom: 20px; }
+#preBoarding * {
+ box-sizing: border-box; }
+#preBoarding > div {
+ max-width: 75%;
+ margin: 0 auto; }
+#preBoarding > div > h2 {
+ margin-bottom: 50px;
+ text-align: center; }
+@media (max-width: 46rem) {
+ #preBoarding > div {
+ max-width: 100%; } }
+@media (max-width: 46rem) {
+ #preBoarding > div > .fx {
+ padding-left: 15px;
+ padding-right: 15px; } }
+#preBoarding h4.step {
+ margin-bottom: 0; }
+#preBoarding .fx-grow {
+ flex-basis: 50%; }
+#preBoarding .preboarding-process {
+ padding-right: 50px; }
+#preBoarding .preboarding-process-step {
+ margin-bottom: 35px; }
+@media (max-width: 46rem) {
+ #preBoarding .preboarding-process-step.fx {
+ display: flex; } }
+#preBoarding .preboarding-process-step .art {
+ padding-top: 5px;
+ padding-right: 15px; }
+#preBoarding .preboarding-process-step .line {
+ width: 2px;
+ height: 75%;
+ background: #56ffeb;
+ margin: auto;
+ margin-top: 8px; }
+#preBoarding .preboarding-process-step h3 {
+ margin-bottom: 2px; }
+#preBoarding .preboarding-process-step .note {
+ color: grey;
+ margin-bottom: 0; }
+#preBoarding .preboarding-process-step:last-of-type {
+ margin-bottom: 0; }
+@media (max-width: 46rem) {
+ #preBoarding ul.preboarding-process, #preBoarding div.preboarding-message {
+ padding-left: 0;
+ padding-right: 0;
+ border-left: none; } }
+#preBoarding .preboarding-message {
+ padding-left: 50px;
+ border-left: 1px solid grey; }
+#preBoarding .preboarding-message > * {
+ margin-bottom: 15px; }
+#preBoarding .preboarding-message p {
+ font-size: 75%;
+ font-weight: 300;
+ line-height: 150%; }
+#preBoarding .preboarding-button {
+ margin-top: 50px;
+ text-align: center; }
+#preBoarding .preboarding-button a {
+ width: 30%;
+ margin: 0;
+ padding: 10px 5px; }
+
+.contribute-container {
+ max-width: 81.25rem;
+ width: 85%;
+ margin: 0 auto;
+ margin-top: 5.875em; }
+.contribute-container h1 {
+ font-size: 2.75em;
+ opacity: 0.9;
+ font-weight: 600;
+ padding-bottom: 0.6em; }
+@media (max-width: 46rem) {
+ .contribute-container h1 {
+ padding-bottom: 1.5em;
+ font-size: 1.8em; } }
+.contribute-container h4 {
+ font-size: 1.25em;
+ opacity: 0.7;
+ font-weight: 500;
+ line-height: 1.4em;
+ padding-bottom: 1.6em; }
+@media (max-width: 46rem) {
+ .contribute-container h4 {
+ line-height: 1.5em; } }
+.contribute-container .contribution-flex .contribution-ideas-row {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ min-width: 30em;
+ margin-top: 1.8em; }
+@media (max-width: 46rem) {
+ .contribute-container .contribution-flex .contribution-ideas-row {
+ flex-direction: column;
+ justify-content: space-between;
+ display: flex;
+ margin-top: 0;
+ width: 100%; } }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea {
+ margin: 0.5em;
+ margin-left: 0;
+ min-width: 14em;
+ width: 28%;
+ height: 16em;
+ color: #312751; }
+@media (max-width: 46rem) {
+ .contribute-container .contribution-flex .contribution-ideas-row .contribution-idea {
+ margin-top: 1.5em;
+ height: 12em;
+ width: 80%;
+ display: block; } }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea hr {
+ display: inline-block;
+ border: 0;
+ width: 4em;
+ background-color: #00F9CA;
+ height: 0.3em;
+ margin-bottom: 1em; }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea h4 {
+ font-size: 1.1em;
+ opacity: 0.7;
+ line-height: 1.4em;
+ padding-bottom: 0.6em;
+ font-weight: 600; }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea h3 {
+ font-weight: 400;
+ opacity: 0.7;
+ line-height: 2.2em;
+ font-size: 1em;
+ padding-bottom: 1.2em; }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea div .link {
+ color: #202544;
+ font-size: 0.9em;
+ opacity: 0.7;
+ font-weight: 600;
+ text-decoration: underline; }
+.contribute-container .contribution-flex .contribution-ideas-row .contribution-idea div .link:hover {
+ opacity: 0.5; }
+
+.editorial-cta {
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ min-height: 25em;
+ background-color: #2F2653; }
+.editorial-cta .editorial-cta-content {
+ width: 100%;
+ max-width: 81.25rem;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ flex-wrap: wrap; }
+@media (max-width: 46rem) {
+ .editorial-cta .editorial-cta-content {
+ max-width: 100%; } }
+@media (max-width: 46rem) {
+ .editorial-cta .editorial-cta-content {
+ flex-direction: column;
+ align-items: center; } }
+.editorial-cta .editorial-cta-content .message {
+ flex: 1 1 auto; }
+.editorial-cta .editorial-cta-content .message h1 {
+ font-weight: 600;
+ font-size: 2.74em;
+ margin-bottom: 0.75em; }
+@media (max-width: 46rem) {
+ .editorial-cta .editorial-cta-content .message h1 {
+ font-size: 1.7em;
+ letter-spacing: 0.15em;
+ margin-top: 2em;
+ font-weight: 500; } }
+.editorial-cta .editorial-cta-content .message .sub-message p {
+ font-weight: 400;
+ opacity: 0.9;
+ line-height: 1.6em;
+ font-size: 1.3em;
+ width: 28em; }
+@media (max-width: 46rem) {
+ .editorial-cta .editorial-cta-content .message .sub-message p {
+ font-size: 1.23em;
+ width: auto; } }
+
+.dashboard > h2, .dashboard > h4 {
+ padding-left: 45px;
+ padding-right: 45px; }
+.dashboard > h2 {
+ line-height: initial; }
+.dashboard > h4 {
+ margin-bottom: 32px; }
+@media (max-width: 46rem) {
+ .dashboard h2 {
+ line-height: 170%; } }
+.dashboard subtitle {
+ margin-top: 0;
+ line-height: 1.8; }
+.dashboard .dashboard-header {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between; }
+@media (max-width: 46rem) {
+ .dashboard .dashboard-header {
+ flex-direction: column;
+ justify-content: space-between; } }
+.dashboard .dashboard-header .social-icon-container-dashboard {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-around; }
+.dashboard .dashboard-header .social-icon-container-dashboard nav.social-icons {
+ display: block; }
+@media (max-width: 46rem) {
+ .dashboard .dashboard-header .social-icon-container-dashboard nav.social-icons {
+ text-align: left; }
+ .dashboard .dashboard-header .social-icon-container-dashboard nav.social-icons a:first-child {
+ margin-left: 0; } }
+.dashboard .graphsbox h3 {
+ font-weight: 300; }
+.dashboard .wallet a {
+ color: white;
+ font-size: initial; }
+.dashboard .wallet .qual-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: 93.75%; }
+.dashboard .wallet h2 {
+ margin-bottom: 35px; }
+.dashboard .wallet .qualified {
+ background-color: #696589;
+ pointer-events: none; }
+.dashboard .wallet .button {
+ margin: 0;
+ margin-bottom: 16px;
+ width: 100%;
+ font-size: 93.75%; }
+.dashboard .wallet img {
+ padding-right: 10px;
+ width: 26px;
+ height: 26px; }
+.dashboard .contribute {
+ margin: 0;
+ max-width: 100%;
+ width: 100%; }
+.dashboard .contribute h4, .dashboard .contribute h3 {
+ opacity: initial !important;
+ color: #F7F9FB;
+ font-size: 93.75%;
+ font-weight: 300;
+ line-height: 187.5%; }
+.dashboard .contribute h4 {
+ padding-bottom: 0; }
+.dashboard .dashboard-instructions h4 {
+ margin-bottom: 25px; }
+.dashboard .dashboard-instructions h3 {
+ margin-bottom: 12px; }
+
+.hndshk-container {
+ background: #434262;
+ padding: 1.2em 45px;
+ border-radius: 0.3em; }
+.hndshk-container.large {
+ min-height: 600px;
+ padding: 92px;
+ border-radius: 0.34em; }
+@media (max-width: 46rem) {
+ .hndshk-container.large {
+ min-height: auto;
+ padding: 2em; } }
+
+.hndshk-text-container {
+ font-family: monospace;
+ border: none;
+ font-size: 0.9em;
+ font-weight: 300;
+ color: #c2c0cc;
+ background: #342E54;
+ padding: 1.9em;
+ border-radius: 0.4em;
+ box-sizing: border-box;
+ line-height: 130%;
+ margin-bottom: 25px; }
+.hndshk-text-container.text-container-dark {
+ background: #2B2152; }
+.hndshk-text-container > * {
+ margin-bottom: 25px;
+ word-wrap: break-word; }
+.hndshk-text-container > *:last-child {
+ margin-bottom: 0px; }
+
+.space-top {
+ margin-top: 1em; }
+
+.space-right {
+ margin-right: 1em; }
+@media (max-width: 46rem) {
+ .space-right {
+ margin-right: 0px;
+ margin-bottom: 1em; } }
+
+.nominations h2 {
+ margin-bottom: 0; }
+@media (max-width: 46rem) {
+ .nominations h2 {
+ line-height: 170%; } }
+.nominations .nomination-row {
+ font-size: 0.9em;
+ display: flex;
+ justify-content: space-between;
+ flex-direction: row;
+ padding: 0.6em 0;
+ font-weight: 300;
+ color: rgba(255, 255, 255, 0.65); }
+.nominations .nomination-row.title-text {
+ color: #FFFFFF; }
+.nominations .nomination-row .email {
+ flex-grow: 1;
+ flex-shrink: 1;
+ display: flex;
+ align-items: center; }
+.nominations .nomination-row .email:not(.nomination-header):before {
+ display: block;
+ content: " ";
+ border-radius: 100%;
+ width: 20px;
+ height: 20px;
+ margin-right: 10px; }
+.nominations .nomination-row .pending:not(.nomination-header):before {
+ background-color: #848ab2; }
+.nominations .nomination-row .claimed:not(.nomination-header):before {
+ background-color: #663eff; }
+.nominations .nomination-row .sent, .nominations .nomination-row .status {
+ flex-grow: 0;
+ flex-shrink: 0;
+ width: 8em; }
+@media(max-width: 600px) {
+ .nominations .nomination-row div.email:not(.nomination-header):before {
+ display: none; }
+ @media(max-width: 600px) {
+ .nominations .nomination-row .sent {
+ display: none; } }
+ @media(max-width: 600px) {
+ .nominations .nomination-row .email, .nominations .nomination-row .status {
+ font-size: 12px; } } }
+.nominate-form {
+ margin-bottom: 25px; }
+.nominate-form .nominate-title {
+ margin-bottom: 0; }
+.nominate-form .subtitle {
+ margin-bottom: 25px; }
+
+.nomination-progress {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ text-align: center; }
+.nomination-progress .count subtitle {
+ margin-top: 0; }
+.nomination-progress .count h2 {
+ margin-bottom: 0px; }
+.nomination-progress img.sep {
+ margin: 0 0.5em 0 0.6em;
+ width: 2em;
+ height: 3.9em; }
+
+.nominate-container .button {
+ margin-left: 0px; }
+
+.dashboard-nominatebox {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-around;
+ align-items: baseline; }
+.dashboard-nominatebox input {
+ margin: 0; }
+.dashboard-nominatebox .subtitle {
+ display: none; }
+.dashboard-nominatebox .button {
+ width: 118px; }
+.dashboard-nominatebox .left {
+ width: 70%; }
+@media (max-width: 46rem) {
+ .dashboard-nominatebox .left {
+ width: 100%; } }
+.dashboard-nominatebox .left .nominate-title {
+ padding: 0;
+ margin-bottom: 15px; }
+.dashboard-nominatebox .right {
+ box-sizing: border-box;
+ width: 30%;
+ position: relative;
+ padding-left: 20px;
+ top: 2em; }
+
+.dashboard-instructions .fx .instruction-left {
+ max-width: 50%; }
+@media (max-width: 847px) {
+ .dashboard-instructions .fx {
+ display: block; }
+ .dashboard-instructions .fx .instruction-left {
+ margin-right: 0px;
+ margin-bottom: 1em;
+ max-width: 100%; } }
+
+.graphwalletrow {
+ width: 100%; }
+@media (max-width: 1090px) {
+ .graphwalletrow {
+ display: block; }
+ .graphwalletrow .graphsbox {
+ margin-right: 0px;
+ margin-bottom: 1em; } }
+.graphwalletrow .wallet {
+ flex-grow: 1; }
+.graphwalletrow .wallet h2 {
+ padding: 0; }
+.graphwalletrow .graphsbox {
+ flex-grow: 2; }
+.graphwalletrow .graphsbox .graphs {
+ justify-content: space-around;
+ margin: 1em 0 0.5em;
+ text-align: center; }
+.graphwalletrow .graphsbox .graphs #emptygraph {
+ width: 200px;
+ height: 200px;
+ margin: auto; }
+.graphwalletrow .graphsbox .graphs .hskicon {
+ height: 0; }
+.graphwalletrow .graphsbox .graphs .hskicon img {
+ position: relative;
+ top: -140px;
+ left: 0;
+ height: 80px; }
+
+.resetpassword-container {
+ width: 50%;
+ margin: 0 auto;
+ min-width: 20em;
+ padding: 2.2em 2.8em;
+ border-radius: 0.3em;
+ background-color: #434262; }
+
+.message-box {
+ background-color: #434262;
+ min-height: 600px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 5px;
+ text-align: center; }
+.message-box > div {
+ max-width: 500px; }
+.message-box h2 {
+ line-height: 155%; }
+
+.login-up-container #countrySelect {
+ background-image: url("../img/footer/down-caret.svg");
+ background-repeat: no-repeat;
+ background-position: 97% 50%;
+ color: #B8B7C7; }
+.login-up-container h2 {
+ line-height: initial; }
+.login-up-container h3, .login-up-container h2, .login-up-container h4 {
+ margin-bottom: 22px; }
+.login-up-container .inputfield h5 {
+ margin: 5px 0; }
+.login-up-container .inputfield h4 {
+ display: inline-block; }
+.login-up-container .left h2 {
+ font-size: 137.5%;
+ line-height: 175%; }
+.login-up-container .agreements {
+ display: block;
+ padding-left: 1em;
+ padding-top: 0.55em;
+ margin: 0; }
+@media(max-width: 420px) {
+ .login-up-container .agreements {
+ padding-top: 0; } }
+.login-up-container .agreements a {
+ text-decoration: underline; }
+.login-up-container .agreements, .login-up-container .agreements a {
+ color: white; }
+
+.code, code, pre, tt {
+ font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; }
+
+.invisible {
+ visibility: hidden !important; }
+
+.hidden {
+ display: none !important; }
+
+.search-submit-icon {
+ position: relative; }
+.search-submit-icon img {
+ position: absolute;
+ left: 1.88em;
+ width: 1.4em;
+ top: 0.5em;
+ pointer-events: none; }
+
+.nominate-submit-icon {
+ position: relative; }
+.nominate-submit-icon img {
+ position: absolute;
+ left: 1.88em;
+ width: 1.2em;
+ top: 0.7em;
+ pointer-events: none; }
+
+.dashboard .nominate.emailinput .submit {
+ padding: 0.95em 2.5em 0.85em; }
+
+#successOnboard {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ border-radius: 0.4em;
+ padding: 4em;
+ background-color: #434262;
+ box-sizing: border-box; }
+#successOnboard .success-content {
+ width: 40%;
+ margin-top: 2.5em;
+ margin-bottom: 2.5em;
+ display: flex;
+ flex-direction: column;
+ text-align: center;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-around;
+ align-items: center;
+ color: white; }
+#successOnboard .success-content img {
+ margin-bottom: 50px; }
+
+.header-box > h4 {
+ margin-bottom: 2.2em; }
+
+input.error-input, .checkbox-container.error-input {
+ border: 2px solid #00F9CA !important;
+ color: #00F9CA; }
+@media(max-width: 800px) {
+ input.error-input, .checkbox-container.error-input {
+ margin-bottom: 0px; } }
+.page-container {
+ display: flex;
+ line-height: 1.5em;
+ justify-content: space-around;
+ min-height: 10em;
+ vertical-align: middle;
+ flex-direction: column;
+ font-size: 3em; }
+
+.message {
+ font-weight: 300;
+ text-align: center;
+ font-size: 0.7em !important; }
+
+.domainsearch {
+ padding: 0; }
+.domainsearch * {
+ box-sizing: border-box; }
+.domainsearch .button:not(input) {
+ width: 100%; }
+@media (max-width: 46rem) {
+ .domainsearch input, .domainsearch .button {
+ width: 100%; } }
+.domainsearch input.space-right {
+ margin: 0;
+ margin-right: 1em; }
+@media (max-width: 46rem) {
+ .domainsearch input.space-right {
+ margin-bottom: 1em; } }
+@media (max-width: 63rem) {
+ .domainsearch .space-right:not(input) {
+ margin-bottom: 1em;
+ margin-right: 0; } }
+.domainsearch .domainsearch-left {
+ flex: 3; }
+.domainsearch .domainsearch-left + div {
+ flex: 1;
+ padding-right: 45px;
+ padding-left: 45px; }
+.domainsearch ul {
+ margin-left: 20px;
+ font-size: 0.8em; }
+.domainsearch ul li {
+ font-weight: 200;
+ line-height: 1.5em;
+ margin-bottom: 20px;
+ list-style-type: disc; }
+.domainsearch ul li b {
+ font-weight: 600; }
+.domainsearch .button {
+ margin: 0; }
+.domainsearch #domainSearchForm {
+ margin-top: 32px; }
+.domainsearch #responseList {
+ margin-top: 2em;
+ width: 100%; }
+.domainsearch #responseList .badge {
+ padding: 8px;
+ margin: 5px;
+ background-color: #00FFEB;
+ border-radius: 5px;
+ max-width: 7.6em;
+ text-align: center; }
+.domainsearch #responseList .badge.available {
+ color: #251C47; }
+.domainsearch #responseList .domain-row {
+ align-items: center;
+ padding: 15px;
+ border-bottom: 1px solid #2B2152; }
+@media (max-width: 46rem) {
+ .domainsearch #responseList .domain-row {
+ padding: 0;
+ display: flex; } }
+.domainsearch #responseList .domain-row:nth-last-child(1) {
+ border-bottom: none; }
+.domainsearch #responseList .domain-row h5 {
+ margin: 0; }
+.domainsearch #responseList .domain-row div {
+ font-size: 0.9em;
+ padding-left: 10px;
+ padding-right: 10px; }
+.domainsearch #responseList .domain-row div:not(:first-child) {
+ text-align: center; }
+.domainsearch #responseList .domain-row .name {
+ flex: 5 0 auto; }
+.domainsearch #responseList .domain-row .avail {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ border-right: 1px solid #2B2152; }
+.domainsearch #responseList .domain-row .claimed {
+ background-color: #696589; }
+.domainsearch #responseList .domain-row .reserved {
+ background-color: #696589; }
+
+/*# sourceMappingURL=newstyle.css.map */
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..57169b6
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/files/handshake.pdf b/public/files/handshake.pdf
new file mode 100644
index 0000000..d5fe9a6
Binary files /dev/null and b/public/files/handshake.pdf differ
diff --git a/public/files/handshake.txt b/public/files/handshake.txt
new file mode 100644
index 0000000..bf1dd16
--- /dev/null
+++ b/public/files/handshake.txt
@@ -0,0 +1,2216 @@
+The notes below describe the approach in designing and writing the initial
+reference implementation of Handshake. This is not a prescriptive document and
+should not be used as such. This document's goal is to provide a reference on
+the rationale and initial design of the protocol.
+
+# Abstract
+
+The foundation for the internet's security has relied upon trusted Certificate
+Authorities (CAs) which attest that a user is connecting to the correct server
+or node. This has created a reliance upon a handful of trusted actors, many of
+whom are for-profit corporations or other actors who may not have long-term
+incentive towards stewardship of the internet. The net-effect is a "1-of-m
+multisig" whereby if any one of the trusted CAs fail, the entire security of
+the internet fails. This failure has occurred and will continue to occur with
+the trusted-CA design, with catastrophic risks as more and more infrastructure
+becomes networked.
+
+Many replacements have been proposed to properly secure the internet, but none
+have been successful. Fundamentally, a trust anchor is needed to provide a
+secure association between names and servers who claim to be the correct
+endpoint for those names. There has been a tradeoff between federated nodes
+(CAs) and a single trusted entity controlling the network (DNSSEC). Handshake
+is an ongoing project to establish a decentralized network whereby
+cryptoeconomic incentives are established to coordinate consensus on the
+association between names and certificates.
+
+This document describes a proposal, operational functionality, and intention
+to replace centralized trusted internet infrastructure, with a decentralized
+Certificate Authority and globally unique namespace composed of a
+decentralized blockchain and cryptographic proofs backed by cryptoeconomic
+mechanisms. This construction enables the namespaces to point directly to a
+compact certificate representing a trust anchor which does not rely upon a
+single trusted authority to create attestations as in the existing federated
+Certificate Authority model. Handshake builds in compact verifiable proofs to
+ensure compatibility with embedded and mobile devices, with significant
+committed merkelized state proof-size and performance improvements.
+
+Further, a method is proposed to achieve decentralized, large-scale community
+coordination inspired by the free and open source software aesthetic. The free
+and open source community has provided the most critical contribution towards
+development of the internet and has produced software which humanity relies
+upon worldwide. This coordination is achieved by building a decentralized
+infrastructure backed by a blockchain to support collective agreement on
+certificates and coordination using direct ownership of a commodity token by
+those who are most capable of integrating and using the Handshake blockchain,
+which optimizes for the long-term incentives of the free and open source
+community. The Handshake project and community is a performance experimenting
+on replacing the social function of centralized corporations in favor of
+self-interested gift economies, which achieve coordinated goals.
+
+# Project Summary
+
+Many understand the green lock icon on the web browser as meaning the connection
+is secure and encrypted between themselves and the server identifying as the
+website. However, the security has always been entrusted in a handful of
+centralized Certificate Authorities (CAs). These entities are the guardians of
+the internet and there has been many documented cases of
+failure[fakecert-fr][fakecert-ir]. As the internet connects more devices and
+economic infrastructure becomes internetworked, the impact of any one failure
+dramatically increases.
+
+Historically, a trilemma known as Zooko's Triangle[zooko] was believed to
+exist where one must pick two of three possible properties consisting of:
+Human-meaningful names, Decentralized, and Secure. This trilemma reflected the
+perceived constraint revolving around the notion that it may be necessary for a
+single point of trust for a consensus around short names (e.g. a website
+address), otherwise a lack of global consensus around the owner of the name
+eliminates the name's meaningfulness and security.
+
+Recent innovations with the blockchain has possibly maneuvered around this
+trilemma by creating a single point of consensus around the association between
+names and certificates, in a single decentralized blockchain represented by many
+actors verifying the network[aaron]. Achieving this security property
+requires not only redesigning the trust anchor in certificate authorities, but
+also requires deep integration in the naming infrastructure itself.
+
+A blockchain is proposed which optimizes for correcting prior weaknesses around
+acknowledging stakeholders such as existing top-level domain (TLD) holders and
+optimizes for decentralization (while still allowing for n-of-m attestations).
+Users use the native token (coin) to register TLDs which are pinned to a
+specific certificate as the identity. A committed merkelized proof of all
+top-level names allow for compact, shareable inclusion and exclusion proofs.
+This blockchain exists to attempt to resolve the need for a globally unique
+namespace which is necessary to have an association with unique names and
+certificates. While it's possible to create a singular centralized globally
+unique association (DNSSEC), a decentralized system can be resolved by creating
+a blockchain with its own cryptoeconomic incentives (coin), including name
+auctions of a unique namespace and block creation. Scarce resources require
+sybil protection, usually managed by a central trusted authority (CAs, ICANN),
+but can be resolved by having a blockchain based mechanism for global consensus
+and resource allocation.
+
+As a blockchain is needed for global consensus on a namespace, there needs to be
+a choice upon how to allocate resources for this system. The intent behind
+Handshake is to allocate a representative portion of the resources to the
+stakeholders which may be potentially contributive towards development and
+adoption, hence the overwhelming majority of the resources being allocated to
+the free and open source community. It is possible that this project may spur
+other projects to allocate the overwhelming majority of economic resources to
+the free and open source community in the form of an obligation-free
+distribution. This document describes an emergent mechanism and game whereby
+decentralized blockchain project developers and investors, in the face of
+competition from other projects, may have significant self-interested incentives
+to distribute an overwhelming majority of token/coin ownership to the free and
+open source community, and ultimately the whole of humanity.
+
+In order to achieve new games of distribution and a new economy predicated upon
+true gifts over contracted labor, it must be achieved via a self-perpetuating
+and self-interested mechanism which is game-theoretically sound. One of the
+principal of this project is sparking a mechanism whereby individuals have
+self-interested incentives towards creating decentralized projects as well as a
+wide distribution via gifts. Consequently, its goal is to fulfill the
+self-interested imperative of a return by the principals initiating, developing,
+and scaling the project worldwide. However, to scale up, there is a game between
+projects which distribute ownership of the chain itself to as wide of a set of
+participants as possible. Handshake aims to distribute 15% of the coins to the
+individuals and companies responsible for creating the coin (with the
+developers/organizations/advisors, and early investors split evenly at 7.5%
+each). This ensures a self-interested game can perpetuate for future projects,
+and future projects without significant front-loaded development costs may be
+even lower.
+
+The Handshake project aims to distribute around 70% of the coin supply to open
+source developers, projects, and non-profits without any contractual expectation
+of work by the individual free and open source developers.
+
+Fundamentally, the self-interested mechanism requires all developers and users
+to be receiving coins as an incentive. A summary of the mechanism is as follows:
+Presume in the future there are three hypothetical projects released which
+achieve the same goal, let's say it's a decentralized mesh networking
+blockchain. Two of the three give 90% of its value to the creators of the
+project. The third gives 85% of the value to FOSS developers and those who put
+up nodes. It would stand to reason that the third would have significantly
+greater odds of success. The Handshake mechanism is designed to create a
+competitive game of asset ownership distribute more to FOSS developers, and
+perhaps all of humanity.
+
+Much as capitalism creates a competitive game between participants which
+competitive self-interest reduces the price of goods in non-monopolistic
+commodity environments, the handshake mechanism is a project exploring a similar
+concurrent game to maximize ownership for FOSS developers and the public. No
+single producer reduces the prices of their own good for altruism in
+capitalist marketplaces, it is done through self-interested competitive
+incentives, "I make more money when I lower my prices". Similarly, the
+handshake mechanism is experimenting with a process whereby "I make more money
+the more is gifted to FOSS developers and the whole of humanity".
+
+# Decentralized Certificate Authorities and the Blockchain
+
+The resolution to the trilemma, Zooko's Triangle, is between the relationship
+with the name and the cryptographic identity of the owner. By making the owner
+of the name a cryptographic key, one can create a certificate chain of the owner
+down to the key by creating a signature signed by that owner's key (a chain of
+custody). This is not possible under the current system as the current owner of
+the name is not owned by a cryptographic key, but rather trusted records held by
+custodians with non-cryptographic records of named owners, e.g. the TLD ".com"
+is held by Verisign.
+
+However, cryptographic attestation of certificate chains for SSL/HTTPS is
+insufficient in creating decentralized certificate authorities. If there are no
+canonical points of truth for a decentralized record of the relationship between
+keys and names, then the record can be disputed. Alice can claim to own the TLD
+".example", and Bob can think he's the correct owner. It is uncertain who the
+true owner of of ".example" could be.
+
+The blockchain creates the ability for canonical ownership records by recording
+in order which record exists before another (thereby letting one know that Alice
+registered a name before Bob could possibly register one, and therefore only
+Alice's is correct). Without this canonicalization, it would not be possible to
+have confidence that one is talking to the correct owner of a name and hence is
+fundamental to canonical name resolution.
+
+This canonicalization introduces an interesting dilemma, namely that of the
+ability to sybil the network. Even with canonical ordering, the problem of
+namespace allocation remains. A single party could spam the network registering
+all possible short names in existence, monopolizing the network. This would
+severely reduce the usefulness as one or a handful of parties monopolize the
+resources. To correctly mitigate this problem, a currency native to the
+blockchain is necessary to create a cost function for the names. When a name is
+auction and sold, the coins are permanently destroyed from the system. Without a
+cost, there is no cost to spamming and a single party owning everything. A
+native coin is necessary, as a dollar-pegged coin would depend on an external
+environment and have a trusted 3rd party operate as a gatekeeper to the system,
+whereas a native coin would not depend on any single trusted third party.
+
+As a consequence, it then becomes a question of resource allocation as a method
+of prevention against sybil attacks. Should the majority go to initial
+developers/investors, majority to miners, or majority to FOSS developers
+in the early days of the coin? Handshake is an experiment in the possibility
+that the majority of ownership claimed by the FOSS community is a
+rational and game theoretically superior strategy to traditional models of
+corporate growth and development for some project types; those where a
+decentralized blockchain is ideal.
+
+# Consensus
+
+## Proof of Work
+
+_Proof of work_[pow] saw its first use in cryptocurrency with the advent
+Bitcoin[bitcoin]. Bitcoin's PoW function is a further iteration of a specific
+proof-of-work construction known as Hashcash[hashcash]. The use of
+proof-of-work led to the creation of specialized chip hardware intended to
+optimize this function. While specialized hardware can ensure that a
+proof-of-work network is protected, we concede that it does have the capacity
+to enable the existence of hardware monopolies.
+
+However, we submit that this is an acceptable risk due to the benefits
+proof-of-work offers in the way of SPV. Our protocol is not usable in practice
+without proper SPV proofs.
+
+There is currently no known sufficiently _decentralized_ proof-of-stake system
+in production resilient against fraudulent SPV proofs.
+
+### Proof of Work Functions
+
+A Hashcash proof-of-work function using SHA3 and blake2b is used. SHA3 is
+currently under-represented in proof-of-work functions. We find that simplistic
+nature of Hashcash limits the room for unforeseen optimizations, and that the
+current lack of SHA3 usage in combination with blake2b in proof-of-work
+functions creates a more level playing field for hardware manufacturers.
+
+Cuckoo Cycle[cuckoo-1][cuckoo-2] was considered, however, throughout the course
+of the development of our protocol, we witnessed frequent optimizations to
+cuckoo cycle mining algorithms by Tromp and other contributors. Given these
+optimizations and the complexity of the underlying algorithm itself, we began
+to strongly consider the room for unforeseen optimizations in the mining
+process.
+
+We fear that an unforeseen optimization, if kept secret after its eventual
+discovery, could lead to even harsher monopolistic conditions among hardware
+manufacturers. Furthermore, we find that the Cuckoo Cycle verification and
+mining algorithms are lacking in the area of formal academic analysis. If
+economic incentives are created to optimize Cuckoo Cycle, we expect that graph
+theorists and other experts will be involved with the creation of optimized
+mining algorithms and hardware.
+
+We see these as unreconcilable issues, as they impede the ability to properly
+choose Cuckoo Cycle parameters for a blockchain. Cuckoo Cycle parameters
+themselves are difficult to adjust on the consensus layer, and perhaps cannot
+be dynamically adjusted safely.
+
+#### Difficulty Adjustment
+
+Given the prevalence of edge cases such as _timewarp attacks_[timewarp] and
+stalling during abrupt hashpower changes on the Bitcoin retargetting algorithm,
+we sought alternatives.
+
+We examined DigiByte's DigiShield[digishield-1][digishield-2], MegaCoin's
+Kimoto Gravity Well[kimoto-1][kimoto-2], and DarkCoin's Dark Gravity Wave[dgw],
+as potential retargetting algorithms for our protocol.
+
+Due to the uncertainty of exactly how much mining power will enter the network
+upon launch, and, initially, the added uncertainty of a new PoW algorithm, we
+desired an approach which would retarget on every block. DigiShield seems to
+perform especially well in the case that mining power abruptly enters or exits
+the network.
+
+The formulation of the _Zcash_ retargetting
+algorithm[zcash-1][zcash-2][zcash-3] is also of particular relevance, given the
+similarities of the protocols' respective PoW functions. Zcash has had success
+with their variation of DigiShield, and as such, our protocol's retargetting is
+more-or-less a faithful reimplementation of the Zcash algorithm.
+
+## Unspent Transaction Outputs (UTXOs)
+
+The UTXO-based blockchain, also introduced by Bitcoin, transfers money from one
+party to another using a series of _transaction outputs_. Transaction outputs
+inherently enforce _order_ of transactions within a _block_. Order-enforcement
+in particular is necessary for our protocol to function with the utmost
+security.
+
+Our naming system requires on-chain smart-contract-like behavior. It deals in
+outputs which need to update a global state. This is atypical of UTXO systems.
+But as such, we require that these operations occur in a predictable order.
+
+This order-preservation mechanism is especially necessary for maintaining the
+transaction _mempool_ state in a predictable manner. This model ensures that
+block assembly is a fast and simple process.
+
+## Naming History
+
+The history of naming has been profoundly effective, exploratory, and has had
+many skilled teams and projects. From the beginning, the DNS system and SSL/CAs
+have been elegant and the Certificate Authority system's existence since the mid
+1990s to now has been a testament to its resilience, with the hard work of
+thousands of individuals and organizations. Since then, there have been many
+other attempts to replace, upgrade, or distribute this system.
+
+The pioneers of naming cryptocurrencies include Namecoin[namecoin-1],
+ENS[ens-1][ens-2], and Blockstack[blockstack-1] (among others).
+
+Namecoin's model requires a user to run a fully validating node in order to
+securely resolve domain names. Although Namecoin was the first cryptocurrency
+project to attempt to implement a DNS bridge[namecoin-2] for a cryptocurrency
+naming protocol, the protocol itself is lacking in the area of SPV.
+
+The _Ethereum Name Service_[ens-3][ens-4][ens-5] lends itself to a bit of
+centralized control as the ENS root[ens-6][ens-7] is centrally maintained by a
+select group of signatories. As is the case with Namecoin, there is no easy
+avenue for _compact_ proofs on ENS.
+
+Of our three predecessors, Blockstack came the closest to providing
+easy-to-verify compact proofs for names.
+
+SPV name verification in the Blockstack _SNV_ protocol first involves
+retrieving a state root (also known as the _consensus hash_) from a _trusted
+node_ and securely requesting the name record from an unstrusted node.
+Unfortunately, one can not verify that the name record served is the most
+recent revision[blockstack-2]. Furthermore, requesting the state root from a
+trusted node leads to a similar construction as Namecoin, wherein one must run
+a fully validating node in order to securely retrieve name data.
+
+This full node requirement, which all naming predecessors are encumbered by in
+some form, may be one of the primary hurdles to widespread adoption of a naming
+cryptocurrency. To allow for SPV name resolution in the absence of a trusted
+full node, provability of names must be an inherent feature of the protocol.
+
+There has also been prior work on alternative root zones. The most significant
+example of an alternate root zone is OpenNIC[opennic]. This is a proposed
+alternative to ICANN via an alternate namespace of unused names. This shifts a
+singular root source of truth to a federated model where a namespace is
+controlled by different entities, however, does not remove trust in those
+organizations. It does not create additive security, as the trust is partitioned
+according to TLD to a single root zone.
+
+The Convergence Project[convergence], initially proposed by Moxie
+Marlinspike, created a system of certificate pinning and attestation. Notaries
+would attest to the endpoint's certificate. This system created an additive
+federated model of trust. This provides a significant improvement to the
+existing single CA trust model. However, there is no canonical trust anchor,
+which means that two people can have a different view on the correct certificate
+in adversarial or faulty notaries.
+
+Certificate Transparency[ct] provides a method to ensure committed proofs of
+name records and significant increases the security of the system. It creates a
+method of accountability for failure and rapid detection. This is primarily a
+detection mechanism in the event of failure of CAs.
+
+## Provable Data Sets
+
+In order to be free of the full node requirement, our protocol requires an
+_authenticated data structure_. In particular, we require a data structure
+which can efficiently map keys to values. In order for our protocol to be a
+suitable replacement for the DNS root zone, speed and size were our primary
+concerns.
+
+In our benchmarks of various data structures, we found that while many of them
+are indeed performant, they have an unacceptably large proof size, frequently
+exceeding 1-3 kilobytes. This led us to do further research.
+
+Our strict requirements include minimal storage, exceptional performance on
+SSDs, small proof size, and _history independence_, wherein order of insertion
+has no effect on the final state of the tree. The latter requirement is
+something which every re-balancing data structure inherently lacks.
+
+These requirements severely reduced our options. We examined in particular the
+Merkelized Base-16 Trie[ept-1][ept-2] used in Ethereum[ethereum], and the
+Sparse Merkle Tree[smt-1] used in Google's certificate transparency
+project[smt-2].
+
+We found that while Ethereum's base-16 trie was performant, the proof size was
+not suitable for our protocol. The storage requirements were also excessive.
+
+We further discovered that Google's Sparse Merkle Tree was unsuitable in terms
+of performance, as each insertion requires a large number of database lookups
+without heavy caching, as well as several rounds of hashing for each item
+inserted. A typical insertion of 5,000 leaves required at least 1.2 million
+rounds of hashing in our benchmarks, as well as a significant number of
+database reinsertions.
+
+As a result of this research, we consider authenticated data structures
+implemented, or intended to be implemented, on top of existing data stores to
+be inherently flawed in terms of scalability.
+
+### FFMT (Flat-File Merkle Tree)
+
+We devise an authenticated data structure, which unlike the Ethereum Trie or
+Sparse Merkle Tree, is intended for storage in flat files. This removes the
+overhead of database lookups entirely by making the data structure its own
+database implementation.
+
+By storing a merkelized data structure in a series of append-only files, we are
+able to provide traditional database features such as snapshotting, atomicity,
+and crash consistency. Given our requirements, a trie is the obvious choice as
+a backing data structure.
+
+The initial implementation of our FFMT is a simple base-2 merkelized trie, and
+results in a construction which shares many similarities to earlier work done
+by Bram Cohen[merkleset].
+
+Later iterations of our data structure began storing colliding prefix bits on
+internal nodes, resulting in a base-2 merkelized radix tree similar to the
+_Merklix Tree_[merklix-1][merklix-2] proposed by Amaury Séchet.
+
+As the backbone of our FFMT, we propose one of the two aforementioned data
+structures.
+
+---
+
+Our initial FFMT implementation resulted in over a 50x speedup over Ethereum's
+Base-16 Trie and over a 500x speedup over Google's Sparse Merkle Tree. We also
+found that proof sizes are comparable to compressed Sparse Merkle Tree proofs
+and roughly four times smaller than base-16 trie proofs.
+
+The FFMT storage requirements, while steeper than those of the Sparse Merkle
+Tree, are still much smaller than the Ethereum base-16 trie. We benchmarked
+insertions of 50 million 300-byte leaves into our FFMT in batches of 500 with a
+periodic commission of 44,000 values to the tree. Our benchmarks were run on a
+high-end but consumer-grade laptop, containing a Intel Core i7-7500U 2.70GHz
+and an NVMe PCIe SSD. Near peak capacity, the 500-value insertions themselves
+averaged roughly 100-150ms, with a commission time averaging 400-600ms for
+44,000 leaves. Note that the committing of the tree involves a call to
+`fsync(2)`.
+
+These insertion and commission times are acceptable with 5 minute blocks. We
+add the extra fail-safe of limiting any tree updates to a maximum of 600 per
+block, giving us a predictable worst-case insertion complexity.
+
+#### Description
+
+Typical of any trie-like structure, the FFMT follows a path down each key in
+order to find the target leaf node.
+
+##### Insertion
+
+We start with a simple insertion of value `a` with a key of `0000`. It becomes
+the root of the tree.
+
+fig. 1
+
+```
+Map:
+ 0000 = a
+
+Tree:
+ a
+```
+
+We insert value `b` with a key of `1100`. The tree grows down and is now 1
+level deep. Note that we only traversed right once despite the 3 extra bits in
+the key.
+
+fig. 2
+
+```
+Map:
+ 0000 = a
+ 1100 = b
+
+Tree:
+ R
+ / \
+ / \
+ a b
+```
+
+The following step is important as to how our simplified FFMT handles key
+collisions. We insert value `c` with a key of `1101`. It has a three bit
+collision with leaf `b` which has a key of `1100`. In order to maintain a
+proper key path within the tree, we grow the subtree down and add _null_ (or
+_dead-end_) nodes (represented by `x`) as children of internal nodes. Dead-end
+nodes are more tangibly represented by a sentinel hash of all zero bits.
+
+This differs from the Merklix-like version of our tree, which would store bit
+collisions within a single parent internal node.
+
+fig. 3
+
+```
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+
+Tree:
+ R
+ / \
+ / \
+ a /\
+ / \
+ x /\
+ / \
+ /\ x
+ / \
+ b c
+```
+
+We add value `d` with a key of `1000`. It is free to consume one of the
+null nodes.
+
+fig. 4
+
+```
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+ 1000 = d
+
+Tree:
+ R
+ / \
+ / \
+ a /\
+ / \
+ d /\
+ / \
+ /\ x
+ / \
+ b c
+```
+
+Adding value `e` with a key of `1001` results in further growing.
+
+fig. 5
+
+```
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+ 1000 = d
+ 1001 = e
+
+Tree:
+ R
+ / \
+ / \
+ a /\
+ / \
+ / \
+ / \
+ / \
+ /\ /\
+ / \ / \
+ /\ x /\ x
+ / \ / \
+ d e b c
+```
+
+##### Removal
+
+Removal may seem non-intuitive when dead-end nodes are present in the subtree.
+All previously executed subtree growing must be un-done.
+
+fig. 6
+
+```
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+ 1000 = d
+
+Tree:
+ R
+ / \
+ / \
+ a /\
+ / \
+ d /\
+ / \
+ /\ x
+ / \
+ b c
+```
+
+If we were to remove leaf `d` from the above tree, we must replace it with a
+dead-end node.
+
+Removing leaf `d` (we must replace with a dead-end):
+
+fig. 7
+
+```
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+
+Tree:
+ R
+ / \
+ / \
+ a /\
+ / \
+ x /\
+ / \
+ /\ x
+ / \
+ b c
+```
+
+Removing leaf `c` (shrink the subtree):
+
+fig. 8
+
+```
+Map:
+ 0000 = a
+ 1100 = b
+
+Tree:
+ R
+ / \
+ / \
+ a b
+```
+
+Removing leaf `b` (`a` becomes the root):
+
+fig. 9
+
+```
+Map:
+ 0000 = a
+
+Tree:
+ a
+```
+
+With our final removal, we are back in the initial state.
+
+##### Proofs
+
+Our FFMT proof is similar to a standard merkle tree proof with some extra
+caveats. Leaf hashes are computed as:
+
+```
+HASH(0x00 || 256-bit-key || HASH(value))
+```
+
+Where `||` denotes concatenation.
+
+It is important to have the full key as part of the preimage. If a
+non-existence proof is necessary, the full preimage must be sent to prove that
+the node is a leaf which contains a different key with a colliding path. If the
+key path stops at one of the dead-end nodes, no preimage is necessary. Any
+dead-end nodes up the subtree can be compressed, as they are redundant
+zero-hashes.
+
+If we were asked to prove the existence or non-existence of key `1110`, with
+our original tree of:
+
+fig. 10
+
+```
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+ 1000 = d
+
+Tree:
+ R
+ / \
+ / \
+ a /\
+ / \
+ d /\
+ / \
+ /\ x
+ / \
+ b c
+```
+
+Key `1110` does not exist in this case, so we must provide the hashes of nodes
+`a`, `d`, the parent hash of `b` and `c`, and finally a dead-end node `x`. The
+fact that a final leaf node was a dead-end node proves non-existence.
+
+fig. 11
+
+```
+Proving non-existence for: 1110
+
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+ 1000 = d
+
+Tree:
+ R
+ / \
+ / \
+ (a) /\
+ / \
+ (d) /\
+ / \
+ (/\) [x]
+ / \
+ b c
+```
+
+The dead-end node `x` can be compressed into a single bit, since it is a
+zero-hash.
+
+Proving non-existence for key `0100` is more difficult. Node `a` has a key of
+`0000`. In this case, we must provide the parent node's hash for `d` and its
+right sibling, as well as `a` and its original key `0000`. This makes the
+non-existence proof larger because we have to provide the full preimage, thus
+proving that node `a` is indeed a leaf, but that it has a different key than
+the one requested. Due to our hashing of values before computing the leaf hash,
+the full preimage is a constant size of 64 bytes, rather than it being the size
+of the key in addition to the full value size.
+
+fig. 12
+
+```
+Proving non-existence for: 0100
+
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+ 1000 = d
+
+Tree:
+ R
+ / \
+ / \
+ [a] (/\)
+ / \
+ d /\
+ / \
+ /\ x
+ / \
+ b c
+```
+
+We need only send the preimage for `a` (the value hash of `a` itself and its
+key `0000`). Sending its hash would be a redundant 32 bytes.
+
+An existence proof is rather straight-forward. Proving leaf `c` (`1101`), we
+would send the leaf hashes of `a`, and `d`, with one dead-end node, and finally
+the sibling of `c`: `b`. The leaf hash of `c` is not transmitted, only its
+value (`c`). The full preimage is known on the other side, allowing us to
+compute `HASH(0x00 || 1101 || HASH("c"))` to re-create the leaf hash.
+
+fig. 13
+
+```
+Proving existence for: 1101 (c)
+
+Map:
+ 0000 = a
+ 1100 = b
+ 1101 = c
+ 1000 = d
+
+Tree:
+ R
+ / \
+ / \
+ (a) /\
+ / \
+ (d) /\
+ / \
+ /\ (x) <-- compressed
+ / \
+ (b) [c]
+```
+
+---
+
+Our goal is to keep the proof size under 1 kilobyte, at least for the first
+several years.
+
+With 50,000,000 leaves in the tree, the average depth of any given key path
+down the tree should be around 27 or 28 (due the inevitable key prefix
+collisions). This results in a proof size slightly over 800 bytes, pushing a
+1-2ms proof creation time on our previously mentioned hardware.
+
+##### Disk Optimization
+
+Due to the sheer number of nodes, a flat-file store is necessary. The amount of
+database lookups would be overwhelming for a data store such as _LevelDB_. Our
+FFMT is much simpler than the Ethereum Base-16 Trie in that we need only store
+two nodes: internal nodes and leaves.
+
+Internal nodes are stored as:
+
+fig. 14
+
+``` c
+struct internal_node_s {
+ uint8_t left_hash[32];
+ uint16_t left_file;
+ uint32_t left_position;
+ uint8_t right_hash[32];
+ uint16_t right_file;
+ uint32_t right_position;
+} internal_node;
+```
+
+Leaf nodes are stored as:
+
+fig. 15
+
+``` c
+struct leaf_node_s {
+ uint8_t key[32];
+ uint16_t value_file;
+ uint32_t value_position;
+ uint16_t value_size;
+} leaf_node;
+```
+
+The leaf data itself is stored at `value_position` in `value_file`.
+
+We store the tree in a series of append-only files, with a particularly large
+write buffer used to batch all insertions with a minimal amount of writes.
+
+Atomicity with a parent database can be achieved by calling `fsync(2)` after
+every commission and inserting the best root hash and file position into the
+database.
+
+Because our database is append-only, traditional crash consistency can also be
+achieved by writing a metadata root on every commit. This metadata root
+contains a pointer to the latest tree root, a pointer to the previous metadata
+root, and a 20 byte checksum. On boot, the database can parse up the files in
+reverse order to find the last intact state.
+
+##### Compaction
+
+The FFMT database can be compacted periodically through user intervention,
+though it's a rather expensive operation. In our benchmarks, 1,136 commits of
+44,000 300-byte leaves each (50,000,000 leaves total), resulted in a database
+size of 49GB. This could be compacted to use approximately 20GB of storage.
+
+##### Collision Attacks
+
+It goes without saying that it is most definitely possible for an attacker to
+grind a key in order to create bit collisions. Currently, the Bitcoin network
+produces 72-80 bit collisions on block hashes. In the worst case, that would
+delve 72-80 levels deep in our tree, but while storage increases, the rounds of
+hashing are far less than that of the sparse merkle tree.
+
+With small modifications, our initial FFMT implementation was able to be
+converted to a base-2 merkelized radix tree, or Merklix tree. We found that
+while the Merklix tree offers better DoS protection, in practice, it does not
+seem to have significant performance or storage benefits over the simplified
+base-2 trie described above.
+
+We see these potential modifications as a trade-off between space efficiency
+and simplicity. The radix tree modifications to the trie result in a slight
+increase in complexity as far as the tree's implementation and proof
+verification are concerned. The most unfortunate aspect of these modifications
+to be the requirement of variable sized nodes when stored on disk. Unlike the
+simplified trie, the radix tree must store a variable number of prefix bits on
+each internal node.
+
+We hope to observe how each of these trees behave on future iterations of the
+Handshake testnet in order to better determine the proper data structure for
+our protocol.
+
+## Naming Markets
+
+Similar to ENS, our naming protocol seeks to determine the true market value of
+names before allowing registration. In particular, our system requires an
+auction system for names. In order to prevent _price sniping_, we implement a
+_blind second-price auction_, also known as a _Vickrey Auction_.
+
+In a Vickrey Auction, a participant is only aware of their own bid. The bids
+are revealed at the end of the auction when a winner is chosen. The winner pays
+the second highest bid instead of his or her own.
+
+This auction structure was first described by William Vickrey[vickrey]. Vickrey
+argues that the result of a simple non-blind auction is virtually identical to
+a blind second-price auction. In an auction where bids are public, bidders will
+announce their bids until the _second highest price_ is reached. At this point,
+only one bidder will remain who is willing to pay, and he or she ends up paying
+the second highest price. We agree with Vickrey's analysis, and our conclusion
+is that if we are to do a blind auction, it is only logical to make it a
+second-price auction.
+
+However, a Vickrey Auction system requires that we are capable of executing
+rather complex consensus-layer smart contract behavior on top of a UTXO set.
+This kind of functionality rarely exists in the UTXO-based world. Our initial
+implementation sought to add dynamic functionality at the _transaction_ level.
+This approach was unmanageable. Whatever dynamic behavior that is added must
+occur at the output level.
+
+## Covenants
+
+_Bitcoin Covenants_, first explored by Maxwell[maxwell-1][maxwell-2] and later
+formally described by Möser et al[covenants], are a form of smart contracts
+that exist on a UTXO-based blockchain such as Bitcoin. The word "covenant"
+itself refers to a legally binding covenant, in which a party agrees to refrain
+from or participate in a certain action in the future. Covenants, at their most
+fundamental level, restrict the path of money as it passes from output to
+output. Once money enters a covenant, it is _locked_ into a specific path and
+may not under any circumstances deviate from said path. Actors who have the
+ability to create and sign transactions must create them according to the
+covenant's state.
+
+In order for covenants on Bitcoin to restrict the path of money, there are
+several wildly different mechanisms currently in thought.
+Bitcoin-NG[bitcoin-ng] proposes consensus-level covenants in the form of a new
+bitcoin script opcode, `OP_CHECKOUTPUTVERIFY`. The widely discussed counterpart
+to consensus covenants is cryptographic covenants, which are executed via
+cryptographic trickery. This trickery ranges from novel usage of ECDSA key
+recovery combined with a special kind of transaction signature hashing, to the
+usage of SNARKs.
+
+Although never enabled on Bitcoin due to fungibility and AML/KYC surveillance
+concerns, we believe that the core idea of covenants is the proper framework
+for implementing complex smart contracts in conjunction with a UTXO set.
+
+The approach elected for our protocol is most similar to the consensus-level
+covenants proposed by Bitcoin-NG.
+
+Our construction is a deeply consensus-level covenant, and differs from the
+earlier proposals, which required layer-two blockchain monitoring in order for
+dynamic behavior, such as asset ownership, to be achieved. Instead of a
+layer-two node determining these details, the blockchain itself maintains the
+state of these assets. In our case, the assets in question are _names_.
+
+## Output Structuring
+
+In a UTXO-based blockchain, the typical transaction output consists of a
+_locking script_, or _predicate_, combined with an output value.
+
+A typical bitcoin output exists as a struct of:
+
+fig. 16
+
+``` c
+struct output_s {
+ int64_t value;
+ uint8_t script[];
+} output;
+```
+
+With `script` being the locking script; the predicate which locks up money for
+redemption. We add a new field called `covenant`:
+
+fig. 17
+
+``` c
+struct output_s {
+ int64_t value;
+ uint8_t script[];
+ struct covenant_s {
+ uint8_t action;
+ uint8_t arguments[][];
+ } covenant;
+} output;
+```
+
+The money can still be locked up by the predicate just the same. However, when
+money is sent into a covenant, it limits where the output may be redeemed _to_.
+
+Due to the fact that the covenant behavior is only prescribed at the consensus
+level, this construction should be resistant to fungibility attacks in
+comparison to other covenants proposals.
+
+## Auction System
+
+Using our generic consensus-level covenant system, we are able to implement
+almost any kind of smart contract on the blockchain layer.
+
+In a normal UTXO system, the order of inputs and outputs has almost no meaning.
+We enforce positional requirements of inputs and outputs when covenants are
+used.
+
+The behavior of our covenants is prescribed with consensus code in the
+implementation of the blockchain itself. Our system is generic enough that new
+covenant types can be _soft-forked_ into the protocol later.
+
+We prescribe a covenant type known as `BID`, which enters a bid into the
+system, associated with a name and with its corresponding output. The bid
+itself carries with it some _arguments_: namely, the name a participant is
+bidding on and the _blind value_. The blind value is the digest of the
+participant's _bid value_ concatenated with a 256 bit nonce.
+
+The value tied to the output itself must be greater than or equal to the bid
+value (although, the blockchain has no way of verifying this initially). Once
+entered into the `BID` covenant, the value may no longer be redeemed to a
+normal output. The value associated with this output is called the _lockup
+value_.
+
+The first participant to enter an opening bid initiates the _bidding period_,
+wherein other participants are free to join in the bidding.
+
+fig. 18
+
+```
+ TX #1 (txid=f3ce)
+
+ Input #0 | Output #0
+ ... | covenant_type=BID
+ | covenant_items={name, blind}
+ | address=0d1a
+ | value=15
+```
+
+After the bidding period has ended, a _reveal period_ is automatically
+initiated by the blockchain. Any participant who entered a bid during the
+bidding period now has a limited amount of time to _reveal_ their bid. This is
+accomplished by revealing their blind value's full preimage in a `REVEAL`
+covenant.
+
+fig. 19
+
+```
+ TX #2 (txid=c1d3)
+
+ Input #0 | Output #0
+ prev_txid=f3ce | covenant_type=REVEAL
+ prev_index=0 | covenant_items={name, nonce}
+ | address=0d1a
+ | value=5
+ |
+ | Output #1
+ | covenant_type=NONE
+ | covenant_items={}
+ | address=c0a8
+ | value=10
+ |
+```
+
+The full preimage includes the participant's 256 bit nonce, which was kept
+secret up until this point, as well as their bid value. At this point, the
+`REVEAL` output's value must be equal to the participant's bid value. The
+remainder of the lockup value can be taken as change. In the case of _fig. 19,
+the bid had a value of 5 coins, with the 15 coin lockup value successfully
+concealing the true value of the bid. This participant is able to immediately
+redeem 10 coins as change.
+
+Once the reveal period has ended, a winner is chosen. This winner is able to
+redeem their `REVEAL` output to a `REGISTER` covenant. The `REGISTER` output
+must have a value equal to the second highest bid, or in the case of only one
+bid, the participant's own bid value. We call this value the _name value_.
+Similar to the `REVEAL` covenant, the remainder of the bid value can be taken
+as change.
+
+fig. 20
+
+```
+ TX #3 (txid=a7be)
+
+ Input #0 | Output #0
+ prev_txid=c1d3 | covenant_type=REGISTER
+ prev_index=0 | covenant_items={name, name_data}
+ | address=0d1a
+ | value=3
+ |
+ | Output #1
+ | covenant_type=NONE
+ | covenant_items={}
+ | address=b1c9
+ | value=2
+ |
+```
+
+Once entered into the `REGISTER` covenant, the name value can _never_ be
+redeemed normally and cannot be used for transfer of value or for regular
+payments. It is effectively _burned_ from the system by its inability to leave
+the covenant's path.
+
+However, in the case that a participant loses, their funds can exit the
+covenant path with a `REDEEM` output.
+
+fig. 21
+
+```
+ TX #3 (txid=c0c1)
+
+ Input #0 | Output #0
+ prev_txid=c1d3 | covenant_type=REDEEM
+ prev_index=0 | covenant_items={name}
+ | address=0d1a
+ | value=5
+```
+
+The `REGISTER` output allows for a second parameter known as _name data_. The
+name data by consensus standards is a 512 byte blob with no required format. By
+policy standards it should be in a format akin to the DNS message
+format[rfc1035].
+
+fig. 22
+
+```
+ TX #4 (txid=cc1e)
+
+ Input #0 | Output #0
+ prev_txid=a7be | covenant_type=UPDATE
+ prev_index=0 | covenant_items={name, [name_data], block_hash}
+ | address=0d1a
+ | value=3
+```
+
+Once a name is registered, a one-year timeout is initiated before a name
+renewal is required. Renewals and updates to the name data are achieved through
+the `UPDATE` covenant action.
+
+The `UPDATE` covenant is similar to the `REGISTER` covenant, but it accepts a
+third argument, _block hash_. In order to refresh the renewal timer, the owner
+of the name is required to provide a recent block hash (one that occurred on
+the main-chain within the past 6 months). We require this to prevent an owner
+from pre-signing many thousands of years worth of renewals. A renewal should
+amount to a proof that the owner is still in possession of his or her private
+key.
+
+Throughout this entire process, the address must remain the same as the one
+provided in the original bid output. If a change in ownership is desired, the
+output must be redeemed to a `TRANSFER` covenant. The `TRANSFER` covenant has
+parameters which require the owner to commit to the address they intend to
+change ownership to after a 48-hour delay. After 48 hours worth of blocks, the
+owner can redeem the `TRANSFER` output to a `FINALIZE` output.
+
+fig. 23
+
+```
+ TX #5 (txid=0b17)
+
+ Input #0 | Output #0
+ prev_txid=cc1e | covenant_type=TRANSFER
+ prev_index=0 | covenant_items={name, address=fe13}
+ | address=0d1a
+ | value=3
+```
+
+fig. 24
+
+```
+ TX #6 (txid=11a3)
+
+ Input #0 | Output #0
+ prev_txid=0b17 | covenant_type=FINALIZE
+ prev_index=0 | covenant_items={name, name_data}
+ | address=fe13
+ | value=3
+```
+
+The 48 hour delay mentioned before is necessary in order to dis-incentivize
+theft of names. During the delay, an owner may redeem the `TRANSFER` output to
+a `REVOKE` output. The `REVOKE` output renders the name's output forever
+unspendable, and puts the name back up for bidding.
+
+fig. 25
+
+```
+ TX #6 (txid=d1da)
+
+ Input #0 | Output #0
+ prev_txid=0b17 | covenant_type=REVOKE
+ prev_index=0 | covenant_items={name}
+ | address=0d1a
+ | value=3
+```
+
+For increased security throughout this process, we define a new script opcode:
+`OP_PUSHTYPETOSTACK`. This particular opcode makes use of _transaction
+introspection_ in order to push the covenant type of the _next_ output to the
+script execution stack. This allows for a name owner to assign a _hot key_ and
+a _cold key_. The former key is used for updates to name data, while the latter
+is intended to be used only for transfers and revocations.
+
+An example script utilizing this feature may look something like what is
+displayed in fig. 26.
+
+fig. 26
+
+```
+OP_7
+OP_PUSHTYPETOSTACK
+OP_GREATERTHANOREQUAL
+OP_IF
+[cold-key]
+OP_ELSE
+[hot-key]
+OP_ENDIF
+OP_CHECKSIG
+```
+
+More advanced script code can also be used for example by requiring transfers
+and revocations to require signatures from multiple parties.
+
+A participant can assign this script to a pay-to-scripthash address and use it
+when they enter their initial bid, or perhaps later transfer their name to it.
+
+We intend for scripts to be the primary mechanism for robust security of name
+ownership. In contrast, we intend for the `REVOKE` output to be a last resort
+on the part of the name owner. It exists primarily to make the for-profit theft
+of names all but impossible.
+
+## Commission
+
+Name data is periodically committed to our authenticated tree at regular
+intervals. Because our tree is implemented as a series of append-only files, a
+commission interval is required to prevent history bloat, which may otherwise
+require the user of the software to compact their history regularly.
+
+Names and name data is batch inserted into the tree four times per day on a
+six-hour interval on average (defined by blockheight). This means that the
+_time-to-live_ for any resource on the blockchain is at least six hours in
+practice.
+
+## Context Optimizations
+
+In cryptocurrency implementation, there is a notion of _contextual_ and
+_non-contextual_ validation. Non-contextual verification functions perform
+basic sanity checks on transaction data before executing any resource-intensive
+code such as database lookups or elliptic curve operations. This is done for
+logic separation as well as for a measure for denial-of-service prevention.
+
+In contrast, contextual verification is only executed once the majority of the
+network state, such as UTXOs, is readily available.
+
+In the implementation of our protocol we found it was easier to separate
+blockchain validation into three logical categories: non-contextual,
+contextual, and super-contextual.
+
+We define _super-contextual_ verification as the validation functions which
+execute only once a _global state_ is readily available. Our global state is
+the state of the auctions and names. Whereas UTXOs are localized to a specific
+transaction, auction and name state is globally accessible by any transaction.
+
+Our prescription of covenant types is specifically designed to make
+super-contextual verification easier and more performant.
+
+Our system deals with a number of transaction locktimes which are enforced by
+the covenants in a transaction. One particular example of our difficulty with
+this was a number of edge cases we discovered in our implementation of the
+transaction mempool. Because a blockchain reorganization can cause a change in
+height of the main chain, a reorganization has the potential to invalidate
+hundreds or even thousands of transactions in our mempool. Bitcoin also has
+these issues when dealing with transaction locktimes and spends from coinbases
+(which are required to have a maturity of 100 blocks). These edge cases are
+much more severe in our system, and initially required a full revalidation of
+the entire mempool whenever a reorganization occurred.
+
+Typically, cryptocurrency mempool implementations do not hold any UTXOs in
+memory, and optimize for only the state required to assemble a block. By
+designing our specified covenant types with some redundant data, and by
+separating super-contextual verification from contextual verification, we were
+able to optimize this process.
+
+In order to validate covenant-related locktimes, our implementation requires no
+access to contextual information such as UTXOs. It only needs access to the
+global state, and non-contextual data such as the outputs on the
+transactions themselves.
+
+This separation of logic enforced by a deliberate design, among other things,
+allows us to avoid having to store an in-memory UTXO cache specifically for the
+mempool.
+
+We believe that having small amounts of redundant data in the covenant
+parameter vectors, along with some redundant covenant types, also helps with
+implementation of wallets, particularly SPV wallets.
+
+# Naming Architecture
+
+The naming system of the internet is DNS[rfc1035]. DNS currently operates with a
+multi-layer model. Operating systems typically expose a _stub resolver_. A stub
+resolver has no recursive capabilities, and is only capable of sending simple
+DNS message queries to remote nameservers. They are intended to be pointed at
+_recursive servers_. Recursive servers perform full DNS iteration on behalf of
+stub resolvers by traversing each _zone_'s nameserver until an _answer_ is
+received. A zone's nameserver is referred to as an _authoritative server_.
+Authoritative servers are capable of serving their own records, but also
+sending _referrals_ to _child zones_.
+
+Recursive servers are typically public and maintained by either internet
+service providers or other organizations, such as Google, Cloudflare, or
+OpenDNS.
+
+Currently, recursive DNS resolvers, such as Google's Public DNS[google], hit a
+number of root servers[root] maintained by various entities. These root servers
+serve the _root zone_. The root zone is collection of _top-level domains_
+(TLDs). The information necessary to resolve these TLDs is stored in a root
+_zone file_ distributed and maintained by IANA[iana], a branch of ICANN[icann].
+ICANN currently acts as a gatekeeper as to which domains are allowed an entry
+in the root zone file.
+
+A zone file, in its most general definition, can be thought of as a database
+which houses all the information necessary to serve the domain name records in
+a given _zone_. In the case of the root zone, the domain names are TLDs such as
+`com`, `net`, and `org`, and the zone file itself is quite literally a plain
+text file[internic] in the RFC 1035[rfc1035] presentation format.
+
+## Provability
+
+The current method for proving DNS is known as _DNSSEC_[dnssec]. DNSSEC
+includes cryptographic signatures of DNS resource records in every DNS message.
+This prevents an attacker from altering any DNS record as it is in flight.
+
+In order to avoid having to distribute every domain name's public keys to
+every DNS resolver, a _chain of trust_ is verified starting with the root zone
+as the trust anchor. This means IANA's public keys must be stored by any
+participant of this network, and limitations must also be placed in the notion
+that the _root key-signing keys_[anchors] never become compromised[signing].
+Furthermore, in order for a domain to be considered secure, IANA acts a
+gatekeeper for security for top non-auction name registrations only, signing
+off on keys in order to add them to the trust chain.
+
+## Handshake Architecture
+
+The Handshake naming protocol differs from its predecessors in that it has no
+concept of _namespacing_ or subdomains at the consensus layer. Its role is
+_not_ to replace all of DNS, but to replace the root zone file and the root
+servers.
+
+The goal is to maintain our own root zone file in a decentralized manner,
+making the root zone uncensorable, permissionless, and free of centralized
+gatekeepers such as ICANN and Certificate Authorities. In our protocol, every
+_full node_ peer on the network acts as a root server, serving a _provable_
+version of the root zone file. Our blockchain is essentially a larger, but
+distributed, zone file, permissionless, which any participant has the right to
+add an entry in.
+
+### Proof of Work as a Trust Anchor
+
+Proof-of-work is an interesting mechanism, as it is one of the few mechanisms
+known which is completely immune to _man-in-the-middle_ attacks. Because of
+this, a proof-of-work blockchain is able to act as a decentralized trust anchor
+for anything we may need to prove. In our case, we are able to use it as a
+permissionless mechanism to "sign off" on child DNS keys.
+
+DNS currently has a feature for storing fingerprints of a child zone's DNS keys
+in its parent zone. Because the root zone in our protocol is a blockchain, the
+protocol itself can act as a trust anchor for these keys, allowing anyone to
+prove not only their name on on the blockchain, but any subdomain they may have
+as well. This involves simply committing one's key fingerprints to a record on
+the blockchain.
+
+Even after the trust chain has been validated all the way down each zone via
+regular DNS, a user of this system still ends up with similar security to a
+blockchain. This is because the trust anchor is, in fact, a blockchain.
+
+### Compatibility
+
+In contrast to other naming projects, our goal is to work with DNS, not against
+it. We intend to transparently provide an alternative to existing centralized
+systems, all while requiring zero or minimal intervention from most users.
+
+DNS is a very mature piece of internet architecture. Several tools we need are
+already built. For example, it is already possible to store SSH fingerprints in
+DNS[sshfp]. This feature is currently supported in OpenSSH[openssh]. This
+allows one to verify SSH fingerprints in a decentralized way without installing
+any extra software beyond the Handshake daemon.
+
+DNS also has a feature for verifying SSL/TLS certificates[tlsa] by storing a
+hash of the SubjectPublicKeyInfo in a DNS resource record. Using this feature,
+one is able to run a recursive DNS resolver locally, with root hints pointed
+at a blockchain. If this were the case, there would be no reason to mistrust a
+self-signed certificate as long as a valid DNSSEC chain were present.
+
+We believe these technologies, when used together, can remove the need for
+Certificate Authorities.
+
+### Implementation
+
+Our consensus protocol is usable as a suitable replacement for ICANN root zone
+servers. An alternative to the ICANN Root Zone is, of course, not a new idea.
+This avenue has been previously explored by the Open Root Server Network, or
+_ORSN_[orsn].
+
+In order for the root zone to be replaced transparently, recursive resolvers
+must point at an authoritative nameserver which serves records committed to the
+blockchain rather than ICANN's root zonefile. This is a difficult dynamic to
+work with, as virtually no consumer devices currently ship with a recursive
+resolver running locally.
+
+There are multiple full DNS implementations include ISC's BIND[bind], as well
+as LDNS[ldns] and Unbound[unbound] maintained by NLnetLabs[nlnetlabs]. We were
+inspired by these implementations and created our own full DNS
+implementation[bns] throughout the course of our research.
+
+### Network Bootstrapping
+
+In order to bootstrap the network, all entries in ICANN's existing zonefile are
+_pre-reserved_ by consensus rules. Names in the list of Alexa top
+100,000[alexa] domains are also pre-reserved for further inclusion of existing
+stakeholders (with deduplication and common words down to above ~80,000 names).
+The latter names are converted to top-level domains by selecting their first
+domain name label.
+
+Owners of these reserved names are be able to claim them directly on the
+blockchain, bypassing the auction process. We aim to migrate existing
+nameholders to the handshake blockchain in a permissionless manner. To
+accomplish this, we propose _DNSSEC Ownership Proofs_.
+
+While DNSSEC itself is intended to mitigate man-in-the-middle attacks, we have
+found that, with some modifications, DNSSEC proofs can be used as secure proofs
+of name ownership.
+
+Smaller names may be unreliable as it is unknown whether they are the
+perceived rightful owner of the names. Our project has a sunrise period
+whereby rightsholders may claim their name.
+
+#### DNSSEC Ownership Proofs
+
+We propose DNSSEC ownership proofs as a much stricter subset of DNSSEC proofs
+in that they do not allow for CNAME glue or wildcards. Furthermore, every label
+must be separated by a zone cut using a typical DS-to-DNSKEY setup for
+referrals. All zone referrals are retrieved and combined, in aggregate, to
+produce the final proof.
+
+These proofs must stem from ICANN's _key-signing keys_ (KSKs) to the final ZSK
+in the target zone. The final _zone-signing key_ (ZSK) must sign a TXT record
+which commits to the name's desired address on the blockchain. The proof is
+broadcast to the peer-to-peer network and included by miners in the coinbase
+transaction of a block. Consensus rules dictate that the miner must create an
+output for the associated proof, thereby granting the name to the committed
+address.
+
+By consensus rules, the proofs are verified against ICANN's existing trust
+anchors (KSK-2010 and KSK-2017). Although KSK-2017 is not currently in use,
+ICANN did publish the key last year (2017). This allows us to include it in the
+blockchain's consensus rules from day one.
+
+Relying on only trust anchors for verification results in large proofs
+(typically ranging between 3 and 10 kilobytes), however, this method allows
+nameholders who lack an existing DNSSEC setup to upgrade and claim their name
+in the future.
+
+We design the DNSSEC claim system to be operational for a total of 4 years on
+the blockchain.
+
+##### Security Concerns
+
+For a time, ICANN will indirectly be a limited arbiter of this system due to
+their control of the root trust anchors used for ownership proofs. This raises
+potential concerns.
+
+During our analysis of the root zone file, we discovered that a significant
+majority of domains use SHA1 for RSA signatures and key fingerprints. This is
+unfortunate, as SHA1's security against collision resistance was recently
+compromised[shattered]. Our consensus rules must disallow for the use of
+insecure algorithms, like SHA1, even with existing DNSSEC setups.
+
+As a result of this, in order for an RSA-SHA1 nameholder to claim their name on
+the handshake blockchain, they must upgrade their key-signing key to at least
+RSA-SHA256 before creating an ownership proof. Unfortunately, to accomplish
+this, the nameholder must contact their parent zone and request that they sign
+off on a new key.
+
+With this in mind, we must consider the possibility that ICANN may become
+uncooperative and refuse to sign a higher security key for an existing
+nameholder. If this were to happen, RSA-SHA1 root zone names would be
+unredeemable on the blockchain. To mitigate this attack, our DNSSEC ownership
+verification algorithm implicitly upgrades RSA-SHA1 keys to RSA-SHA256,
+allowing a reserved nameholder to publish the same RSA key in their own zone
+with a differing algorithm field (RSA-SHA256 or RSA-SHA512). This allows the
+nameholder to bypass ICANN's root zonefile update process when creating the
+necessary ownership proof.
+
+In addition to the SHA1 vulnerability, we discovered that several major root
+nameholders use 1024-bit moduli in their RSA zone signing keys. We believe this
+is the result of BIND's default behavior when generating keys with
+`dnssec-keygen`. RSA-1024 has long been considered insecure, and while no
+practical factorization of a 1024 bit modulus has ever been executed, we
+consider this a weakness, particularly for an economically incentivized system.
+
+If we consider, by way of consensus rules, requiring 2048 bit moduli or higher,
+we find ourselves in a similar situation to the SHA1 vulnerablity: nameholders
+may wind up at the mercy of uncooperative parent zone maintainers.
+
+As a final fail-safe against an attack by uncooperative entities, we allow
+RSA-1024 and offer a versionbit-activated soft-fork. This soft-fork is
+responsible for hardening the consensus RSA implementation by requiring at
+least 2048 bit moduli in ownership proofs. In the case that 1024 bit RSA is
+compromised, we turn to miner consensus to resolve the issue. This allows the
+blockchain to support RSA-1024 until a practical attack is demonstrated against
+it.
+
+As a necessary effect of the activation of this fork, all names which were
+originally redeemed with RSA-1024 will be immediately revoked until redeemed
+again with a stronger key. This construction requires us to place a 6 month
+locktime on trasfers for names redeemed with RSA-1024.
+
+The final risk we have considered, and perhaps the most major, is ICANN's key
+revocation process. ICANN's stated KSK-2017 rollover plan involves setting the
+`REVOKE` bit on KSK-2010. Unfortunately, publishing a revoked key does very
+little to truly invalidate old states. A clever attacker can withhold
+revocation key records and signatures, serving only older states. Because of
+this, DNSSEC's revocation mechanism is all but useless to our blockchain.
+
+Our primary concern is that ICANN may decide to revoke KSK-2010 at some point
+by publishing its corresponding private key. To deal with this issue, a final
+consensus rule can be added to _disable_ KSK-2010 once a separate proof is
+published which demonstrates that KSK-2017 is now active. This proof would
+include the KSK-2017 signature of ICANN's DNSKEY RRset. We are convinced that
+ICANN will not be able to ethically justify publishing KSK-2010 before the
+rollover to KSK-2017 is complete. As such, we find that this mitigation
+provides adequate security against an attack of this sort.
+
+### Economic Incentives for DNSSEC implementation
+
+DNSSEC has rather sparse support, with only a handful top-level and
+second-level domains supporting it to its fullest extent[nameandshame]. Those
+that do implement DNSSEC often implement it _insecurely_ (by way of SHA1 or
+RSA-1024).
+
+We find this to be a major impediment to the adoption of a system which bases
+its security on a validating recursive resolver. To incentivize proper
+implementation of secure DNSSEC, reserved names may only be redeemed on the
+blockchain by a proper DNSSEC setup. We hope that this adds a great deal of
+security to the existing root zone and to a fair majority of the Alexa top
+100,000.
+
+To further increase incentives, the blockchain attaches a coin reward to the
+redemption of any reserved name. The value attached to the name is weighted
+according to how many child zones are present in the zone.
+
+### SPV Name Resolution
+
+Our SPV implementation's architecture consists of the following 4 components:
+
+1. A peer-to-peer layer for synchronizing block headers and verifying name tree
+ proofs.
+
+2. An authoritative nameserver which translates on-chain resources to DNS
+ responses, depending on the request. This nameserver behaves as if it were a
+ root server, serving zone `.`.
+
+3. A recursive server which sets its root hints and trust anchors to its own
+ authoritative root server, rather than ICANN's.
+
+4. A second non-recursive resolver which resides in the authoritative layer and
+ acts as a fallback to ICANN's system. This is used in the event that a
+ reserved top-level domain has not yet been claimed. Resolutions through
+ ICANN's system only occur if a proper name absence proof was received from a
+ peer.
+
+fig. 27
+
+```
+ +-------------+ +------------------+ +----------------------+
+ | OS Resolver | --> | Recursive Server | --> | Authoritative Server | --+
+ +-------------+ +------------------+ +----------------------+ |
+ |
+ +----------------------------------------------------------------------+
+ |
+ | +--------------------+ +---------------+ +-------------+
+ +--> | Peer-to-peer Layer | --> | Proof Request | --> | Remote Peer |
+ +--------------------+ +---------------+ +-------------+
+```
+
+fig. 28
+
+```
+ +-------------+ +----------------+ +--------------------+
+ | Remote Peer | --> | Proof Response | --> | Peer-to-peer Layer | --+
+ +-------------+ +----------------+ +--------------------+ |
+ |
+ +------------------------------------------------------------------+
+ |
+ | +----------------------+ +------------------+ +-------------+
+ +--> | Authoritative Server | --> | Recursive Server | --> | OS Resolver |
+ +----------------------+ +------------------+ +-------------+
+```
+
+Our peer-to-peer layer is end-to-end encrypted by default, using a Noise
+Protocol[noise] handshake, similar to the handshake used by the Lightning
+Network[lightning]. To further enhance privacy at this layer, a peer resolving
+a name on one's behalf is only permitted to see the top-level domain (or
+rather, a hash of the name).
+
+Due to the peer-to-peer encryption, the only plaintext aspect of this
+architecture resides in the recursive resolver traversing child zones. To
+improve privacy here, QNAME minimization[qname] can be utilized by the
+recursive resolver. QNAME minimization is surprisingly non-trivial, because not
+every domain name label originates from a zone cut, making it non-obvious in
+how to "trick" an authoritative server into sending a proper nameserver
+referral. Luckily, validating resolvers such as Unbound currently implement
+this functionality.
+
+Despite child zones being unencrypted, they can still be validated via DNSSEC.
+Because the ICANN root zone is replaced with a blockchain, the recursive
+resolver must also change its trust anchors. Currently, recursive resolvers set
+their trust anchors to IANA's two DNSKEYs (KSKs) which sign the root zone's
+_zone signing keys_ (ZSKs). For compatibility purposes with existing resolvers,
+we propose that an SPV node's authoritative nameserver use a static trust
+anchor whose private key is known by all.
+
+Of course, signatures at the root zone are no longer necessary due to
+proof-of-work acting as the security mechanism rather than digital signatures.
+However, DNSSEC signatures at the root must be included in order for existing
+DNS implementations to consider the trust chain intact. With the private key
+publicly known, conforming SPV nodes can create the appropriate RRSIG records
+in real-time when serving a response. These responses can be cached to avoid
+repetition of expensive signing operations.
+
+While dummy RRSIGs can be created to fool existing recursive resolvers in to
+validating a complete trust chain, NX proofs present a different challenge. The
+most modern non-existence proof verification currently in DNS is NSEC3[nsec3].
+NX proofs operate by maintaining a sorted linked list of child zones. When an
+NX proof is generated, the authoritative server responds with a signed DNS
+record showing where the requested child zone _should_ reside within the list,
+thereby proving its non-existence. Unfortunately, NSEC3 obfuscates child zones
+by hashing labels with the now insecure SHA1. Were NSEC3 to use a more modern
+hash function, a DNS NX proof at the root zone _could_ be generated by a full
+node by iterating over our name FFMT. Unfortunately, SPV resolvers would still
+have trouble generating this dummy proof, due to their lack of ability to
+arbitrarily seek through the tree.
+
+To work around this difficulty, we generate _dummy_ NSEC3 proofs which imply an
+empty zone.
+
+#### Root Zone Fallback
+
+Due to the fact that not all reserved root names will be claimed by nameholders
+immediately, we propose two solutions for eventual transparent rollover to the
+new system: _Hardcoded Fallback_, and _Dynamic Fallback_.
+
+Hardcoded fallback involves hard-coding the existing ICANN zonefile into the
+SPV software. When an absence proof is received by the authoritative server for
+a pre-existing TLD, the hardcoded fallback is checked for records and returned
+as a DNS response.
+
+Dynamic fallback is similar, but involves querying ICANN's root servers and
+validating the response against their trust anchors. This provides better
+liveness, but bestows more power upon a centralized authority.
+
+In both constructions, once a pre-reserved name is claimed by the proper owner,
+the software will transparently begin to follow the blockchain instead of
+either hardcoded records or ICANN's records.
+
+#### Library Integration
+
+We offer a library integration as an alternative to an SPV resolver or full
+node. This removes the need for an average user to install extra software, and
+instead places the responsibility on the developers of software.
+
+We consider this the _lowest security mode_ of our protocol. It is, however,
+still more secure and more permissionless than the current state of DNS, albeit
+slightly more centralized than the local recursive resolver model.
+
+---
+
+Unix-based operating systems, including Mac OSX, configure their OS stub
+resolver to use nameservers listed in `/etc/resolv.conf`.
+
+The resolv.conf format points to a list of recursive servers for the operating
+system's stub resolver to make use of. The stub resolver is invoked during a
+call to `gethostbyname(3)` and `getaddrinfo(3)`.
+
+We propose a new standard OS configuration file, `hns.conf`, residing in
+`/etc/hns.conf` on Unix, and `%SystemRoot\Drivers\etc\hns.conf` on Windows.
+This configuration file is reminiscent of the standard resolv.conf, however,
+its sole purpose is to list nameservers while other options are simply
+inherited from the regular resolv.conf parsing.
+
+In order to make use of our protocol's resolvers, we require a 33 byte
+compressed ECDSA public key for each nameserver listing. This key will be used
+for a _SIG(0)_[sig0] verification of a signed DNS message. DNSSEC is currently
+insufficient for this purpose, being that it only signs a DNS response's
+individual records. TSIG[tsig] is also insufficient due to its requirement of
+symmetric keys. Our SIG(0) usage appends a regular SIG record to the additional
+section of a DNS message as a pseudo-section. This record signs all data before
+it on the ECDSA secp256k1 curve.
+
+A user with a local SPV resolver running may point his or her `hns.conf` to
+`127.0.0.1` (where no SIG(0) verification is necessary). If not present, the
+hns.conf parser should fall back to a list of hardcoded recursive servers run
+by respected community members. These entries will be paired with a known ECDSA
+public key.
+
+Ideally, requests to the public recursive servers should be routed through an
+_Anycast_[anycast] network in order to provide comparable speed to Google or
+Cloudflare's public DNS.
+
+This setup is necessary to allow all users to make use of the new root zone. If
+some users are not willing to run a SPV node, our system falls back to a more
+centralized model. Note that this centralized model still carries with it a
+number of improvements over the current ICANN root zone. The root zone is still
+permissionless, and the data is still authenticated (something which is not
+present in today's stub resolvers).
+
+The final integration library consists of a simple stub resolver which is aware
+of our new hns.conf format, as well as capable of verifying SIG(0) records.
+
+### Integration
+
+We are convinced that, in order for adoption to be widespread, the SPV daemon
+and integration library must be runtime-less and written in portable C. The
+integration library is especially necessary if this protocol is to be used on
+embedded and IoT devices.
+
+### Future Directions
+
+#### Proof of DNS iteration
+
+To remove the requirement of a local recursive resolver for SPV, a hypothetical
+_proof of DNS traversal_ could be useful. A proof of this kind would involve
+aggregating glue records, DNSSEC signatures and keys for each zone, producing a
+final semi-compact proof. This would allow clients to securely off-load the
+recursion to untrusted servers. This construction is similar to our DNSSEC
+ownership proof, which is also an aggregate proof of DNS referrals.
+
+In comparison to a local recursive resolver, this would save on CPU time and
+bandwidth due to the signature aggregation. It would furthermore reduce memory
+usage by avoiding the need for a message cache. This would result in massively
+reduced complexity for SPV resolvers as they also no longer need to maintain a
+recursive or authoritative root server.
+
+#### Zone Replication and DNSCurve
+
+Daniel Bernstein's DNSCurve[dnscurve] is an extension to DNS which performs an
+ECDH and establishes a stream cipher with an authoritative nameserver before
+exchanging messages. It is backwardly-compatible with DNS as identity keys are
+encoded as base32 labels in normal NS records.
+
+Unfortunately, DNSCurve adoption is minimal. As mentioned before, the only
+unencrypted portion of our name resolution protocol occurs during regular DNS
+iteration through authoritative servers.
+
+If we envision a peer-to-peer network where peers can act as "proxies" for a
+zone, they would be capable of layering DNSCurve support on top of existing
+zones' nameservers as a public service. They could then advertise themselves as
+a DNSCurve enabled proxy for a specific zone on the peer-to-peer layer.
+
+There are many security and incentives questions this raises, but we consider
+this an idea worth pursuing in the future.
+
+#### Subdomains
+
+Subdomains are out of scope for this system. Blockchains should be storing the
+minimal data needed, and domains/subdomains with defined owners should be able
+to prove the validity of that name out-of-band. If the data is already disclosed
+in the root zone, then it makes sense for that data to be in a TLD anyway. The
+load on a chain is the same whether it is a TLD, domain, or subdomain. As there
+are no efficiencies, any potential use of subdomains on-chain should have a
+separate name record in the root zone.
+
+# Reorg Safety and Name Expiration
+
+It is strongly recommended that client implementations verify whether a chain
+has a deep reorganization. This can be achieved by having third parties attest
+to the current blockheight which is widely regarded as non-controversial. This
+is materially different than existing CA infrastructure, as the security is
+additive in that everyone is attesting to the same information. Any party can
+provide this information and attestation (and can even be published/proven
+on-chain).
+
+In the future, it may be desirable by community consensus changes to have a
+hybrid proof-of-stake construction similar to the Casper Finality
+Gadget[casper-finality-gadget] proposed in Ethereum whereby blocks are committed
+by bonded coins.
+
+It is strongly recommended that certificate pinning[certpinning] is used to
+associate identity by clients and user agents. This is achievable by pinning the
+name owner's scripthash to the name itself, so when the ownership record
+changes, the user must approve this change.
+
+# Stakeholders
+
+The principal function behind the Handshake mechanism is maximizing allocation
+of ownership of tokens, coins, or non-fungible assets towards the most relevant
+stakeholders. To make effective change, all relevant existing and future
+stakeholders must be acknowledged. By maximizing correct stakeholder allocation,
+one maximizes the efficacy of the change. In the case of Handshake, it is the
+shift from centralized Certificate Authorities and naming, towards a
+decentralized infrastructure.
+
+All stakeholders are incentivized for development and growth of the project in
+their own self-interested incentive. In order to do so, many of the individuals
+require some ownership or value of the coins in order to establish sufficient
+motivation.
+
+These allocations are this paper's proposed allocations, and the Handshake
+community will ultimately determine the final allocation in mainnet.
+
+A total of 1,360,000,000 coins are minted in the genesis block to be distributed
+to relevant stakeholders
+
+## Pre-Launch Blockchain Development - 7.5%
+
+This allocation goes to fund development across various stakeholders who have
+been involved with creation of this project. These coins are used to pay for
+work prior to mainnet launch and is the only source of development funds. A
+iterated tit-for-tat game exists whereby there is self-interested benefit for
+distribution of value ("the more I give away, the more value I accrue") across
+many projects and development teams emulating this model.
+
+## Financial Contributors and Pricing - 7.5%
+
+A total of 102,000,000 HNS have been allocated to purchasers to price the
+initial value of the coins for 7.5% of the total supply, with a total valuation
+of the initial coin supply at $136,000,000.
+
+100% of the dollars raised are being given to non-profits and FOSS projects,
+and FOSS communities such as hackerspaces. This is effectively a one-way
+non-destructive "proof-of-burn" on the dollar side to price the coins.
+
+The role of coin purchasers is critical as an initial stakeholder in the growth
+of the project. The purchasers have been curated to maximize effective change by
+primarily allocating funds to Venture Capitalists and Token Funds with specialty
+in the cryptocurrency and decentralized internet ecosystem. Many of these
+purchasers have been effective in disrupting entire industries and have been
+involved in large-scale growth of internet services (some even across
+generations).
+
+The existence of these participants are necessary and fundamental in pricing the
+tokens, as the distribution event requires real value to be established (a sale
+of 1% of total initial supply is not credible in pricing the tokens).
+Additionally, the sale has occurred as close to launch/announcement as possible.
+
+Other projects replicating this mechanism may require greater capital to fund
+development and/or greater claim to the Pre-Launch Development allocation. This
+may result in not having a one-way "proof-of-burn", and instead use the
+capital to fund development of the project.
+
+The role of pricing the coins for distribution is necessary as the coins need to
+have understood value during the distribution process. While it would ostensibly
+be ideal to spin-up projects and deploy blockchains without this mechanism,
+there may be insufficient coordination and ex-ante expectations of value. The
+role of the high-reputation Venture Capital provides a tastemaker function which
+provides a signal and Schelling Point for potentially economically and socially
+valuable projects. These entities are a significant stakeholder in the current
+ecosystem and a continuing game for project selection and curation may persist
+as a result ("putting your money where your mouth is").
+
+## Free and Open Source Software Developers - 68.0%
+
+The free and open source community is the principal coin owner of the project
+upon launch. These coins are distributed without any expectation of work. As
+free and open source software is the principle of giving away code without any
+direct financial return in exchange, similarly Handshake is about giving away
+financial value without any expectation of code in exchange.
+
+If the community is interested and Handshake becomes viable in the future, it is
+possible (but without any obligation whatsoever, contractual or implied) for
+individuals to have incentive to integrate the functionality into their own
+software.
+
+## Domain Name Holders - 10%
+
+The Handshake blockchain will allocate all TLDs to the rightful holders upon
+submission of a sufficiently secure DNSSEC proof on the blockchain.
+Additionally, the Alexa top 100,000 domains were used and filtered (duplicates,
+generic dictionary names) to over 80,000 non-generic names to be claimable as a
+TLD via a DNSSEC proof. This way, all currently existing domains can work on
+Handshake provided it is claimed in a timely manner, as all TLDs can be
+claimable on Handshake by the owner of the TLD.
+
+In addition to backwards compatibility with the existing domain name system,
+coins are also provided to incentivize adoption by name holders. This creates an
+incentive for name registration on Handshake. Unclaimed coins after the claim
+period will be burned.
+
+Some domain names may not be claimable until secure DNSSEC records (not SHA1
+keyhash) are provided by the domain's TLD DNSSEC record, and there may be a
+delay period before the coins are matured and available to use.
+
+2.5% will be allocated to TLDs to be distributed evenly.
+
+2.5% will be allocated to the top 100 Alexa names.
+
+2.5% will be allocated to the Handshake reserved names (over 80,000 names) to be
+distributed evenly. These names will also be able to claim a TLD on Handshake.
+
+## CA/Naming Corporations and Other Blockchain Projects - 5%
+
+The following corporations and projects are being allocated Handshake coins.
+They have not acknowledged or accepted the coins at this time of writing. In
+the event the coins are not claimed or accepted, these coins will not be
+reallocated and are effectively burned. Some of these allocations may be only
+redeemable by submitting a DNSSEC proof of their domain to the blockchain to
+claim coins. There is no contractual expectation for any of these entities to
+help the Handshake project in any way and is explicitly an obligation-free
+distribution with no strings attached.
+
+ICANN has been the root namespace for the internet. ICANN (CA, US) is allocated
+24,480,000 of the initial coin supply by the Handshake community.
+
+Cloudflare, Inc. (DE, US) is a corporation doing fundamental research for
+naming, caching, and certificate authorities. They are allocated 6,800,000 of the
+initial token supply.
+
+Namecoin is a decentralized naming blockchain. 10,200,000 of the initial supply
+was allocated to leading current and prior Namecoin developers.
+
+Verisign, Inc. (VA, US) is the registrar for .com and .net. They are allocated
+6,800,000 of the initial token supply. The .com and .net TLDs on Handshake will
+be given to Verisign with a DNSSEC proof.
+
+Keybase has been innovating in the naming and certificate authority space.
+Keybase, Inc. (DE, US) are allocated 0.25% of the total token supply.
+
+Public Internet Registry (VA, US) maintains the .org namespace. They are
+allocated 3,400,000 of the initial token supply. The .org TLD on Handshake will
+be given to PIR with a DNSSEC proof to pir.org.
+
+Afilias plc (IE) has been the service provider for the .org namespace. They were
+allocated 3,400,000 of the initial supply to a DNSSEC proof of afilias.info.
+Note for both PIR and Afilias, this allocation was made before the proposed
+sale of the .org namespace.
+
+Brave is a browser which has cryptoeconomic incentives. Handshake allocated
+3,400,000 to Brave Software, Inc. (CA, US). This is a distribution to the
+entity owners itself, and is not an implied distribution to the Basic Attention
+Token holders.
+
+Namecheap is a large domain registrar and has support cryptocurrency in the
+past. They were allocated 2,720,000 of the initial supply.
+
+Godaddy (AZ, US) is a large domain registrar and has a Certificate Authority as
+well. They were allocated 2,720,000 of the initial supply.
+
+Blockstack is a corporation developing a naming blockchain as well as a
+decentralized internet stack. The Handshake distribution allocated 408,000 of
+the initial supply to Blockstack Token LLC (NJ, USA) under a DNSSEC proof for
+blockstack.com. This is to the entity owners itself, and is not implied
+distribution to the Blockstack Token holders.
+
+ENS (True Names LTD (SG)) is developing an alternate naming root (.eth) using
+an Ethereum smart contract. They were allocated 136,000 of the initial
+Handshake coin supply to the entity running ENS (ens.domains).
+
+GnuNet provides PKI infrastructure and provides identity via a DHT. They were
+allocated 136,000 of the initial coin supply to gnunet.org (may require DNSSEC
+upgrades on the .org namespace).
+
+## Non-Profits and FOSS Projects - 2%
+
+Not to be confused with the $10,200,000 USD given to non-profits and FOSS
+projects, Handshake coins (HNS) will be given to some of those entities in
+addition to the USD.
+
+## Miners
+
+Historically, many blockchains have distributed 100\% of the total coin supply
+to Proof-of-Work miners or the overwhelming majority to investors (with none
+going to free and open source developers directly). These miners capture value
+by competitively discover lower operating expense costs with electricity or
+optimizing computation with better hardware.
+
+Miners receive a block reward for validating the chain correctly. There is no
+promise, implied or explicit of guarantees around future rewards to miners and
+may be changed upon future technological progress. Additionally, there are no
+guarantees on expenditure upon continued operation of hardware.
+
+## Further Distributions
+
+Further incentivized distributions presupposing the incentives derived from
+Metcalfe's Law are theoretically possible via a hard-fork but outside the scope
+of this document, as it would be wrong to be prescriptive on future actions,
+especially as the future is unknown with the ability to achieve coordination of
+this activity and programmatic ability to acquire keys.
+
+# Coordination
+
+The purpose of this project in addition to developing a decentralized naming
+system is to perform and demonstrate a method to conduct wide-scale coordination
+without an end-state of centralized power structures, with mechanisms and
+incentives for coordination across millions of people without authorities or
+contractual obligations.
+
+The blockchain allows for cheap verification, but it does not inherently rally
+people to a change in infrastructure. It is exceptionally costly to build a
+top-down organization of millions in a hierarchy to replace entrenched
+interests, hence a ground-up structure is proposed using gift economies, which
+is only possible with emerging technologies which is capable of accounting value
+without central authorities (the blockchain), as well as tools for wide-scale
+coordination across millions (internet free and open source communications
+software). Handshake is an open performance by all parties worldwide to
+participate and deliver a new naming system as a gift to wider society.
+
+The Theory of the Firm[natureofthefirm] postulates that organizations exist
+due to transaction costs, it is often cheaper to conduct transactions within an
+organization rather than between organizations as intra-organizational goals are
+aligned, rather than inter-organizational goals, hence the high transaction
+costs from due diligence with external parties. Firms become large fundamentally
+due to trust and ensures everyone is rallying to the same cause. Power
+centralizes into the agents of these firms, we believe we can do better with
+technology.
+
+The firm model for alignment faces significant issues around externalizing costs
+("is it good for society") and principal-agent problems ("is this person acting
+properly on my behalf"). This requires the principal to always watch the
+activity of the agent, to ensure the principals' goals are being acted upon. The
+more trust complexity required by an activity, the greater the likelihood that
+it is within the boundaries of a firm. Shareholders watch the board who watches
+the executives who watch the employees, with a hardcoded contractual structure
+for organizing and ensuring correct action.
+
+The purpose of smart contracts[smartcontracts] is that it allows the
+principal to also be the agent, as computation can allow one to read the code
+once and ensure that the code is being followed, significantly reducing
+potential information costs. However, smart contracts do not solve social
+coordination inherently, they merely make it cheap for those whom have already
+agreed with what is being coordinated.
+
+By constructing a capital structure without obligations (gift economies), method
+is proposed to create immensely valuable social structures with proper social
+incentives for restructuring the current organizational centers of power within
+society by participants of this gift economy.
+
+## Inability to Verify Actions
+
+It is not possible to ascribe value directly to code. While it is possible for
+future projects to reward dependent upon actions using peer-to-peer oracles,
+code is far too subjective. Instead this project proposes removing ongoing
+verification of reward for code. While future iterations of this design may have
+ongoing elements of verification/reward via optimistic tit-for-tat mechanics, it
+is believed that it is possible to build systems without inherent enforceability
+of labor exchange.
+
+As this is constructed as a blockchain, there is no single entity controlling
+this system. The system exists due to the collective belief that this system is
+valuable, the unit of account has value, and there is sufficient desire to
+improve/maintain this system. Many forms of Commons-Based Peer
+Production[wealthofnetworks], including Free and Open Source Software, is a
+Bazaar[bazaar], but we've always had the reward mechanisms be a Cathedral up
+until now. There have been prior work around reward mechanisms in exchange for
+production in Commons-Based Crypto Currencies[primaveradefilippi], and much
+exploration has occurred in understanding the implications of the blockchain
+having no single owner (hence similarity to the notion of a commons), but
+payment for free and open source code are primarily within the context of payment for
+proposed acceptable work in exchange for cryptocurrencies. Instead, this project
+is about ensuring that free and open source developers are the majority owners of the
+system without any direct contractual expectation of return or work.
+
+Previously, FOSS developers have been rewarded by working in large
+companies such as Red Hat Software who are able to evaluate payment towards end
+goals of financial returns. This construction creates a direct conflict of
+interest between the values of FOSS software and the values of
+profit-maximization of the firm. Further, the principal-agent problem persists
+with firms funding FOSS software, as they are making payments on an
+ongoing basis towards the end goals of the firm over the best end goals for open
+source projects.
+
+By constructing a mechanism with coin distribution to FOSS developers
+with no expectation of return, this creates a complimentary system whereby
+individuals building FOSS software are able to build software for the
+commons while also having majority ownership and economic benefit of co-creating
+this system during the development phase, there is simply an incentive to
+participate and create a valuable system for developers who own the coins. As a
+result, FOSS developers can do what they believe to be in the best
+interests of a system without power hierarchies determining what is the best use
+of resources, in return there is an understanding that the payment will be
+imprecise for contributors (much like how those using code receive benefits with
+imprecise payment for the commons).
+
+## Comparison with Traditional Capital Coordination Models
+
+Two-sided marketplaces are a fundamental problem in displacement of existing
+systems. The archetypical example of overcoming two-sided marketplaces is Uber
+displacing the taxi, which has two sides of riders and drivers -- it is
+difficult to persuade riders to participate if there's insufficient drivers
+(long wait times), and difficult to persuade drivers on the platform if there's
+insufficient riders (low revenue). One of the earliest efforts for resolving
+this two-sided marketplace problem for internet services was initiated by
+Paypal, which resolved a side of the marketplace by directly giving money to new
+users of PayPal.
+
+Overcoming two-sided marketplaces traditionally has required significant capital
+and involves expectations of future market capture. As a result, these companies
+have raised significant amounts of capital from venture capital to create the
+conditions for disruption of existing business models towards more efficient
+systems with centralized providers being an agent for mass coordination. These
+venture capital firms have created significant value and have expertise in
+replacing existing systems and driving the technical, organizational, and wider
+social coordination of society. This has provided significant social benefit in
+creating effective change towards social systems, and without which there is
+insufficient coordination for actors within an ecosystem to create the
+sufficient change necessary for widespread social benefit.
+
+A replication of this coordination of raising a significant amount of capital
+towards resolving two-sided marketplaces has been
+proposed[fatprotocols][fredblog][navalblog] and attempted in the
+cryptocurrency space, which has historically been known as the emerging
+phenomena of "ICO" or "Initial Coin Offerings". This uses capital to raise
+significant sums of value to establish the capital required to develop a
+platform and raise capital to establish a war-chest to resolve a two-sided
+marketplace problem. Many of these firms have successfully used significant
+amounts of capital raised to establish a developer community, market to users,
+and encourage various service providers by subsidizing one side of the
+marketplace.
+
+However, while the venture model has been incredibly pro-social and created
+significant benefits, there are some limitations to this model in traditional
+venture. Additionally, the model being emulated under the ICO model has raised
+significant amounts of capital, but there has been insufficient amount of
+experiments to demonstrate successful models. One of the largest limitations
+are that the network effects do not accrue to the users who are responsible for
+developing this system and ensuring its success. Additionally, there is a lack
+of association between economic stakeholders benefiting from the network effect
+and those which are responsible for establishing those network effects. Further,
+there are significant centralization pressures by raising a large amount of
+funds into a single foundation.
+
+Instead, the Handshake mechanism does not rely upon altruistic actors, it is
+wholly reliant upon self-interested individuals and stakeholders. One's
+returns are maximized by giving away value to FOSS developers and wider
+humanity, and may be an exploration in a different model for development.
+
+# Disclaimers
+
+There are no guarantees provided by the Handshake community developers past and
+present, including continued development and leadership. This document is
+illustrative and the de-facto community standards are the primary source. All
+contents of this document is subject to change according to community consensus.
+
+No guarantees are provided with regards to functionality of the naming and
+auction system, including renewal availability, fees, or block availability in
+general. Further, no guarantees are provided with coin supply, coin value, or
+name value. In the event of a worldwide distribution, it is up to the wider
+community to execute this plan.
+
+Those making unilateral advocacy of where the blockchain should go under the
+auspicies of being an early developer of the chain, and any rhetoric related
+should be seen with suspicion. It is up to the community to suggest changes and
+any code forks are initiated with community consensus and approval.
+
+In the event of deep reorganizations, the community should halt processing and
+acknowledging new state updates. It is heavily recommended for service providers
+to have long deposit times and their own internal controls and software
+verification.
+
+Hard forks are presumed to be possible in this system, there are no guarantees
+around mining, economics, etc.
+
+Trademark holders are responsible for munging their own renewals and
+registrations, and project developers do not have the ability to make
+unilateral changes to the system after the sunrise period. Any changes to the
+records requires a hard fork and is contingent upon community approval of
+fullnodes and miners. Any changes after the sunrise period may be proposed
+to the community as a hardfork, or more likely the updates should be made
+(without consensus) in the resolver client-side.
+
+No guarantees are provided for transaction formats past one year. Pre-signed
+transactions should not be presumed to be permanently available. Private keys
+should be kept in the event transaction formats change.
+
+[pow] http://www.hashcash.org/papers/pvp.pdf
+[bitcoin] https://bitcoin.org/bitcoin.pdf
+[hashcash] http://www.hashcash.org/papers/hashcash.pdf
+[cuckoo-1] https://github.com/tromp/cuckoo
+[cuckoo-2] https://github.com/tromp/cuckoo/blob/master/doc/cuckoo.pdf?raw=true
+[cuckoo-3] https://github.com/tromp/cuckoo/blob/master/doc/spec
+[timewarp] https://bitcointalk.org/index.php?topic=43692.msg521772#msg521772
+[digishield-1] https://www.reddit.com/r/Digibyte/comments/213t7b/what_is_digishield_how_it_works_to_retarget/
+[digishield-2] https://github.com/digibyte/DigiByteProject/blob/master/src/main.cpp
+[kimoto-1] https://github.com/megacoin/megacoin/blob/master/src/main.cpp#L1276
+[kimoto-2] https://bitcointalk.org/index.php?topic=240861.msg3040291#msg3040291
+[dgw] http://www.darkcoin.io/downloads/DarkcoinWhitepaper.pdf
+[zcash-1] https://github.com/zcash/zcash/issues/147
+[zcash-2] https://github.com/zcash/zcash/issues/696
+[zcash-3] https://github.com/zcash/zcash/issues/998
+[namecoin-1] https://namecoin.org/
+[namecoin-2] https://github.com/namecoin/ncdns
+[ens-1] https://ens.domains/
+[ens-2] https://github.com/ethereum/EIPs/blob/master/EIPS/eip-137.md
+[ens-3] https://github.com/ensdomains/ens
+[ens-4] https://github.com/ethereum/eips/issues/137
+[ens-5] https://github.com/ethereum/EIPs/issues/162
+[ens-6] https://ens.domains/#section-root
+[ens-7] https://docs.ens.domains/en/latest/faq.html#who-will-own-the-ens-rootnode-what-powers-does-that-grant-them
+[blockstack-1] https://blockstack.org/whitepaper.pdf
+[blockstack-2] https://forum.blockstack.org/t/how-do-lightweight-blockstack-nodes-operate-a-snv-protocol/1017
+[ept-1] https://ethereum.github.io/yellowpaper/paper.pdf
+[ept-2] https://github.com/ethereum/wiki/wiki/Patricia-Tree
+[ethereum] https://ethereum.org/pdfs/EthereumWhitePaper.pdf
+[smt-1] https://eprint.iacr.org/2016/683
+[smt-2] https://github.com/google/trillian
+[merklix-1] https://www.deadalnix.me/2016/09/24/introducing-merklix-tree-as-an-unordered-merkle-tree-on-steroid/
+[merklix-2] https://www.deadalnix.me/2016/09/29/using-merklix-tree-to-checkpoint-an-utxo-set/
+[merkleset] https://github.com/bramcohen/MerkleSet
+[vickrey] https://www.jstor.org/stable/2977633
+[maxwell-1] https://bitcointalk.org/index.php?topic=277389.0
+[maxwell-2] https://bitcointalk.org/index.php?topic=278122.0
+[covenants] https://fc16.ifca.ai/bitcoin/papers/MES16.pdf
+[bitcoin-ng] https://www.usenix.org/system/files/conference/nsdi16/nsdi16-paper-eyal.pdf
+[rfc1035] https://www.ietf.org/rfc/rfc1035.txt
+[orsn] http://www.orsn.org/en/tech/
+[bind] https://www.isc.org/downloads/bind/
+[ldns] https://www.nlnetlabs.nl/projects/ldns/about/
+[unbound] https://www.unbound.net/
+[nlnetlabs] https://www.nlnetlabs.nl/
+[bns] https://github.com/chjj/bns
+[noise] http://noiseprotocol.org/
+[lightning] https://github.com/lightningnetwork/lightning-rfc/blob/master/08-transport.md
+[qname] https://tools.ietf.org/html/rfc7816
+[dnssec] https://tools.ietf.org/html/rfc4033
+[google] https://developers.google.com/speed/public-dns/
+[root] https://www.iana.org/domains/root/servers
+[iana] https://www.iana.org/
+[icann] https://www.icann.org/
+[internic] https://www.internic.net/domain/root.zone
+[anchors] https://www.iana.org/dnssec/files
+[signing] https://www.iana.org/dnssec/ceremonies
+[sshfp] https://tools.ietf.org/html/rfc4255
+[openssh] https://www.google.com/search?q=openssh%20SSHFP
+[tlsa] https://tools.ietf.org/html/rfc6698
+[sig0] https://tools.ietf.org/html/rfc2931
+[anycast] https://tools.ietf.org/html/rfc4786
+[tsig] https://www.ietf.org/rfc/rfc2845.txt
+[dnscurve] https://dnscurve.org/
+[plasma] http://plasma.io/plasma.pdf
+[shattered] https://shattered.io/static/shattered.pdf
+[nameandshame] https://dnssec-name-and-shame.com/
+[alexa] https://www.alexa.com/topsites
+[nsec3] https://tools.ietf.org/html/rfc5155
+[btcrelay] http://btcrelay.org/
+[opennic] https://wiki.opennic.org/opennic:faq#how_did_opennic_start
+[convergence] https://www.youtube.com/watch?v=Z7Wl2FW2TcA
+[casper-finality-gadget] https://arxiv.org/abs/1710.09437
+[certpinning] https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning
+[fakecert-fr] https://www.theregister.co.uk/2013/12/10/french_gov_dodgy_ssl_cert_reprimand/
+[fakecert-ir] https://www.computerworld.com/article/2510951/cybercrime-hacking/hackers-spied-on-300-000-iranians-using-fake-google-certificate.html
+[zooko] https://web.archive.org/web/20011020191610/http://zooko.com/distnames.html
+[aaron] http://www.aaronsw.com/weblog/squarezooko
+[natureofthefirm] http://dx.doi.org/10.1111/j.1468-0335.1937.tb00002.x
+[smartcontracts] http://journals.uic.edu/ojs/index.php/fm/article/view/548
+[wealthofnetworks] http://journals.uic.edu/ojs/index.php/fm/article/view/548#page-60
+[bazaar] http://www.catb.org/esr/writings/cathedral-bazaar/
+[fredblog] https://blog.coinbase.com/app-coins-and-the-dawn-of-the-decentralized-business-model-8b8c951e734f
+[navalblog] https://startupboy.com/2014/03/09/the-bitcoin-model-for-crowdfunding/
+[fatprotocols] http://www.usv.com/blog/fat-protocols
+[primaveradefilippi] https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2725415
diff --git a/public/files/hs-airdrop-0.10.0.tar.gz b/public/files/hs-airdrop-0.10.0.tar.gz
new file mode 100644
index 0000000..01f920d
Binary files /dev/null and b/public/files/hs-airdrop-0.10.0.tar.gz differ
diff --git a/public/files/hs-airdrop-0.10.0.tar.gz.asc b/public/files/hs-airdrop-0.10.0.tar.gz.asc
new file mode 100644
index 0000000..778b93b
--- /dev/null
+++ b/public/files/hs-airdrop-0.10.0.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAmAQPW4ACgkQiWKrneZm
+a72l0Qf9Gqher5Di34pnzTlpWMHqw3CokxLhm6wldHxZXSt2Z3Jc1vSnnfzELIhw
+ETX5dhtzQ+dvBnhT2OX2r/LeDiIumSa7qr1TchYKV8Y/BK4RRG52Ft+spvnGjeuq
+lAeVUYkgq/OfQ3Ye+W169Ip+mz/MLgDOaDIzI92J0+R5tPquu420iUj45d5BZs3J
+V+UlAq8qBRjtrmjQLXFKdki9mQI9KLyph7SoOCPQB8Twz+rfAh5BRgiua285cFAE
+4kb3861ZFt5O0aNgpGF2KMcpF0iF35xh1k4TWfeT9Jvs7a+yFGGxlA6V0yOltBkk
+Qy9aHvLzgPpUUK9V7BbCUyf1Ud17HQ==
+=yVha
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-airdrop-0.7.0.tar.gz b/public/files/hs-airdrop-0.7.0.tar.gz
new file mode 100644
index 0000000..7bcd734
Binary files /dev/null and b/public/files/hs-airdrop-0.7.0.tar.gz differ
diff --git a/public/files/hs-airdrop-0.7.0.tar.gz.asc b/public/files/hs-airdrop-0.7.0.tar.gz.asc
new file mode 100644
index 0000000..b6b86f5
--- /dev/null
+++ b/public/files/hs-airdrop-0.7.0.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl42iFEACgkQiWKrneZm
+a723tgf/ZwPCkBVmEJgoh6/FxPTNRdW56bov5bBzbmlDyLOsHbdh8RkahzIzVhc7
+tHckUZzlfT2TLTkn76h4WHO6APMrbKSippmahNnX3GzFQ7gARdbBl/dusHJAPQHW
+F9ZC6x9Q3zZJl1g8ktbpavy6Gw7zz9JyJRAvYI5C5ufBO4VZ18hSm0R704CKIc5G
+77eKn+a3c7MGVapS/ci/yyjDn/as1oB/mGcrt7QjncGlGks0GL+Eg3g5qrrWCLkw
+mS8Y8DckcCAJOYQt6XExGLQ1Ui6WrHkxTyU8SNFG/5xjmel3SZTMKQ8zueCDiKXb
+BEndvAWbJmpWS6A8Wvd8pFNXa9Fqag==
+=pvmO
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-airdrop-0.7.1.tar.gz b/public/files/hs-airdrop-0.7.1.tar.gz
new file mode 100644
index 0000000..16c060c
Binary files /dev/null and b/public/files/hs-airdrop-0.7.1.tar.gz differ
diff --git a/public/files/hs-airdrop-0.7.1.tar.gz.asc b/public/files/hs-airdrop-0.7.1.tar.gz.asc
new file mode 100644
index 0000000..3c46fcc
--- /dev/null
+++ b/public/files/hs-airdrop-0.7.1.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl5Fq+4ACgkQiWKrneZm
+a71S8Af+OkEZzhFpPFokiFmClUizxf9YayMpvMorRBgA37RjjlaHlf7TfQNGFBZx
+0MkdhSTGy5PyR97i0twzuXmmdMJIZLqNCRoWuxGZRKT19c2od7hRZo+bfyeiPmmr
+rgJSfoGAOLeBx9rATG8/Y1UxqDxxtshE7sNNWGBqcfSXgAXwnGrQrikHyt6VseMS
+bYuEZUlirEknxll8cBA2G7HVgz35Z2/wvcetXDaDW7cq/eran4XvvHbOstMb/FQI
+2bc7TAI3N3i6VBfoqhBnoRQUoEQ+8VForkP/AEYtQD5HuUzkHQjaB+JPkVOGTiMc
+9oWSB5FO4Xq6g3Wf336krV7aZFM2cw==
+=vCyl
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-airdrop-0.9.0.tar.gz b/public/files/hs-airdrop-0.9.0.tar.gz
new file mode 100644
index 0000000..177cd0c
Binary files /dev/null and b/public/files/hs-airdrop-0.9.0.tar.gz differ
diff --git a/public/files/hs-airdrop-0.9.0.tar.gz.asc b/public/files/hs-airdrop-0.9.0.tar.gz.asc
new file mode 100644
index 0000000..957f550
--- /dev/null
+++ b/public/files/hs-airdrop-0.9.0.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl86kwwACgkQiWKrneZm
+a71/nQf9Gm9+tg1ZL/qxzLUkcNFz+oBLvlLXBrBYaz9622V5RXvvCTxUI5G1uvAz
+Q4Gzmp8o6nzzHSy7h0RiH6yXNAqKRyN6GWulZB/8gWvGE4vrtWL19NLzk2OV3v0B
+1CPT7DoRbGyF0Px2ySBVzZpzbjyH9u8wudEWybwOD9C7155rSK2ylq8UwgrRUtOM
+PXZ1IVir7Ujn876Os2Nzm4Y7KkUAm0rBx5ATI969hi0xqRTN1QNNwcahNnqQdvz/
+Ctvno3xmZARt025dXJyc2frh+YW9VpSDPopTiYxTzMjfyr3XYLZOR2rZV1OxgNRh
+JmLkrcjQPjDmv6Up3AfxgDjZLbc40g==
+=XI3j
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-0.0.10.tar.gz b/public/files/hs-client-0.0.10.tar.gz
new file mode 100644
index 0000000..29975bb
Binary files /dev/null and b/public/files/hs-client-0.0.10.tar.gz differ
diff --git a/public/files/hs-client-0.0.10.tar.gz.asc b/public/files/hs-client-0.0.10.tar.gz.asc
new file mode 100644
index 0000000..9b58f34
--- /dev/null
+++ b/public/files/hs-client-0.0.10.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCAAdFiEE5hdzzW4BBA4vG9eM5+KYS2KJyToFAmFpqvkACgkQ5+KYS2KJ
+yTpc4xAAn1oY3xgd922VxmORMRZPXSSjDZl7/NRdWc/aPPbFeOt8e1p0hqChp30P
+Mek1TAnmw1EFMe/O99gUQRLWyr6ZJ5sXIY3mVEggueFbwuSdk0G26TAFR++w/ovO
+6I+iNQJwatIloTkpvkzeqkHt8DmlYNT5Peji3LdxwVBcXj7slXEDt1STfuOeWG48
+OLWLnGrYVDoKBOuCE44IYv6rMFbmY/vXgmQLR4zk+X1sbSKIy2bbkdr7oHEQrvCR
+3K9ndZlYHUTsF0wRKgRPQtaXSmOMFUV4/5VF1tikwZeJE0Lz1oiwTfu4aX2wFgIm
+UXMyjofCtby4B5tMeb2B6bw8fwi1jqm0/qjbrkYJ1U5WJvQ4hsVudFbz4AMLc5h1
+W9W3niSHRTNPatlNo5NtVjdOz0HKHHUDRbMGkpO+Su773d8zHXrwCRg8sV1TIywE
++86nO019S0D2zYQDVQIx9zZGMNDwH4tdyfIPogO/TT89eBsG4x1oUnC0G9d++xXP
+UxMGUUb3bV20NbYDbEyOMck9SbNsyr4w8oS7Io8Tyq1KAL1uEwhFzXIoQS2ELW7K
+G7tU7k1lscPwi6wXGrvv7VvkDX9qFVqtFzGNiiTjJsK/a0+XxfGRYvRGoxA3Q/iJ
+q203eCuG44TRKj1cBX5TZAMwGF4GhEGJFfRNMFSqhvF2lU+kx+Y=
+=g8gY
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-0.0.11.tar.gz b/public/files/hs-client-0.0.11.tar.gz
new file mode 100644
index 0000000..a99187e
Binary files /dev/null and b/public/files/hs-client-0.0.11.tar.gz differ
diff --git a/public/files/hs-client-0.0.11.tar.gz.asc b/public/files/hs-client-0.0.11.tar.gz.asc
new file mode 100644
index 0000000..6dbcb31
--- /dev/null
+++ b/public/files/hs-client-0.0.11.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCAAdFiEE5hdzzW4BBA4vG9eM5+KYS2KJyToFAmK161cACgkQ5+KYS2KJ
+yTo8pRAAn1XaApFw4DXEgVSppzjdtpzhpsIIu3V3Z3U08NsJsBlr7nN/XTxa+dsU
+s384vI/9wkZFBRkJTwXU+MvxxXwhcq2nrkn1YhBeH1who2Xce6Lx0regEf5RJIVv
+r2RtJWQkyPqcIPy4ta6bM2p2Dv7/74c+Xu8o6Dxeh2CbEfOpOUpvwAjYhwGOCy7Z
+wnnMBHOUeWxr5scKJFaav9Rt+y9jzue6NInmeEcGKmsUlYM8yN03iFiazYdn6x9/
+4c74oCt2AlmlOzhp56SbfYBIxIY1boe4Go42KmV1VLCXoSVoZxwlVdQEa2pQKP+4
+/uJ5atYS7NVmjLbTJFO2fPuFRN1SbWUTQLGZdo30LhmcPkDOdz9+x12LB2p0mvs6
+CGnq6mcvL7gmCuv0g/r9hC4P/e+h+UdRWjFUi2Pn90EiIF0YXdDgCjT9N/xLKF9M
+WEpItBPsHeaII//6CMfJ7lTQ5U0Ar0Qv0eCNujShIIkAak0icLV8OqpoMzOFe6US
+V+JVZeB8+r/9IfPw22nRLPe+xo0ihE63TypxE6sCjIbcveMbj3LU/Xho1WRLWbGx
+PE/kKTJcIY9p2zHZ8i+FthRQMqqCU7MJU85bkb/8hO/e3w1B+oir+lqkVhKM6hEY
+e2WLcSVUg6UsdDnlq12rT8fOAnzlMmABskblX3TIO6vloIZtQyA=
+=7cXL
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-0.0.13.tar.gz b/public/files/hs-client-0.0.13.tar.gz
new file mode 100644
index 0000000..17997ec
Binary files /dev/null and b/public/files/hs-client-0.0.13.tar.gz differ
diff --git a/public/files/hs-client-0.0.13.tar.gz.asc b/public/files/hs-client-0.0.13.tar.gz.asc
new file mode 100644
index 0000000..81eba5f
--- /dev/null
+++ b/public/files/hs-client-0.0.13.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmPIlWEACgkQsBinu0N9
+HwXlLhAArD0rnA7sykqLjlwOp9rEZfc8AJzj70aBIELBmrZxG2VrKBDKEjoSjzOu
+m34LXL5HG6o+GewSpohqiO8lykyzteVBRieEdDOqDsUoqwc0SmGhjnm5NW1s1th8
+5g2e4sHmoyf2zkurag7+LgY4D4PB2f24sWR9U8BVw+S6rOw6ReW6zNNh/5zzS/Go
+ai9gKtz4mfFC8s1U6j/RcWFrSFP7jr0ld2W4iMFZPA54Lr8+i4MHxoqM10xmZYeM
+0RvQkbByQgF9gbul+YV3UAThhw5ryen37MKpm9ivMTOS1vJOXc6KbdqaBKHo1PJP
+55ndnnMbnJlwzvGI7CB/UdAklJtjQaJExUxgRqWmpDnx91igUXzXtAY+EzVWmjKI
+SvYmYOnwC1AsJb/PMSaHjDLQi3UWbo32nfnpjoDXg5ScgYCyjUnysRRk/HO4ctdI
+/OwRD+5qwxdSUQdp0fm/t4lc+0Jzt0evKAoz7fsW/fpAjUj89u0gFX0Q8xUfdGCi
+PhtaCsfgXRkvv9OOVzbVmkrIGlt990VSUsXMo+Jf1lwYNsFNP+jObse0WwWqvMcL
+O4ymJJ7938HsF8KxdOkLBJiN+m+Ux6q81oGHiU9iE7fs0r5d9zc4vkEN3v3yrBrG
+qRlisccDAYX4/tqE4V+l9YbJtsGYPn0ZQEpz9SA5efS1AGAquCU=
+=TLBX
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-0.0.7.tar.gz b/public/files/hs-client-0.0.7.tar.gz
new file mode 100644
index 0000000..a1da137
Binary files /dev/null and b/public/files/hs-client-0.0.7.tar.gz differ
diff --git a/public/files/hs-client-0.0.7.tar.gz.asc b/public/files/hs-client-0.0.7.tar.gz.asc
new file mode 100644
index 0000000..12e0f2b
--- /dev/null
+++ b/public/files/hs-client-0.0.7.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl42g1oACgkQiWKrneZm
+a710/Qf+Pi6t0Kr7FOcF+Ou7tftt41qnsmfrS6DnoIjRA83gG1FcMFErKJD3Ne2X
+jrY2/zoyoK8H8Mn2hOwiUmaOyEoe8WncUBkbJk/xgrPkQgJW1J9cKcgp0Ans28hU
+VvFmfl8xQvh1SGnFPKu75f6lRGDW55wAnb7efNCE/axEdAC5uND0dJLvemKZuLLr
+5Y/GGhhL9hAb+0SP4LyncvOnSY+xnyQtWVCdjgPY9gNQjzLeFws+7spHI0AmE8CJ
+PPy38T6qEtOUZ97z76hy3su1Of1gLi4ngYL7otQK5Tlzs39/6CC+YkIUxZ8mud21
+aUHxW58ZPNKW1RdFztXu3JwWqpLt9g==
+=0lxK
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-0.0.8.tar.gz b/public/files/hs-client-0.0.8.tar.gz
new file mode 100644
index 0000000..1025955
Binary files /dev/null and b/public/files/hs-client-0.0.8.tar.gz differ
diff --git a/public/files/hs-client-0.0.8.tar.gz.asc b/public/files/hs-client-0.0.8.tar.gz.asc
new file mode 100644
index 0000000..c4700ce
--- /dev/null
+++ b/public/files/hs-client-0.0.8.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl5Gj+gACgkQiWKrneZm
+a71ghgf/TpSYbR33QCBHtiiKo/gflUkDmpyyBpiKihDENJ3nigZfSq5AJQ3C8sVk
+zfaa6Tfp4ANrQP7HqGGuVZQ7dGjkxxMRhhaGpENKu8tQ4q6/kseUFM5f1f1cV2kM
+sFSgRlPveqlj9xv/pe12jxchFLaj8T99SAsmWWpaV9Z8434b/b32djjEdfyzpf3M
+FfaJAHlRPAFVXG7oWjZTlqYdub5zJBwxko/iCsrmdHAsCoTzSGGyh9PIry2kHqVb
+mK8l0f60dLIQb101JDelqtIVCLA9jJt4LmUneft5nmXOIEl8Ej25r0qB/92WsACj
+q0QcEGuhokI1yUf22MWRhHCBAAC/yQ==
+=RwTd
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-0.0.9.tar.gz b/public/files/hs-client-0.0.9.tar.gz
new file mode 100644
index 0000000..07322fb
Binary files /dev/null and b/public/files/hs-client-0.0.9.tar.gz differ
diff --git a/public/files/hs-client-0.0.9.tar.gz.asc b/public/files/hs-client-0.0.9.tar.gz.asc
new file mode 100644
index 0000000..7b1e4b6
--- /dev/null
+++ b/public/files/hs-client-0.0.9.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl86kxMACgkQiWKrneZm
+a73kowgAjSsOCZl4RRlQXcd6jAUhRVIEEipziDah3o69veen7jNVjlDeeXT95Ntg
+A6jc7JsRLyCEduq10ggsjkR7Bu/q4hZ4q1/Of3oy6YTSMT880jsL2bAAYppQn2OZ
+PWc1ryp7N+BLimi9zwVNhwNU6l3D0ZKe7WGGZle1ngLZdwZ9iy0YSQTjDtZ59YEk
+f1EFkVKbfkZ5o8pluyDU4hfa9jQ/GPDSjAnViRvTHMz8KWqxEqBZDA+dDwUPjrGe
+65oPQw6Pi4Ks1JHRbTBRoAdmK4zSCBRhm9udIxA6uoR6EAEVsVhmvbVmZwiTL3di
+mrz5IOWZKZKeQje+d6wbeU34eeIeSA==
+=ughL
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-6.0.0.tar.gz b/public/files/hs-client-6.0.0.tar.gz
new file mode 100644
index 0000000..dce62f0
Binary files /dev/null and b/public/files/hs-client-6.0.0.tar.gz differ
diff --git a/public/files/hs-client-6.0.0.tar.gz.asc b/public/files/hs-client-6.0.0.tar.gz.asc
new file mode 100644
index 0000000..2e4370a
--- /dev/null
+++ b/public/files/hs-client-6.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmTU1SwACgkQsBinu0N9
+HwWalQ//RPEa46kEYNgvvGKv5UKy3kaI0WmVIop5SXePusZYQ4dQhskQyjg7X9iv
+y6kSmFnmxKLSObMRM4XsQusDWos8lNX4OC//IjNn8JPEsxHfDOopY1V93xHqhO3C
+hdSuhis4lsAy7CRwvPQY6B3wGeo6HvWN15p1zCILEWM4ned6Rrogyuab0OrKfywm
+oCCW3PET5AW2lwJA+q/nTVkiVXE1APIsq0FQEwhNX7f5dO00mI1pNWOU9WeBih7L
+lWRhOFmdSZ2Ipz54duE+ORTziZS2sTvl06hyYQP4iqUCoZSd0uyGslYDFY1rmOvI
+XgkuiK5UQ5lPWBlezAKUO8eB/jAyPUAkX6mgPW3AdiJUy6O29Di6Hv+wh8eTOm9R
+lpD/ZxgBt1jN7BGFtEOCdDLlqMV4fTJvGBtaSzmyT/jOmGO+OT2yfVZzq/RHMp+t
+jSc9GF2Md4a7y8s9xCZ6DopkQiIYtDGpQpd2R5GdaqOQucrqtn6V+wI1YwUN5vq/
+lA57TIRvc5zwGAkTq7M7KfBhdiJlRWVqbhjHiSAqdJoZQqm6ooYDrlocRZx7l2da
+ZvYtE15vkqoaCKPyjB4YlOZI+zbmKAp0/CXver3YSIasBIK5ZpiG1ood1xhwIJnk
+Sp3wxiYrF33jvqY6u20QJ1xljoEXLmDu36cwk1jhNLCYgwfEhJ8=
+=Rs8v
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-7.0.0.tar.gz b/public/files/hs-client-7.0.0.tar.gz
new file mode 100644
index 0000000..e94397b
Binary files /dev/null and b/public/files/hs-client-7.0.0.tar.gz differ
diff --git a/public/files/hs-client-7.0.0.tar.gz.asc b/public/files/hs-client-7.0.0.tar.gz.asc
new file mode 100644
index 0000000..8147c29
--- /dev/null
+++ b/public/files/hs-client-7.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmdXCf0ACgkQsBinu0N9
+HwUPpw//YJHNlb0z/DSV7gAc2poujDsfyUmv1k+eiDq32HVmZU3uQt2OjmbebH7G
+oJUJ8kf3QjpP/5tmJvEnGOkRoSUFlTChu2t7oTaHdS4NZlUIne5aoan+CmQwFFsz
+E0prXxsxtFjBbMEwX1vieEBrQrUXA226mK5dxOh5cwaZYGuIs0jcplhA0GpO2pX2
+H0wzLl6eZAFOszPaqUkL2OgvCnirlV+ZFYsxiayqbx4K0FeP0JyB+2R775uo6ebI
+SDanDeymRQ8IFLkj/eWb9P3UZJ5pBYL6dQkzmt6dW5KNzSmChjCpEt8RZP4vii5g
+MSDNxLmdspryqgQQV16FbxbNyXNKgtTUJOx9NpaaHgSciapdsMxbj2YRJb7FwmkA
+tOlE4tiVsQAt5rX301QD46pr2FCV2ebHOvqmN6Yka5eij934IRcZNfXmgS+h2+P+
+JbmI9iPMIUsnffAGYnqt0fLOpsdc9Jyhx/X+TDma66LN+PJvBoNrNbGoVSwLY9Lc
+EYmMQpeOGiAbN+vULfoqWkHOjE7h1b9ynG3JMKiN4PpbrlzL6N5kfiXbw6hoVWVA
+bIVgE10/zjLQQ17XAjdy/ASmWDEHgWThzhceJZGqt02SwxTgEKYA0xbtU4qNjJP3
+s/seWsIS47dgPUuEdWIURQ/Qdyh+48tPu3cSupYrpydKEEYeJdQ=
+=6SNX
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-client-8.0.0.tar.gz b/public/files/hs-client-8.0.0.tar.gz
new file mode 100644
index 0000000..ff3db91
Binary files /dev/null and b/public/files/hs-client-8.0.0.tar.gz differ
diff --git a/public/files/hs-client-8.0.0.tar.gz.asc b/public/files/hs-client-8.0.0.tar.gz.asc
new file mode 100644
index 0000000..1c53782
--- /dev/null
+++ b/public/files/hs-client-8.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmhjyr0ACgkQsBinu0N9
+HwUhgw//bpNQy0NOqwX3BtHDAiP6zm6en/tFrwT4bmsjGpsI3I0P16IXPha6GD8M
+vtii3wZjzkMVyz3JUZPvSxzU1KpurDPIE6LhLL/Pa9cSKWlktVKe6tUXq6fbn1T7
+aCSitTGRblpEKe9BA/KrKiC9zF+Vt576Q1zw/GgDp53GOfzwNawXg4Gc0o8vybMa
+IzPEv56ey696VlYXDF7NRS3/h2yDpNHV7FozxonKz+hD4iFSJ2jX67tBKTZ34KjC
+FFXa+W75Ch3FRVhAb6W91ljxhif6ElXH5xL/7MQCG1i2YtRLNo2VTKJnPzXnolzk
+wsR2eBDXKm8Q67ipK3sXPScL8hazZxYZxMWgpL3Lv+Ul+IATkHCisrFFX5g9t517
+1pI1RA1X4YtPbb3rWKp13NXTMOK35gFMC4eMQ6yawDFLi8D9MMyJjc/JWEvt8C5j
+ShgtnWCjkeVPQHHzdQASOP8eJ6K3beju9dNAyhbptEqOW/959DvelARWkrpIP9mH
+iugPyCPcLDZPj30HUzwZ0RFJ9/OZx4PjDdde2NyShnen7/+Q5ecS72p+o6LCxVme
+fvkn4IqoPN/MOuHif0vLekFiz0N39cU8HlbH9lo6Lb7DSDPZpSiq/B4cgp7gZA0L
+ZiaeZp4eQYcUHW2uZ3Mtq4NzkK7gaIjK5AbXSV+dEFvJd7v4ZYA=
+=B/ha
+-----END PGP SIGNATURE-----
diff --git a/public/files/hs-miner-0.0.10.tar.gz b/public/files/hs-miner-0.0.10.tar.gz
new file mode 100644
index 0000000..622d68a
Binary files /dev/null and b/public/files/hs-miner-0.0.10.tar.gz differ
diff --git a/public/files/hs-miner-0.0.10.tar.gz.asc b/public/files/hs-miner-0.0.10.tar.gz.asc
new file mode 100644
index 0000000..bed9087
--- /dev/null
+++ b/public/files/hs-miner-0.0.10.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl42g2AACgkQiWKrneZm
+a72atggAjxO3rqkPrKNCo1TpCouXXKkJm6bLJn2WzisfDfXRWAOUtq1e6P/1yBs4
+YTMTIQ8ujnTtZX1TDCfU7oW5MdMa8Nz72DhcrKyOJDE2wYfWC23qbzRQ2hLL78xO
+SOEOv509fqWc7yFwej0FxoErJvhdJFcd/yHcQRUNoA9X++DSlDYrC6WV7qjCepIh
+jApwJ5hq87fro+MfpQ5CCuUgCWskA/CQgJ4NyhBrVB5ErJIZ/wX6eaG+LdmSaP30
+9MY7X+58/o8rSmXpwhIOf+psqx2aOmY1YSq59+qTlRO4vgCNZ3uGOmYtuThD104K
+HWe8n3NLrKljhsMdovyItcfOz+GivQ==
+=BGam
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.0.0.tar.gz b/public/files/hsd-2.0.0.tar.gz
new file mode 100644
index 0000000..8bb8154
Binary files /dev/null and b/public/files/hsd-2.0.0.tar.gz differ
diff --git a/public/files/hsd-2.0.0.tar.gz.asc b/public/files/hsd-2.0.0.tar.gz.asc
new file mode 100644
index 0000000..2914035
--- /dev/null
+++ b/public/files/hsd-2.0.0.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl42g04ACgkQiWKrneZm
+a720QggAm5lXAjLgFVxlLWxGApjX2NJJ/sbMjgchm+eNjMSwc2W9p05k9bRL+Nbe
+nSJDQ4xUEhCE0BR0PVYz5+WqxUZTZZGb1LOs11XLP0LdG17g1qt6SsvlQkwoHGZ0
+cjkmIe0o/g34Vi3lBrG7tHoV51yqOP3hJozM65yc4/kVe7qMhRcHDf4KsIttEzMf
+ZOT3qJZqD6/LjAMOK+egrWnVwtREPYjWt1sV0SM2KNL11ItvqAt4BxLJH2unxRnL
+pXty/0ooN9mqFjgljj1Ke8si0a+XhYqd6jp53QechKzd1nYsR2ZUA8Cb/ul4D7Vu
+ZejIzaCFe+UlPIiDsJMeIvMuBltoxA==
+=JiMw
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.0.1.tar.gz b/public/files/hsd-2.0.1.tar.gz
new file mode 100644
index 0000000..94947b1
Binary files /dev/null and b/public/files/hsd-2.0.1.tar.gz differ
diff --git a/public/files/hsd-2.0.1.tar.gz.asc b/public/files/hsd-2.0.1.tar.gz.asc
new file mode 100644
index 0000000..ff7a907
--- /dev/null
+++ b/public/files/hsd-2.0.1.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl440NsACgkQiWKrneZm
+a700aAf+OI0PmVWkSL0eVnImJt4wlBXsJbWiG/N2lAo8v78IL6a/RczLTcmOAxT3
+gqhnqCLqKcY79jPhOmJcQeLLTLfWHEArnXONj2hYKDTGUXd8J4NnDqR28bhYugbX
+IqxljetmPCc/x8OFzBanQtJJ+JI5Qdz8t4yvRm1UboD/o0KBRjfi9TOumkfw9hg/
+R0KBlk1glV+9wl0QH3cOBTyPtWDPsOBVh0WU9oo8JfL2Q5VA6U/zT0U0tY/GkPRK
+BUEh/YJLR7A0HGN1AfhAxAuxM0ABjEZher3as3Pw31oDWA8WDmFn2Yjc1Le+72k/
++98D839YSs58FCfyVbFxWTkIX/N6pQ==
+=Skgb
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.0.2.tar.gz b/public/files/hsd-2.0.2.tar.gz
new file mode 100644
index 0000000..dd8f43a
Binary files /dev/null and b/public/files/hsd-2.0.2.tar.gz differ
diff --git a/public/files/hsd-2.0.2.tar.gz.asc b/public/files/hsd-2.0.2.tar.gz.asc
new file mode 100644
index 0000000..2c71a6e
--- /dev/null
+++ b/public/files/hsd-2.0.2.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl5Gj+MACgkQiWKrneZm
+a73dBQf9GSFd8Og+6HrAVrZwPBL0qsfmvDBdNhDAiQygast+/FhOcmIXnrm8kWUT
+8GT+GyVS27+nqDwggdZZRYh21eHDS8jS3rEYidfWyWPx2iQMyUhyIVKsDCQEhZuS
+tRENq+fZh2lRTYGrgkuBeixvg/qOxR17NoFFipJ4DnL0LFzALZowvI6Emten5Nzs
+S7k38fbTyTLDjOqDDfh18jxhKHKa60aC3QSeCXK6uZSn31auT73NhQeyypkZwpr3
+YExRBzbDKzHsHYGOSwnY8mhEBqK1etC2IkqA0SCVXznzsjvin2BfA0YP1b7/yGXr
+l0DLWsNn+9jzd19VItgnVkfUagMcwg==
+=u/ZX
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.0.3.tar.gz b/public/files/hsd-2.0.3.tar.gz
new file mode 100644
index 0000000..dc0d5dd
Binary files /dev/null and b/public/files/hsd-2.0.3.tar.gz differ
diff --git a/public/files/hsd-2.0.3.tar.gz.asc b/public/files/hsd-2.0.3.tar.gz.asc
new file mode 100644
index 0000000..0d6c5ed
--- /dev/null
+++ b/public/files/hsd-2.0.3.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl5dIgsACgkQiWKrneZm
+a72Zpgf+LaDvoWoMVKbhLPmoXvgPRIJSjm+G1NZQUQPIF1dZrXhvb3cKKWQV+9ms
+M++zBVrC8a7WSfAD3Kz1m6QLkv5LF790rzLb4C8EPUP64MblwWhC/36jkk4ZwFfy
+lEYDJ12cFQNGvXGb0kF933E3ahporCd22hvIXrCrOokbTA+m3SKy7py642fuwYZO
+osKZr0HCr4HOuuG4MblivYsP8ZxbRCC/ip6Pf9B8Zwr9sJMBunbC7u+SPWn+l4/6
+Rlp67JqKtUrtYLnu6IaQFaWMMp2SK3ajyYWUyqC3tC5gFtp2ddNGXej6zyV0JVoD
+vBdp00MhrL+zbYbiYrmwUaMmvhIdqQ==
+=i5v/
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.1.0.tar.gz b/public/files/hsd-2.1.0.tar.gz
new file mode 100644
index 0000000..9d2b265
Binary files /dev/null and b/public/files/hsd-2.1.0.tar.gz differ
diff --git a/public/files/hsd-2.1.0.tar.gz.asc b/public/files/hsd-2.1.0.tar.gz.asc
new file mode 100644
index 0000000..8e6a75f
--- /dev/null
+++ b/public/files/hsd-2.1.0.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl5fAU8ACgkQiWKrneZm
+a70YFwf9GCckQk/Mxoo603anxnxNkp9hs6GisdB0uHSsO1xnxezgzbyVt3aHGFzk
+DlPkchC4KWbesAd9BZB5xtv+YYsh7O4ZfV2chE+DFOwV4LSnytgJylX2r+9gSM1U
+tbsrQg8qGwPMx/7PJur9cj5gLmyQbrgJmgPhV9+zgRkbouKCkiDRoMkjVO3NBU1I
+cUNRC7hXHxrhIYMY9s3o+lNhRQHWKUhGkUm716N77+foHlKaEvOGaaI3ZG3MMS5h
+jcxi0YpIgTcFfuXPFTCyvB+nIH/xPUE4d0bq98EG+ZkvAr5Ruqq0OCUam4ku6z55
+Dlme0mD5MNrk/ap4EpyGDJ7LVSCuAQ==
+=kqxe
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.1.1.tar.gz b/public/files/hsd-2.1.1.tar.gz
new file mode 100644
index 0000000..fce8dc8
Binary files /dev/null and b/public/files/hsd-2.1.1.tar.gz differ
diff --git a/public/files/hsd-2.1.1.tar.gz.asc b/public/files/hsd-2.1.1.tar.gz.asc
new file mode 100644
index 0000000..7cbd8d0
--- /dev/null
+++ b/public/files/hsd-2.1.1.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl5fCzUACgkQiWKrneZm
+a71hbQf8DfqnQLv2E36uzv0JbWfhw3C2O8APinns/Jazv0H6FDwsApmU+N1Ngs2G
+5qyZwfZBAnPNzImWyMQ/r+00pwJh3j0Gn6MPzpbdZdZAGtx0xe5bAyLuQ2dvP8fl
+GuCnYroeaTEOEPfsWJdB4qXc8qIOVRbcjVHgmyqeTVSf08LrSC168L9C9vQuj04a
+UQ+qegDwIzjBg2h/OiOFKj1UaqyJ4NiXmqt47pZBMzgk76z7Etg8n+j4hbMIRUob
+WBVsAGSSjLY8IQFvDVnUnXtIdD56qtH1L+iLpoOHSwQyw9yo2q2bU73HqycH7fza
+ijf6t7teuLf7Sr7Eh8VquIxBNa2okw==
+=wUWe
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.1.2.tar.gz b/public/files/hsd-2.1.2.tar.gz
new file mode 100644
index 0000000..72e602a
Binary files /dev/null and b/public/files/hsd-2.1.2.tar.gz differ
diff --git a/public/files/hsd-2.1.2.tar.gz.asc b/public/files/hsd-2.1.2.tar.gz.asc
new file mode 100644
index 0000000..5cb4fac
--- /dev/null
+++ b/public/files/hsd-2.1.2.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl5hSFMACgkQiWKrneZm
+a70yRAf/aySUzhDJ/UxIOwysknXh8gpUVRUR0f9WpQXOmtbjUwtvvE7d1GJL9NLI
+ItblePklVMwkt4j1FWOL38x2FYNevDdxjK4rI6YhF4ebIrVDBEwobi8czOz76+NN
+s5Q1KZncABpcBMJZUL2sGVk1yPMhg0eTHO4RI4BSuxW3yzFdlKNv+L00OpoNGbit
+y3z4/EunviIgRIChbytQOATDcB4D7zrDG7nEU/C/wH8tSpGO5+lLJYVxraTnDDF5
+W95fwsUwMv5E/kkpGp98OGTZoJX1KePv/yYIg0W8XxJMWPGYJTFYB9ZrosEiunbT
+j3KMFQj6e2Tj7MvXKLfbvwLskw84rw==
+=xDqs
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.1.3.tar.gz b/public/files/hsd-2.1.3.tar.gz
new file mode 100644
index 0000000..0413d25
Binary files /dev/null and b/public/files/hsd-2.1.3.tar.gz differ
diff --git a/public/files/hsd-2.1.3.tar.gz.asc b/public/files/hsd-2.1.3.tar.gz.asc
new file mode 100644
index 0000000..b2e5de3
--- /dev/null
+++ b/public/files/hsd-2.1.3.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl50EK8ACgkQiWKrneZm
+a72AbAf/R6qdlxUnOMURvCUn9BZvMKujwBHOxyWFMpjG8UMTdC3CK2hQbCB9ksns
+H09JNfy6ujds+NHxNSep3z9p0Bktk6RSr8s350sLftZ4O0a0AeQca4mUP9itb169
+d+yJQtAkNapIt7ZpuSkLF/BHdcd37fKq82DLzz8haezreapwVzisLiPY4ptnuxGx
+8C8bXh+DTThNdJiRpJ2GGOtxpfFtbjfI9M0KBBh/yy37ZRujN1Hefz/PMuHJyZ0n
+/NmWO7ygpKeTDNcjuc24bJm8hlhjJtrJAtgLcCCs5pEV112xqYdpcWk+j1Rj5yxJ
+69DzKJDzwwDMNKgj4va31LQP3TeDmQ==
+=ORRl
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.1.5.tar.gz b/public/files/hsd-2.1.5.tar.gz
new file mode 100644
index 0000000..26ae8c4
Binary files /dev/null and b/public/files/hsd-2.1.5.tar.gz differ
diff --git a/public/files/hsd-2.1.5.tar.gz.asc b/public/files/hsd-2.1.5.tar.gz.asc
new file mode 100644
index 0000000..2c166ad
--- /dev/null
+++ b/public/files/hsd-2.1.5.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl6DPN4ACgkQiWKrneZm
+a70owQf8DEFsYbiLktDjmZFVa3ANszM8Nal96pg+Rkn1b5u1AepndOO6iC4A3C+V
+mswGpCAAaajkBphmNVG7z3hEuhhVg4OUudV7wGrjhtBvmr4SpTa+MFD6hMKgoYr4
+FxzF+UBZlH4Lv8nXzuLEiYqCl8F9sWZLXQHcufgV2zULs0qnCxENq0uts2IKu0SE
+Gt36DhVMg/yElOG6+aIQL/1cCbHLbLwKpZ+Ln0ElfWDO9z3bhnTqLY2jfMhvggDJ
+FHOBcFtr78qTqBVm9VOPInbLwKqJCSiLGQXO/GzVpBYLZQwCIndN2BrfHcWD8boj
+Fh705u6mecxxpnoIKcYi2V+ib0MDvw==
+=0lgm
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.2.0.tar.gz b/public/files/hsd-2.2.0.tar.gz
new file mode 100644
index 0000000..e025ae9
Binary files /dev/null and b/public/files/hsd-2.2.0.tar.gz differ
diff --git a/public/files/hsd-2.2.0.tar.gz.asc b/public/files/hsd-2.2.0.tar.gz.asc
new file mode 100644
index 0000000..6428a52
--- /dev/null
+++ b/public/files/hsd-2.2.0.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAl86kxgACgkQiWKrneZm
+a70H7QgAq4mYjS0UcBkQjTmBkv8vyRmBI1fDmAuVavkz3f7x2nOXOMV6HZ1TqyLe
+YDubjcWVkN1dytTDyTU2KwkgHTGNz9nsUT2OzHrmSqcxrgI9rAFmbo/hLq7X5giB
+MSmNzfQTqSdXJaX01/mUuI5hFAMSpMIr486tBpZTkXOkXxEiGQeqI2JjHZnWLYAf
+94WOVTdziWg4i1iFeXHgoi47LnTFxsY1FTNKauBjq3HJkJvbPKA7z+H+pjvj5bYx
+228mCLC4gY3dt2tezui6GGXaiiLF6e29D0Mlo+dic4v28XR7ePwN4d7HAiHX4pJ9
+FfqUL+/jTbB3GdRqtVNwKy45/KyJvQ==
+=0VtU
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.3.0.tar.gz b/public/files/hsd-2.3.0.tar.gz
new file mode 100644
index 0000000..14d456b
Binary files /dev/null and b/public/files/hsd-2.3.0.tar.gz differ
diff --git a/public/files/hsd-2.3.0.tar.gz.asc b/public/files/hsd-2.3.0.tar.gz.asc
new file mode 100644
index 0000000..7126608
--- /dev/null
+++ b/public/files/hsd-2.3.0.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAmAQPO8ACgkQiWKrneZm
+a71TjQf/fb3GAzWPqJkHYJ0GqGiDOhZrwHBBzMcUItA8VadI4frg1r7amzqaAgvM
+L9Ke7UsCa7CpQL3rjLEfgQcP+5IDhYV06UbM6xAJy8O1jlC8aSvpeQce1bOuQYj6
+FDBMyRocfiEi0oyrjWhXowxhmevfwOTliSKuFeOc+kn//us+hoItQGmPSg6aUFY0
+K7bA9An5sOMBIko0lieOtIHGmwsEmSaPIiTNFu8C+jSi0dYRohWj8+IsavlX+nbN
+v1xVeFMQqeJhoM0R4qWvzhz1OQWQmJiUWF3gVrb0n/GmHow8uydmNn/+OEsqsHUC
+DZJGqZqq+gt3JQDEbUim8R3qIGNJQQ==
+=D7SU
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-2.4.0.tar.gz b/public/files/hsd-2.4.0.tar.gz
new file mode 100644
index 0000000..f5cf05f
Binary files /dev/null and b/public/files/hsd-2.4.0.tar.gz differ
diff --git a/public/files/hsd-2.4.0.tar.gz.asc b/public/files/hsd-2.4.0.tar.gz.asc
new file mode 100644
index 0000000..fe82b13
--- /dev/null
+++ b/public/files/hsd-2.4.0.tar.gz.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQEzBAABCAAdFiEEtLH2LbrAhOMz86BKiWKrneZma70FAmBnZTQACgkQiWKrneZm
+a71OiwgApgxfhvElBqDCa+oXx6B0nEcsqbZKtngkfcLDvljePm08ovyo+nzhIv93
+HAuQ0VlQOZ80SbDYhl38xj1o8VbX0hbLYnBJAHUePtRA4nKnCUAssn+mlB4GDCTx
+aCsvzrNVJftDoXRPeiTVLuKgCH746w+uZnrICrYuvuV7oKMQO5+ImmSEJnRJFhoj
+D+2C9R2MjHUcQEhYHoimgLz2NvGpF0Xi4fJ7Igad13AhbpJonLaoe4C1UJ9lryJL
+TklxRBM2B+CaY/MVKAoJd5cggEMUev9S/lvWCncOPLiXsTKBpcbiupdVtVwYUAq1
+g4212QzeNM6TrV5XlWChCiq7UOMsuA==
+=makU
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-3.0.0.tar.gz b/public/files/hsd-3.0.0.tar.gz
new file mode 100644
index 0000000..3185bd8
Binary files /dev/null and b/public/files/hsd-3.0.0.tar.gz differ
diff --git a/public/files/hsd-3.0.0.tar.gz.asc b/public/files/hsd-3.0.0.tar.gz.asc
new file mode 100644
index 0000000..8f3cf8d
--- /dev/null
+++ b/public/files/hsd-3.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCAAdFiEE5hdzzW4BBA4vG9eM5+KYS2KJyToFAmFpqugACgkQ5+KYS2KJ
+yTrh7Q/7Bg9BxP2OLvGmWkxmKFTBicGx/O8pm0hZ4Q/CIaDuqrnDEfGRWebQzsC3
+6bYk+Q2BTk+3lIrc+99+dCd0G747K+6/jOm0WgyRYfm+mM2J5M+jizv75pWNzbc2
+rdNILapUlfEhhhW1/CDEx0kJszsMEi+QY4mjGjU6zxMXiuTCa6prHMMoG5F1hEUC
+8ZZUO5hfxUaZbEIDvk/QkGAnUaQlRwbdMJe9Ktc6K8frxoghx9AjCvoNgojVPol8
+lmgaBNAI7CTMCoEFWfRuJIFGt0bpbboNjo3unE+rujQRIiezXUmz46KW4FTyBrz0
+2MT4yoZ21BkmL+J8FsY/YxOgdQ7haXRw7urVqX8EonW4HIrqeyDGnTBGaa+I4sBN
+QOhk6K41MVGrTZ9+7SCXeECkAot2xXNKWNRrSNBC3XmZIqrbckqAJ7CEjpRJas+m
+wE/MNsbJAmtDwx2+U7bf2opMNBt5nO6B62MYn7GTspARpB/HpDFViPSaMjW0wifq
+wy2snDKQVST3TSfyzS3GxxUbE0J8J+LjcGNwuSY7hDtfANqzJY53W3OKuTLK03OZ
+JesmggSrsIkEoONtZHAAhkoMdKug5VgG9/IuK7Y69WJH2aT9lNcHh4rt5JjwferH
+XDsTqQmJ24cYi7lW1qLn5YB/O+8mYmoS/VJgqi2KK5u8EVooBjY=
+=mbmn
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-3.0.1.tar.gz b/public/files/hsd-3.0.1.tar.gz
new file mode 100644
index 0000000..e15f53b
Binary files /dev/null and b/public/files/hsd-3.0.1.tar.gz differ
diff --git a/public/files/hsd-3.0.1.tar.gz.asc b/public/files/hsd-3.0.1.tar.gz.asc
new file mode 100644
index 0000000..aee5e8e
--- /dev/null
+++ b/public/files/hsd-3.0.1.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCAAdFiEE5hdzzW4BBA4vG9eM5+KYS2KJyToFAmInhBgACgkQ5+KYS2KJ
+yTqJUhAAnFMWqi1lCn2LqVoXUgmowSJBX7Go0bQcm0h4wnFwH4mueZM3Z7CKuVjp
+cCrMQMj9sMsKBkBJhQ+x4GBR1ddPQ4EcATQSJqq6/BWwygzgeBdk/9Lt4sE4wIIH
+APY15KBgFQ8hACOK85m/O/vcN7IPhfiaSdeE25hh6Hs10nnEWcB3S04BYbjXiv25
+H3smtvkPCGfxIqUHOdQmG7JuoSVUNeRIb/sS7sVD/StG4RyeoJBKWIClBap6ZKTY
+nNHsJjmf+yYorO0BBTYh6Qm925dSq6UZ6rMin+JyFzrgDFhakz9tjzgGycGFyB0E
+xeytptrFKfUqqnkygtmV3d3ZnWTLtkUOTm3C8yEt/AX6H0Vr/nyNEBOryW96+INo
+QoFPbIPW0RxJCwGDk7KJW91LdFdYDPpD8WjCqlz5Ni6ypvllzrprrlef/gR7BDX6
+/Wt8Uc25r/7DOdKRQVgzyGsVhrlahSCqSLpEl8tkyqn2s6XAxr49bPwvJujC9JFl
+pA1bxglW62BVmPTJzYk6DErVpQszOB/Dq5td8D+hN2kCb1Jis9dHQApr5CpvY1tC
+ro19QllXdMCpCFFR5faHQ6VPv+BVnGtwjW5YzVkJXmeZprQfDbEcdIgeDaWLfpRV
+JccsOTmV/STEbC6/KGwU9Kf48sEkNwLZhfw2Ikx+ITwH6/wpswI=
+=YiCe
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-4.0.0.tar.gz b/public/files/hsd-4.0.0.tar.gz
new file mode 100644
index 0000000..7825ec8
Binary files /dev/null and b/public/files/hsd-4.0.0.tar.gz differ
diff --git a/public/files/hsd-4.0.0.tar.gz.asc b/public/files/hsd-4.0.0.tar.gz.asc
new file mode 100644
index 0000000..a83ff13
--- /dev/null
+++ b/public/files/hsd-4.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCAAdFiEE5hdzzW4BBA4vG9eM5+KYS2KJyToFAmK16BAACgkQ5+KYS2KJ
+yToT7RAArXuMY4rsDJ6BaFHk7t9lkZTp09n9R8v430vsSABgymOaj7dhotPYZaKS
+Nxn3s9S7AvwhtHRK8DiCownpBiUlb/hJoFr68svU98GC6ta/9IciNEnFqbvTnm3m
+7gQ7ZJOHT8opfFHiaLWXMv/WQmtUkM5dOfEke++Sjh2vOzKBogrBwXofJ5SN521m
+qyhdkht4Gr7lehjEug/fzcikjVACJJZKeu+36ewpsXCePV0taCRRg5QjG8JU8R3y
+6dWdkZzFA7e2WDsKPiiMql2mydQeEZWSeO957fVE26sEPNO+dGSqDPb7Sk9Nx5lB
+2z4GibUGc8SaaI7mqkazMiBRT5nTAe51EFnu6+IegDLq/7Mb/2oNVNmTo0EUZALy
+48ymU3qgw2qDW/2mBxZfWAF2H74Ti+cazrmhXquzlJgYEfgCQ1svgeYZzkPL37kO
+KkM6F5nkh2MWltX8tv9g2caY66EtrzGKQIst1UpWESjsicVd3Ob6RSwgfkBl/ZTk
+tlkWIpyTGzbuIKNFZisvuFqRt6u9ocQz3JZ6TqpjKDg3RLHqmpcmAW12FtMatWtA
+i88fKTnzyCCE2cflxiK62ZEarzcpqFMd7aVRaHZV6vD0hnfK1xHnYJ/fRAaOzbl+
+1Ra5FY58JR74k0UtE5noVMCtyoXE1nlYd8KagCLjnW1EG0ZYLCg=
+=RaFU
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-4.0.1.tar.gz b/public/files/hsd-4.0.1.tar.gz
new file mode 100644
index 0000000..b9983c2
Binary files /dev/null and b/public/files/hsd-4.0.1.tar.gz differ
diff --git a/public/files/hsd-4.0.1.tar.gz.asc b/public/files/hsd-4.0.1.tar.gz.asc
new file mode 100644
index 0000000..db0e399
--- /dev/null
+++ b/public/files/hsd-4.0.1.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCAAdFiEE5hdzzW4BBA4vG9eM5+KYS2KJyToFAmLCEEEACgkQ5+KYS2KJ
+yTrl1g//e+4MCE+V7pGrJqJ1jVGMGDiAD8UROuT1r62dBv+oXzuZw59GGuvywT4d
+pRLJuPOysByeDhq4vcMSSAEOngWZlcZN3DDWeTCpf9mfmFmMrkC0f1vDb2arhL9s
+jcBkPZm6vhOh6oaUsHt2Ei5clDYbKUg6AqQD/wk28bZ3Eo1SYbuXedTriQ9RNOHT
+iXQ1HGpce9BFzrSrG182xGgO7ZJj2EzFyeEsH/kycJTmL+D302TWJKGmaAU3vfed
+iWYvwozgpPORUMaybqkBjkJOqtj+uW1LTvRmZDbRnNs4twa28bwpq+loom12U294
+7oNH1KaqDmMMqj+kLUzSsFJf+QK8kJSEnKrQsGFLQAz5A6QzKVjSQjuZLaSxFgsZ
+tViGkYqzujCm8i05mplpjhmKzSXtpXoimlCw11/DgvnDqWHi/zwKruMQeD+Ad37d
+xp7jJJ2sqPGKzp257ix7gDMNPbqH0by/Q7rLbDwEwjpuATwBg5bnWdzZ9EXgamAr
+h/Z6EAGo9flLIEgZf/Dz0g+WOMNlxvi9i1lMZxlJN2Gg3jTCUPimjaGqr32CLGj/
+u1Ku4iXWZ9lvS2+LQbRFU5xSmKOezBVYWlqgCPUyA+KnuqxF2dXp/wu8qhjGHfPF
+7p5kkXy1sbf2mqoTBmZvPRVs/yeVzaYuiNEmEu7H9xOQ9DHF8eQ=
+=LXVo
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-5.0.0.tar.gz b/public/files/hsd-5.0.0.tar.gz
new file mode 100644
index 0000000..e517d82
Binary files /dev/null and b/public/files/hsd-5.0.0.tar.gz differ
diff --git a/public/files/hsd-5.0.0.tar.gz.asc b/public/files/hsd-5.0.0.tar.gz.asc
new file mode 100644
index 0000000..8cbcbe1
--- /dev/null
+++ b/public/files/hsd-5.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmPIidEACgkQsBinu0N9
+HwXrXxAAgjxJkY8ELm9W1JynngxjR6k4qPQeZqxOzQsjsE7g5S4pe7PC5Mf0qwi2
+rm7A91VdIQ4PYVnY9Rlhl2AFLmETW+xt78NP+9G0xLRQ7Ugg5iuxEbRwtlF2Z305
+ygdYK8Tj5kWHg6N427FVyp3IIiLmzgeo153qv+AlEtUJRFodLDiMk192+r/xGyaR
+HkfC9X7ewBfXhJNx+3qJKdxeW2xPACOC7a5dV0GKSJJ9CcVM8nZ8wZOrVV6+61fU
+AXRK4iauIDnwVlm0uOYs9JPAp7qA3X1AF1rhWkywYMWbnndC9G5iMt0HExdg+pbZ
+KEEqC+99ArY97MIxGYedmY12uwj45PJlBJx0l0em20abHIiSv9OkcLyuQvVoJbbM
+2jbZ+TdjW8bptij0rBub2jeySKaLazdUzp/Qcca8arAnn3eUPhnctua9r0Ul3obu
+P9nKezNtddtsZQ7a13t/si7BbxgYj7kJsNshCJMC6mev83lD+4yw2SAjGRB3deAg
+3Lqa5+0gnaG5OqwTC1j00jvdkmjkYfOWbodVHfPS+IIpT8c7VD6ppOeTGQqiNjNd
+Wz1p3QKlEmuxvy9zJngsWgwEqg3U9T+YVbpSUsTpS5/EpeQb7/qTtqKo8g4tq4Bd
+Q/tjICsZCqMBLGxXPM03mEJvkXVctSRtTxUD8GWhFOComxQOxjg=
+=hPbm
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-5.0.1.tar.gz b/public/files/hsd-5.0.1.tar.gz
new file mode 100644
index 0000000..77ecf86
Binary files /dev/null and b/public/files/hsd-5.0.1.tar.gz differ
diff --git a/public/files/hsd-5.0.1.tar.gz.asc b/public/files/hsd-5.0.1.tar.gz.asc
new file mode 100644
index 0000000..0e1fee4
--- /dev/null
+++ b/public/files/hsd-5.0.1.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmPJrSMACgkQsBinu0N9
+HwUATBAAsXgBE9du7fwkfiGYXvNnz0mx40XoLAtw86dLKHDMAgchN69wwSHJH6wS
+Hna6ew30by5suY7DKPUHlHSx4aO/xu1c20QxI27ruHq6kuq8ATMQ/nF+Jwt+0eaQ
+maO7LbJKsfTYO8FoX4O8PcS5apV2AusS0dYVv5pEihuo+yqfw8OfWnrQDbR+Kmzs
+Cq8dFFYrc0rNW2zoBSHJNFNQUy4FgWlc8G6dKTCoxJnt8r3GhwlOoOOp/5yVvUy8
++Hg9Hdb2fFANZVrdNGIMBIGEkI723MBBy9zJ4UQCZbr5fb4au/M99gtf2juwztLG
+mKQ2z6ZbI9dh1/7TTzM2y/w50uRlGnxgzvFy7CxuQyKuUW7mpflXnDrKvnLP3UZQ
+39H6o8u5bNbOUaG7CpfeDk55zSQeh1GVURyC/D8NGZiwbEMH7SzKZJbWNXz+LR65
+DWc0f8rvHAGqFDIQS/9qJG2tnzEeSyxJtwvtKuxSdRM5ulfZXBNcpGcMq3JeJClH
+B2R4e+UW0W0chLjO0NZIpdNr1WncDyytHK2dBg2iRoK8hF9UvQBzjif6ocUNJ2W8
+ACOgBVB/bNii5MBmgEm7p/jvGJPGe4w2uOsWLQ/3cBgR4Y2Qufz+iYY0QVmcS0m0
+3M7v5sWmE8LzXnH8MZlVkzYH05jKFlnw7s6vGau0IuerXURq9pY=
+=fR+K
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-5.1.0.tar.gz b/public/files/hsd-5.1.0.tar.gz
new file mode 100644
index 0000000..e9755f0
Binary files /dev/null and b/public/files/hsd-5.1.0.tar.gz differ
diff --git a/public/files/hsd-5.1.0.tar.gz.asc b/public/files/hsd-5.1.0.tar.gz.asc
new file mode 100644
index 0000000..0b929d0
--- /dev/null
+++ b/public/files/hsd-5.1.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmS2xiQACgkQsBinu0N9
+HwXebg//ei0OYe4oDAqeRHpd+/WEBVRUwDJ55cjgdVEnZkPdyyp2vRWRs3JAyfxu
+s1WmfL63iIguxccI/3hR6VXER99NeUYeiBEQ344wgNcOBwRxgTbSJChVu7xUF8YF
+1HRLfE/Q+BjlIXZoi8InD5Oiy+6RaClllOyBw5+U6lsaqMLahZSIXzjmrqyPWsuo
+gPUvLsHltVOXMkSiA4Vc5BEhq/QwIz3xcyjkVZw0vjGvoKM4qTmM1OnsvoUXufoh
+46QIv8fsIV35gs7qSzi9uq/cQ+l0oABFQCLSAr7MhqJGHwXdu0BDDYiokDiGgNOG
+yEP+vC0UtQFQp+BGPCb4Z4GOZ/DoN2NMFCnINTkVoObfWo0mX3zoaPugHU4b6jWr
+XRh9cv+GyWeJJpmOSL/2e1F3aah3i34Zmdjgml72KQDgMZLwiGRrtEBT7IL6DBAM
+VIYmmxTbNPo+YWcxuGU7xO7yh+MG/b47Pr3jJPMJxfSNqt7qVpmLkmyS60oP6GE0
+J/lQ2RRLnrX6QhWa/F7tK1HmQBbmW6yW+xlDjV7VyeL6x8tcEmVXZ1RmXSN3nnjt
+pYI29cqUu6wzU6k2Ys9236BlaWhW0qI2c6AmyHY4pf1QMOwpS9QfwCbAiSuWHWEl
+HM6OV5hSb7paOgcYU4BtAAmHWxDeCk7+FvdMbrVHpr8cTrOkfL0=
+=Wa/N
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-6.0.0.tar.gz b/public/files/hsd-6.0.0.tar.gz
new file mode 100644
index 0000000..8786afd
Binary files /dev/null and b/public/files/hsd-6.0.0.tar.gz differ
diff --git a/public/files/hsd-6.0.0.tar.gz.asc b/public/files/hsd-6.0.0.tar.gz.asc
new file mode 100644
index 0000000..e09eeb7
--- /dev/null
+++ b/public/files/hsd-6.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmTU1SYACgkQsBinu0N9
+HwW8TBAAywq0aunPGiK9xp3ZIt/5J9/GNoOWcexqqlBkMxVEWCVFPCmqKLZaYmCJ
+yDWJfpn29KtzjvVytAAKPn/PDKHM1xOQDyum/gwRxy56wmtvfxhhlEEaG7gd21Nr
+gpHUnr52PLR1LOxbAZHGhgp7yT5/Dp8Nw6chEmUsi8yQm8uMNAMQx5qwM4gL4Dmr
+wIqNss2nvu0xPMZRgXPas8ONkJAArNG9QzHItCKCzURzl1Hh6lWpHWZPbqNq+Bzt
+IWyYiCNFDiKAHyHwdiRCW3JBHDLz7ck2PGs0cZakGQIoZqqznV2uQGNACpyWb3HS
+/ClBuIYqHdfxr4r+2i9pPFWEv+b7P2F+7/JYneZtPX3FEYVWRcR/F3C0CATfUA/l
+tVal/DAkpC4CwZaIFzmLUc+5eJJCe2d+7YnX5CE6ColY6E1WEHN1epNGrY6WW1Ou
+1zQt+JycahKVqBizohJeoO6DAgejCzPhcn8ihImQAIhQbPjf9vCUaeNxlwT4FWRN
+h6b9897+H+GI1TjR79jPysvALV3IjBnBb0Hd/Qv10ayeU8EiyjMPgPNobSB/UT50
+FM55iUGzFC0Fh/e+xtTsdAUNVZKyGJ2edHrn4G68RpYdkZ3fn/EMVcR/oxHVZD13
+jv7/pB9FJ50aaD5n0+VfYug/lotNKw7zxVJ5aLvQjPHrzd9FJRQ=
+=8v62
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-6.1.0.tar.gz b/public/files/hsd-6.1.0.tar.gz
new file mode 100644
index 0000000..45c4c84
Binary files /dev/null and b/public/files/hsd-6.1.0.tar.gz differ
diff --git a/public/files/hsd-6.1.0.tar.gz.asc b/public/files/hsd-6.1.0.tar.gz.asc
new file mode 100644
index 0000000..aa13a5f
--- /dev/null
+++ b/public/files/hsd-6.1.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmTp2ZQACgkQsBinu0N9
+HwVi2RAAuRiXfIfNuT4B5XXwSdjIWilWMn+wtqtn2fKsA/lQEGDQ7+koYrppPoKe
+zjQ39sqQg22iBiBFHfo9elUrsWPIZkZVBzFm2HuMjl+kz/n45EuliExalDYYtor5
+WsLLNkOwissGflmVfdaIGnrpfPKhe6RDTp5rkLu5MIPetCbHQu75dSAbobOg2Wtt
+6ERriMaOeycT1wjUkVtSqf805HS7qolzXBOBZ89GWBKZN3cAXSd/7SWhlU6HRS60
+C3EnxPBdvpO6ZxDu2TpHFps8UVBHU0JZaXBx7i7WbzhzjrvTSsa2mZrxEL1ntgUw
+c/UdDacUqttoXlq18vnU5x1gzXt7WyWf1NGceYHXZUwfQQNCWEq7LuiBMSWhK3nd
+R8PyjKnZvAtsvaMO/EiqSIZgQI1qcB4rvgpny7NZrtHMs9LrLCPWE3OWveOldyqD
+eY3yUuBsehNxpFW8ILRYY6zSsZVYS7w6iRsZXUe00ILa887kE4oiogCVnbUiys5U
+42/+U4hZQe2lczMMARN9GLx8X0fVhoAU43w/6rXXiAtCkEY90Zi0bgGxgNyYzK8b
+mPJA2ML7T4Z36miGuTKTYMujY5oY16jwyG20cs6MCtzd9eo86TLST7JeDyb54shT
+3+dnOfBjQs8PbO11diCUyzK2LcOZggODyqR45/IgsZvOqokjj5I=
+=XFK7
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-6.1.1.tar.gz b/public/files/hsd-6.1.1.tar.gz
new file mode 100644
index 0000000..b89fa97
Binary files /dev/null and b/public/files/hsd-6.1.1.tar.gz differ
diff --git a/public/files/hsd-6.1.1.tar.gz.asc b/public/files/hsd-6.1.1.tar.gz.asc
new file mode 100644
index 0000000..8782a53
--- /dev/null
+++ b/public/files/hsd-6.1.1.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmVMorAACgkQsBinu0N9
+HwVJKxAAr8w9KBi2jnLWUqFa2kt21EMAb4TW8AJ5zWfYYucsX3XT5uOZReRSGMK5
+LPe50Tz70dbqoLz3qphOzKb/qTSNexPEAxQMYUU/xKJDCIuabUuk5PvS/QNhgEVM
+f95J1hfMLo6nMWVHZcnvqmBzKxKHvVm15E9xOSDvJrLpDadOsew8VZ89A57qUKWk
+QP6J9HYCxUdGi9L3rLcUL0wbmnzY+U4LaNhj+Wy0FqNgRgGX79XH1OdkjJkdvwCw
+qjsSv7kCDQZGOFn4mjvOQxUXmdlZ4KTHlr+gjwnJJrKGkfmIX0BLLHGI9eNcjQlp
+FOSEzQwwmsEnPm5rcSOUA0M4j2+oBtPwbG6DXIcl5PSZK1ClGz1hu+XTNJ4d7wub
+gg3F123lWKEXcL/yO12cWw1GwFMMbo00lrKrrcvuOy/5s/3VutlWc9GTm0+16xLt
+vlp6q/LyD1rAXeHmpBDhueh5JrT5gUMmt5bkd5K7GjBiWVdokt+lI4si0abSGdpT
+z36clI9zM2My/LA0sFR5oqkP2S3KRrhhBPtDTS7AGHzMuIfPtiQMRm80CzTcl6mR
+mCdAXylYxz/Xclo+SI6sEj5eGqbsYWLWzDt5XNX7aJrEZrMQX0J9U/gxDJZQFlp6
+vIl8IozEYeJ0BQQXSPk0vIfcS7+6X+6dHQzrSfWZn7Kp5BmHvkY=
+=/lwE
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-7.0.0.tar.gz b/public/files/hsd-7.0.0.tar.gz
new file mode 100644
index 0000000..1a50c25
Binary files /dev/null and b/public/files/hsd-7.0.0.tar.gz differ
diff --git a/public/files/hsd-7.0.0.tar.gz.asc b/public/files/hsd-7.0.0.tar.gz.asc
new file mode 100644
index 0000000..43e4e4f
--- /dev/null
+++ b/public/files/hsd-7.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmdXBbYACgkQsBinu0N9
+HwW64RAAuDjuFuxrtC0CPURHHRlXhf754Br9c2i/NXMNTQvaN+E1cd2eA9NIFAr5
+SlQOFq+1cMF/2Ehj/I+/f7dLxPFjyoj2kJN53qgJ6hPIpZccU8yWMQhPb3meEjhq
+0mmkG0bnnfPhB+LdVL1dx2tVbq3OoWXBCSdzr+4TkvFEvYMSET5JLbv138lmY3aq
+CrcsJnsGzSp9LoEz8cGxQdo4SKAr2cisjrUYyItPfcuNf8yHdtEeUXjmIOiJx2NN
+SR5IGd8tOuI4l6K5CVEZnwrtMH1Tc4uP0XAkv+tU3Fxic7XMss2pSKC3+0rQ/1m3
+mSKOuEh6ZQZh5c7mnEu+JlhdJZ5QoX7Kw5HHjfUeqQKmjvgx5g4DEc+N9y+/WdPd
+gm6WGXAFRgnp8cWAhLYIyDoZD5ZQ5n+WmmVOoE6asv8V11kZQs7jlt11oCVR2xTQ
+SO8AT2iAEDIhejls94PccPRYp8GRtVn8qcnBSs8jjhonjz2K0iWV3Wz8Xu+r9KNH
+fDFHw5z6lYozJV5ZGlzGhvPCEZTMmOVzLEhWdIEL/d7p2sO9zJcGjWMw3E8ohwac
+f0RIbD+7jFxXvN/fOhcxqwJSML8XjLRoZAY5of3CQmkQgbC9JSUzgIZng28tYAK1
+sdW4C8pCx+wPB+XPvrPcoAHEAYAXlFK08tBj7OMmJwgm/Y38jjc=
+=F+eN
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-7.0.1.tar.gz b/public/files/hsd-7.0.1.tar.gz
new file mode 100644
index 0000000..4634b31
Binary files /dev/null and b/public/files/hsd-7.0.1.tar.gz differ
diff --git a/public/files/hsd-7.0.1.tar.gz.asc b/public/files/hsd-7.0.1.tar.gz.asc
new file mode 100644
index 0000000..7173c24
--- /dev/null
+++ b/public/files/hsd-7.0.1.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmdunMUACgkQsBinu0N9
+HwW2ORAA2h0TW0TEtKwm/LH5JqeX9y1t2F/FuWnH01oOurYkhRXqrua8EBFVK6lz
+R5aLhWeEFdel6y1z0wlC2hnMA4yaLKee2ktUgCSuvm0N72Y/sv0h9AiKfDvDhgcl
+jTMzA3DCdD0R1dFxaK+eaAF79dCBCwuG/TPvg9UnPfpVvyOKgU9xGI5xx3Wp02sP
+lYZXwoHAzZ3GA8FQuX2umfbhMQP7t0Oc/2D6nKvUUa8ZGJw56enPZbAHmsX7fNUo
+wEGcV9jAecIo2Sh9BSgSWE3S5OFWRGZvWkNfiO87JRb8MrByg6B9nq5zwu4HX5N+
+FHW9bG0tKdee5ExS6h6yd2XydO2sygMQcWvrtWKIDoJCbQ7N5htlIm+euo13hdjK
+wpJQM5MtHDQ24PPkMvUlOUVrYIVVozASl+9KssBWlrLf1vtn8ieIdcfYKI2iRpdt
+1bxvoQ2oAwjLWXD+18gKFtUtuYV/jaKTc9Pi9Dsrhamxu6Fbo+lptOCB7kzi66eq
+GiP3dtiF3pV2nTmPTFTLcNIr/K+MMpYpOv9n1qMJWoSoSaet36KAFkDkQwXY/xbO
+VgN6ZjYkQBw5mS7fIE+rnFXKiVZRwAJ/n/4XOt7veiP8qpjEMKZ6lL5lh57k98Ay
+5pZuOBHSzPlZmxupKP3hkdIS7dvoikZrf3lVQuFjhQ7877mM0tc=
+=IA3/
+-----END PGP SIGNATURE-----
diff --git a/public/files/hsd-8.0.0.tar.gz b/public/files/hsd-8.0.0.tar.gz
new file mode 100644
index 0000000..722bed7
Binary files /dev/null and b/public/files/hsd-8.0.0.tar.gz differ
diff --git a/public/files/hsd-8.0.0.tar.gz.asc b/public/files/hsd-8.0.0.tar.gz.asc
new file mode 100644
index 0000000..7965a4f
--- /dev/null
+++ b/public/files/hsd-8.0.0.tar.gz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEEFrhvkEXaY4kUgi4asBinu0N9HwUFAmhjyCMACgkQsBinu0N9
+HwWeZQ//QsFDJYSQNk01E1HupUbEinqpSs9EwEksYs4ztBr4wEgXg4I770av6qcw
+7gRqg2mmvCRruzWnjD03iSAoCbQA+QhJ0H4ZCdxGk6mZcTtErH+JFNE3In4XCCsP
+kFDvVkPdNlvOh5AnLgyYdHSgLARBbxcAzPR96pzS34jnCOFsiDcRC3kaDWkaSxmg
+2VVC6hOnaaNrUSr3YEObjBh6KC4Nmu1uqR8ayBxFmxOoMriJBfRZD50w6laLbHPH
+BFO6JhRu32F3ZuH0v832ncRqK5iKfmDIXosEA5jcIWTxANTVS8k4VPXq8b87cscE
+mS9psPw6+CnOB2BxRdybvq+8NrpoTXMaSaOiphi+FBA/Knx6efub97YyicSXuy3C
+aI6dGLOBjJKs3tOAM38ja8HwNecesvVJi2ron5BNcXkZxjkaKI0147cPC8R0XuSA
+z7w6/pEt56q2M+cYh4uCS3fHO02jVedXreGr07HOknxci+9ZzsxhCZGkB38HCJ0g
+IbEFsi2SygO68HG6HP+2xIGPi4f15Ge6jHOgOYN7nZph9pNhRV82bBVbpFf/vQvu
+iwtk2kO9mjonb0EkX49JREJdHO4rPtaLvWph/TiaiT45uF84TsvQOnYuvK2VTWSZ
+dDebhbafBZ7h8LetEt17Azdm9a0qUuH0y2vQB/iQIgZjfP0B71k=
+=aB+u
+-----END PGP SIGNATURE-----
diff --git a/public/fonts/Bold/OpenSans-Bold.eot b/public/fonts/Bold/OpenSans-Bold.eot
new file mode 100644
index 0000000..016123b
Binary files /dev/null and b/public/fonts/Bold/OpenSans-Bold.eot differ
diff --git a/public/fonts/Bold/OpenSans-Bold.svg b/public/fonts/Bold/OpenSans-Bold.svg
new file mode 100644
index 0000000..81c8a27
--- /dev/null
+++ b/public/fonts/Bold/OpenSans-Bold.svg
@@ -0,0 +1,958 @@
+
+
+
+
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/fonts/Bold/OpenSans-Bold.ttf b/public/fonts/Bold/OpenSans-Bold.ttf
new file mode 100644
index 0000000..cf53e6e
Binary files /dev/null and b/public/fonts/Bold/OpenSans-Bold.ttf differ
diff --git a/public/fonts/Bold/OpenSans-Bold.woff b/public/fonts/Bold/OpenSans-Bold.woff
new file mode 100644
index 0000000..c668e45
Binary files /dev/null and b/public/fonts/Bold/OpenSans-Bold.woff differ
diff --git a/public/fonts/Bold/OpenSans-Bold.woff2 b/public/fonts/Bold/OpenSans-Bold.woff2
new file mode 100644
index 0000000..c80b2d2
Binary files /dev/null and b/public/fonts/Bold/OpenSans-Bold.woff2 differ
diff --git a/public/fonts/BoldItalic/OpenSans-BoldItalic.eot b/public/fonts/BoldItalic/OpenSans-BoldItalic.eot
new file mode 100644
index 0000000..7d45290
Binary files /dev/null and b/public/fonts/BoldItalic/OpenSans-BoldItalic.eot differ
diff --git a/public/fonts/BoldItalic/OpenSans-BoldItalic.svg b/public/fonts/BoldItalic/OpenSans-BoldItalic.svg
new file mode 100644
index 0000000..d06de54
--- /dev/null
+++ b/public/fonts/BoldItalic/OpenSans-BoldItalic.svg
@@ -0,0 +1,958 @@
+
+
+
+
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/fonts/BoldItalic/OpenSans-BoldItalic.ttf b/public/fonts/BoldItalic/OpenSans-BoldItalic.ttf
new file mode 100644
index 0000000..11d107b
Binary files /dev/null and b/public/fonts/BoldItalic/OpenSans-BoldItalic.ttf differ
diff --git a/public/fonts/BoldItalic/OpenSans-BoldItalic.woff b/public/fonts/BoldItalic/OpenSans-BoldItalic.woff
new file mode 100644
index 0000000..ced8f69
Binary files /dev/null and b/public/fonts/BoldItalic/OpenSans-BoldItalic.woff differ
diff --git a/public/fonts/BoldItalic/OpenSans-BoldItalic.woff2 b/public/fonts/BoldItalic/OpenSans-BoldItalic.woff2
new file mode 100644
index 0000000..60d8de4
Binary files /dev/null and b/public/fonts/BoldItalic/OpenSans-BoldItalic.woff2 differ
diff --git a/public/fonts/ExtraBold/OpenSans-ExtraBold.eot b/public/fonts/ExtraBold/OpenSans-ExtraBold.eot
new file mode 100644
index 0000000..27ff0d5
Binary files /dev/null and b/public/fonts/ExtraBold/OpenSans-ExtraBold.eot differ
diff --git a/public/fonts/ExtraBold/OpenSans-ExtraBold.svg b/public/fonts/ExtraBold/OpenSans-ExtraBold.svg
new file mode 100644
index 0000000..994fbfe
--- /dev/null
+++ b/public/fonts/ExtraBold/OpenSans-ExtraBold.svg
@@ -0,0 +1,21059 @@
+
+
+
+
+Created by FontForge 20141024 at Tue Dec 16 15:33:01 2014
+ By System Administrator
+Digitized data copyright (c) 2011, Google Corporation.
+
+
+
+
diff --git a/public/fonts/ExtraBold/OpenSans-ExtraBold.ttf b/public/fonts/ExtraBold/OpenSans-ExtraBold.ttf
new file mode 100644
index 0000000..f9d5419
Binary files /dev/null and b/public/fonts/ExtraBold/OpenSans-ExtraBold.ttf differ
diff --git a/public/fonts/ExtraBold/OpenSans-ExtraBold.woff b/public/fonts/ExtraBold/OpenSans-ExtraBold.woff
new file mode 100644
index 0000000..412a01b
Binary files /dev/null and b/public/fonts/ExtraBold/OpenSans-ExtraBold.woff differ
diff --git a/public/fonts/ExtraBold/OpenSans-ExtraBold.woff2 b/public/fonts/ExtraBold/OpenSans-ExtraBold.woff2
new file mode 100644
index 0000000..bbaa1d4
Binary files /dev/null and b/public/fonts/ExtraBold/OpenSans-ExtraBold.woff2 differ
diff --git a/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot
new file mode 100644
index 0000000..c848bb3
Binary files /dev/null and b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot differ
diff --git a/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg
new file mode 100644
index 0000000..2152de9
--- /dev/null
+++ b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg
@@ -0,0 +1,958 @@
+
+
+
+
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+
+
+
+
\ No newline at end of file
diff --git a/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.ttf b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..ea17929
Binary files /dev/null and b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.ttf differ
diff --git a/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff
new file mode 100644
index 0000000..6056847
Binary files /dev/null and b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff differ
diff --git a/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff2 b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff2
new file mode 100644
index 0000000..eff8367
Binary files /dev/null and b/public/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.woff2 differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-Bold.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-Bold.ttf
new file mode 100644
index 0000000..befdbdc
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-Bold.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-BoldItalic.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-BoldItalic.ttf
new file mode 100644
index 0000000..a70576b
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-BoldItalic.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-ExtraLight.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-ExtraLight.ttf
new file mode 100644
index 0000000..e14a246
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-ExtraLight.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-ExtraLightItalic.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-ExtraLightItalic.ttf
new file mode 100644
index 0000000..4cc6f6f
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-ExtraLightItalic.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-Italic.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-Italic.ttf
new file mode 100644
index 0000000..25cc39b
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-Italic.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-Light.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-Light.ttf
new file mode 100644
index 0000000..7714271
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-Light.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-LightItalic.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-LightItalic.ttf
new file mode 100644
index 0000000..a734d6f
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-LightItalic.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-Medium.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-Medium.ttf
new file mode 100644
index 0000000..cd02e15
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-Medium.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-MediumItalic.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-MediumItalic.ttf
new file mode 100644
index 0000000..593eb16
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-MediumItalic.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-Regular.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-Regular.ttf
new file mode 100644
index 0000000..f99c8e9
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-Regular.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-SemiBold.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-SemiBold.ttf
new file mode 100644
index 0000000..e485804
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-SemiBold.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-SemiBoldItalic.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-SemiBoldItalic.ttf
new file mode 100644
index 0000000..1914629
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-SemiBoldItalic.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-Thin.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-Thin.ttf
new file mode 100644
index 0000000..3d5cc2a
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-Thin.ttf differ
diff --git a/public/fonts/IBMPlexMono/IBMPlexMono-ThinItalic.ttf b/public/fonts/IBMPlexMono/IBMPlexMono-ThinItalic.ttf
new file mode 100644
index 0000000..fdb3882
Binary files /dev/null and b/public/fonts/IBMPlexMono/IBMPlexMono-ThinItalic.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-Bold.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-Bold.ttf
new file mode 100644
index 0000000..28cd4a2
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-Bold.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-BoldItalic.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-BoldItalic.ttf
new file mode 100644
index 0000000..147dd86
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-BoldItalic.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-ExtraLight.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-ExtraLight.ttf
new file mode 100644
index 0000000..fc8f4d3
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-ExtraLight.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-ExtraLightItalic.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-ExtraLightItalic.ttf
new file mode 100644
index 0000000..705035c
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-ExtraLightItalic.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-Italic.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-Italic.ttf
new file mode 100644
index 0000000..044173e
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-Italic.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-Light.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-Light.ttf
new file mode 100644
index 0000000..761e3b7
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-Light.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-LightItalic.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-LightItalic.ttf
new file mode 100644
index 0000000..bc3b594
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-LightItalic.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-Medium.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-Medium.ttf
new file mode 100644
index 0000000..e7b9e78
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-Medium.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-MediumItalic.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-MediumItalic.ttf
new file mode 100644
index 0000000..894f39e
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-MediumItalic.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-Regular.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-Regular.ttf
new file mode 100644
index 0000000..b43625f
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-Regular.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-SemiBold.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-SemiBold.ttf
new file mode 100644
index 0000000..c12eded
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-SemiBold.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-SemiBoldItalic.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-SemiBoldItalic.ttf
new file mode 100644
index 0000000..1195d71
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-SemiBoldItalic.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-Thin.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-Thin.ttf
new file mode 100644
index 0000000..1dcfac7
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-Thin.ttf differ
diff --git a/public/fonts/IBMPlexSans/IBMPlexSans-ThinItalic.ttf b/public/fonts/IBMPlexSans/IBMPlexSans-ThinItalic.ttf
new file mode 100644
index 0000000..6c84ed2
Binary files /dev/null and b/public/fonts/IBMPlexSans/IBMPlexSans-ThinItalic.ttf differ
diff --git a/public/fonts/Italic/OpenSans-Italic.svg b/public/fonts/Italic/OpenSans-Italic.svg
new file mode 100644
index 0000000..7561e87
--- /dev/null
+++ b/public/fonts/Italic/OpenSans-Italic.svg
@@ -0,0 +1,958 @@
+
+
+
+
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/fonts/Italic/OpenSans-Italic.ttf b/public/fonts/Italic/OpenSans-Italic.ttf
new file mode 100644
index 0000000..a309327
Binary files /dev/null and b/public/fonts/Italic/OpenSans-Italic.ttf differ
diff --git a/public/fonts/Italic/OpenSans-Italic.woff b/public/fonts/Italic/OpenSans-Italic.woff
new file mode 100644
index 0000000..1ed8ab9
Binary files /dev/null and b/public/fonts/Italic/OpenSans-Italic.woff differ
diff --git a/public/fonts/Italic/OpenSans-Italic.woff2 b/public/fonts/Italic/OpenSans-Italic.woff2
new file mode 100644
index 0000000..440b74c
Binary files /dev/null and b/public/fonts/Italic/OpenSans-Italic.woff2 differ
diff --git a/public/fonts/Light/OpenSans-Light.eot b/public/fonts/Light/OpenSans-Light.eot
new file mode 100644
index 0000000..03f1430
Binary files /dev/null and b/public/fonts/Light/OpenSans-Light.eot differ
diff --git a/public/fonts/Light/OpenSans-Light.svg b/public/fonts/Light/OpenSans-Light.svg
new file mode 100644
index 0000000..c3bd159
--- /dev/null
+++ b/public/fonts/Light/OpenSans-Light.svg
@@ -0,0 +1,958 @@
+
+
+
+
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/fonts/Light/OpenSans-Light.ttf b/public/fonts/Light/OpenSans-Light.ttf
new file mode 100644
index 0000000..dddcc62
Binary files /dev/null and b/public/fonts/Light/OpenSans-Light.ttf differ
diff --git a/public/fonts/Light/OpenSans-Light.woff b/public/fonts/Light/OpenSans-Light.woff
new file mode 100644
index 0000000..937323d
Binary files /dev/null and b/public/fonts/Light/OpenSans-Light.woff differ
diff --git a/public/fonts/Light/OpenSans-Light.woff2 b/public/fonts/Light/OpenSans-Light.woff2
new file mode 100644
index 0000000..d0b43e0
Binary files /dev/null and b/public/fonts/Light/OpenSans-Light.woff2 differ
diff --git a/public/fonts/LightItalic/OpenSans-LightItalic.eot b/public/fonts/LightItalic/OpenSans-LightItalic.eot
new file mode 100644
index 0000000..3861cd6
Binary files /dev/null and b/public/fonts/LightItalic/OpenSans-LightItalic.eot differ
diff --git a/public/fonts/LightItalic/OpenSans-LightItalic.svg b/public/fonts/LightItalic/OpenSans-LightItalic.svg
new file mode 100644
index 0000000..e5694a1
--- /dev/null
+++ b/public/fonts/LightItalic/OpenSans-LightItalic.svg
@@ -0,0 +1,958 @@
+
+
+
+
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/fonts/LightItalic/OpenSans-LightItalic.ttf b/public/fonts/LightItalic/OpenSans-LightItalic.ttf
new file mode 100644
index 0000000..9338bd9
Binary files /dev/null and b/public/fonts/LightItalic/OpenSans-LightItalic.ttf differ
diff --git a/public/fonts/LightItalic/OpenSans-LightItalic.woff b/public/fonts/LightItalic/OpenSans-LightItalic.woff
new file mode 100644
index 0000000..bc83d1d
Binary files /dev/null and b/public/fonts/LightItalic/OpenSans-LightItalic.woff differ
diff --git a/public/fonts/LightItalic/OpenSans-LightItalic.woff2 b/public/fonts/LightItalic/OpenSans-LightItalic.woff2
new file mode 100644
index 0000000..21a92a7
Binary files /dev/null and b/public/fonts/LightItalic/OpenSans-LightItalic.woff2 differ
diff --git a/public/fonts/Regular/OpenSans-Regular.eot b/public/fonts/Regular/OpenSans-Regular.eot
new file mode 100644
index 0000000..7ac1753
Binary files /dev/null and b/public/fonts/Regular/OpenSans-Regular.eot differ
diff --git a/public/fonts/Regular/OpenSans-Regular.svg b/public/fonts/Regular/OpenSans-Regular.svg
new file mode 100644
index 0000000..b34ed42
--- /dev/null
+++ b/public/fonts/Regular/OpenSans-Regular.svg
@@ -0,0 +1,958 @@
+
+
+
+
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/fonts/Regular/OpenSans-Regular.ttf b/public/fonts/Regular/OpenSans-Regular.ttf
new file mode 100644
index 0000000..a135120
Binary files /dev/null and b/public/fonts/Regular/OpenSans-Regular.ttf differ
diff --git a/public/fonts/Regular/OpenSans-Regular.woff b/public/fonts/Regular/OpenSans-Regular.woff
new file mode 100644
index 0000000..bd0f824
Binary files /dev/null and b/public/fonts/Regular/OpenSans-Regular.woff differ
diff --git a/public/fonts/Regular/OpenSans-Regular.woff2 b/public/fonts/Regular/OpenSans-Regular.woff2
new file mode 100644
index 0000000..f778f9c
Binary files /dev/null and b/public/fonts/Regular/OpenSans-Regular.woff2 differ
diff --git a/public/fonts/Semibold/OpenSans-Semibold.eot b/public/fonts/Semibold/OpenSans-Semibold.eot
new file mode 100644
index 0000000..f165063
Binary files /dev/null and b/public/fonts/Semibold/OpenSans-Semibold.eot differ
diff --git a/public/fonts/Semibold/OpenSans-Semibold.svg b/public/fonts/Semibold/OpenSans-Semibold.svg
new file mode 100644
index 0000000..1119509
--- /dev/null
+++ b/public/fonts/Semibold/OpenSans-Semibold.svg
@@ -0,0 +1,21053 @@
+
+
+
+
+Created by FontForge 20141024 at Tue Dec 16 14:24:40 2014
+ By System Administrator
+Digitized data copyright (c) 2011, Google Corporation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/fonts/Semibold/OpenSans-Semibold.ttf b/public/fonts/Semibold/OpenSans-Semibold.ttf
new file mode 100644
index 0000000..1a7679e
Binary files /dev/null and b/public/fonts/Semibold/OpenSans-Semibold.ttf differ
diff --git a/public/fonts/Semibold/OpenSans-Semibold.woff b/public/fonts/Semibold/OpenSans-Semibold.woff
new file mode 100644
index 0000000..8c0313f
Binary files /dev/null and b/public/fonts/Semibold/OpenSans-Semibold.woff differ
diff --git a/public/fonts/Semibold/OpenSans-Semibold.woff2 b/public/fonts/Semibold/OpenSans-Semibold.woff2
new file mode 100644
index 0000000..852f710
Binary files /dev/null and b/public/fonts/Semibold/OpenSans-Semibold.woff2 differ
diff --git a/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot
new file mode 100644
index 0000000..c13a4e3
Binary files /dev/null and b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.eot differ
diff --git a/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg
new file mode 100644
index 0000000..df45137
--- /dev/null
+++ b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg
@@ -0,0 +1,958 @@
+
+
+
+
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 20102011 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.ttf b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.ttf
new file mode 100644
index 0000000..ee10d63
Binary files /dev/null and b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.ttf differ
diff --git a/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff
new file mode 100644
index 0000000..90351a2
Binary files /dev/null and b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff differ
diff --git a/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff2 b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff2
new file mode 100644
index 0000000..b0c2a26
Binary files /dev/null and b/public/fonts/SemiboldItalic/OpenSans-SemiboldItalic.woff2 differ
diff --git a/public/fonts/nitti/nitti-light-v500.eot b/public/fonts/nitti/nitti-light-v500.eot
new file mode 100644
index 0000000..a075c59
Binary files /dev/null and b/public/fonts/nitti/nitti-light-v500.eot differ
diff --git a/public/fonts/nitti/nitti-light-v500.woff b/public/fonts/nitti/nitti-light-v500.woff
new file mode 100644
index 0000000..2df4940
Binary files /dev/null and b/public/fonts/nitti/nitti-light-v500.woff differ
diff --git a/public/fonts/nitti/nitti-medium-v500.eot b/public/fonts/nitti/nitti-medium-v500.eot
new file mode 100644
index 0000000..765d5bc
Binary files /dev/null and b/public/fonts/nitti/nitti-medium-v500.eot differ
diff --git a/public/fonts/nitti/nitti-medium-v500.woff b/public/fonts/nitti/nitti-medium-v500.woff
new file mode 100644
index 0000000..576a349
Binary files /dev/null and b/public/fonts/nitti/nitti-medium-v500.woff differ
diff --git a/public/fonts/nitti/nitti-medium-v500.woff2 b/public/fonts/nitti/nitti-medium-v500.woff2
new file mode 100644
index 0000000..bd9d47b
Binary files /dev/null and b/public/fonts/nitti/nitti-medium-v500.woff2 differ
diff --git a/public/images/0_H.png b/public/images/0_H.png
new file mode 100644
index 0000000..a07239a
Binary files /dev/null and b/public/images/0_H.png differ
diff --git a/public/images/1_verify.png b/public/images/1_verify.png
new file mode 100644
index 0000000..76939ca
Binary files /dev/null and b/public/images/1_verify.png differ
diff --git a/public/images/airdrop/5_earth.svg b/public/images/airdrop/5_earth.svg
new file mode 100644
index 0000000..8191576
--- /dev/null
+++ b/public/images/airdrop/5_earth.svg
@@ -0,0 +1,28 @@
+
+
+
+ world
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/images/airdrop/tlds.svg b/public/images/airdrop/tlds.svg
new file mode 100644
index 0000000..89a902f
--- /dev/null
+++ b/public/images/airdrop/tlds.svg
@@ -0,0 +1,51 @@
+
+
+
+ tlds
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/images/landing/blocks.svg b/public/images/landing/blocks.svg
new file mode 100644
index 0000000..fd4bcd9
--- /dev/null
+++ b/public/images/landing/blocks.svg
@@ -0,0 +1,37 @@
+
+
+
+ Artboard
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/images/landing/double-pie.svg b/public/images/landing/double-pie.svg
new file mode 100644
index 0000000..624d545
--- /dev/null
+++ b/public/images/landing/double-pie.svg
@@ -0,0 +1,28 @@
+
+
+
+ pie 2
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/images/landing/faucet.svg b/public/images/landing/faucet.svg
new file mode 100644
index 0000000..38b4f9f
--- /dev/null
+++ b/public/images/landing/faucet.svg
@@ -0,0 +1,26 @@
+
+
+
+ Faucet
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/images/landing/logo-dark.svg b/public/images/landing/logo-dark.svg
new file mode 100644
index 0000000..e2837b1
--- /dev/null
+++ b/public/images/landing/logo-dark.svg
@@ -0,0 +1,13 @@
+
+
+
+ logo-dark
+ Created with Sketch.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/images/landing/logo-light.svg b/public/images/landing/logo-light.svg
new file mode 100644
index 0000000..396eeb9
--- /dev/null
+++ b/public/images/landing/logo-light.svg
@@ -0,0 +1,13 @@
+
+
+
+ logo-white
+ Created with Sketch.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/images/landing/pie.svg b/public/images/landing/pie.svg
new file mode 100644
index 0000000..1c2fbef
--- /dev/null
+++ b/public/images/landing/pie.svg
@@ -0,0 +1,36 @@
+
+
+
+ pie 1
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/favicon/hns-favicon.ico b/public/img/favicon/hns-favicon.ico
new file mode 100644
index 0000000..57169b6
Binary files /dev/null and b/public/img/favicon/hns-favicon.ico differ
diff --git a/public/img/footer/down-caret.svg b/public/img/footer/down-caret.svg
new file mode 100644
index 0000000..de92b9f
--- /dev/null
+++ b/public/img/footer/down-caret.svg
@@ -0,0 +1,10 @@
+
+
+ Created with Sketch.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/footer/github.svg b/public/img/footer/github.svg
new file mode 100644
index 0000000..907bd38
--- /dev/null
+++ b/public/img/footer/github.svg
@@ -0,0 +1,12 @@
+
+
+ Created with Sketch.
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/footer/reddit.svg b/public/img/footer/reddit.svg
new file mode 100644
index 0000000..979bb6c
--- /dev/null
+++ b/public/img/footer/reddit.svg
@@ -0,0 +1,18 @@
+
+
+ Created with Sketch.
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/footer/twitter.svg b/public/img/footer/twitter.svg
new file mode 100644
index 0000000..98ace82
--- /dev/null
+++ b/public/img/footer/twitter.svg
@@ -0,0 +1,20 @@
+
+
+ Created with Sketch.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/footer/up-caret.svg b/public/img/footer/up-caret.svg
new file mode 100644
index 0000000..f08e432
--- /dev/null
+++ b/public/img/footer/up-caret.svg
@@ -0,0 +1,10 @@
+
+
+ Created with Sketch.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/icons/user_icon_black.svg b/public/img/icons/user_icon_black.svg
new file mode 100644
index 0000000..3d4a601
--- /dev/null
+++ b/public/img/icons/user_icon_black.svg
@@ -0,0 +1,11 @@
+
+
+
+ myaccount_icon
+ Created with Sketch.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/icons/user_icon_white.svg b/public/img/icons/user_icon_white.svg
new file mode 100644
index 0000000..20d3166
--- /dev/null
+++ b/public/img/icons/user_icon_white.svg
@@ -0,0 +1,11 @@
+
+
+
+ myaccount_icon_white
+ Created with Sketch.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/img/white_checkmark.svg b/public/img/white_checkmark.svg
new file mode 100644
index 0000000..b39d6fb
--- /dev/null
+++ b/public/img/white_checkmark.svg
@@ -0,0 +1,10 @@
+
+
+
+ white check
+ Created with Sketch.
+
+
+
+
+
\ No newline at end of file
diff --git a/public/js/faq.js b/public/js/faq.js
new file mode 100644
index 0000000..9571d63
--- /dev/null
+++ b/public/js/faq.js
@@ -0,0 +1,72 @@
+
+document.addEventListener('DOMContentLoaded', function(){
+ const faq = document.getElementById('faq');
+ const general = document.getElementById('general');
+ const grants = document.getElementById('grants');
+ const naming = document.getElementById('naming');
+ const faucet = document.getElementById('faucet');
+ const footer = document.getElementById('footer');
+
+ const gLink = document.getElementById('general-link');
+ const grantsLink = document.getElementById('grants-link');
+ const nLink = document.getElementById('naming-link');
+ const fLink = document.getElementById('faucet-link');
+
+ const qLinks = document.getElementsByTagName('h3');
+ Array.prototype.forEach.call(qLinks, function(item){
+ item.nextElementSibling.classList.add('hide');
+ item.addEventListener('click', function(e) {
+ if (item.children[0].classList.contains('hide')) {
+ item.children[0].classList.remove('hide');
+ item.children[1].classList.add('hide');
+ item.nextElementSibling.classList.add('hide');
+ } else {
+ item.children[0].classList.add('hide')
+ item.children[1].classList.remove('hide')
+ item.nextElementSibling.classList.remove('hide');
+ }
+ });
+ })
+
+ const clearActive = function() {
+ fLink.classList.remove('active');
+ nLink.classList.remove('active');
+ grantsLink.classList.remove('active');
+ gLink.classList.remove('active');
+ }
+
+ document.getElementById('navigation').addEventListener('click', function(e) {
+ if(e.target.tagName === "A") {
+ clearActive();
+ e.target.classList.add('active');
+ }
+ })
+
+ document.addEventListener('scroll', function(){
+ const fixedLocation = faq.getBoundingClientRect().top;
+ const gLocation = general.getBoundingClientRect().top;
+ const grantsLocation = grants.getBoundingClientRect().top;
+ const nLocation = naming.getBoundingClientRect().top;
+ const fLocation = faucet.getBoundingClientRect().top;
+ const footerLocation = footer.getBoundingClientRect().top;
+
+ if (fixedLocation <= 0) {
+ faq.classList.remove('absolute');
+ faq.classList.add('fixed');
+ } else {
+ faq.classList.remove('absolute');
+ faq.classList.remove('fixed');
+ }
+
+ clearActive();
+ if (fLocation <= 10){
+ fLink.classList.add('active');
+ } else if (nLocation <= 10){
+ nLink.classList.add('active');
+ } else if (grantsLocation <= 10){
+ grantsLink.classList.add('active');
+ } else {
+ gLink.classList.add('active');
+ }
+ })
+})
diff --git a/public/js/flash_message.js b/public/js/flash_message.js
new file mode 100644
index 0000000..1df3b11
--- /dev/null
+++ b/public/js/flash_message.js
@@ -0,0 +1,16 @@
+(function() {
+ const flashmessagecontainer = document.querySelector('.flashmessage-container')
+ const closeFlashMessage = document.querySelector('.close-flash-message')
+
+ if (closeFlashMessage) {
+ closeFlashMessage.addEventListener('click', function(){
+ flashmessagecontainer.style.display = 'none'
+ })
+ }
+
+ if (flashmessagecontainer) {
+ setTimeout(function(){
+ flashmessagecontainer.style.display = 'none'
+ }, 8200)
+ }
+}())
diff --git a/public/js/footer.js b/public/js/footer.js
new file mode 100644
index 0000000..30f18da
--- /dev/null
+++ b/public/js/footer.js
@@ -0,0 +1,62 @@
+document.addEventListener('DOMContentLoaded', function(){
+
+const footer = document.getElementById('footer')
+const footerHeader = document.getElementsByClassName('header')
+const footerLinks = document.getElementsByClassName('links')
+const footerCaretsUp = document.getElementsByClassName('footer-caret-up')
+const footerCaretsDown = document.getElementsByClassName('footer-caret-down')
+let lastFooterTarget = null
+
+// functions
+
+const setCaretOrientationToClosed = function(){
+ for (index = 0; index < footerCaretsDown.length - 1; ++index) {
+ footerCaretsDown[index].classList.remove('hide')
+ footerCaretsUp[index].classList.add('hide')
+ }
+}
+
+const open = function(target){
+
+ if (target === lastFooterTarget) {
+ target.children[1].classList.remove('hide')
+ target.lastElementChild.children[0].classList.add('hide')
+ } else if (lastFooterTarget !== null) {
+ lastFooterTarget.children[1].classList.remove('hide')
+ }
+
+ const links = target.nextElementSibling
+
+ if(links.classList.contains('open')) {
+ return links.classList.remove('open')
+ }
+
+ Array.prototype.forEach.call(footerLinks, function(item){
+ item.classList.remove('open')
+ })
+
+ setCaretOrientationToClosed()
+ links.classList.add('open')
+ target.children[1].classList.add('hide')
+ target.lastElementChild.children[0].classList.remove('hide')
+}
+
+// event listeners
+
+if (footer) {
+ footer.addEventListener('click', function(e){
+
+ const target = e.target
+
+ if (target.classList.contains('header')) {
+ open(target)
+ lastFooterTarget = target
+ } else if (target.parentElement.classList.contains('header')) {
+ open(target.parentElement)
+ lastFooterTarget = target.parentElement
+ }
+
+ })
+}
+
+})
diff --git a/public/js/nav.js b/public/js/nav.js
new file mode 100644
index 0000000..9e52325
--- /dev/null
+++ b/public/js/nav.js
@@ -0,0 +1,63 @@
+ window.addEventListener('load', function(e){
+ /*
+ * Nav Bar
+ */
+ // Disable no-js fixes
+ const navBar = document.getElementById('navBar');
+ if (navBar.classList) {
+ navBar.classList.remove('no-js')
+ }
+
+ const sideNav = document.getElementById('burgernav');
+
+ if( sideNav ) {
+ const bars = document.getElementById('nav-toggle');
+ const overlay = document.getElementById('overlay');
+
+ function toggleNav(e){
+ sideNav.classList.toggle('dropped');
+ document.body.classList.toggle('active-nav');
+ }
+
+ sideNav.addEventListener('click', function(e){
+ // if a tag has a #id for the href
+ if( e.target.nodeName === 'A' && e.target.hash){ toggleNav(); }
+ });
+
+
+ bars && bars.addEventListener('click', toggleNav);
+ overlay && overlay.addEventListener('click', toggleNav);
+ }
+
+ /*
+ * Drop down
+ *
+ * Supports multiple dropdowns
+ */
+ const dropdownMenus = document.getElementsByClassName('dropdown');
+
+ if( !dropdownMenus.length) { return }
+
+ Array.prototype.forEach.call( dropdownMenus, function( item, index, arr ){
+ // add event listeners to all dropdown elements
+ item.addEventListener( 'mouseover', showDropDown );
+ item.addEventListener( 'mouseleave', hideDropDown );
+ });
+
+ function showDropDown( e ){
+ console.log("show")
+ const target = e.target;
+ const from = e.fromElement;
+ // if dropdown link then dont show dropdown
+ if( target.nodeName !== 'A' ||
+ ( (from && from.classList) && from.classList.contains('dropdown-menu') ) ) { return }
+
+ const dropdownMenu = target.nextElementSibling;
+ dropdownMenu && dropdownMenu.classList.remove('hide');
+ }
+
+ function hideDropDown( e ){
+ const dropdownMenu = e.target.lastElementChild;
+ dropdownMenu.classList.add('hide');
+ }
+ });
diff --git a/public/logos/Handshake-monogram-black.png b/public/logos/Handshake-monogram-black.png
new file mode 100644
index 0000000..4475181
Binary files /dev/null and b/public/logos/Handshake-monogram-black.png differ
diff --git a/public/logos/Handshake-monogram-outlined-black.png b/public/logos/Handshake-monogram-outlined-black.png
new file mode 100644
index 0000000..f5c0ad2
Binary files /dev/null and b/public/logos/Handshake-monogram-outlined-black.png differ
diff --git a/public/logos/Handshake-monogram-outlined-white.png b/public/logos/Handshake-monogram-outlined-white.png
new file mode 100644
index 0000000..a9c1f9d
Binary files /dev/null and b/public/logos/Handshake-monogram-outlined-white.png differ
diff --git a/public/logos/Handshake-monogram-white.png b/public/logos/Handshake-monogram-white.png
new file mode 100644
index 0000000..6719686
Binary files /dev/null and b/public/logos/Handshake-monogram-white.png differ
diff --git a/public/logos/Handshake-wordmark-black.png b/public/logos/Handshake-wordmark-black.png
new file mode 100644
index 0000000..ef67393
Binary files /dev/null and b/public/logos/Handshake-wordmark-black.png differ
diff --git a/public/logos/Handshake-wordmark-on-background.png b/public/logos/Handshake-wordmark-on-background.png
new file mode 100644
index 0000000..004ee08
Binary files /dev/null and b/public/logos/Handshake-wordmark-on-background.png differ
diff --git a/public/logos/Handshake-wordmark-white.png b/public/logos/Handshake-wordmark-white.png
new file mode 100644
index 0000000..163bf2e
Binary files /dev/null and b/public/logos/Handshake-wordmark-white.png differ
diff --git a/public/logos/handshakelogos.zip b/public/logos/handshakelogos.zip
new file mode 100644
index 0000000..c938f86
Binary files /dev/null and b/public/logos/handshakelogos.zip differ
diff --git a/how-it-works/index.html b/public/mascot/index.html
similarity index 90%
rename from how-it-works/index.html
rename to public/mascot/index.html
index a3e6bfd..66c606b 100644
--- a/how-it-works/index.html
+++ b/public/mascot/index.html
@@ -23,7 +23,6 @@
-
@@ -88,19 +87,21 @@
-
How it Works
-
The prior statements in this document is retracted. Please see the design notes (Section: "Further Distribution") for more information.
-
-
+
Handshake Mascot
+
+
+
Any previously proposed mascot before the publication of this document (December 2019) has been retconned, dropped, and any use of the prior description or any proposed images is not any recommended or official mascot. Individual communities within Handshake may make their own unique mascot; there is no expectation of official mascots solely from the efforts of the promoter or third party.
+
+